/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKKikiIchiranKkUpdCC
*	ソースファイル名：JKKKikiIchiranKkUpdCC.java
*	作成者			：FAP)古田
*	日付			：2012年05月28日
*＜機能概要＞
*	機器変更処理の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/06/09	FJ			新規作成
*	v4.00.01	2012/08/08	FJ）古田	【ANK-0398-00-00】住所管理に伴う「例外登録」の管理追加対応
*	v4.00.02	2012/10/11	FJ）古田	障害案件【IT1-2012-0001068】
*	v4.01.00	2013/01/31	FJ）藤原	【IT1-2013-0000184】対応、不要なメソッドをコメントアウト
*	v4.02.00	2013/02/05	FJ）鳩本	【IT1-2013-0000185】障害対応
*	v4.03.00	2013/02/26	FJ）野口	【ST3-2013-0000040】住所最下層チェックWA対応
*	v5.00.00	2013/03/21	FJ）古田	【IT1-2013-0000554】住所情報非活性
*	v5.00.01	2013/05/16	FJ）古田	【IT1-2013-0001181】障害対応
*	v5.01.00	2013/05/29	FJ）鳩本	【IT1-2013-0001246】障害対応
*	v5.01.01	2013/07/05	FJ）古田	【IT1-2013-0001325】障害対応
*	v7.00.00	2013/12/02	FJ）古田	【ANK-1580-00-00】多機能ルーター回復対応
*	v7.00.01	2014/01/14	FJ）古田	【ST-2014-0000009】多機能ルーター回復対応
*	v7.00.02	2014/01/15	FJ）古田	【IT1-2014-0000012】機器変更型番空白行対応
*	v7.00.03	2014/02/03	FJ）田原	【OM-2014-0000470】障害対応
*	v7.00.04	2014/02/05	FJ）田原	【OM-2014-0000533】障害対応
*	v8.00.00	2014/03/31	FJ）田原	【OM-2014-0001270】障害対応
*	v8.00.01	2014/04/02	FJ）田原	【OM-2014-0001263】障害対応
*	v33.00.00	2017/07/10	FJ）謝		【ANK-2979-00-00】(客B)多機能ルーターキャンセル後の元ルーター回復
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadOnly;
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.ejb.cbs.cbsmsg.EDK0451A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0451A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0021A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0121A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0121A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0121C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161C100CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0771A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0771A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0771B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0771B001CBSMsg1List;
//import eo.ejb.cbs.cbsmsg.EKK0161C160CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251B003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341C080CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C230CBSMsg;
//import eo.ejb.cbs.cbsmsg.EKK0341C330CBSMsg;
//import eo.ejb.cbs.cbsmsg.EKK0341E010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0591B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0591B003CBSMsg1List;
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.EZM0321A010CBSMsg;
//import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg1List;


/**
 * 機器登録処理を行います。<p>
 * <BR>
 * @author 富士通
 */
public class JKKKikiIchiranKkUpdCC extends AbstractCommonComponent
{
	
	/** 機能コード（チェック＆登録） */
	private static final String FUNC_CODE_1 = "1";
	/** 機能コード（チェックのみ） */
//	private static final String FUNC_CODE_2 = "2";

	/** サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	/** 機器提供サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0341A010 = "EKK0341A010";
//	/** 業務パラメータ管理一意照会 */
//	private static final String TEMPLATE_ID_EZM0321A010 = "EZM0321A010";
	/** 進捗登録 */
	private static final String TEMPLATE_ID_EKK1091D010 = "EKK1091D010";
	/** 申込明細一意照会 */
	private static final String TEMPLATE_ID_EKK0021A010 = "EKK0021A010";
	/** 料金プラン一覧照会 */
	private static final String TEMPLATE_ID_EKK0591B003 = "EKK0591B003";
	/** サービス契約内訳一意照会 */
	private static final String TEMPLATE_ID_EKK0161A010 = "EKK0161A010";
	/** サービス契約内訳手続中料金プラン変更 */
	private static final String TEMPLATE_ID_EKK0161C100 = "EKK0161C100";
//	/** サービス契約内訳キャンセル */
//	private static final String TEMPLATE_ID_EKK0161C160 = "EKK0161C160";
//	/** 機器提供サービス契約一覧照会(サービス契約内訳番号) */
//	private static final String TEMPLATE_ID_EKK0341B501 = "EKK0341B501";
//	/** 機器提供サービス契約キャンセル */
//	private static final String TEMPLATE_ID_EKK0341C330 = "EKK0341C330";
	/** 引当棚一意照会 */
	private static final String TEMPLATE_ID_EDK0451A010 = "EDK0451A010";
	/** サービス契約回線内訳一覧照会（現在利用中） */
	private static final String TEMPLATE_ID_EKK0251B003 = "EKK0251B003";
	/** 機器提供サービス契約情報変更 */
	private static final String TEMPLATE_ID_EKK0341C230 = "EKK0341C230";
// ++++++++++ v5.01.01 修正開始 ++++++++++
	/** 機器提供サービス契約手続中料金コース変更 */
	private static final String TEMPLATE_ID_EKK0341C080 = "EKK0341C080";
// ++++++++++ v5.01.01 修正終了 ++++++++++
	/** サービス契約<eoモバイル>一意照会 */
	private static final String TEMPLATE_ID_EKK0121A010 = "EKK0121A010";
	/** サービス契約＜eoモバイル＞情報変更 */
	private static final String TEMPLATE_ID_EKK0121C040 = "EKK0121C040";
	/** 宅内機器型式一意照会 */
	private static final String TEMPLATE_ID_EZM0411A010 = "EZM0411A010";
//	/** 機器提供サービス契約論理削除 */
//	private static final String TEMPLATE_ID_EKK0341E010 = "EKK0341E010";
	/** コード名称管理一意照会 */
	private static final String TEMPLATE_ID_EZM0171A010 = "EZM0171A010";
	
	/** エラーフラグ（エラー）*/
	private static final String ERR_FLG_ERR = "E";
	/** エラーフラグ（ワーニング）*/
	private static final String ERR_FLG_WARNING = "W";
	
//	/** 工事CC連携用データ格納キー */
//	private static final String KOJI_RENKEI_MAP_KEY = "kojifixtext";
	/** サービス契約ステータス（受付済） */
	private static final String SVC_KEI_STAT_UKZUMI = "010";
	/** 機器登録CC登録データ格納キー */
	private static final String KIKI_CREATE_LIST = "kikiCreateList";
	
	/** 機器登録CC実行パラメータ */
	private static final String KIKI_CREATE_CC_PARAM = "JKKKikiAddCC";
	
	/** 料金コース判別取得部品 */
	private static final String PCRS_MAP = "PCRS_MAP";
	
	/** 機器登録CC内で使用するサービス契約の更新タイムスタンプ格納キー */
	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 追加完了 ++++++++++ */
	
	/** 割引サービス自動適用CC実行処理 */
	private static final String WRI_SVC_AUTO_APLY = "WrisvcAutoAplyCC";
	
	/** 機器一覧画面ID（チェック実行抑止で使用） */
	private static final String SCRN_ID_KKW033 = "KKW033";
	/** 処理対象リスト格納キー */
	private static final String SHORI_LIST_ICHIRAN = "IchiranShoriList";
	/** 更新後リスト（処理対象リスト）格納キー */
	private static final String SHORI_LIST_KIKILIST_AF = "kikiList_af";
	
	/** 提供種別（持込） */
	private static final String TEIKYO_SBT_MOCHIKOMI = "03";

	/** 管理場所識別コード(倉庫) */
	private static final String KRIPLACE_SKCD_SOKO = "1";
	/** 管理場所識別コード(工事会社) */
	private static final String KRIPLACE_SKCD_KOJI = "2";
	/** 管理場所識別コード(預託先オフィス) */
	private static final String KRIPLACE_SKCD_OFFICE = "3";

	/** 倉庫コードのデフォルト値 */
	private static final String DEFAULT_SOKO_CD = "000001";
	
	/** 機器指定時管理場所識別コード */
	private static final String TMP_KIKI_STI_JI_KRIPLACE_SKCD = "kiki_sti_ji_kriplace_skcd";
	/** 機器引当指定倉庫コード */
	private static final String TMP_KIKI_HKAT_SHITEI_SOKO_CD = "kiki_hkat_shitei_soko_cd";
	/** 機器引当指定倉庫棚コード */
	private static final String TMP_KIKI_HKAT_SHITEI_SKDN_CD = "kiki_hkat_shitei_skdn_cd";
	/** 機器指定時工事会社コード */
	private static final String TMP_KIKI_STI_JI_KOCOMP_CD = "kiki_sti_ji_kocomp_cd";
	/** 機器指定時工事会社棚コード */
	private static final String TMP_KIKI_STI_JI_KOCOMP_SLF_CD = "kiki_sti_ji_kocomp_slf_cd";
	/** 機器指定時預託先オフィスコード */
	private static final String TMP_KIKI_STI_JI_YTKSKOF_CD = "kiki_sti_ji_ytkskof_cd";
	/** 機器指定時預託先オフィス棚コード */
	private static final String TMP_KIKI_STI_JI_YTKSKOF_SLF_CD = "kiki_sti_ji_ytkskof_slf_cd";
	
	/** コード種別コード(有無コード) */
	private static final String CD_SBT_CD_00002 = "CD00002";
	
	/** 入力IF：ＯＰＭＳルータ種別コード */
	public static final String IN_OPMS_ROUTER_KIND_CD = "opms_router_kind_cd";
	/** 入力IF：ＯＰＭＳルータ種別ベーシックルータ */
	public static final String IN_OPMS_ROUT_SBT_BASIC = "opms_rout_sbt_basic";
	
	/* ++++++++++ v5.01.00 修正開始 ++++++++++ */
//	/** 進捗ステータス 接続機器変更完了 */
//	private static final String PRG_STAT_3302 = "3302";
	/** 進捗ステータス 機器情報訂正完了 */
	private static final String PRG_STAT_1004 = "1004";
	/** 進捗情報出力判定情報保持  */
	private static final String KKW03301_PRG_WORK = "KKW03301_PRG_WORK";
	/* ++++++++++ v5.01.00 修正完了 ++++++++++ */
	
	/* ++++++++++ v5.00.00 変更開始 ++++++++++ */
	/** 呼出画面ID */
	private static final String SCRN_ID_KKW108 = "KKW108";
	/* ++++++++++ v5.00.00 変更完了 ++++++++++ */
	/* ++++++++++ v5.00.01 変更開始 ++++++++++ */
	/** OUT項目「UQ機器製造番号」 */
	private static final String UQ_KK_SEIZO_NO = "uq_kiki_seizo_no";
	/* ++++++++++ v5.00.01 変更完了 ++++++++++ */
	
	/* ++++++++++ v7.00.00 変更開始 ++++++++++ */
	/** 回復対象（回復） */
	private static final String KIKI_KAIFUKU_TAISHO_KAIFUKU = "1";
	/** 機器提供サービス契約回復 */
	private static final String JKK_KIKIICHIRAN_KKKAIFUKU_CC = "JKKKikiIchiranKkKaifukuCC";
	/** 機器提供サービス契約回復割引 */
	private static final String JKK_KIKI_KKKAIFUKU_WRISVC_CC = "JKKKikiKaifukuWrisvcCC";
	/** 申込種別コード（機器契約変更申込） */
	private static final String MSKM_SBT_CD_00022 = "00022";
	/* ++++++++++ v7.00.00 変更完了 ++++++++++ */
	
	/* ++++++++++ v7.00.03 追加開始 ++++++++++ */
	/** 機器提供サービス一覧照会 */
	private static final String TEMPLATE_ID_EKK0771B001 = "EKK0771B001";
	/** 機器提供サービス一意照会 */
	private static final String TEMPLATE_ID_EKK0771A010 = "EKK0771A010";
	/* ++++++++++ v7.00.03 追加終了 ++++++++++ */
	
	/**
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execKikiIchiranKikiUpd(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		String dataMapKey = fixedText;
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// エラーフラグ
		ccMsg.put("err_flg", "");
		
		// メッセージ情報
		ArrayList<HashMap<String, Object>> messageInfo = new ArrayList<HashMap<String, Object>>();
		
		// メッセージコードリスト
		ccMsg.put("message_list", messageInfo);
		
		// 一時領域データ
		HashMap<String, Object> temporaryData = new HashMap<String, Object>();
		
		// 共通領域を取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		/* ++++++++++ v7.00.04 削除開始 ++++++++++ */
		// サービス契約更新前タイムスタンプを共通領域に格納します。
		//setInitSvcUpdate(param, ccMsg);
		/* ++++++++++ v7.00.04 削除終了 ++++++++++ */
		
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// サービス契約データが存在しない場合取得します。
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)ccMsg.get("svc_kei_data");
		
		if(ekk0081a010cbsMsg == null)
		{
			// ***** EKK0081A010（サービス契約一意照会）*****
			Object[][] ekk0081a010IN = {
				{EKK0081A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0081A010},
				{EKK0081A010CBSMsg.FUNC_CODE,        "2"},
				{EKK0081A010CBSMsg.KEY_SVC_KEI_NO,   ccMsg.get("svc_kei_no")},
				{EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, ""},
				{EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, ccMsg.get("unyo_ymd")},
			};
			
			ekk0081a010cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk0081a010IN).getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST)[0];
		}
		
		// 検索結果を格納（サービス契約一意照会）
		temporaryData.put(TEMPLATE_ID_EKK0081A010, ekk0081a010cbsMsg);
		
		// 機器提供サービス契約データが存在しない場合取得します。
		CAANMsg ekk0341a010cbsMsg = (CAANMsg)ccMsg.get("kktk_svc_kei_data");
		
		if(ekk0341a010cbsMsg == null)
		{
			// 機器提供サービス契約情報を取得
			// ***** EKK0341A010（機器提供サービス契約一意照会）*****
			Object[][] ekk0341a010IN = {
				{EKK0341A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0341A010},
				{EKK0341A010CBSMsg.FUNC_CODE,        "2"},
				{EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO,   ccMsg.get("kktk_svc_kei_no")},
				{EKK0341A010CBSMsg.KEY_GENE_ADD_DTM, ""},
				{EKK0341A010CBSMsg.KEY_RSV_APLY_YMD, ccMsg.get("unyo_ymd")},
			};
			
			CAANMsg[] ekk0341a010cbsMsgList = callSC(handle, scCall, param, dataMapKey, ekk0341a010IN)
													.getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
			
			// データが存在しない場合、エラーメッセージを表示します。
			if(ekk0341a010cbsMsgList == null || ekk0341a010cbsMsgList.length == 0)
			{
				// 排他エラーを表示（EKB0320-KW）
				setMessageInfo(ccMsg, "EKB0320-KW", "", "", ERR_FLG_ERR);
				
				return param;
			}
			
			ekk0341a010cbsMsg = ekk0341a010cbsMsgList[0];
		}
		
		/* ++++++++++ v7.00.04 追加開始 ++++++++++ */
		// サービス契約更新前タイムスタンプを共通領域に格納します。
		setInitSvcUpdate(param, ccMsg, ekk0341a010cbsMsg);
		/* ++++++++++ v7.00.04 追加終了 ++++++++++ */
		
		// 検索結果を格納（機器提供サービス契約一意照会）
		temporaryData.put(TEMPLATE_ID_EKK0341A010, ekk0341a010cbsMsg);
		
		// 料金コース判別取得部品呼出
		Map<String, Object> pcrsData = getPcrsData(handle, param, ccMsg);
		
		// 検索結果を格納（料金コース判別取得部品）
		temporaryData.put(PCRS_MAP, pcrsData);
		
		/* ++++++++++ v7.00.00 変更開始 ++++++++++ */
		String kaifurkuUmu = getNullToStr((String)ccMsg.get("khk_um"));
		
// ANK-2979-00-00 MOD START
//		if(KIKI_KAIFUKU_TAISHO_KAIFUKU.equals(kaifurkuUmu))
		String rtrKaifurkuUmu = getNullToStr((String)ccMsg.get("rtr_khk_um"));
		if(KIKI_KAIFUKU_TAISHO_KAIFUKU.equals(kaifurkuUmu) || KIKI_KAIFUKU_TAISHO_KAIFUKU.equals(rtrKaifurkuUmu))
// ANK-2979-00-00 MOD END
		{
// ANK-2979-00-00 ADD START
			if(KIKI_KAIFUKU_TAISHO_KAIFUKU.equals(rtrKaifurkuUmu))
			{
				// 料金プランとルータ機器の整合性チェック
				if(!execCheckRouterSpeed(handle, scCall, param, dataMapKey, temporaryData))
				{
					return param;
				}
			}
// ANK-2979-00-00 ADD END
			// 回復処理関連
			execKikiKaifukuShori(handle, scCall, param, dataMapKey, temporaryData);
			
			// 回復割引処理実行
			execKikiKaifukuWribikiShori(handle, scCall, param, dataMapKey, temporaryData);
			
			return param;
		}
		/* ++++++++++ v7.00.00 変更完了 ++++++++++ */
		
		// サービス契約ステータス
		String svcKeiStat = getNullToStr(ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
		
		/* ++++++++++ v7.00.03 追加開始 ++++++++++ */
		if("".equals(getNullToStr((String)ccMsg.get("kktk_svc_cd"))) || "".equals(getNullToStr((String)ccMsg.get("taknkiki_model_cd"))))
		{
			// 機器提供サービス一覧照会
			CAANMsg[] ekk0771b001cbsMsg1list = callEKK0771B001(handle, scCall, param, dataMapKey, (String)ccMsg.get("tk_sbt_cd"), (String)ccMsg.get("unyo_ymd"));
			
			ccMsg.put("kktk_svc_cd", getNullToStr(ekk0771b001cbsMsg1list[0].getString(EKK0771B001CBSMsg1List.KKTK_SVC_CD)));
			
			CAANMsg ekk0771a010cbsMsg = callEKK0771A010(handle, scCall, param, dataMapKey, ekk0771b001cbsMsg1list[0].getString(EKK0771B001CBSMsg1List.KKTK_SVC_CD));
			
			ccMsg.put("taknkiki_model_nm", getNullToStr(ekk0771a010cbsMsg.getString(EKK0771A010CBSMsg1List.KKTK_SVC_NM)));
			
			ccMsg.put("kktk_svc_nm", getNullToStr(ekk0771a010cbsMsg.getString(EKK0771A010CBSMsg1List.KKTK_SVC_ALI)));
		}
		/* ++++++++++ v7.00.03 追加終了 ++++++++++ */
		
		// 子画面（KKW108）から呼び出された場合のみチェックを実行します。
		if(!SCRN_ID_KKW033.equals(ccMsg.get("check_scrn_id")))
		{
			// サーバーチェック部品呼び出し。（エラーの場合は後続処理を行いません。）
			if(!isKikiInfoServerChkCC(handle, scCall, param, dataMapKey, temporaryData))
			{
				return param;
			}
		}

		// 料金プラン変更（テレビコース変更処理）
		if(!isTvPlanUpdate(handle, scCall, param, dataMapKey, temporaryData))
		{
			return param;
		}
		
//		// TVコースキャンセル処理（現在STBからSTB以外に変更することができないためこの処理は実行されない）
//		if(!isTvCancelUpdate(handle, scCall, param, dataMapKey, temporaryData))
//		{
//			return param;
//		}
		
		// 機器提供サービスコードが変更された場合
		if(isChangeKktkSvcCd(temporaryData))
		{
			// 型式が変更されない為、コメント
//			// 機器提供サービス契約情報の作り直しを行います。
//			execCreateKktkSvckei(handle, scCall, param, dataMapKey, temporaryData);
//			
//			// 返却値を設定（更新確認時に棚コードと名称が必要）
//			setReturnDataCreate(param, dataMapKey);
			
		}
		else
		{
			// 機器提供サービス契約情報の更新を行います。
			execUpdateKktkSvckei(handle, scCall, param, dataMapKey, temporaryData);
			// 返却値を設定（
			setReturnDataUpdate(param, dataMapKey, temporaryData);
		}
		
		// サービス契約ステータスが受付済以外の場合実行
		if(!SVC_KEI_STAT_UKZUMI.equals(svcKeiStat))
		{
			execShinchokuToroku(handle, scCall, param, dataMapKey, temporaryData);
		}
		
		// B-CAS、C-CAS以外の場合実行します。
		// 割引CC呼び出し
		if(isOtherBcasCcas(param, dataMapKey, temporaryData))
		{
			execKikiUpdateWrisvc(handle, scCall, param, dataMapKey, temporaryData);
		}
		
		// 名称データ等取得し返却します。
		setScrnReturnData(handle, scCall, param, dataMapKey, temporaryData);
		
		// 機器登録CCのMapを削除します。
		// （割引CCで機器登録CCが登録したデータ「機器提供サービス契約情報」「サービス契約内訳一意照会」を使用するためここでクリア）
		param.removeData(KIKI_CREATE_CC_PARAM);
		// 工事連携データ削除
		param.removeData(KIKI_CREATE_LIST);
		
		return param;
	}
	
	
	/**
	 * B-CAS、C-CAS以外判断メソッド
	 * <br>
	 * B-CAS、C-CAS以外の場合true
	 * B-CASまたはC-CASの場合false
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean isOtherBcasCcas(IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData) throws Throwable
	{
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		String bcas_kktk_svc_cd = (String)ccMsg.get("bcas_kktk_svc_cd");
		String ccas_kktk_svc_cd = (String)ccMsg.get("ccas_kktk_svc_cd");
		
		// 変更前の機器提供サービス契約情報(B-CAS、C-CASは以外のデータに変更できないため更新前の機器提供サービスコードで判断)
		CAANMsg ekk0341a010cbsMsg_bf = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0341A010);
		
		String kktk_svc_cd_bf = ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD);
		
		if(bcas_kktk_svc_cd.equals(kktk_svc_cd_bf) || ccas_kktk_svc_cd.equals(kktk_svc_cd_bf))
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * 機器提供サービス契約情報更新メソッド
	 * <br>
	 * 機器提供サービス契約一覧照会(サービス契約内訳番号)
	 * 機器提供サービス契約キャンセル
	 * 機器登録CC
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void execUpdateKktkSvckei(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 ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
		
		CAANMsg edk0451a010cbsMsg = null;
		if(!"".equals(getNullToStr((String)ccMsg.get("hambai_sbt"))))
		{
			// 棚コード取得処理
			// ***** EDK0451A010（引当棚一意照会）*****
			Object[][] edk0451a010IN = {
				{EDK0451A010CBSMsg.TEMPLATEID,        TEMPLATE_ID_EDK0451A010},
				{EDK0451A010CBSMsg.FUNC_CODE,         FUNC_CODE_1},
				{EDK0451A010CBSMsg.KEY_HAMBAI_SBT_CD, ccMsg.get("hambai_sbt")},
				{EDK0451A010CBSMsg.KEY_UNYO_YMD,      ccMsg.get("unyo_ymd")},
			};
			
			edk0451a010cbsMsg = callSC(handle, scCall, param, dataMapKey, edk0451a010IN).getCAANMsgList(EDK0451A010CBSMsg.EDK0451A010CBSMSG1LIST)[0];
		}
			
		temporaryData.put(TEMPLATE_ID_EDK0451A010, edk0451a010cbsMsg);
		
		
		// 機器設置先情報の取得
		// ***** EKK0251B003（サービス契約回線内訳一覧照会（現在利用中））*****
		Object[][] ekk0251b003IN = {
			{EKK0251B003CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0251B003},
			{EKK0251B003CBSMsg.FUNC_CODE,        FUNC_CODE_1},
			{EKK0251B003CBSMsg.KEY_SVC_KEI_NO,   ccMsg.get("svc_kei_no")},
		};
		
		CAANMsg ekk0251b003cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk0251b003IN).getCAANMsgList(EKK0251B003CBSMsg.EKK0251B003CBSMSG1LIST)[0];
		
		temporaryData.put(TEMPLATE_ID_EKK0251B003, ekk0251b003cbsMsg);
		
		
		
		// 変更後のPCRSデータ
		Map<String, Object> pcrsData = (Map<String, Object>)temporaryData.get(PCRS_MAP);
		// 変更前の機器提供サービス契約情報
		CAANMsg ekk0341a010cbsMsg_bf = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0341A010);
		
		// 機器送付先個別指定フラグ
		String kikiShsKbtShiteiFlg = getKikiShsKbtShiteiFlg(param, dataMapKey, temporaryData);
		
		// 管理場所識別コード、各倉庫コード、各棚コードに設定する項目を取得
		HashMap<String, String> mapBasho = getKanriBasho(ccMsg, edk0451a010cbsMsg);
		
		// 機器送付先住所手動入力フラグ
		String kikiShsAdManInputFlg = (String)ccMsg.get("kiki_shs_ad_man_input_flg");
		
		/* ++++++++++ v5.00.00 変更開始 ++++++++++ */
		String scrnId = getNullToStr((String)ccMsg.get("check_scrn_id"));
		// 子画面から実行された場合、住所チェックが必要ないため手動入力フラグに1を設定します。
		if(SCRN_ID_KKW108.equals(scrnId))
		{
			kikiShsAdManInputFlg = "1";
		}
		/* ++++++++++ v5.00.00 変更完了 ++++++++++ */
		
		// 機器送付先住所チェックレベル
		String kikiSohusAdChkLv = "";
		
		// 機器送付先住所チェックレベル
		if("0".equals(kikiShsAdManInputFlg))
		{
			kikiSohusAdChkLv = "1";
		}
		else
		{
			kikiSohusAdChkLv = "0";
		}
		
		// 機器提供サービス契約情報更新
		// ***** EKK0341C230（機器提供サービス契約情報変更）*****
		Object[][] ekk0341c230IN = {
			{EKK0341C230CBSMsg.TEMPLATEID,                 TEMPLATE_ID_EKK0341C230},
			{EKK0341C230CBSMsg.FUNC_CODE,                  ccMsg.get("func_code")},
			{EKK0341C230CBSMsg.KKTK_SVC_KEI_NO,            ccMsg.get("kktk_svc_kei_no")},
			{EKK0341C230CBSMsg.KKTK_SBT_CD,                ccMsg.get("kktk_sbt_cd")},
			{EKK0341C230CBSMsg.HAMBAI_SBT_CD,              ccMsg.get("hambai_sbt")},
			{EKK0341C230CBSMsg.TAKNKIKI_MODEL_CD,          ccMsg.get("taknkiki_model_cd")},
			{EKK0341C230CBSMsg.KIKI_SEIZO_NO,              ccMsg.get("kk_seizo_no")},
			{EKK0341C230CBSMsg.HDD_CAPA_CD,                pcrsData.get("hdd_capa_cd")},
			{EKK0341C230CBSMsg.TSUSHIN_KIKI_SET_CD,        ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.TSUSHIN_KIKI_SET_CD)},
			{EKK0341C230CBSMsg.LINK_STB_FLG,               ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.LINK_STB_FLG)},
			
			{EKK0341C230CBSMsg.KIKI_HKAT_SHITEI_SOKO_CD,   mapBasho.get(TMP_KIKI_HKAT_SHITEI_SOKO_CD)},
			{EKK0341C230CBSMsg.KIKI_HKAT_SHITEI_SKDN_CD,   mapBasho.get(TMP_KIKI_HKAT_SHITEI_SKDN_CD)},
			
			{EKK0341C230CBSMsg.KIKI_SORYO_UM,              ccMsg.get("kiki_souryo_um")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_NM,              ccMsg.get("kiki_sofu_shs_nm")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_KANA,            ccMsg.get("kiki_sofu_shs_kana")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_AD_CD,           ccMsg.get("kiki_sofu_ad_cd")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_PCD,             ccMsg.get("kiki_sofu_pcd")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_STATE_NM,        ccMsg.get("kiki_sofu_state")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_CITY_NM,         ccMsg.get("kiki_sofu_city")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_OAZTSU_NM,       ccMsg.get("kiki_sofu_oaztsu")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_AZCHO_NM,        ccMsg.get("kiki_sofu_azcho")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_BNCHIGO,         ccMsg.get("kiki_sofu_bnchigo")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_ADRTTM,          ccMsg.get("kiki_sofu_adrttm")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_ADRRM,           ccMsg.get("kiki_sofu_adrrm")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_TELNO,           ccMsg.get("kiki_sofu_telno")},
			{EKK0341C230CBSMsg.KIKI_SOHUS_KSH_AD_SAI_FLG,  ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.KIKI_SOHUS_KSH_AD_SAI_FLG)},
			{EKK0341C230CBSMsg.KIKI_SHS_KBT_SHITEI_FLG,    kikiShsKbtShiteiFlg},
			{EKK0341C230CBSMsg.KIKI_STC_SAKI_NM,           ""},
			{EKK0341C230CBSMsg.KIKI_STC_SAKI_KANA,         ""},
			{EKK0341C230CBSMsg.KIKI_STC_SAKI_AD_CD,        ekk0251b003cbsMsg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_AD_CD)},
			{EKK0341C230CBSMsg.KIKI_STC_SAKI_PCD,          ekk0251b003cbsMsg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_PCD)},
			{EKK0341C230CBSMsg.KIKI_STC_SAKI_STATE_NM,     ekk0251b003cbsMsg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_STATE_NM)},
			{EKK0341C230CBSMsg.KIKI_STC_SAKI_CITY_NM,      ekk0251b003cbsMsg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_CITY_NM)},
			{EKK0341C230CBSMsg.KIKI_STC_SAKI_OAZTSU_NM,    ekk0251b003cbsMsg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_OAZTSU_NM)},
			{EKK0341C230CBSMsg.KIKI_STC_SAKI_AZCHO_NM,     ekk0251b003cbsMsg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_AZCHO_NM)},
			{EKK0341C230CBSMsg.KIKI_STC_SAKI_BNCHIGO,      ekk0251b003cbsMsg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_BNCHIGO)},
			{EKK0341C230CBSMsg.KIKI_STC_SAKI_ADRTTM,       ekk0251b003cbsMsg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_ADRTTM)},
			{EKK0341C230CBSMsg.KIKI_STC_SAKI_ADRRM,        ekk0251b003cbsMsg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_ADRRM)},
			{EKK0341C230CBSMsg.KIKI_STC_SK_KSH_AD_SAI_FLG, ""},
			{EKK0341C230CBSMsg.KIKI_STC_SK_TELNO,          ekk0251b003cbsMsg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_TELNO)},
			{EKK0341C230CBSMsg.KIKI_STS_KKK_SEIRI_CHU_FLG, ekk0251b003cbsMsg.getString(EKK0251B003CBSMsg1List.KISN_PLC_KKK_SEIRI_CHU_FLG)},
			{EKK0341C230CBSMsg.AD_MI_FIX_FLG,              ekk0251b003cbsMsg.getString(EKK0251B003CBSMsg1List.KISN_PLC_AD_MI_FIX_FLG)},
			{EKK0341C230CBSMsg.HAISO_DIV,                  ccMsg.get("haiso_div_cd")},
			{EKK0341C230CBSMsg.FTRIAL_KANYU_YMD,           ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.FTRIAL_KANYU_YMD)},
			{EKK0341C230CBSMsg.FTRIAL_PRD_ENDYMD,          ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.FTRIAL_PRD_ENDYMD)},
			{EKK0341C230CBSMsg.HONKANYU_YMD,               ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.HONKANYU_YMD)},
			{EKK0341C230CBSMsg.HONKANYU_IKO_KIGEN_YMD,     ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.HONKANYU_IKO_KIGEN_YMD)},
			{EKK0341C230CBSMsg.HOSHO_CD,                   ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.HOSHO_CD)},
			{EKK0341C230CBSMsg.PNLTY_HASSEI_CD,            ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.PNLTY_HASSEI_CD)},
			{EKK0341C230CBSMsg.IDO_DIV,                    ccMsg.get("ido_div")},
			{EKK0341C230CBSMsg.CAS_CARD_USE_KYODAK_YMD,    ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.CAS_CARD_USE_KYODAK_YMD)},
			{EKK0341C230CBSMsg.KIKI_HUKA_INFO_CD,          ccMsg.get("huka_info")},
			{EKK0341C230CBSMsg.HAISO_WAY_CD,               ccMsg.get("haiso_way_cd")},
			{EKK0341C230CBSMsg.KIKI_ITENS_MV_JSSIS_SKCD,   ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.KIKI_ITENS_MV_JSSIS_SKCD)},
			{EKK0341C230CBSMsg.HAISO_REQ_SHITEI_YMD,       ccMsg.get("haiso_req_shitei_ymd")},
			/* ++++++++++ v5.00.00 変更開始 ++++++++++ */
//			{EKK0341C230CBSMsg.KIKI_SHS_AD_MAN_INPUT_FLG,  ccMsg.get("kiki_shs_ad_man_input_flg")},
			{EKK0341C230CBSMsg.KIKI_SHS_AD_MAN_INPUT_FLG,  kikiShsAdManInputFlg},
			/* ++++++++++ v5.00.00 変更完了 ++++++++++ */
/* ++++++++++ v4.00.02 修正開始 ++++++++++ */
//			{EKK0341C230CBSMsg.MSKM_DTL_NO,         getMskmDtlNo(param, ekk0081a010cbsMsg)},
/* ++++++++++ v4.00.02 修正終了 ++++++++++ */
			{EKK0341C230CBSMsg.KAISHU_KIKI_UM,             ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.KAISHU_KIKI_UM)},
			{EKK0341C230CBSMsg.SVC_STA_JI_HIS_JOKYO_SKCD,  ccMsg.get("svcStaJiHisJokyoSkcd")},
			{EKK0341C230CBSMsg.UPD_DTM_BF,                 getSvcUpDtm(param)},
			{EKK0341C230CBSMsg.KIKI_SOHUS_AD_CHK_LV,       kikiSohusAdChkLv},
//			{EKK0341C230CBSMsg.KIKI_STC_AD_CHK_LV,         ""},
			
			{EKK0341C230CBSMsg.KIKI_STI_JI_KRIPLACE_SKCD,  mapBasho.get(TMP_KIKI_STI_JI_KRIPLACE_SKCD)},
			{EKK0341C230CBSMsg.KIKI_STI_JI_KOCOMP_CD,      mapBasho.get(TMP_KIKI_STI_JI_KOCOMP_CD)},
			{EKK0341C230CBSMsg.KIKI_STI_JI_KOCOMP_SLF_CD,  mapBasho.get(TMP_KIKI_STI_JI_KOCOMP_SLF_CD)},
			{EKK0341C230CBSMsg.KIKI_STI_JI_YTKSKOF_CD,     mapBasho.get(TMP_KIKI_STI_JI_YTKSKOF_CD)},
			{EKK0341C230CBSMsg.KIKI_STI_JI_YTKSKOF_SLF_CD, mapBasho.get(TMP_KIKI_STI_JI_YTKSKOF_SLF_CD)},
			/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
			{EKK0341C230CBSMsg.SVC_STA_KISAN_YMD, getNullToStr((String)ccMsg.get("keiyaku_ymd"))},
			/* ++++++++++ v8.00.00 追加終了 ++++++++++ */
		};
		
		CAANMsg ekk0341c230cbsMsg_out = callSC(handle, scCall, param, dataMapKey, ekk0341c230IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		setSvcUpDtm(param, ekk0341c230cbsMsg_out.getString(EKK0341C230CBSMsg.UPD_DTM));
		
		/* ++++++++++ v5.01.01 修正開始 ++++++++++ */
		// サービス契約ステータス
		String svcKeiStat = getNullToStr(ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
		
		if(FUNC_CODE_1.equals(ccMsg.get("func_code")) && SVC_KEI_STAT_UKZUMI.equals(svcKeiStat))
		{
			// 料金コースコードが変更された場合
			// 変更前の料金コースコード
			String pcrsCd_bf = getNullToStr(ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.PCRS_CD));
			// 変更後の料金コースコード
			String pcrsCd_af = getNullToStr((String)pcrsData.get("pcrs_cd"));
			
			if(!pcrsCd_bf.equals(pcrsCd_af))
			{
				
				// 料金プラン
				String pplan_cd_af = getNullToStr((String)pcrsData.get("pplan_cd"));
				
				// ***** EKK0341C080（機器提供サービス契約手続中料金コース変更）*****
				Object[][] ekk0341c080IN = {
					{EKK0341C080CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0341C080},
					{EKK0341C080CBSMsg.FUNC_CODE,        ccMsg.get("func_code")},
					{EKK0341C080CBSMsg.KKTK_SVC_KEI_NO,   ccMsg.get("kktk_svc_kei_no")},
					{EKK0341C080CBSMsg.GENE_ADD_DTM,   ekk0341c230cbsMsg_out.getString(EKK0341C230CBSMsg.GENE_ADD_DTM)},
					{EKK0341C080CBSMsg.PCRS_CD,   pcrsCd_af},
					{EKK0341C080CBSMsg.PPLAN_CD,   pplan_cd_af},
					{EKK0341C080CBSMsg.MSKM_DTL_NO,   getMskmDtlNo(param, ekk0081a010cbsMsg)},
					{EKK0341C080CBSMsg.PNLTY_HASSEI_CD,   ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.PNLTY_HASSEI_CD)},
					{EKK0341C080CBSMsg.UPD_DTM_BF,   getSvcUpDtm(param)},
					{EKK0341C080CBSMsg.TAKNKIKI_MODEL_CD,    ekk0341c230cbsMsg_out.getString(EKK0341C230CBSMsg.TAKNKIKI_MODEL_CD)},
				};
				
				CAANMsg ekk0341C080cbsMsg_out = callSC(handle, scCall, param, dataMapKey, ekk0341c080IN);
				
				// 更新タイムスタンプをワーク領域にセットします。
				setSvcUpDtm(param, ekk0341C080cbsMsg_out.getString(EKK0341C080CBSMsg.UPD_DTM));
			}
		}
		/* ++++++++++ v5.01.01 修正終了 ++++++++++ */
		
		// 料金グループがモバイルの場合、サービス契約＜eoモバイル＞の更新を行います。
		if(isMobile(param, dataMapKey, temporaryData))
		{
			// ***** EKK0121A010（サービス契約＜eoモバイル＞一意照会）*****
			Object[][] ekk0121a010IN = {
				{EKK0121A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0121A010},
				{EKK0121A010CBSMsg.FUNC_CODE,        "2"},
				{EKK0121A010CBSMsg.KEY_SVC_KEI_NO,   ccMsg.get("svc_kei_no")},
				{EKK0121A010CBSMsg.KEY_GENE_ADD_DTM,   ""},
			};
			
			CAANMsg[] ekk0121a010cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk0121a010IN).getCAANMsgList(EKK0121A010CBSMsg.EKK0121A010CBSMSG1LIST);
			
			// 検索結果がある場合処理します。
			if(ekk0121a010cbsMsg != null && ekk0121a010cbsMsg.length >= 1)
			{
				String macCd_bf = getNullToStr(ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.MACAD));
				
				// 持込機器MACが変更されている場合実行
				if(!macCd_bf.equals(ccMsg.get("mac_ad")))
				{
				
					// ***** EKK0121C040（サービス契約<eoモバイル>情報変更）*****
					Object[][] ekk0121c040IN = {
						{EKK0121C040CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0121C040},
						{EKK0121C040CBSMsg.FUNC_CODE,        ccMsg.get("func_code")},
						{EKK0121C040CBSMsg.SVC_KEI_NO,   ccMsg.get("svc_kei_no")},
						{EKK0121C040CBSMsg.MSKM_DTL_NO,   getMskmDtlNo(param, ekk0081a010cbsMsg)},
						{EKK0121C040CBSMsg.SEIRI_NO,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SEIRI_NO)},
						{EKK0121C040CBSMsg.MENKAIHAT_ANKEN_NO,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.MENKAIHAT_ANKEN_NO)},
						{EKK0121C040CBSMsg.ID_SOKHOSHO_OUTPUT_YH,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.ID_SOKHOSHO_OUTPUT_YH)},
						{EKK0121C040CBSMsg.SKEKKA_CD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SKEKKA_CD)},
						{EKK0121C040CBSMsg.SKEKKA_DTL_CD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SKEKKA_DTL_CD)},
						{EKK0121C040CBSMsg.SKEKKA_HOKI_CD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SKEKKA_HOKI_CD)},
						{EKK0121C040CBSMsg.SKEKKA_SEND_CD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SKEKKA_SEND_CD)},
						{EKK0121C040CBSMsg.PAYWAY_KEIZOKU_FLG,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.PAYWAY_KEIZOKU_FLG)},
						{EKK0121C040CBSMsg.FTRIAL_KANYU_YMD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.FTRIAL_KANYU_YMD)},
						{EKK0121C040CBSMsg.FTRIAL_PRD_ENDYMD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.FTRIAL_PRD_ENDYMD)},
						{EKK0121C040CBSMsg.HONKANYU_YMD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.HONKANYU_YMD)},
						{EKK0121C040CBSMsg.HONKANYU_IKO_KIGEN_YMD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.HONKANYU_IKO_KIGEN_YMD)},
						{EKK0121C040CBSMsg.LETTER_HASSO_SHIWAKE_DIV,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.LETTER_HASSO_SHIWAKE_DIV)},
						{EKK0121C040CBSMsg.THNX_LETTER_SHS_CD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.THNX_LETTER_SHS_CD)},
						{EKK0121C040CBSMsg.WEB_OP_ADD_FAIL_FLG,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.WEB_OP_ADD_FAIL_FLG)},
						{EKK0121C040CBSMsg.PNLTY_HASSEI_CD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.PNLTY_HASSEI_CD)},
						{EKK0121C040CBSMsg.IDO_DIV,   ccMsg.get("ido_div")},
						{EKK0121C040CBSMsg.INTR_CD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.INTR_CD)},
						{EKK0121C040CBSMsg.IDO_NG_STAT_CD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.IDO_NG_STAT_CD)},
						{EKK0121C040CBSMsg.WORK_RRK_BIKO,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.WORK_RRK_BIKO)},
						{EKK0121C040CBSMsg.AUTO_SHOSA_TRAN_STAT_CD,   ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.AUTO_SHOSA_TRAN_STAT_CD)},
						{EKK0121C040CBSMsg.UPD_DTM_BF,   getSvcUpDtm(param)},
						{EKK0121C040CBSMsg.JIGYOSHA_KEI_ID,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.JIGYOSHA_KEI_ID)},
						{EKK0121C040CBSMsg.MACAD,   ccMsg.get("mac_ad")},
						{EKK0121C040CBSMsg.JGS_DSL_INFO_RNKI_YMD,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.JGS_DSL_INFO_RNKI_YMD)},
						{EKK0121C040CBSMsg.JGS_DSL_INFO_RNKI_UK_YMD,  ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.JGS_DSL_INFO_RNKI_UK_YMD)},
						{EKK0121C040CBSMsg.JGS_USE_STP_RNKI_YMD,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.JGS_USE_STP_RNKI_YMD)},
						{EKK0121C040CBSMsg.JGS_USE_STP_UK_YMD,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.JGS_USE_STP_UK_YMD)},
						{EKK0121C040CBSMsg.JGS_USE_STP_RLS_RNKI_YMD,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.JGS_USE_STP_RLS_RNKI_YMD)},
						{EKK0121C040CBSMsg.JGS_USE_STP_RLS_UK_YMD,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.JGS_USE_STP_RLS_UK_YMD)},
						{EKK0121C040CBSMsg.JGS_STP_TEL_RRK_YMD,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.JGS_STP_TEL_RRK_YMD)},
						{EKK0121C040CBSMsg.JGS_STP_SKAI_TEL_RRK_YMD,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.JGS_STP_SKAI_TEL_RRK_YMD)},
						{EKK0121C040CBSMsg.JGS_DSL_TEL_RRK_YMD,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.JGS_DSL_TEL_RRK_YMD)},
						{EKK0121C040CBSMsg.COURSECHG_NG_STAT_CD,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.COURSECHG_NG_STAT_CD)},
						{EKK0121C040CBSMsg.JGS_COURSECHG_RNK_YMD,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.JGS_COURSECHG_RNK_YMD)},
						{EKK0121C040CBSMsg.COURSECHG_TCH_ML_SKSI_YMD,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.COURSECHG_TCH_ML_SKSI_YMD)},
						{EKK0121C040CBSMsg.USIM_RTN_YMD_KOPT,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.USIM_RTN_YMD_KOPT)},
						{EKK0121C040CBSMsg.USIM_RTN_YMD_MBL_JGS,   ekk0121a010cbsMsg[0].getString(EKK0121A010CBSMsg1List.USIM_RTN_YMD_MBL_JGS)},
					};
					
					CAANMsg ekk0121c040cbsMsg_out = callSC(handle, scCall, param, dataMapKey, ekk0121c040IN);
					
					// 更新タイムスタンプをワーク領域にセットします。
					setSvcUpDtm(param, ekk0121c040cbsMsg_out.getString(EKK0121C040CBSMsg.UPD_DTM));
				}
				
			}
		}
		
		// 機器提供サービス契約の更新データを検索しワーク領域に格納します
		if(FUNC_CODE_1.equals(ccMsg.get("func_code")))
		{
			setKikiIchiranIkkatsuList(handle, scCall, param, dataMapKey, temporaryData);
		}

	}
	
	/**
	 * 倉庫コード、棚コードを取得する。<br>
	 * 管理場所識別コードより、対応した倉庫コード、棚コードを取得する。
	 * @param ekk0341a010cbsMsg インターフェース
	 * @return HashMap<String, String> 管理場所情報
	 */
	private HashMap<String, String> getSokoAndSelf(CAANMsg ekk0341a010cbsMsg)
	{
		HashMap<String, String> mapSoko = new HashMap<String, String>();
		
		// 管理場所識別コードを取得
		String kariBashoSbtCd = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_STI_JI_KRIPLACE_SKCD));
		// 提供種別コードを取得
		String tkSbtCd = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SBT_CD));
		

		// 提供種別コードが「持込」の場合
		if(TEIKYO_SBT_MOCHIKOMI.equals(tkSbtCd))
		{
			// 全て空を設定
			// 管理場所識別コード
			mapSoko.put(TMP_KIKI_STI_JI_KRIPLACE_SKCD, "");
			
			// 倉庫コード
			mapSoko.put(TMP_KIKI_HKAT_SHITEI_SOKO_CD, "");
			// 倉庫棚コード
			mapSoko.put(TMP_KIKI_HKAT_SHITEI_SKDN_CD, "");
			
		}
		// 提供種別コードが「持込」以外の場合
		else
		{
			// 倉庫の場合
			if("".equals(kariBashoSbtCd) || KRIPLACE_SKCD_SOKO.equals(kariBashoSbtCd))
			{
				// 管理場所識別コード
				mapSoko.put(TMP_KIKI_STI_JI_KRIPLACE_SKCD, "");
				// 倉庫コード
				mapSoko.put(TMP_KIKI_HKAT_SHITEI_SOKO_CD, 
						getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_HKAT_SHITEI_SOKO_CD)));
				// 倉庫棚コード
				mapSoko.put(TMP_KIKI_HKAT_SHITEI_SKDN_CD, 
						getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_HKAT_SHITEI_SKDN_CD)));
			}
			// 工事会社の場合
			else if(KRIPLACE_SKCD_KOJI.equals(kariBashoSbtCd))
			{
				// 管理場所識別コード
				mapSoko.put(TMP_KIKI_STI_JI_KRIPLACE_SKCD, kariBashoSbtCd);
				// 倉庫コード
				mapSoko.put(TMP_KIKI_HKAT_SHITEI_SOKO_CD, 
						getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_STI_JI_KOCOMP_CD)));
				// 倉庫棚コード
				mapSoko.put(TMP_KIKI_HKAT_SHITEI_SKDN_CD, 
						getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_STI_JI_KOCOMP_SLF_CD)));
			}
			// 預託オフィスの場合
			else if(KRIPLACE_SKCD_OFFICE.equals(kariBashoSbtCd))
			{
				// 管理場所識別コード
				mapSoko.put(TMP_KIKI_STI_JI_KRIPLACE_SKCD, kariBashoSbtCd);
				// 倉庫コード
				mapSoko.put(TMP_KIKI_HKAT_SHITEI_SOKO_CD, 
						getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_STI_JI_YTKSKOF_CD)));
				// 倉庫棚コード
				mapSoko.put(TMP_KIKI_HKAT_SHITEI_SKDN_CD, 
						getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_STI_JI_YTKSKOF_SLF_CD)));
			}
			else
			{
				// 管理場所識別コード
				mapSoko.put(TMP_KIKI_STI_JI_KRIPLACE_SKCD, "");
				// 倉庫コード
				mapSoko.put(TMP_KIKI_HKAT_SHITEI_SOKO_CD, "");
				// 倉庫棚コード
				mapSoko.put(TMP_KIKI_HKAT_SHITEI_SKDN_CD, "");
			}
		}
		return mapSoko;
	}
	
	/**
	 * 管理場所識別コード、各倉庫コード、各棚コードを設定する
	 * @param ccMsg インターフェース
	 * @param edk0451a010cbsMsg インターフェース
	 * @return HashMap<String, String> 管理場所情報
	 */
	private HashMap<String, String> getKanriBasho(HashMap<String, Object> ccMsg, CAANMsg edk0451a010cbsMsg)
	{
		HashMap<String, String> mapBasho = new HashMap<String, String>();
		
		// 管理場所識別コードを取得
		String kariBashoSbtCd = getNullToStr((String)ccMsg.get("kriplace_skcd"));
		// 提供種別コードを取得
		String tkSbtCd = getNullToStr((String)ccMsg.get("kktk_sbt_cd"));
		

		// 提供種別コードが「持込」の場合
		if(TEIKYO_SBT_MOCHIKOMI.equals(tkSbtCd))
		{
			// 全て空を設定
			// 機器指定時管理場所識別コード
			mapBasho.put(TMP_KIKI_STI_JI_KRIPLACE_SKCD, "");
			
			// 機器引当指定倉庫コード
			mapBasho.put(TMP_KIKI_HKAT_SHITEI_SOKO_CD, "");
			// 機器引当指定倉庫棚コード
			mapBasho.put(TMP_KIKI_HKAT_SHITEI_SKDN_CD, "");
			
			// 機器指定時工事会社コード
			mapBasho.put(TMP_KIKI_STI_JI_KOCOMP_CD, "");
			// 機器指定時工事会社棚コード
			mapBasho.put(TMP_KIKI_STI_JI_KOCOMP_SLF_CD, "");
			
			// 機器指定時預託先オフィスコード
			mapBasho.put(TMP_KIKI_STI_JI_YTKSKOF_CD, "");
			// 機器指定時預託先オフィス棚コード
			mapBasho.put(TMP_KIKI_STI_JI_YTKSKOF_SLF_CD, "");
		}
		// 提供種別コードが「持込」以外の場合
		else
		{
			// 倉庫コード取得
			String sokoCode = getSokoCode(ccMsg);
			// 棚コード取得
			String tanaCode = getSokoDanaCode(edk0451a010cbsMsg);
			
			// 倉庫の場合
			if("".equals(kariBashoSbtCd) || KRIPLACE_SKCD_SOKO.equals(kariBashoSbtCd))
			{
				// 機器指定時管理場所識別コード
				mapBasho.put(TMP_KIKI_STI_JI_KRIPLACE_SKCD, "");
				// 機器引当指定倉庫コード
				mapBasho.put(TMP_KIKI_HKAT_SHITEI_SOKO_CD, sokoCode);
				// 機器引当指定倉庫棚コード
				mapBasho.put(TMP_KIKI_HKAT_SHITEI_SKDN_CD, tanaCode);
			}
			else
			{
				// 機器指定時管理場所識別コード
				mapBasho.put(TMP_KIKI_STI_JI_KRIPLACE_SKCD, kariBashoSbtCd);
				// 機器引当指定倉庫コード
				mapBasho.put(TMP_KIKI_HKAT_SHITEI_SOKO_CD, "");
				// 機器引当指定倉庫棚コード
				mapBasho.put(TMP_KIKI_HKAT_SHITEI_SKDN_CD, "");
			}
			
			// 工事会社の場合
			if(KRIPLACE_SKCD_KOJI.equals(kariBashoSbtCd))
			{
				// 機器指定時工事会社コード
				mapBasho.put(TMP_KIKI_STI_JI_KOCOMP_CD, sokoCode);
				// 機器指定時工事会社棚コード
				mapBasho.put(TMP_KIKI_STI_JI_KOCOMP_SLF_CD, tanaCode);
			}
			else
			{
				// 機器指定時工事会社コード
				mapBasho.put(TMP_KIKI_STI_JI_KOCOMP_CD, "");
				// 機器指定時工事会社棚コード
				mapBasho.put(TMP_KIKI_STI_JI_KOCOMP_SLF_CD, "");
			}
			
			// 預託オフィスの場合
			if(KRIPLACE_SKCD_OFFICE.equals(kariBashoSbtCd))
			{
				// 機器指定時預託先オフィスコード
				mapBasho.put(TMP_KIKI_STI_JI_YTKSKOF_CD, sokoCode);
				// 機器指定時預託先オフィス棚コード
				mapBasho.put(TMP_KIKI_STI_JI_YTKSKOF_SLF_CD, tanaCode);
			}
			else
			{
				// 機器指定時預託先オフィスコード
				mapBasho.put(TMP_KIKI_STI_JI_YTKSKOF_CD, "");
				// 機器指定時預託先オフィス棚コード
				mapBasho.put(TMP_KIKI_STI_JI_YTKSKOF_SLF_CD, "");
			}
		}
		return mapBasho;
	}
	
	/**
	 * 倉庫コードを取得。<br>
	 * データが存在しない場合、デフォルト値を設定する。<br>
	 * 
	 * @param ccMsg
	 * @return 倉庫コード
	 */
	private String getSokoCode(HashMap<String, Object> ccMsg)
	{
		String sokoCd = getNullToStr((String)ccMsg.get("soko_info"));
		if("".equals(sokoCd))
		{
			// 未設定の場合、0000001を指定
			return DEFAULT_SOKO_CD;
		}
		return sokoCd;
	}
	
	/**
	 * 棚コードを取得。<br>
	 * 棚コードが存在していない場合、空("")を返却。<br>
	 * @param edk0451a010cbsMsg
	 * @return 棚コード
	 */
	private String getSokoDanaCode(CAANMsg edk0451a010cbsMsg)
	{
		String sokoDanaCd = "";
		if(edk0451a010cbsMsg == null)
		{
			return "";
		}
		else
		{
			// 機器引当指定倉庫棚コード
			sokoDanaCd = getNullToStr((String)edk0451a010cbsMsg.getString("shelf_cd"));
			if("".equals(sokoDanaCd))
			{
				return "";
			}
		}
		return sokoDanaCd;
	}

	/**
	 * モバイルデータ判別メソッド
	 * <br>
	 * 
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean isMobile(IRequestParameterReadWrite param, 
							String dataMapKey,
							HashMap<String, Object> temporaryData) throws Throwable
	{
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		// サービス契約データを取得
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
		
		// サービス契約の料金グループコード
		String prcGrpCdSvcKei = ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.PRC_GRP_CD);
		
		// 料金グループコード
		String[] prcGrpCdMobileList = ((String)ccMsg.get("prc_grp_cd_mobile")).split(",");
		
		for(int i = 0; i < prcGrpCdMobileList.length; i++)
		{
			if(prcGrpCdSvcKei.equals(prcGrpCdMobileList[i]))
			{
				return true;
			}
		}
		
		return false;
	}
	
//	/**
//	 * 機器提供サービス契約情報再作成メソッド
//	 * <br>
//	 * 機器提供サービス契約一覧照会(サービス契約内訳番号)
//	 * 機器提供サービス契約キャンセル
//	 * 機器登録CC
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @throws Throwable 
//	 */
//	private void execCreateKktkSvckei(SessionHandle handle, 
//										ServiceComponentRequestInvoker scCall, 
//										IRequestParameterReadWrite param, 
//										String dataMapKey,
//										HashMap<String, Object> temporaryData) throws Throwable
//	{
//		
//		// 機器提供サービス契約情報キャンセル
//		execKktkSvcKeiHanteiCancel(handle, scCall, param, dataMapKey, temporaryData);
//
//		// 機器登録CC呼び出し
//		execKikiAddCC(handle, scCall, param, dataMapKey, temporaryData);
//		
//	}
	
//	/**
//	 * 機器提供サービス契約情報判別キャンセルメソッド
//	 * <br>
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @throws Throwable 
//	 */
//	@SuppressWarnings("unchecked")
//	private void execKktkSvcKeiHanteiCancel(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(TEMPLATE_ID_EKK0341A010);
//		
//// 変更画面でSTBからSTB以外には変更できないためコメント
////		String kktkSvcCd_bf = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
////		
////		// キャンセル対象データがSTB機器の場合、B-CAS,C-CASデータもキャンセルします。
////		if(isStb(ccMsg, kktkSvcCd_bf))
////		{
////			// ***** EKK0341B501（機器提供サービス契約一覧照会(サービス契約内訳番号)）*****
////			Object[][] ekk0341b501IN = {
////				{EKK0341B501CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0341B501},
////				{EKK0341B501CBSMsg.FUNC_CODE,        "1"},
////				{EKK0341B501CBSMsg.KEY_SVC_KEI_UCWK_NO,   ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.SVC_KEI_UCWK_NO)},
////			};
////			
////			CAANMsg[] ekk0341b501cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk0341b501IN).getCAANMsgList(EKK0341B501CBSMsg.EKK0341B501CBSMSG1LIST);
////			
////			for(int i=0;i<ekk0341b501cbsMsg.length;i++)
////			{
////				// 機器提供サービス契約情報キャンセル
////				execKktkSvcKeiCancel(handle, scCall, param, dataMapKey, temporaryData, ekk0341b501cbsMsg[i]);
////			}
////		}
////		else
////		{
//			// 機器提供サービス契約情報キャンセル
//			execKktkSvcKeiCancel(handle, scCall, param, dataMapKey, temporaryData, ekk0341a010cbsMsg);
////		}
//	}
	
//	/**
//	 * 機器提供サービス契約情報キャンセルメソッド
//	 * <br>
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @param kktkSvcKeiMsg
//	 * @throws Throwable 
//	 */
//	@SuppressWarnings("unchecked")
//	private void execKktkSvcKeiCancel(SessionHandle handle, 
//										ServiceComponentRequestInvoker scCall, 
//										IRequestParameterReadWrite param, 
//										String dataMapKey,
//										HashMap<String, Object> temporaryData,
//										CAANMsg kktkSvcKeiMsg) throws Throwable
//	{
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		// サービス契約データを取得
//		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
//	
//		// ***** EKK0341C330（機器提供サービス契約キャンセル）*****
//		Object[][] ekk0341c330IN = {
//			{EKK0341C330CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0341C330},
//			{EKK0341C330CBSMsg.FUNC_CODE,        ccMsg.get("func_code")},
//			{EKK0341C330CBSMsg.KKTK_SVC_KEI_NO,   kktkSvcKeiMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO)},
//			{EKK0341C330CBSMsg.MSKM_DTL_NO,   getMskmDtlNo(param, ekk0081a010cbsMsg)},
//			{EKK0341C330CBSMsg.SVC_CANCEL_RSN_CD,   "00"},
//			{EKK0341C330CBSMsg.IDO_DIV,   ccMsg.get("ido_div")},
//			{EKK0341C330CBSMsg.UPD_DTM_BF,   getSvcUpDtm(param)},
//			
//		};
//			
//		CAANMsg ekk0341c330Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0341c330IN);
//		
//		// 更新タイムスタンプをワーク領域にセットします。
//		setSvcUpDtm(param, ekk0341c330Msg_out.getString(EKK0341C330CBSMsg.UPD_DTM));
//		
//		if(FUNC_CODE_1.equals(ccMsg.get("func_code")))
//		{
//			// 論理削除処理を行います。
//			execEKK0341E010(handle, scCall, param, dataMapKey, temporaryData, kktkSvcKeiMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
//		}
//	}
	
	
	/**
	 * 機器提供サービスコード変更判断メソッド
	 * <br>
	 * 
	 * @param temporaryData
	 * @return boolean 変更されている場合true
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean isChangeKktkSvcCd(HashMap<String, Object> temporaryData) throws Throwable
	{
		// 更新前の機器提供サービスコード
		CAANMsg ekk0341a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0341A010);
		String kktkSvcCd_bf = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
		// 変更後の機器提供サービスコード
		Map<String, Object> pcrsData = (Map<String, Object>)temporaryData.get(PCRS_MAP);
		String kktk_svc_cd_af = getNullToStr((String)pcrsData.get("kktk_svc_cd"));
		
		
		if(!kktkSvcCd_bf.equals(kktk_svc_cd_af))
		{
			return true;
		}

		return false;
	}
	
//	/**
//	 * TVコースキャンセル更新メソッド
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @return boolean
//	 * @throws Throwable 
//	 */
//	@SuppressWarnings("unchecked")
//	private boolean isTvCancelUpdate(SessionHandle handle, 
//										ServiceComponentRequestInvoker scCall, 
//										IRequestParameterReadWrite param, 
//										String dataMapKey,
//										HashMap<String, Object> temporaryData) throws Throwable
//	{
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		
//		// 機器提供サービスコードが変更かつSTB機器からSTB機器以外に変更した場合実行
//		if(!isTvCancelUpdateCondition(param, dataMapKey, temporaryData))
//		{
//			return true;
//		}
//		
//		// サービス契約データを取得
//		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
//		
//		// 機器提供サービス契約情報
//		CAANMsg ekk0341a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0341A010);
//
//		// ***** EKK0161C160（サービス契約内訳キャンセル）*****
//		Object[][] ekk0161c160IN = {
//				{EKK0161C160CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0161C160},
//				{EKK0161C160CBSMsg.FUNC_CODE,       ccMsg.get("func_code")},
//				{EKK0161C160CBSMsg.SVC_KEI_UCWK_NO,   ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.SVC_KEI_UCWK_NO)},
//				{EKK0161C160CBSMsg.MSKM_DTL_NO, getMskmDtlNo(param, ekk0081a010cbsMsg)},
//				{EKK0161C160CBSMsg.SVC_CANCEL_RSN_CD, "00"},
//				{EKK0161C160CBSMsg.IDO_DIV, ccMsg.get("ido_div")},
//				{EKK0161C160CBSMsg.UPD_DTM_BF, getSvcUpDtm(param)},
//			};
//			
//		// 更新処理実行
//		CAANMsg ekk0161c160Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0161c160IN);
//		
//		// 更新タイムスタンプをワーク領域にセットします。
//		setSvcUpDtm(param, ekk0161c160Msg_out.getString(EKK0161C160CBSMsg.UPD_DTM));
//	
//		return true;
//	}
	
//	/**
//	 * TVコースキャンセル更新条件判断メソッド
//	 * <br>
//	 * 機器提供サービスコードが変更かつSTB機器からSTB機器以外に変更した場合true
//	 * 
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @return boolean
//	 * @throws Throwable 
//	 */
//	@SuppressWarnings("unchecked")
//	private boolean isTvCancelUpdateCondition(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(TEMPLATE_ID_EKK0341A010);
//		String kktkSvcCd_bf = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
//		// 変更後の機器提供サービスコード
//		Map<String, Object> pcrsData = (Map<String, Object>)temporaryData.get(PCRS_MAP);
//		String kktk_svc_cd_af = getNullToStr((String)pcrsData.get("kktk_svc_cd"));
//		
//		
//		if(!kktkSvcCd_bf.equals(kktk_svc_cd_af) && isStb(ccMsg, kktkSvcCd_bf) && isStb(ccMsg, kktk_svc_cd_af))
//		{
//			return true;
//		}
//
//		return false;
//	}
	
	/**
	 * TV料金プラン更新メソッド
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean isTvPlanUpdate(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData) throws Throwable
	{
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// STB機器からSTB機器でTVのコースコードが変更された場合実行します。
		if(!isTvPlanUpdateCondition(handle, scCall, param, dataMapKey, temporaryData))
		{
			return true;
		}
		
		// サービス契約データを取得
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);

		// ***** EKK0591B003（料金プラン一覧照会）*****
		Object[][] ekk0591b003IN = {
			{EKK0591B003CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0591B003},
			{EKK0591B003CBSMsg.FUNC_CODE,        "1"},
			{EKK0591B003CBSMsg.KEY_PCRS_CD,   ccMsg.get("tv_course")}
		};
		
		CAANMsg ekk0591b003cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk0591b003IN).getCAANMsgList(EKK0591B003CBSMsg.EKK0591B003CBSMSG1LIST)[0];
		
		// 機器提供サービス契約情報
		CAANMsg ekk0341a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0341A010);
		
		// サービス契約内訳一意照会（判断で検索したデータ）
		CAANMsg ekk0161a010cbsMsg_bf = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0161A010 + "_BF");
		
		// ***** EKK0161C100（サービス契約内訳手続中料金プラン変更）*****
		Object[][] ekk0161c100IN = {
			{EKK0161C100CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0161C100},
			{EKK0161C100CBSMsg.FUNC_CODE,        ccMsg.get("func_code")},
			{EKK0161C100CBSMsg.SVC_KEI_UCWK_NO,   ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.SVC_KEI_UCWK_NO)},
			{EKK0161C100CBSMsg.MSKM_DTL_NO,   getMskmDtlNo(param, ekk0081a010cbsMsg)},
			{EKK0161C100CBSMsg.PCRS_CD,   ccMsg.get("tv_course")},
			{EKK0161C100CBSMsg.PPLAN_CD,   ekk0591b003cbsMsg.getString(EKK0591B003CBSMsg1List.PPLAN_CD)},
			{EKK0161C100CBSMsg.TK_HOSHIKI_KEI_NO,   ekk0161a010cbsMsg_bf.getString(EKK0161A010CBSMsg1List.TK_HOSHIKI_KEI_NO)},
			{EKK0161C100CBSMsg.PNLTY_HASSEI_CD,   ekk0161a010cbsMsg_bf.getString(EKK0161A010CBSMsg1List.PNLTY_HASSEI_CD)},
			{EKK0161C100CBSMsg.UPD_DTM_BF,   getSvcUpDtm(param)},
		};
		
		// 更新実行
		CAANMsg ekk0161c100cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk0161c100IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		setSvcUpDtm(param, ekk0161c100cbsMsg.getString(EKK0161C100CBSMsg.UPD_DTM));
		
		return true;
	}
	
	/**
	 * TV料金プラン更新条件判断メソッド
	 * <br>
	 * STB機器からSTB機器でTVのコースコードが変更された場合true
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean isTvPlanUpdateCondition(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(TEMPLATE_ID_EKK0341A010);
		String kktkSvcCd_bf = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
		// 変更後の機器提供サービスコード
		Map<String, Object> pcrsData = (Map<String, Object>)temporaryData.get(PCRS_MAP);
		String kktk_svc_cd_af = getNullToStr((String)pcrsData.get("kktk_svc_cd"));
		
		// 変更前のサービス契約内訳番号
		String svcKeiUcwkNo = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.SVC_KEI_UCWK_NO));
		
		// サービス契約内訳番号が設定されていない場合検索しません。
		if("".equals(svcKeiUcwkNo))
		{
			return false;
		}
			
		// 変更前TV料金コース取得
		// ***** EKK0161A010（サービス契約内訳一意照会）*****
		Object[][] ekk0161a010IN = {
			{EKK0161A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0161A010},
			{EKK0161A010CBSMsg.FUNC_CODE,        "2"},
			{EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO,   svcKeiUcwkNo},
			{EKK0161A010CBSMsg.KEY_GENE_ADD_DTM,   ""},
			{EKK0161A010CBSMsg.KEY_RSV_APLY_YMD,   ccMsg.get("unyo_ymd")},
		};
		
		CAANMsg[] ekk0161a010cbsMsg_bf = callSC(handle, scCall, param, dataMapKey, ekk0161a010IN).getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
		
		if(ekk0161a010cbsMsg_bf == null || ekk0161a010cbsMsg_bf.length == 0)
		{
			return false;
		}
		
		// サービス契約内訳一意照会(TVデータ更新前)
		temporaryData.put(TEMPLATE_ID_EKK0161A010 + "_BF", ekk0161a010cbsMsg_bf[0]);
		
		// 変更前のTVコース
		String tvCourseBf = getNullToStr(ekk0161a010cbsMsg_bf[0].getString(EKK0161A010CBSMsg1List.PCRS_CD));
		// 変更後のTVコース
		String tv_course = getNullToStr((String)ccMsg.get("tv_course"));
		
		// STB機器からSTB機器でTVのコースコードが変更された場合
		if(isStb(ccMsg, kktkSvcCd_bf) && isStb(ccMsg, kktk_svc_cd_af) && !tv_course.equals(tvCourseBf))
		{
			return true;
		}
		
		return false;
	}
	
	/**
	 * 料金コース取得メソッド
	 * 
	 * @param handle
	 * @param param
	 * @param ccMsg
	 * @return Map
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	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("func_code"));
		
		// 宅内機器型式コード
		paramMap.put("taknkiki_model_cd", ccMsg.get("taknkiki_model_cd"));
		// 機器提供種別コード
		paramMap.put("kktk_sbt_cd", ccMsg.get("kktk_sbt_cd"));
		//販売種別コード
		paramMap.put("hambai_sbt_cd", ccMsg.get("hambai_sbt"));
		// 基準日
		paramMap.put("stdardymd", ccMsg.get("unyo_ymd"));
		
		/* ++++++++++ v7.00.02 変更開始 ++++++++++ */
		// 機器提供サービスコード
		paramMap.put("kktk_svc_cd", ccMsg.get("kktk_svc_cd"));
		/* ++++++++++ v7.00.02 変更完了 ++++++++++ */
		
		Map<String, Object> jkkpcrDataMap = JKKBpCommon.getPcrsData(handle, param, paramMap);
		
		return jkkpcrDataMap;
		
	}
	
	/**
	 * 割引CCを呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean
	 * @throws Throwable 
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void execKikiUpdateWrisvc(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		String func_code = (String)ccMsg.get("func_code");
		
		// 共通領域を取得
		Map workMap = param.getMappingWorkArea();
		
		// サービス契約データを取得
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
		
		// サービス契約ステータス
		String svcKeiStat = getNullToStr(ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
		
		String mskmNo = getMskmNoSvcKei(handle, scCall, param, dataMapKey, temporaryData);
		
		// 更新前の機器提供サービスコード
		CAANMsg ekk0341a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0341A010);
		
		// 機器の変更がSTB機器からSTB機器かつTVの料金コースが変更されている場合、
		// サービス契約内訳一意照会を実行し、「サービス契約内訳手続中料金プラン変更」で更新したデータを取得
		if(isSvcKeiUcwkTetudukiPplan(param, dataMapKey, temporaryData))
		{
			
			// 変更前のサービス契約内訳番号
			String svcKeiUcwkNo = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.SVC_KEI_UCWK_NO));
			
			// サービス契約内訳一意照会を実行
			// ***** EKK0161A010（サービス契約内訳一意照会）*****
			Object[][] ekk0161a010IN = {
				{EKK0161A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0161A010},
				{EKK0161A010CBSMsg.FUNC_CODE,        "2"},
				{EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO,   svcKeiUcwkNo},
				{EKK0161A010CBSMsg.KEY_GENE_ADD_DTM, ""},
				{EKK0161A010CBSMsg.KEY_RSV_APLY_YMD, ccMsg.get("unyo_ymd")}
			};
			
			
			CAANMsg[] ekk0161a010cbsMsg1list = callSC(handle, scCall, param, dataMapKey, ekk0161a010IN)
													.getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);

			// 割引CC呼出（サービス契約内訳手続中料金プラン変更）を実行
			execSvcKeiUcwkTetudukiPplan(handle, scCall, param, dataMapKey, temporaryData, ekk0161a010cbsMsg1list[0], mskmNo);
		}

		// 機器提供サービスコードが変更かつSTB機器からSTB機器以外に変更された場合、「サービス契約内訳キャンセル」割引を実行
		//現状STB機器からSTB機器に変更できないためコメント
//		if(isTvCancelUpdateCondition(param, dataMapKey, temporaryData))
//		{
//			// 割引CC呼出（サービス契約内訳キャンセル）を実行
//			execSvcKeiUcwkCancel(handle, scCall, param, dataMapKey, temporaryData, mskmNo);
//		}

		// チェック＆登録時のみ実行します。
		if(FUNC_CODE_1.equals(func_code))
		{
		
			// 型式が変更されることが無いため、コメント
//			// 機器提供サービスコードが変更された場合、「機器提供サービス契約キャンセル」割引を実行
//			if(isKktkSvcKeiCancel(param, temporaryData))
//			{
//				// 割引CC呼出（機器提供サービス契約キャンセル）を実行
//				execKktkSvcKeiCancel(handle, scCall, param, dataMapKey, temporaryData, mskmNo);
//	
//				// 機器登録CCで登録したデータを取得
//				HashMap<String, Object> kikiCreateCCMap = (HashMap<String, Object>)param.getData(KIKI_CREATE_CC_PARAM);
//				ArrayList<Map<String, Object>> createList = (ArrayList<Map<String, Object>>)kikiCreateCCMap.get("create_list");
//		
//				HashMap<String, Object> kktkSvcKeiMap = getKktkSvcKeiData(createList, ccMsg);
//	
//				// 割引CC呼出（機器提供サービス契約情報登録）を実行
//				execKktkSvcKeiInfoToroku(handle, scCall, param, dataMapKey, kktkSvcKeiMap, mskmNo);
//	
//				// STBの場合実行
//				if(isStb(ccMsg, (String)kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_CD)))
//				{
//					// サービス契約内訳<eo光テレビ>登録
//					execSvcKeiUcwkEoTvToroku(handle, scCall, param, dataMapKey, temporaryData, mskmNo);
//				}
//			}
		}
	}
	
//	/**
//	 * サービス契約内訳<eo光TV>登録の割引CC呼び出し。
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @param mskmNo
//	 * @throws Throwable 
//	 */
//	@SuppressWarnings("unchecked")
//	private void execSvcKeiUcwkEoTvToroku(SessionHandle handle, 
//											ServiceComponentRequestInvoker scCall,
//											IRequestParameterReadWrite param,
//											String dataMapKey,
//											HashMap<String, Object> temporaryData, 
//											String mskmNo) throws Throwable
//	{
//		// 機器登録CCで登録したデータを取得
//		HashMap<String, Object> kktkSvcKeiData = (HashMap<String, Object>)param.getData(KIKI_CREATE_CC_PARAM);
//
//		ArrayList<Map<String, Object>> createUcwkList = (ArrayList<Map<String, Object>>)kktkSvcKeiData.get("svc_kei_ucwk_list");
//		
//		// サービス契約データを取得
//		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
//
//		HashMap<String, Object> createUcwkMap = (HashMap<String, Object>)createUcwkList.get(0);
//
//		param.setData(WRI_SVC_AUTO_APLY, new HashMap<String, Object>());
//
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(WRI_SVC_AUTO_APLY);
//
//		// 機能コード
//		String funcCode = (String)ccMsg.get("func_code");
//
//		String ido_div = (String)ccMsg.get("ido_div");
//
//		// ＳＹＳＩＤ
//		outMap.put("sysid", ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SYSID));
//		// 登録／変更区分
//		outMap.put("add_chge_div", "01");
//		// 申込番号
//		outMap.put("mskm_no", mskmNo);
//		// 申込種別コード
//		outMap.put("mskm_sbt_cd", "00022");
//		// 異動区分
//		outMap.put("ido_div", ido_div);
//		// 機能コード
//		outMap.put("func_code", funcCode);
//		// サービス契約グループリスト
//		ArrayList<HashMap<String, Object>> workSvcKeiArray = new ArrayList<HashMap<String, Object>>();
//		HashMap<String, Object> workSvcKeiMap = new HashMap<String, Object>();
//		// グループ区分
//		workSvcKeiMap.put("grp_div", "00");
//		// サービス契約リスト
//		ArrayList<HashMap<String, Object>> workSvcKeiList = new ArrayList<HashMap<String, Object>>();
//		HashMap<String, Object> workSvcKeiData = new HashMap<String, Object>();
//
//		// 対象契約識別コード
//		workSvcKeiData.put("tg_kei_skbt_cd", "03");
//		// サービス契約内訳番号
//		workSvcKeiData.put("svc_kei_ucwk_no", createUcwkMap.get(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_NO));
//		// サービス契約内訳ステータス
//		workSvcKeiData.put("svc_kei_ucwk_stat", createUcwkMap.get(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT));
//		// 料金コースコード
//		workSvcKeiData.put("pcrs_cd", createUcwkMap.get(EKK0161A010CBSMsg1List.PCRS_CD));
//		// 料金プランコード
//		workSvcKeiData.put("pplan_cd", createUcwkMap.get(EKK0161A010CBSMsg1List.PPLAN_CD));
//
//		workSvcKeiList.add(workSvcKeiData);
//		workSvcKeiMap.put("svc_kei_list", workSvcKeiList);
//		workSvcKeiArray.add(workSvcKeiMap);
//		outMap.put("svc_kei_grp_list", workSvcKeiArray);
//
//		JKKWrisvcAutoAplyCC wrisvcAutoAplyCC = new JKKWrisvcAutoAplyCC();
//		wrisvcAutoAplyCC.execute(handle, param, WRI_SVC_AUTO_APLY);
//
//		param.removeData(WRI_SVC_AUTO_APLY);
//	}
	
//	/**
//	 * 機器提供サービス契約登録の割引CC呼び出し。
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param kktkSvcKeiMap
//	 * @param mskmNo
//	 * @throws Throwable 
//	 */
//	@SuppressWarnings("unchecked")
//	private void execKktkSvcKeiInfoToroku(SessionHandle handle,
//												ServiceComponentRequestInvoker scCall,
//												IRequestParameterReadWrite param,
//												String dataMapKey,
//												HashMap<String, Object> kktkSvcKeiMap,
//												String mskmNo) throws Throwable
//	{
//		param.setData(WRI_SVC_AUTO_APLY, new HashMap<String, Object>());
//		
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(WRI_SVC_AUTO_APLY);
//		
//		// 機能コード
//		String funcCode = (String)ccMsg.get("func_code");
//		
//		String ido_div = (String)ccMsg.get("ido_div");
//
//		// ＳＹＳＩＤ
//		outMap.put("sysid", kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.SYSID));
//		// 登録／変更区分
//		outMap.put("add_chge_div", "01");
//		// 申込番号
//		outMap.put("mskm_no", mskmNo);
//		// 申込種別コード
//		outMap.put("mskm_sbt_cd", "00022");
//		// 異動区分
//		outMap.put("ido_div", ido_div);
//		// 機能コード
//		outMap.put("func_code", funcCode);
//
//		// サービス契約グループリスト
//		ArrayList<HashMap<String, Object>> workSvcKeiArray = new ArrayList<HashMap<String, Object>>();
//		HashMap<String, Object> workSvcKeiMap = new HashMap<String, Object>();
//		// グループ区分
//		workSvcKeiMap.put("grp_div", "00");
//		// サービス契約リスト
//		ArrayList<HashMap<String, Object>> workSvcKeiList = new ArrayList<HashMap<String, Object>>();
//		HashMap<String, Object> workSvcKeiData = new HashMap<String, Object>();
//
//		// 対象契約識別コード
//		workSvcKeiData.put("tg_kei_skbt_cd", "06");
//		// 機器提供サービス契約番号
//		workSvcKeiData.put("kktk_svc_kei_no", kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
//		// 機器提供サービス契約ステータス
//		workSvcKeiData.put("kktk_svc_kei_stat", kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT));
//		// 料金コースコード
//		workSvcKeiData.put("pcrs_cd", kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.PCRS_CD));
//		// 料金プランコード
//		workSvcKeiData.put("pplan_cd", kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.PPLAN_CD));
//		// 機器提供サービスコード
//		workSvcKeiData.put("kktk_svc_cd", kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
//		// 機器提供種別コード
//		workSvcKeiData.put("kktk_sbt_cd", kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KKTK_SBT_CD));
//		
//		workSvcKeiList.add(workSvcKeiData);
//		workSvcKeiMap.put("svc_kei_list", workSvcKeiList);
//		workSvcKeiArray.add(workSvcKeiMap);
//		outMap.put("svc_kei_grp_list", workSvcKeiArray);
//		
//		JKKWrisvcAutoAplyCC wrisvcAutoAplyCC = new JKKWrisvcAutoAplyCC();
//		wrisvcAutoAplyCC.execute(handle, param, WRI_SVC_AUTO_APLY);
//		
//		param.removeData(WRI_SVC_AUTO_APLY);
//	}
	
//	/**
//	 * 機器提供サービス契約キャンセルの割引CC呼び出し。
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @param mskmNo
//	 * @throws Throwable 
//	 */
//	@SuppressWarnings("unchecked")
//	private void execKktkSvcKeiCancel(SessionHandle handle,
//												ServiceComponentRequestInvoker scCall,
//												IRequestParameterReadWrite param,
//												String dataMapKey,
//												HashMap<String, Object> temporaryData, 
//												String mskmNo) throws Throwable
//	{
//		
//		param.setData(WRI_SVC_AUTO_APLY, new HashMap<String, Object>());
//		
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(WRI_SVC_AUTO_APLY);
//		
//		
//		CAANMsg ekk0341a010cbsMsg_bf = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0341A010);
//		
//		// 機能コード
//		String funcCode = (String)ccMsg.get("func_code");
//		
//		String ido_div = (String)ccMsg.get("ido_div");
//
//		// ＳＹＳＩＤ
//		outMap.put("sysid", ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.SYSID));
//		// 登録／変更区分
//		outMap.put("add_chge_div", "05");
//		// 申込番号
//		outMap.put("mskm_no", mskmNo);
//		// 申込種別コード
//		outMap.put("mskm_sbt_cd", "00022");
//		// 異動区分
//		outMap.put("ido_div", ido_div);
//		// 機能コード
//		outMap.put("func_code", funcCode);
//		// サービスキャンセル理由コード
//		outMap.put("svc_cancel_rsn_cd", "00");
//		// サービス契約グループリスト
//		ArrayList<HashMap<String, Object>> workSvcKeiArray = new ArrayList<HashMap<String, Object>>();
//		HashMap<String, Object> workSvcKeiMap = new HashMap<String, Object>();
//		// グループ区分
//		workSvcKeiMap.put("grp_div", "00");
//		// サービス契約リスト
//		ArrayList<HashMap<String, Object>> workSvcKeiList = new ArrayList<HashMap<String, Object>>();
//		HashMap<String, Object> workSvcKeiData = new HashMap<String, Object>();
//
//		// 対象契約識別コード
//		workSvcKeiData.put("tg_kei_skbt_cd", "06");
//		// 機器提供サービス契約番号
//		workSvcKeiData.put("kktk_svc_kei_no", ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
//		// 機器提供サービス契約ステータス
//		workSvcKeiData.put("kktk_svc_kei_stat", ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT));
//		// 料金コースコード
//		workSvcKeiData.put("pcrs_cd", ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.PCRS_CD));
//		// 料金プランコード
//		workSvcKeiData.put("pplan_cd", ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.PPLAN_CD));
//		// 機器提供サービスコード
//		workSvcKeiData.put("kktk_svc_cd", ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
//		// 機器提供種別コード
//		workSvcKeiData.put("kktk_sbt_cd", ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.KKTK_SBT_CD));
//		
//		workSvcKeiList.add(workSvcKeiData);
//		workSvcKeiMap.put("svc_kei_list", workSvcKeiList);
//		workSvcKeiArray.add(workSvcKeiMap);
//		outMap.put("svc_kei_grp_list", workSvcKeiArray);
//		
//		JKKWrisvcAutoAplyCC wrisvcAutoAplyCC = new JKKWrisvcAutoAplyCC();
//		wrisvcAutoAplyCC.execute(handle, param, WRI_SVC_AUTO_APLY);
//		
//		param.removeData(WRI_SVC_AUTO_APLY);
//	}
	
//	/**
//	 * サービス契約内訳キャンセルの割引CC呼び出し。
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @param mskmNo
//	 * @throws Throwable 
//	 */
//	@SuppressWarnings("unchecked")
//	private void execSvcKeiUcwkCancel(SessionHandle handle,
//												ServiceComponentRequestInvoker scCall,
//												IRequestParameterReadWrite param,
//												String dataMapKey,
//												HashMap<String, Object> temporaryData,
//												String mskmNo) throws Throwable
//	{
//		
//		param.setData(WRI_SVC_AUTO_APLY, new HashMap<String, Object>());
//		
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(WRI_SVC_AUTO_APLY);
//		
//		// サービス契約データを取得
//		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
//		// サービス契約内訳一意照会（更新前データ）
//		CAANMsg ekk0161a010cbsMsg_bf = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0161A010 + "_BF");
//		
//		
//		// 機能コード
//		String funcCode = (String)ccMsg.get("func_code");
//		
//		String ido_div = (String)ccMsg.get("ido_div");
//
//		// ＳＹＳＩＤ
//		outMap.put("sysid", ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SYSID));
//		// 登録／変更区分
//		outMap.put("add_chge_div", "05");
//		// 申込番号
//		outMap.put("mskm_no", mskmNo);
//		// 申込種別コード
//		outMap.put("mskm_sbt_cd", "00022");
//		// 異動区分
//		outMap.put("ido_div", ido_div);
//		// 機能コード
//		outMap.put("func_code", funcCode);
//		// サービスキャンセル理由コード
//		outMap.put("svc_cancel_rsn_cd", "00");
//		// サービス契約グループリスト
//		ArrayList<HashMap<String, Object>> workSvcKeiArray = new ArrayList<HashMap<String, Object>>();
//		HashMap<String, Object> workSvcKeiMap = new HashMap<String, Object>();
//		// グループ区分
//		workSvcKeiMap.put("grp_div", "00");
//		// サービス契約リスト
//		ArrayList<HashMap<String, Object>> workSvcKeiList = new ArrayList<HashMap<String, Object>>();
//		HashMap<String, Object> workSvcKeiData = new HashMap<String, Object>();
//
//		// 対象契約識別コード
//		workSvcKeiData.put("tg_kei_skbt_cd", "03");
//		// サービス契約内訳番号
//		workSvcKeiData.put("svc_kei_ucwk_no", ekk0161a010cbsMsg_bf.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_NO));
//		// サービス契約内訳ステータス
//		workSvcKeiData.put("svc_kei_ucwk_stat", ekk0161a010cbsMsg_bf.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT));
//		// 料金コースコード
//		workSvcKeiData.put("pcrs_cd", ekk0161a010cbsMsg_bf.getString(EKK0161A010CBSMsg1List.PCRS_CD));
//		// 料金プランコード
//		workSvcKeiData.put("pplan_cd", ekk0161a010cbsMsg_bf.getString(EKK0161A010CBSMsg1List.PPLAN_CD));
//		
//		workSvcKeiList.add(workSvcKeiData);
//		workSvcKeiMap.put("svc_kei_list", workSvcKeiList);
//		workSvcKeiArray.add(workSvcKeiMap);
//		outMap.put("svc_kei_grp_list", workSvcKeiArray);
//		
//		JKKWrisvcAutoAplyCC wrisvcAutoAplyCC = new JKKWrisvcAutoAplyCC();
//		wrisvcAutoAplyCC.execute(handle, param, WRI_SVC_AUTO_APLY);
//		
//		param.removeData(WRI_SVC_AUTO_APLY);
//	}
	
	/**
	 * サービス契約内訳手続中料金プラン変更の割引CC呼び出し。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param svcKeiUcwkMsg
	 * @param mskmNo
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void execSvcKeiUcwkTetudukiPplan(SessionHandle handle,
												ServiceComponentRequestInvoker scCall,
												IRequestParameterReadWrite param,
												String dataMapKey,
												HashMap<String, Object> temporaryData,
												CAANMsg svcKeiUcwkMsg,
												String mskmNo) throws Throwable
	{
		
		param.setData(WRI_SVC_AUTO_APLY, new HashMap<String, Object>());
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(WRI_SVC_AUTO_APLY);
		
		// サービス契約データを取得
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
		
		// 機能コード
		String funcCode = (String)ccMsg.get("func_code");
		
		String ido_div = (String)ccMsg.get("ido_div");

		// ＳＹＳＩＤ
		outMap.put("sysid", ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SYSID));
		// 登録／変更区分
		outMap.put("add_chge_div", "02");
		// 申込番号
		outMap.put("mskm_no", mskmNo);
		// 申込種別コード
		outMap.put("mskm_sbt_cd", "00022");
		// 異動区分
		outMap.put("ido_div", ido_div);
		// 機能コード
		outMap.put("func_code", funcCode);
		// サービス契約グループリスト
		ArrayList<HashMap<String, Object>> workSvcKeiArray = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> workSvcKeiMap = new HashMap<String, Object>();
		// グループ区分
		workSvcKeiMap.put("grp_div", "00");
		// サービス契約リスト
		ArrayList<HashMap<String, Object>> workSvcKeiList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> workSvcKeiData = new HashMap<String, Object>();

		// 対象契約識別コード
		workSvcKeiData.put("tg_kei_skbt_cd", "03");
		// サービス契約内訳番号
		workSvcKeiData.put("svc_kei_ucwk_no", svcKeiUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_NO));
		// サービス契約内訳ステータス
		workSvcKeiData.put("svc_kei_ucwk_stat", svcKeiUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT));
		// 料金コースコード
		workSvcKeiData.put("pcrs_cd", svcKeiUcwkMsg.getString(EKK0161A010CBSMsg1List.PCRS_CD));
		// 料金プランコード
		workSvcKeiData.put("pplan_cd", svcKeiUcwkMsg.getString(EKK0161A010CBSMsg1List.PPLAN_CD));
		
		workSvcKeiList.add(workSvcKeiData);
		workSvcKeiMap.put("svc_kei_list", workSvcKeiList);
		workSvcKeiArray.add(workSvcKeiMap);
		outMap.put("svc_kei_grp_list", workSvcKeiArray);
		
		JKKWrisvcAutoAplyCC wrisvcAutoAplyCC = new JKKWrisvcAutoAplyCC();
		wrisvcAutoAplyCC.execute(handle, param, WRI_SVC_AUTO_APLY);
		
		param.removeData(WRI_SVC_AUTO_APLY);
	}
	
	
	/**
	 * サービス契約内訳手続中料金プラン変更割引実行判断メソッド。
	 * <br>
	 * 機器の変更がSTB機器からSTB機器かつTVの料金コースが変更されているか判断する。
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean 
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean isSvcKeiUcwkTetudukiPplan(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(TEMPLATE_ID_EKK0341A010);
		String kktkSvcCd_bf = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
		// 変更後の機器提供サービスコード
		Map<String, Object> pcrsData = (Map<String, Object>)temporaryData.get(PCRS_MAP);
		String kktk_svc_cd_af = getNullToStr((String)pcrsData.get("kktk_svc_cd"));
		
		/// 変更後のTVコース
		String tv_course = getNullToStr((String)ccMsg.get("tv_course"));
		
		// サービス契約内訳一意照会（更新前データ）
		CAANMsg ekk0161a010cbsMsg_bf = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0161A010 + "_BF");
		
		if(ekk0161a010cbsMsg_bf == null)
		{
			return false;
		}
		
		
		String tvCourseBf = (String)ekk0161a010cbsMsg_bf.getString(EKK0161A010CBSMsg1List.PCRS_CD);
		
		// 機器の変更がSTB機器からSTB機器かつTVの料金コースが変更されているか判断
		if(isStb(ccMsg, kktkSvcCd_bf) && isStb(ccMsg, kktk_svc_cd_af) && !tvCourseBf.equals(tv_course))
		{
			return true;
		}
		
		return false;
	}
	
//	/**
//	 * 機器提供サービス契約キャンセル割引実行判断メソッド。
//	 * <br>
//	 * 機器提供サービスコードが変更されたか判断する。
//	 * @param param
//	 * @param temporaryData
//	 * @return boolean 
//	 * @throws Throwable 
//	 */
//	@SuppressWarnings("unchecked")
//	private boolean isKktkSvcKeiCancel(IRequestParameterReadWrite param, HashMap<String, Object> temporaryData) throws Throwable
//	{
//		// 更新前の機器提供サービスコード
//		CAANMsg ekk0341a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0341A010);
//		String kktkSvcCd_bf = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
//
//		Map<String, Object> pcrsData = (Map<String, Object>)temporaryData.get(PCRS_MAP);
//		String kktk_svc_cd_af = getNullToStr((String)pcrsData.get("kktk_svc_cd"));
//
//		// 機器提供サービスコードの判定
//		if(!kktkSvcCd_bf.equals(kktk_svc_cd_af))
//		{
//			return true;
//		}
//		return false;
//	}
	
	/**
	 * 申込番号取得メソッド
	 * <br>
	 * 
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return mskmNo
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private String getMskmNoSvcKei(SessionHandle handle,
									ServiceComponentRequestInvoker scCall,
									IRequestParameterReadWrite param,
									String dataMapKey,
									HashMap<String, Object> temporaryData) throws Throwable
	{
		
		// 作業領域の取得
		Map workMap = param.getMappingWorkArea();
		
		// サービス契約データを取得
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
		
		// サービス契約ステータス
		String svcKeiStat = getNullToStr(ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
		
		String mskmNo = "";
		
		// サービス契約ステータスが受付済の場合、サービス契約Tの申込明細番号で申込明細Tを検索します。
		if(SVC_KEI_STAT_UKZUMI.equals(svcKeiStat))
		{
			
			// サービス契約の申込明細番号
			String svcKeiMskmDtlNo = getNullToStr(ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO));
			
			// ***** EKK0021A010（申込明細一意照会）*****
			Object[][] ekk0021a010IN = {
				{EKK0021A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0021A010},
				{EKK0021A010CBSMsg.FUNC_CODE,        "2"},
				{EKK0021A010CBSMsg.KEY_MSKM_DTL_NO,   svcKeiMskmDtlNo},
				{EKK0021A010CBSMsg.KEY_GENE_ADD_DTM, ""},
			};
			
			
			CAANMsg[] ekk0021a010cbsMsg1list 
							= callSC(handle, scCall, param, dataMapKey, ekk0021a010IN).getCAANMsgList(EKK0021A010CBSMsg.EKK0021A010CBSMSG1LIST);
			if(ekk0021a010cbsMsg1list != null && ekk0021a010cbsMsg1list.length != 0)
			{
				mskmNo = ekk0021a010cbsMsg1list[0].getString(EKK0021A010CBSMsg1List.MSKM_NO);
			}
		}
		else
		{
			if(workMap != null)
			{
				mskmNo = (String)workMap.get("mskm_no");
			}
		}
		

		return mskmNo;
	}
	
//	/**
//	 * 機器提供サービス契約登録データ取得メソッド。
//	 * 
//	 * @param createList
//	 * @param ccMsg
//	 * @return HashMap
//	 */
//	private HashMap<String, Object> getKktkSvcKeiData(ArrayList<Map<String, Object>> createList, HashMap<String, Object> ccMsg)
//	{
//		HashMap<String, Object> retMap = null;
//
//		for (int i = 0; i < createList.size(); i++)
//		{
//			HashMap<String, Object> workMap = (HashMap<String, Object>)createList.get(i);
//			// STBデータがある場合、STBデータを返却します。（STBの場合、B-CAS・C-CASデータが存在する）
//			if(isStb(ccMsg, (String)workMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_CD)))
//			{
//				retMap = workMap;
//			}
//		}
//
//		// STBデータがない場合、先頭レコードを返却
//		if(retMap == null)
//		{
//			retMap = (HashMap<String, Object>)createList.get(0);
//		}
//
//		return retMap;
//	}
	
	/**
	 * STB判別メソッド。
	 * 
	 * @param ccMsg
	 * @param pKktkSvcCd
	 * @return stbの場合true STB以外の場合false
	 */
	private boolean isStb(HashMap<String, Object> ccMsg, String pKktkSvcCd)
	{
		// 業務パラメータより取得しているデータ（複数の場合「,」で連結されている）
		String[] stbKktkSvcCd = ((String)ccMsg.get("stb_kktk_svc_cd")).split(",");
		
		for(int i = 0; i < stbKktkSvcCd.length; i++)
		{
			// 機器提供サービスコードがSTBの場合
			if(stbKktkSvcCd[i].equals(pKktkSvcCd))
			{
				return true;
			}
		}
		
		return false;
	}
	
	/**
	 * 進捗登録SCを呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean
	 * @throws Throwable 
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void execShinchokuToroku(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		/* ++++++++++ v5.01.00 追加開始 ++++++++++ */
		// 特記事項文字列を取得する
		String prg_tkjk = getPrg_Stat(handle, scCall, param, dataMapKey, temporaryData);
		
		// 進捗ステータスに該当する進捗レコードが出力済みか判定する。
		if(!isExecShinchokuToroku(param, PRG_STAT_1004, prg_tkjk))
		{
			return;
		}
		/* ++++++++++ v5.01.00 追加完了 ++++++++++ */
		
		// サービス契約データを取得
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
		
		// 進捗登録SC
		// ***** EKK1091D010（進捗登録）*****
		Object[][] ekk1091d010IN = {
			{EKK1091D010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK1091D010},
			{EKK1091D010CBSMsg.FUNC_CODE,        ccMsg.get("func_code")},
			{EKK1091D010CBSMsg.MSKM_DTL_NO,   getMskmDtlNo(param, ekk0081a010cbsMsg)},
			{EKK1091D010CBSMsg.SEIKY_KEI_NO, ""},
			{EKK1091D010CBSMsg.SEIKY_WAY_NO_KOZA, ""},
			{EKK1091D010CBSMsg.SEIKY_WAY_NO_CRECARD, ""},
			{EKK1091D010CBSMsg.SVC_KEI_NO, ccMsg.get("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("ido_div")},
			
			/* ++++++++++ v4.02.00 修正開始 ++++++++++ */
//			{EKK1091D010CBSMsg.IDO_DTM,  JPCBPCommon.getSysDateTimeStamp()},
			{EKK1091D010CBSMsg.IDO_DTM,  getIdoUpDtm(param)},
			/* ++++++++++ v4.02.00 修正完了 ++++++++++ */
			/* ++++++++++ v5.01.00 修正開始 ++++++++++ */
//			{EKK1091D010CBSMsg.PRG_STAT, PRG_STAT_3302},
//			{EKK1091D010CBSMsg.PRG_MEMO, ""},
//			{EKK1091D010CBSMsg.PRG_TKJK_1, getPrg_Stat(handle, scCall, param, dataMapKey, temporaryData)},
			{EKK1091D010CBSMsg.PRG_STAT, PRG_STAT_1004},
			{EKK1091D010CBSMsg.PRG_MEMO, ""},
			{EKK1091D010CBSMsg.PRG_TKJK_1, prg_tkjk},
			/* ++++++++++ v5.01.00 修正完了 ++++++++++ */
			{EKK1091D010CBSMsg.PRG_TKJK_2, ""},
		};
		
		// 登録データを格納します。
		ArrayList<HashMap<String, Object>> inList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		
		// 異動理由コード
		inMap.put(EKK1091D010CBSMsg1List.IDO_RSN_CD, getNullToStr((String)ccMsg.get("ido_rsn_cd")));
		// 異動理由メモ
		inMap.put(EKK1091D010CBSMsg1List.IDO_RSN_MEMO, "");
		
		inList.add(inMap);
		
		callSCArray(handle, scCall, param, dataMapKey, ekk1091d010IN, "EKK1091D010CBSMsg1List", inList);
		
		/* ++++++++++ v5.01.00 追加開始 ++++++++++ */
		setShinchokuTkjk(param, PRG_STAT_1004, prg_tkjk);
		/* ++++++++++ v5.01.00 追加完了 ++++++++++ */
	}
	
	/* ++++++++++ v5.01.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.01.00 追加完了 ++++++++++ */
	
	/**
	 * 進捗登録・特記事項表示項目を編集する。
	 * <br>
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return 編集文字列
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String getPrg_Stat(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 prg_tkjk = new StringBuilder();
		
		// 変更後機器が無料ルータか判定、無料ルータなら事務手数料有無を表示する。
		if(isYusenRuter(param, dataMapKey, temporaryData))
		{
			// ルータ事務手数料の設定状態を表示する。
			prg_tkjk.append("ルータ送付手数料：").append(getUmCode(handle, scCall, param, dataMapKey, temporaryData));
		}
		
		// 変更前情報を取得する
		CAANMsg ekk0341a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0341A010);
		
		if(ekk0341a010cbsMsg == null)
		{
			return prg_tkjk.toString();
		}
		
		/* ++++++++++ v5.01.00 削除開始 ++++++++++ */
//		// 機器出荷指定日が変更されていれば設定する。
//		String syuka_sitei_ymd_bf = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.HAISO_REQ_SHITEI_YMD));
//		String syuka_sitei_ymd_af = getNullToStr((String)ccMsg.get("haiso_req_shitei_ymd"));
//		
//		// 変更確認
//		if(!syuka_sitei_ymd_af.equals(syuka_sitei_ymd_bf))
//		{
//			// 出力文字列が既に設定されている場合
//			if(prg_tkjk.length() > 0)
//			{
//				prg_tkjk.append("、"); 
//			}
//			
//			// 機器出荷指定日が変更されていればメッセージを表示
//			prg_tkjk = prg_tkjk.append("機器出荷指定日：(変更前)").append(JPCFomatString.formatDate(syuka_sitei_ymd_bf));
//		}
		/* ++++++++++ v5.01.00 削除完了 ++++++++++ */
		
		return prg_tkjk.toString();
	}
	
	/**
	 * <pre>
	 * 有線ルータ（ベーシックルーター）であるかを判別する。
	 * <br>
	 * </pre>
	 * @param opmsList OPMSリスト(ベーシックルーター判別（OPMSルーター種別コード）)
	 * @param opmsRouter OPMSルーター種別コード
	 * @return true：有線ルータである、false：無線ルータである
	 * @throws Exception 
	 */
//	private boolean isYusenRuter(String opmsList, String opmsRouter)
	@SuppressWarnings("unchecked")
	private boolean isYusenRuter(IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData) throws Exception
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		//   判定処理用のOPMSルータ種別コードリスト
		String opmsList = getNullToStr((String)ccMsg.get(IN_OPMS_ROUT_SBT_BASIC));
		//   ＯＰＭＳルータ種別コード(変更後)
		String opmsRouter_af = getNullToStr((String)ccMsg.get(IN_OPMS_ROUTER_KIND_CD));
		
		// OPMSルーター種別コードが設定されていないため、無線ルータと判断
		if ("".equals(opmsRouter_af))
		{
			return false;
		}
		
		// OPMSリストを","で分割
		String[] opmsArray = opmsList.split(",");
		
		for (int i = 0; i < opmsArray.length; i++)
		{
			if (opmsRouter_af.equals(opmsArray[i]))
			{
				// OPMSリストとOPMSルーター種別コードが一致したため、
				// 「有線ルータ」と判断
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 特記事項に設定する文字列を作成する（機器送料の有無）
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return 編集後文字列
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String getUmCode(SessionHandle handle, 
								ServiceComponentRequestInvoker scCall, 
								IRequestParameterReadWrite param, 
								String dataMapKey,
								HashMap<String, Object> temporaryData) throws Throwable
	{
		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,    CD_SBT_CD_00002},
			{EZM0171A010CBSMsg.KEY_CD_DIV,       (String)ccMsg.get("kiki_souryo_um")},
		};
		
		// サービスインターフェース実行
		CAANMsg ezm0171a010OUT = callSC(handle, scCall, param, dataMapKey, ezm0171a010IN).getCAANMsgList(EZM0171A010CBSMsg.EZM0171A010CBSMSG1LIST)[0];
		// サービスインターフェース取得結果からコード名称を取得する。
		return ezm0171a010OUT.getString(EZM0171A010CBSMsg1List.CD_DIV_NM);
	}
	
//	/**
//	 * 機器登録部品を呼び出す。
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @return boolean
//	 * @throws Throwable 
//	 * @throws Exception
//	 */
//	@SuppressWarnings("unchecked")
//	private void execKikiAddCC(SessionHandle handle, 
//									ServiceComponentRequestInvoker scCall, 
//									IRequestParameterReadWrite param, 
//									String dataMapKey,
//									HashMap<String, Object> temporaryData) throws Throwable
//	{
//		
//		param.setData(KIKI_CREATE_CC_PARAM, new HashMap<String, Object>());
//		
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(KIKI_CREATE_CC_PARAM);
//		
//		// 共通情報のマッピング
//		outMap.put("func_code", ccMsg.get("func_code"));
//		// サービス契約番号
//		outMap.put("svc_kei_no", ccMsg.get("svc_kei_no"));
//		// 異動区分
//		outMap.put("ido_div", ccMsg.get("ido_div"));
//		// 基準日
//		outMap.put("stdardymd", ccMsg.get("unyo_ymd"));
//		// 工事案件番号
//		outMap.put("kojiak_no", ccMsg.get("kojiak_no"));
//		// 機器登録データ格納Mapキー
//		outMap.put(KOJI_RENKEI_MAP_KEY, KIKI_CREATE_LIST);
//		// 更新年月日時分秒（サービス契約）
//		outMap.put("upd_dtm_svc_kei", getSvcUpDtm(param));
//		// 一覧インデックス
//		outMap.put("ichiranIndex", ccMsg.get("ichiranIndex"));
//		
//		ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
//
//		HashMap<String, Object> childMap = new HashMap();
//		// 機器提供種別コードを取得
//		childMap.put("kktk_sbt_cd", ccMsg.get("kktk_sbt_cd"));
//		// 配送区分コード
//		childMap.put("haiso_div", ccMsg.get("haiso_div_cd"));
//		// 配送方法区分コード
//		childMap.put("haiso_way_cd", ccMsg.get("haiso_way_cd"));
//		// 機器製造番号
//		childMap.put("kiki_seizo_no", ccMsg.get("kk_seizo_no"));
//		// 送付先名
//		childMap.put("kiki_sohus_nm", ccMsg.get("kiki_sofu_shs_nm"));
//		// 送付先名カナ
//		childMap.put("kiki_sohus_kana", ccMsg.get("kiki_sofu_shs_kana"));
//		// 住所コード
//		childMap.put("kiki_sohus_ad_cd", ccMsg.get("kiki_sofu_ad_cd"));
//		// 郵便番号
//		childMap.put("kiki_sohus_pcd", ccMsg.get("kiki_sofu_pcd"));
//		// 都道府県
//		childMap.put("kiki_sohus_state_nm", ccMsg.get("kiki_sofu_state"));
//		// 市区町村
//		childMap.put("kiki_sohus_city_nm", ccMsg.get("kiki_sofu_city"));
//		// 大字通称
//		childMap.put("kiki_sohus_oaztsu_nm", ccMsg.get("kiki_sofu_oaztsu"));
//		// 字丁目
//		childMap.put("kiki_sohus_azcho_nm", ccMsg.get("kiki_sofu_azcho"));
//		// 番地・号
//		childMap.put("kiki_sohus_bnchigo", ccMsg.get("kiki_sofu_bnchigo"));
//		// 建物名
//		childMap.put("kiki_sohus_adrttm", ccMsg.get("kiki_sofu_adrttm"));
//		// 部屋番号
//		childMap.put("kiki_sohus_adrrm", ccMsg.get("kiki_sofu_adrrm"));
//		// 電話番号
//		childMap.put("kiki_sohus_telno", ccMsg.get("kiki_sofu_telno"));
//		// 持込機器ＭＡＣ
//		childMap.put("macad", ccMsg.get("mac_ad"));
////		// 機器提供開始年月日
////		childMap.put("kktk_sta_ymd", ccMsg.get("aa"));
//		// 機器型式コードを取得
//		childMap.put("taknkiki_model_cd", ccMsg.get("taknkiki_model_cd"));
//		// 倉庫名
//		childMap.put("soko_cd", ccMsg.get("soko_info"));
//		// 機器送料有無
//		childMap.put("kiki_soryo_um", ccMsg.get("kiki_souryo_um"));
//		// 付加情報
//		childMap.put("kiki_huka_info_cd", ccMsg.get("huka_info"));
//		// ＴＶコース
//		childMap.put("tv_pcrs_cd", ccMsg.get("tv_course"));
//		// 販売種別コードを取得
//		childMap.put("hambai_sbt_cd", ccMsg.get("hambai_sbt"));
//		// 配送依頼指定年月日
//		childMap.put("haiso_req_shitei_ymd", ccMsg.get("haiso_req_shitei_ymd"));
//		
//		list.add(childMap);
//
//		outMap.put("kiki_list", list);
//
//		JKKKikiAddCC jKkkikiAddCC = new JKKKikiAddCC();
//		jKkkikiAddCC.addKikiInfo(handle, param, KIKI_CREATE_CC_PARAM);
//		
//	}
	
	/**
	 * サーバーチェック部品を呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean
	 * @throws Throwable 
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private boolean isKikiInfoServerChkCC(SessionHandle handle, 
											ServiceComponentRequestInvoker scCall, 
											IRequestParameterReadWrite param, 
											String dataMapKey,
											HashMap<String, Object> temporaryData) throws Throwable
	{
		
		// サービス契約データを取得
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
		
		// 機器提供サービス契約情報データを取得
		CAANMsg ekk0341a010cbsMsg_bf = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0341A010);
		
		
		// 機器提供サービス契約情報サーバーチェックCC実行処理
		String workJKKKikiInfoServerChkCC = "JKKKikiInfoServerChkCC";
		param.setData(workJKKKikiInfoServerChkCC, new HashMap<String, Object>());
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(workJKKKikiInfoServerChkCC);
		
		// 倉庫コード、棚コードを取得
		HashMap<String, String> mapSoko = getSokoAndSelf(ekk0341a010cbsMsg_bf);
		
		// 機能コード
		outMap.put("func_code", ccMsg.get("func_code"));
		//チェック画面ＩＤ
		outMap.put("check_scrn_id", ccMsg.get("check_scrn_id"));
		//サービス契約番号
		outMap.put("svc_kei_no", ccMsg.get("svc_kei_no"));
		//サービス契約データ
		outMap.put("svc_kei_data", ekk0081a010cbsMsg);
		//宅内機器型式コード
		outMap.put("taknkiki_model_cd", ccMsg.get("taknkiki_model_cd"));
		//基準日
		outMap.put("std_ymd", ccMsg.get("unyo_ymd"));
		//配送ステータス
		outMap.put("haiso_stat", ccMsg.get("haiso_stat"));
		//配送区分コード
		outMap.put("haiso_div_cd", ccMsg.get("haiso_div_cd"));
		// 配送方法区分コード
		outMap.put("haiso_way_cd", ccMsg.get("haiso_way_cd"));
		//販売種別
		outMap.put("hambai_sbt", ccMsg.get("hambai_sbt"));
		//宅内機器型式コード（前）
		outMap.put("tk_mdl_cd_bf", getNullToStr(ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD)));
		//機器製造番号
		outMap.put("kk_seizo_no", ccMsg.get("kk_seizo_no"));
		//機器製造番号（前）
		outMap.put("kk_seizo_no_bf", getNullToStr(ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO)));
		//ＳＴＢ機器提供サービスコード
		outMap.put("stb_kktk_svc_cd", ccMsg.get("stb_kktk_svc_cd"));
		//ＢＣＡＳ機器提供サービスコード
		outMap.put("bcas_kktk_svc_cd", ccMsg.get("bcas_kktk_svc_cd"));
		//ＣＣＡＳ機器提供サービスコード
		outMap.put("ccas_kktk_svc_cd", ccMsg.get("ccas_kktk_svc_cd"));
		//管理場所コード（前）
		outMap.put("key_knri_plc_cd_bf", mapSoko.get(TMP_KIKI_HKAT_SHITEI_SOKO_CD));
		//管理場所棚コード（前）
		outMap.put("knri_plc_slf_cd_bf", mapSoko.get(TMP_KIKI_HKAT_SHITEI_SKDN_CD));
		//管理場所コード
		outMap.put("key_knri_plc_cd", ccMsg.get("soko_info"));
		
		// 管理場所識別コード（前）
		outMap.put("kriplace_skcd_bf", ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.KIKI_STI_JI_KRIPLACE_SKCD));
		// 管理場所識別コード
		outMap.put("kriplace_skcd", ccMsg.get("kriplace_skcd"));
		
		//MACアドレス
		outMap.put("mac_ad", ccMsg.get("mac_ad"));
		//世代登録年月日時分秒（機器提供サービス契約）
		outMap.put("kktk_gene_add_dtm", "");
		//工事案件番号
		outMap.put("kojiak_no", ccMsg.get("kojiak_no"));
		//ＩＤ登録書有無
		outMap.put("id_tourokusho_um", ccMsg.get("id_tourokusho_um"));
		//宅内機器種別コード
		outMap.put("tk_sbt_cd", ccMsg.get("tk_sbt_cd"));
		//宅内機器種別コード（前）
		outMap.put("tk_sbt_cd_bf", getNullToStr(ekk0341a010cbsMsg_bf.getString(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD)));
		//ＣＣＡＳ宅内機器種別コード
		outMap.put("tk_sbt_cd_ccas", ccMsg.get("tk_sbt_cd_ccas"));
		//ＢＣＡＳ宅内機器種別コード
		outMap.put("tk_sbt_cd_bcas", ccMsg.get("tk_sbt_cd_bcas"));
		//ＳＴＢ宅内機器種別コード
		outMap.put("tk_sbt_cd_stb", ccMsg.get("tk_sbt_cd_stb"));
		//機器提供種別コード
		outMap.put("kktk_sbt_cd", ccMsg.get("kktk_sbt_cd"));
		//配送作成済フラグ
		outMap.put("haiso_saksei_zumi_flg", ccMsg.get("haiso_saksei_zumi_flg"));
		//サービス契約ステータス
		outMap.put("svc_kei_stat", getNullToStr(ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT)));
		
		/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
		//宅内機器種別コード
		outMap.put("taknkiki_sbt_cd", ccMsg.get("tk_sbt_cd"));
		outMap.put("ruta_kino_cd", ccMsg.get("ruta_kino_cd"));
		/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
		
		JKKKikiInfoServerChkCC jkkKikiInfoServerChkCC = new JKKKikiInfoServerChkCC();
		jkkKikiInfoServerChkCC.checkKktkSvcInfo(handle, param, workJKKKikiInfoServerChkCC);
		
		// チェック結果取得
		outMap = (HashMap<String, Object>)param.getData(workJKKKikiInfoServerChkCC);
		
		/* ++++++++++ v5.00.01 変更開始 ++++++++++ */
		// UQの製造番号を取得します。（Macアドレスが設定されている場合のみ返却される）
		String uqKikiSeizoNo = getUqKikiSeizoNo(outMap);
		ccMsg.put(UQ_KK_SEIZO_NO, uqKikiSeizoNo);
		/* ++++++++++ v5.00.01 変更完了 ++++++++++ */
		
		String err_flg = (String)outMap.get("err_flg");
		
		// チェック結果を格納します。
		ccMsg.put("err_flg", outMap.get("err_flg"));
		ccMsg.put("message_list", outMap.get("message_list"));
		
		param.removeData(workJKKKikiInfoServerChkCC);
		
		// エラーの場合処理終了
		if(ERR_FLG_ERR.equals(err_flg))
		{
			return false;
		}
		
		return true;
	}
	
// ANK-2979-00-00 ADD START
	/**
	 * 料金プランとルータ機器の整合性チェックを呼び出す
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return boolean
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private boolean execCheckRouterSpeed(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData) throws Throwable
	{
		
		// サービス契約データを取得
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
		
		// 機器提供サービス契約情報サーバーチェックCC実行処理
		String workJKKKikiInfoServerChkCC = "JKKKikiInfoServerChkCC";
		param.setData(workJKKKikiInfoServerChkCC, new HashMap<String, Object>());
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(workJKKKikiInfoServerChkCC);
		
		// 機能コード
		outMap.put("func_code", ccMsg.get("func_code"));
		//チェック画面ＩＤ
		outMap.put("check_scrn_id", ccMsg.get("check_scrn_id"));
		//サービス契約番号
		outMap.put("svc_kei_no", ccMsg.get("svc_kei_no"));
		//サービス契約データ
		outMap.put("svc_kei_data", ekk0081a010cbsMsg);
		//宅内機器型式コード
		outMap.put("taknkiki_model_cd", ccMsg.get("taknkiki_model_cd"));
		//基準日
		outMap.put("std_ymd", ccMsg.get("unyo_ymd"));
		
		JKKKikiInfoServerChkCC jkkKikiInfoServerChkCC = new JKKKikiInfoServerChkCC();
		jkkKikiInfoServerChkCC.checkRouterSpeed(handle, param, workJKKKikiInfoServerChkCC);
		
		// チェック結果取得
		outMap = (HashMap<String, Object>)param.getData(workJKKKikiInfoServerChkCC);
		
		String err_flg = (String)outMap.get("err_flg");
		
		// チェック結果を格納します。
		ccMsg.put("err_flg", outMap.get("err_flg"));
		ccMsg.put("message_list", outMap.get("message_list"));
		
		param.removeData(workJKKKikiInfoServerChkCC);
		
		// エラーの場合処理終了
		if(ERR_FLG_ERR.equals(err_flg))
		{
			return false;
		}
		
		return true;
	}
// ANK-2979-00-00 ADD END
	
	/**
	 * 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
	 */
	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 ((key).startsWith("key_"))
//				{
					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;
	}
	
	/**
	 * 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);
		int 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))
		{
			/* ++++++++++ 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
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
												Object[][] mappingData) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		String svcIf = (String)mappingData[0][1];
		
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));

		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if ("".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++)
		{
			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"));
				}
			}
		}
		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;
	}
	
//	/**
//	 * 業務パラメータを取得。
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param keyword
//	 * @return String
//	 * @throws Exception
//	 */
//	private String getBuisinessParameter(SessionHandle handle, 
//										ServiceComponentRequestInvoker scCall, 
//										IRequestParameterReadWrite param,
//										String dataMapKey,
//										String keyword) throws Exception 
//	{
//		// ***** EZM0321A010（業務パラメータ管理一意照会）*****
//		Object[][] ezm0321a010IN = {
//			{EZM0321A010CBSMsg.TEMPLATEID,        TEMPLATE_ID_EZM0321A010},
//			{EZM0321A010CBSMsg.FUNC_CODE,         "1"},
//			{EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, keyword}
//		};
//		
//		CAANMsg[] ezm0321a010cbsMsg1list 
//						= callSC(handle, scCall, param, dataMapKey, ezm0321a010IN).getCAANMsgList(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
//		
//		return ezm0321a010cbsMsg1list[0].getString(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
//	}
	
	/**
	 * 機器一覧一括登録ＣＣのチェック処理用サービスインターフェイス作成。<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> ccMsg = (HashMap<String, Object>)param.getData(fixedText);
		
		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));
//		
//		// ***** EKK0081A010（サービス契約一意照会）*****
//		Object[][] ekk0081a010IN = {
//			{EKK0081A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0081A010},
//			{EKK0081A010CBSMsg.FUNC_CODE,        "2"},
//			{EKK0081A010CBSMsg.KEY_SVC_KEI_NO,   (String)ccMsg.get("key_svc_kei_no")},
//			{EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, ""},
//			{EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)},
//		};
//		templates.add(((CAANMsg[])editInMsg(param, ekk0081a010IN).get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
//		
//		List<HashMap<String, Object>> kikichgList = (List<HashMap<String, Object>>)ccMsg.get("chg_kiki_list");
//		
//		// 変更対象機器の件数分繰り返す
//		for (int i = 0; i < kikichgList.size(); i++)
//		{
//			HashMap<String, Object> kikiChgMap = (HashMap<String, Object>)kikichgList.get(i);
//			HashMap<String, Object> tempKikiMap = new HashMap<String, Object>();
//			
//			initializeTempListData(kikiChgMap, tempKikiMap);
//			
//			// ***** EKK0341A010（機器提供サービス契約一意照会）*****
//			Object[][] ekk0341a010IN = {
//				{EKK0341A010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0341A010},
//				{EKK0341A010CBSMsg.FUNC_CODE,           "2"},
//				{EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, kikiChgMap.get("kktk_svc_kei_no")},
//				{EKK0341A010CBSMsg.KEY_GENE_ADD_DTM,    kikiChgMap.get("kktk_gene_add_dtm")},
//				{EKK0341A010CBSMsg.KEY_RSV_APLY_YMD,    ""},
//			};
//			templates.add(((CAANMsg[])editInMsg(param, ekk0341a010IN).get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
//			
//			// ***** EKK0341C231（機器提供サービス契約情報変更（契約変更中））*****
//			Object[][] ekk0341c231IN = {
//				{EKK0341C231CBSMsg.TEMPLATEID,               TEMPLATE_ID_EKK0341C231},
//				{EKK0341C231CBSMsg.FUNC_CODE,                ccMsg.get("func_code")},
//				{EKK0341C231CBSMsg.KKTK_SVC_KEI_NO,          kikiChgMap.get("kktk_svc_kei_no")},
//				{EKK0341C231CBSMsg.GENE_ADD_DTM,             kikiChgMap.get("kktk_gene_add_dtm")},
//				{EKK0341C231CBSMsg.KKTK_SBT_CD,              tempKikiMap.get("機器提供種別コード")},
//				{EKK0341C231CBSMsg.HAMBAI_SBT_CD,            tempKikiMap.get("販売種別コード")},
//				{EKK0341C231CBSMsg.TAKNKIKI_MODEL_CD,        kikiChgMap.get("taknkiki_model_cd")},
//				{EKK0341C231CBSMsg.KIKI_SEIZO_NO,            kikiChgMap.get("kiki_seizo_no")},
//				{EKK0341C231CBSMsg.HDD_CAPA_CD,              tempKikiMap.get("ＨＤＤ容量コード")},
//				{EKK0341C231CBSMsg.TSUSHIN_KIKI_SET_CD,      ""},
//				{EKK0341C231CBSMsg.LINK_STB_FLG,             ""},
//				{EKK0341C231CBSMsg.KIKI_HKAT_SHITEI_SOKO_CD, tempKikiMap.get("機器引当指定倉庫コード")},
//				{EKK0341C231CBSMsg.KIKI_HKAT_SHITEI_SKDN_CD, tempKikiMap.get("機器引当指定倉庫棚コード")},
//				{EKK0341C231CBSMsg.KIKI_SORYO_UM,            kikiChgMap.get("kiki_soryo_um")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_NM,            tempKikiMap.get("機器送付先名")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_KANA,          tempKikiMap.get("機器送付先カナ名")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_AD_CD,         tempKikiMap.get("機器送付先住所コード")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_PCD,           tempKikiMap.get("機器送付先郵便番号")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_STATE_NM,      tempKikiMap.get("機器送付先都道府県名")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_CITY_NM,       tempKikiMap.get("機器送付先市区町村名")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_OAZTSU_NM,     tempKikiMap.get("機器送付先大字通称名")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_AZCHO_NM,      tempKikiMap.get("機器送付先字丁目名")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_BNCHIGO,       tempKikiMap.get("機器送付先番地号")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_ADRTTM,        tempKikiMap.get("機器送付先住所補記・建物名")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_ADRRM,         tempKikiMap.get("機器送付先住所補記・部屋番号")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_TELNO,         tempKikiMap.get("機器送付先電話番号")},
//				{EKK0341C231CBSMsg.KIKI_SOHUS_KSH_AD_SAI_FLG, ""},
//				{EKK0341C231CBSMsg.KIKI_SHS_KBT_SHITEI_FLG,  tempKikiMap.get("機器送付先個別指定フラグ")},
//				{EKK0341C231CBSMsg.AD_MI_FIX_FLG,            tempKikiMap.get("住所未確定フラグ")},
//				{EKK0341C231CBSMsg.HAISO_DIV,                tempKikiMap.get("配送区分")},
//				{EKK0341C231CBSMsg.FTRIAL_KANYU_YMD,         ""},
//				{EKK0341C231CBSMsg.FTRIAL_PRD_ENDYMD,        ""},
//				{EKK0341C231CBSMsg.HONKANYU_YMD,             ""},
//				{EKK0341C231CBSMsg.HONKANYU_IKO_KIGEN_YMD,   ""},
//				{EKK0341C231CBSMsg.HOSHO_CD,                 ""},
//				{EKK0341C231CBSMsg.PNLTY_HASSEI_CD,          ""},
//				{EKK0341C231CBSMsg.IDO_DIV,                  ccMsg.get("ido_div")},
//				{EKK0341C231CBSMsg.CAS_CARD_USE_KYODAK_YMD,  ""},
//				{EKK0341C231CBSMsg.KIKI_HUKA_INFO_CD,        tempKikiMap.get("機器付加情報コード")},
//				{EKK0341C231CBSMsg.HAISO_WAY_CD,             tempKikiMap.get("配送方法コード")},
//				{EKK0341C231CBSMsg.UPD_DTM_BF,               ccMsg.get("upd_dtm")}
//			};
//			templates.add(((CAANMsg[])editInMsg(param, ekk0341c231IN).get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
//		}
//		// チェック用サービスインターフェイス
//		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;
	}

	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		if (str == null || "".equals(str.trim()))
		{
			return "";
		}
		return str.trim();
	}
	
	/**
	 * メッセージIDを設定します。
	 * @param ccMsg パラメータMap
	 * @param pMessageId メッセージID
	 * @param pReplaceCha 置換文字列
	 * @param pErrItem エラー設定項目
	 * @param pErrFlg エラーフラグ
	 */
	private void setMessageInfo(HashMap<String, Object> ccMsg, String pMessageId, String pReplaceCha, String pErrItem, String pErrFlg)
	{

		// エラーフラグの設定
		// エラーの場合はそのまま設定。　ワーニングの場合はエラーが設定されていない場合、設定
		String errFlg = (String)ccMsg.get("err_flg");

		if("".equals(errFlg) || ERR_FLG_WARNING.equals(errFlg))
		{
			ccMsg.put("err_flg", pErrFlg);
		}

		HashMap<String, Object> messageMap = new HashMap<String, Object>();
		// メッセージIDを設定
		messageMap.put("messageId", pMessageId);
		// 置換文字列
		messageMap.put("replaceCha", pReplaceCha);
		// エラー設定項目
		messageMap.put("errItem", pErrItem);

		ArrayList<HashMap<String, Object>> messageInfo = (ArrayList<HashMap<String, Object>>)ccMsg.get("message_list");
		messageInfo.add(messageMap);

	}
	
	/**
	 *<DL>
	 *<DT>処理概要:機器送付先個別指定フラグ取得部品
	 *</DL>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param dataMapKey
	 * @param temporaryData
	 * @return 住所が違う場合：1 変更されていない場合：0
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private String getKikiShsKbtShiteiFlg(IRequestParameterReadOnly param, String dataMapKey, HashMap<String, Object> temporaryData) throws Exception
	{
		// サービス契約回線内訳一覧照会（現在利用中）
		CAANMsg ekk0251b003Msg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0251B003);
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// サービス契約回線内訳一覧照会（現在利用中）から取得したデータ
		String kaisen_place_ad_cd = getNullToStr((String)ekk0251b003Msg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_AD_CD));
		String kaisen_place_pcd = getNullToStr((String)ekk0251b003Msg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_PCD));
		String kaisen_place_state_nm = getNullToStr((String)ekk0251b003Msg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_STATE_NM));
		String kaisen_place_city_nm = getNullToStr((String)ekk0251b003Msg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_CITY_NM));
		String kaisen_place_oaztsu_nm = getNullToStr((String)ekk0251b003Msg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_OAZTSU_NM));
		String kaisen_place_azcho_nm = getNullToStr((String)ekk0251b003Msg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_AZCHO_NM));
		String kaisen_place_bnchigo = getNullToStr((String)ekk0251b003Msg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_BNCHIGO));
		String kaisen_place_adrttm = getNullToStr((String)ekk0251b003Msg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_ADRTTM));
		String kaisen_place_adrrm = getNullToStr((String)ekk0251b003Msg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_ADRRM));
		String kaisen_place_telno = getNullToStr((String)ekk0251b003Msg.getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_TELNO));
		
		// 画面データ
		String kiki_sofu_ad_cd = getNullToStr((String)ccMsg.get("kiki_sofu_ad_cd"));
		String kiki_sofu_pcd = getNullToStr((String)ccMsg.get("kiki_sofu_pcd"));
		String kiki_sofu_state = getNullToStr((String)ccMsg.get("kiki_sofu_state"));
		String kiki_sofu_city = getNullToStr((String)ccMsg.get("kiki_sofu_city"));
		String kiki_sofu_oaztsu = getNullToStr((String)ccMsg.get("kiki_sofu_oaztsu"));
		String kiki_sofu_azcho = getNullToStr((String)ccMsg.get("kiki_sofu_azcho"));
		String kiki_sofu_bnchigo = getNullToStr((String)ccMsg.get("kiki_sofu_bnchigo"));
		String kiki_sofu_adrttm = getNullToStr((String)ccMsg.get("kiki_sofu_adrttm"));
		String kiki_sofu_adrrm = getNullToStr((String)ccMsg.get("kiki_sofu_adrrm"));
		String kiki_sofu_telno = getNullToStr((String)ccMsg.get("kiki_sofu_telno"));
		
		if(!kaisen_place_ad_cd.equals(kiki_sofu_ad_cd))
		{
			return "1";
		}
		if(!kaisen_place_pcd.equals(kiki_sofu_pcd))
		{
			return "1";
		}
		if(!kaisen_place_state_nm.equals(kiki_sofu_state))
		{
			return "1";
		}
		if(!kaisen_place_city_nm.equals(kiki_sofu_city))
		{
			return "1";
		}
		if(!kaisen_place_oaztsu_nm.equals(kiki_sofu_oaztsu))
		{
			return "1";
		}
		if(!kaisen_place_azcho_nm.equals(kiki_sofu_azcho))
		{
			return "1";
		}
		if(!kaisen_place_bnchigo.equals(kiki_sofu_bnchigo))
		{
			return "1";
		}
		if(!kaisen_place_adrttm.equals(kiki_sofu_adrttm))
		{
			return "1";
		}
		if(!kaisen_place_adrrm.equals(kiki_sofu_adrrm))
		{
			return "1";
		}
		if(!kaisen_place_telno.equals(kiki_sofu_telno))
		{
			return "1";
		}
		
		
		return "0";
		
	}
	
	/**
	 * サービス契約の更新タイムスタンプを格納します。
	 * @param param リクエストパラメータ
	 * @param inMap
	 * @throws Exception 
	 */
	private void setInitSvcUpdate(IRequestParameterReadWrite param, Map<String, Object> inMap) throws Exception
	{
		
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		String updDtm = "";
		
		if(workMap != null && workMap.containsKey(KK_COM_SVC_UP_DTM))
		{
			updDtm = (String)workMap.get(KK_COM_SVC_UP_DTM);
		}
		else
		{
			updDtm = (String)inMap.get("upd_dtm_svc_kei");
		}
		
		
		workMap.put(KK_COM_SVC_UP_DTM, updDtm);
		
	}
	
	/**
	 * サービス契約の更新タイムスタンプを取得します。
	 * @param param リクエストパラメータ
	 * @return UpDtm 更新時間
	 * @throws Exception 
	 */
	private String getSvcUpDtm(IRequestParameterReadWrite param) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		return (String)workMap.get(KK_COM_SVC_UP_DTM);

	}
	
	/**
	 * サービス契約の更新タイムスタンプを取得します。
	 * @param param リクエストパラメータ
	 * @param updDtm 更新時間
	 * @throws Exception 
	 */
	private void setSvcUpDtm(IRequestParameterReadWrite param, String updDtm) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		if(updDtm != null && !"".equals(updDtm))
		{
			workMap.put(KK_COM_SVC_UP_DTM, updDtm);
		}
	}
	
	/* ++++++++++ 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 ekk0081a010cbsMsg
	 * @return 申込明細番号
	 * @throws Exception 
	 */
	private String getMskmDtlNo(IRequestParameterReadWrite param, CAANMsg ekk0081a010cbsMsg) throws Exception
	{

		Map<Object, Object> workMap = param.getMappingWorkArea();
		String mskmDtlNo = getNullToStr((String)workMap.get("mskm_dtl_no"));
		
		if("".equals(mskmDtlNo))
		{
			mskmDtlNo = getNullToStr((String)ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO));
		}

		return mskmDtlNo;
	}
	
//	/**
//	 * 返却値設定メソッド（機器提供サービスコード変更された再作成された場合）
//	 * @param param
//	 * @param dataMapKey
//	 * @throws Exception 
//	 */
//	@SuppressWarnings("unchecked")
//	private void setReturnDataCreate(IRequestParameterReadWrite param, String dataMapKey) throws Exception
//	{
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		
//		HashMap<String, Object> kikiCreateCCMap = (HashMap<String, Object>)param.getData(KIKI_CREATE_CC_PARAM);
//		ArrayList<HashMap<String, Object>> kiki_list = (ArrayList<HashMap<String, Object>>)kikiCreateCCMap.get("kiki_list");
//		
//		// 1件のみ設定のため0番目を取得。
//		HashMap<String, Object> childMap = kiki_list.get(0);
//		
//		
//		ccMsg.put("soko_tana_cd", getNullToStr((String)childMap.get("soko_tana_cd")));
//		ccMsg.put("soko_tana_nm", getNullToStr((String)childMap.get("soko_tana_nm")));
//		
//	}
	
	/**
	 * 返却値設定メソッド（更新処理の場合）
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private void setReturnDataUpdate(IRequestParameterReadWrite param, 
											String dataMapKey,
											HashMap<String, Object> temporaryData) throws Exception
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		CAANMsg edk0451a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EDK0451A010);
		
		if(edk0451a010cbsMsg != null)
		{
			ccMsg.put("soko_tana_cd", getNullToStr((String)edk0451a010cbsMsg.getString(EDK0451A010CBSMsg1List.SHELF_CD)));
			ccMsg.put("soko_tana_nm", getNullToStr((String)edk0451a010cbsMsg.getString(EDK0451A010CBSMsg1List.SHELF_NM)));
		}
		else
		{
			ccMsg.put("soko_tana_cd", "");
			ccMsg.put("soko_tana_nm", "");
		}
		
	}
	
	/**
	 * 返却値設定メソッド
	 * 
	 * @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);
		
		Map<String, Object> pcrsData = (Map<String, Object>)temporaryData.get(PCRS_MAP);
		// 検索結果を格納（料金コース判別取得部品）
		
		/* ++++++++++ v7.00.03 変更開始 ++++++++++ */
		// 機器提供サービコード
//		ccMsg.put("kktk_svc_cd", getNullToStr((String)pcrsData.get("kktk_svc_cd")));
//		// 機器提供サービスコード名
//		ccMsg.put("kktk_svc_nm", getNullToStr((String)pcrsData.get("kktk_svc_nm")));
		
		if(!"".equals(getNullToStr((String)pcrsData.get("kktk_svc_cd"))))
		{
			// 機器提供サービコード
			ccMsg.put("kktk_svc_cd", getNullToStr((String)pcrsData.get("kktk_svc_cd")));
		}
		
		if(!"".equals(getNullToStr((String)pcrsData.get("kktk_svc_nm"))))
		{
			// 機器提供サービスコード名
			ccMsg.put("kktk_svc_nm", getNullToStr((String)pcrsData.get("kktk_svc_nm")));
		}
		
		
		/* ++++++++++ v7.00.03 変更終了 ++++++++++ */
		
		/* ++++++++++ v7.00.02 変更開始 ++++++++++ */
//		// 宅内機器型式名
//		ccMsg.put("taknkiki_model_nm", getTknKikiKataNm(handle, scCall, param, dataMapKey));
		String tknKikiModelCd = getNullToStr((String)ccMsg.get("taknkiki_model_cd"));
		if(!"".equals(tknKikiModelCd))
		{
			// 宅内機器型式名
			ccMsg.put("taknkiki_model_nm", getTknKikiKataNm(handle, scCall, param, dataMapKey));
		}
		/* ++++++++++ v7.00.02 変更完了 ++++++++++ */
		
	}
	
	/**
	 * 宅内機器型式取得メソッド
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return String
	 * @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("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 temporaryData
	 * @return IRequestParameterReadWrite
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void setKikiIchiranIkkatsuList(SessionHandle handle, 
											ServiceComponentRequestInvoker scCall, 
											IRequestParameterReadWrite param, 
											String dataMapKey,
											HashMap<String, Object> temporaryData) throws Exception
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		String ichiranIndex = getNullToStr((String)ccMsg.get("ichiranIndex"));
		
		if("".equals(ichiranIndex))
		{
			return;
		}
		
		// 機器提供サービス契約情報を取得
		// ***** EKK0341A010（機器提供サービス契約一意照会）*****
		Object[][] ekk0341a010IN = {
			{EKK0341A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0341A010},
			{EKK0341A010CBSMsg.FUNC_CODE,        "2"},
			{EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO,   ccMsg.get("kktk_svc_kei_no")},
			{EKK0341A010CBSMsg.KEY_GENE_ADD_DTM, ""},
			{EKK0341A010CBSMsg.KEY_RSV_APLY_YMD, ccMsg.get("unyo_ymd")},
		};
		
		CAANMsg ekk0341a010cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk0341a010IN).getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST)[0];
		
		int index = Integer.parseInt(ichiranIndex);
		
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		// ワーク領域より処理一覧を取得
		ArrayList<HashMap<String, Object>> ichiranShoriList = (ArrayList<HashMap<String, Object>>)workMap.get(SHORI_LIST_ICHIRAN);
		
		// 一覧処理マップ(格納するIndexのMapを取り出します。)
		HashMap<String, Object> ichiranShoriMap = ichiranShoriList.get(index);
		
		ArrayList<CAANMsg> shoriListKiki_af = null;
		
		// 更新後データが格納されている場合、リストを取得して格納（B-CAS,C-CASなど）
		if(ichiranShoriMap.containsKey(SHORI_LIST_KIKILIST_AF))
		{
			shoriListKiki_af = (ArrayList<CAANMsg>)ichiranShoriMap.get(SHORI_LIST_KIKILIST_AF);
			
			shoriListKiki_af.add(ekk0341a010cbsMsg);
		}
		else
		{
			shoriListKiki_af = new ArrayList<CAANMsg>();
			
			shoriListKiki_af.add(ekk0341a010cbsMsg);
			
			ichiranShoriMap.put(SHORI_LIST_KIKILIST_AF, shoriListKiki_af);
		}
		
	}
	
	/* ++++++++++ v4.04.01 変更開始 ++++++++++ */
	/**
	 * 製造番号取得メソッド
	 * @return String
	 */
	private String getUqKikiSeizoNo(HashMap<String, Object> outMap)
	{

		return getNullToStr((String)outMap.get(UQ_KK_SEIZO_NO));
	}


	/* ++++++++++ v4.04.01 変更完了 ++++++++++ */
	
//	/**
//	 * 機器提供サービス契約論理削除メソッド
//	 * <br>
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @param kktkSvcKeiNo
//	 * @throws Throwable
//	 */
//	@SuppressWarnings("unchecked")
//	private void execEKK0341E010(SessionHandle handle, 
//										ServiceComponentRequestInvoker scCall, 
//										IRequestParameterReadWrite param, 
//										String dataMapKey,
//										HashMap<String, Object> temporaryData,
//										String kktkSvcKeiNo) throws Throwable
//	{
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		
//		// ***** EKK0341E010（機器提供サービス契約論理削除）*****
//		Object[][] ekk0341e010IN = {
//			{EKK0341E010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0341E010},
//			{EKK0341E010CBSMsg.FUNC_CODE,        ccMsg.get("func_code")},
//			{EKK0341E010CBSMsg.KKTK_SVC_KEI_NO,   kktkSvcKeiNo},
//			{EKK0341E010CBSMsg.UPD_DTM_BF,   getSvcUpDtm(param)},
//			
//		};
//			
//		CAANMsg ekk0341e010Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0341e010IN);
//		
//		// 更新タイムスタンプをワーク領域にセットします。
//		setSvcUpDtm(param, ekk0341e010Msg_out.getString(EKK0341E010CBSMsg.UPD_DTM));
//	}
	
	/**
	 * 機器提供サービス契約回復メソッド
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void execKikiKaifukuShori(SessionHandle handle, 
											ServiceComponentRequestInvoker scCall, 
											IRequestParameterReadWrite param, 
											String dataMapKey,
											HashMap<String, Object> temporaryData) throws Throwable
	{
		
		// 機器提供サービス契約の回復を行います。
		param.setData(JKK_KIKIICHIRAN_KKKAIFUKU_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_KKKAIFUKU_CC);
		
		// サービス契約データを取得
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
		
		// 機器提供サービス契約情報データを取得
		CAANMsg ekk0341a010cbsMsg_bf = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0341A010);
		
		// 機能コード
		outMap.put("func_code", ccMsg.get("func_code"));
		// 画面ＩＤ
		outMap.put("check_scrn_id", ccMsg.get("check_scrn_id"));
		// サービス契約番号
		outMap.put("svc_kei_no", ccMsg.get("svc_kei_no"));
		// サービス契約データ
		outMap.put("svc_kei_data", ekk0081a010cbsMsg);
		// 機器提供サービス契約番号
		outMap.put("kktk_svc_kei_no", ccMsg.get("kktk_svc_kei_no"));
		// 機器提供サービス契約データ
		outMap.put("kktk_svc_kei_data", ekk0341a010cbsMsg_bf);
		// 運用日付
		outMap.put("unyo_ymd", ccMsg.get("unyo_ymd"));
		// 異動区分
		outMap.put("ido_div", ccMsg.get("ido_div"));
		// 返品機器番号
		outMap.put("hmpin_kiki_no", ccMsg.get("hmpin_kiki_no"));
		// 更新年月日時分秒（返品機器）
		outMap.put("upd_dtm_hmpin_kiki", ccMsg.get("upd_dtm_hmpin_kiki"));
		// 異動理由コード
		outMap.put("ido_rsn_cd", ccMsg.get("ido_rsn_cd"));
		// 一覧インデックス
		outMap.put("ichiranIndex", ccMsg.get("ichiranIndex"));
		
		// 住所情報
		// 手動入力（機器送付先情報）
		outMap.put("kiki_shs_ad_man_input_flg", ccMsg.get("kiki_shs_ad_man_input_flg"));
		// 送付先名（機器送付先情報）
		outMap.put("kiki_sohus_nm", ccMsg.get("kiki_sofu_shs_nm"));
		// 送付先名カナ（機器送付先情報）
		outMap.put("kiki_sohus_kana", ccMsg.get("kiki_sofu_shs_kana"));
		// 住所コード（機器送付先情報）
		outMap.put("kiki_sohus_ad_cd", ccMsg.get("kiki_sofu_ad_cd"));
		// 郵便番号（機器送付先情報）
		outMap.put("kiki_sohus_pcd", ccMsg.get("kiki_sofu_pcd"));
		// 都道府県（機器送付先情報）
		outMap.put("kiki_sohus_state_nm", ccMsg.get("kiki_sofu_state"));
		// 市区町村（機器送付先情報）
		outMap.put("kiki_sohus_city_nm", ccMsg.get("kiki_sofu_city"));
		// 大字通称（機器送付先情報）
		outMap.put("kiki_sohus_oaztsu_nm", ccMsg.get("kiki_sofu_oaztsu"));
		// 字丁目（機器送付先情報）
		outMap.put("kiki_sohus_azcho_nm", ccMsg.get("kiki_sofu_azcho"));
		// 番地・号（機器送付先情報）
		outMap.put("kiki_sohus_bnchigo", ccMsg.get("kiki_sofu_bnchigo"));
		// 建物名（機器送付先情報）
		outMap.put("kiki_sohus_adrttm", ccMsg.get("kiki_sofu_adrttm"));
		// 部屋番号（機器送付先情報）
		outMap.put("kiki_sohus_adrrm", ccMsg.get("kiki_sofu_adrrm"));
		// 電話番号（機器送付先情報）
		outMap.put("kiki_sohus_telno", ccMsg.get("kiki_sofu_telno"));
		// 配送依頼指定年月日
		outMap.put("haiso_req_shitei_ymd", ccMsg.get("haiso_req_shitei_ymd"));
// ANK-2979-00-00 ADD START
		// ルーター回復対象
		outMap.put("rtr_khk_um", ccMsg.get("rtr_khk_um"));
// ANK-2979-00-00 ADD END
		
		JKKKikiIchiranKkKaifukuCC jkkKikiIchiranKkKaifukuCC = new JKKKikiIchiranKkKaifukuCC();
		jkkKikiIchiranKkKaifukuCC.execKikiIchiranKikiKaifuku(handle, param, JKK_KIKIICHIRAN_KKKAIFUKU_CC);
	
		/* ++++++++++ v7.00.01 変更開始 ++++++++++ */
		// JKKKikiIchiranKkKaifukuCCで検索処理を行っているため２レコード格納されてしまう。
//		// 機器提供サービス契約の更新データを検索しワーク領域に格納します
//		if(FUNC_CODE_1.equals(ccMsg.get("func_code")))
//		{
//			setKikiIchiranIkkatsuList(handle, scCall, param, dataMapKey, temporaryData);
//		}
		/* ++++++++++ v7.00.01 変更完了 ++++++++++ */
		
		param.removeData(JKK_KIKIICHIRAN_KKKAIFUKU_CC);
	}
	
	/**
	 * 機器提供サービス契約回復割引処理メソッド
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void execKikiKaifukuWribikiShori(SessionHandle handle, 
											ServiceComponentRequestInvoker scCall, 
											IRequestParameterReadWrite param, 
											String dataMapKey,
											HashMap<String, Object> temporaryData) throws Throwable
	{
		// 機器提供サービス契約の回復を行います。
		param.setData(JKK_KIKI_KKKAIFUKU_WRISVC_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_KIKI_KKKAIFUKU_WRISVC_CC);
		
		// サービス契約データを取得
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0081A010);
		
		// 機器提供サービス契約情報データを取得
		CAANMsg ekk0341a010cbsMsg_bf = (CAANMsg)temporaryData.get(TEMPLATE_ID_EKK0341A010);
		
		String mskmNo = getMskmNoSvcKei(handle, scCall, param, dataMapKey, temporaryData);
		
		// 機能コード
		outMap.put("func_code", ccMsg.get("func_code"));
		// 画面ＩＤ
		outMap.put("check_scrn_id", ccMsg.get("check_scrn_id"));
		// サービス契約番号
		outMap.put("svc_kei_no", ccMsg.get("svc_kei_no"));
		// サービス契約データ
		outMap.put("svc_kei_data", ekk0081a010cbsMsg);
		// 機器提供サービス契約番号
		outMap.put("kktk_svc_kei_no", ccMsg.get("kktk_svc_kei_no"));
		// 機器提供サービス契約データ
		outMap.put("kktk_svc_kei_data", ekk0341a010cbsMsg_bf);
		// 運用日付
		outMap.put("unyo_ymd", ccMsg.get("unyo_ymd"));
		// 異動区分
		outMap.put("ido_div", ccMsg.get("ido_div"));
		// 申込番号
		outMap.put("mskm_no", mskmNo);
		// 申込種別コード
		outMap.put("mskm_sbt_cd", MSKM_SBT_CD_00022);
		
		JKKKikiKaifukuWrisvcCC jkkKikikaifukuWrisvcCC = new JKKKikiKaifukuWrisvcCC();
		jkkKikikaifukuWrisvcCC.execKikiKaifukuWrisvc(handle, param, JKK_KIKI_KKKAIFUKU_WRISVC_CC);
		
		param.removeData(JKK_KIKI_KKKAIFUKU_WRISVC_CC);
	}
	
	/* ++++++++++ v7.00.03 追加開始 ++++++++++ */
	/**
	 * 機器提供サービス一覧照会を行う。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param key_taknkiki_sbt_cd
	 * @param key_base_ymd
	 * @return
	 * @throws Exception
	 */
	private CAANMsg[] callEKK0771B001(SessionHandle handle,
										ServiceComponentRequestInvoker scCall,
										IRequestParameterReadWrite param,
										String fixedText,
										String key_taknkiki_sbt_cd,
										String key_base_ymd) throws Exception
	{
		// 機器提供サービス一覧照会照会
		Object[][] ekk0771b001In = {{EKK0771B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0771B001},
									{EKK0771B001CBSMsg.FUNC_CODE, "1"},
									{EKK0771B001CBSMsg.KEY_TAKNKIKI_SBT_CD, key_taknkiki_sbt_cd},
									{EKK0771B001CBSMsg.KEY_BASE_YMD, key_base_ymd}};
		
		return callSC(handle, scCall, param, fixedText, ekk0771b001In).getCAANMsgList(EKK0771B001CBSMsg.EKK0771B001CBSMSG1LIST);
	}
	
	/**
	 * 機器提供サービス一意照会を実行
	 * （20121014 ADD）
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param inMap
	 * @param keyword
	 * @return CAANMsg
	 * @throws Exception
	 */
	private CAANMsg callEKK0771A010(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param,
										String fixedText,
										String svcCd) throws Exception 
	{
		// ***** EKK0771A010（機器提供サービス一意照会）*****
		Object[][] ekk0771a010IN = {
			{EKK0771A010CBSMsg.TEMPLATEID,        TEMPLATE_ID_EKK0771A010},
			{EKK0771A010CBSMsg.FUNC_CODE,         "1"},
			{EKK0771A010CBSMsg.KEY_KKTK_SVC_CD, svcCd}
		};
		
		CAANMsg[] ekk0771a010cbsMsg1list 
						= callSC(handle, scCall, param, fixedText, ekk0771a010IN).getCAANMsgList(EKK0771A010CBSMsg.EKK0771A010CBSMSG1LIST);
		
		return ekk0771a010cbsMsg1list[0];
	}
	/* ++++++++++ v7.00.03 追加終了 ++++++++++ */
	
	/* ++++++++++ v7.00.04 追加開始 ++++++++++ */
	/**
	 * サービス契約の更新タイムスタンプを格納します。
	 * @param param リクエストパラメータ
	 * @param inMap
	 * @throws Exception 
	 */
	private void setInitSvcUpdate(IRequestParameterReadWrite param, Map<String, Object> inMap, CAANMsg  ekk0341a010cbsMsg) throws Exception
	{
		
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		String lastUpdDtm = getNullToStr(ekk0341a010cbsMsg.getString(EKK0341A010CBSMsg1List.LAST_UPD_DTM));
		
		String updDtm = "";
		
		if(workMap != null && workMap.containsKey(KK_COM_SVC_UP_DTM))
		{
			updDtm = (String)workMap.get(KK_COM_SVC_UP_DTM);
		}
		else
		{
			if(!"".equals(lastUpdDtm))
			{
				updDtm = lastUpdDtm;
			}
			else
			{
				updDtm = (String)inMap.get("upd_dtm_svc_kei");
			}
		}
		
		
		workMap.put(KK_COM_SVC_UP_DTM, updDtm);
		
	}
	/* ++++++++++ v7.00.04 追加終了 ++++++++++ */
}
