/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKKapKeiInfoHktgiAddCC
*	ソースファイル名：JKKKapKeiInfoHktgiAddCC.java
*	作成者			：FJ)宇野
*	日付			：2012年09月19日
*＜機能概要＞
*	割賦契約情報の引継登録処理の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/09/19	FJ)宇野		新規作成
*	v4.01.00	2012/12/13	FJ)宇野		【IT1-2012-0002426】対応
*	v4.02.00	2012/12/26	FJ)宇野		【IT1-2012-0002577】対応
*	v4.03.00	2012/12/28	FJ)宇野		【IT1-2012-0002562】対応
*	v4.04.00	2013/07/10	FJ)鳩本		【IT1-2013-0001346】障害対応
*	v4.05.00	2013/09/10	FJ)稲岡		【OM-2013-0001809】対応
*   v6.00.00	2014/01/10	FJ)辛		【OM-2013-0005023】対応
*   v6.00.01	2014/01/17	FJ)辛		【OM-2013-0005150】対応
*	v8.00.00	2014/04/18	FJ)稲岡		【OM-2014-0001495】対応
*   v8.00.01	2014/04/21	FJ)澁谷		【OM-2014-0001430】対応
*   v9.00.00	2014/05/02	FJ)起塚		【ANK-2055-00-00】対応
*   v10.00.00   2014/07/14  FJ)高井     【ANK-1578-00-00】対応
*   v10.00.01   2014/08/09  FJ)小林     【ANK-2138-00-00】対応
*   v15.00.00   2015/08/25  FJ)谷本     【OM-2015-0000478】対応
*   v25.00.00   2016/06/01  FJ)中山     【OM-2016-0001152】割賦引継による安心補償オプションのサービス課金開始日不正対応
*   v40.00.00   2018/01/23  FJ)杉本     【OM-2018-0001325】端末補償引継不備
**********************************************************************/
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.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.util.JPCDateUtil;
import eo.ejb.cbs.cbsmsg.ECH0501B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0501B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B010CBSMsg1List;
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.EKK0341C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C110CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C340CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C350CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351C240CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C250CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361C020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0591B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0591B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0861B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0861B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2541A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2541C190CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2541D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811B504CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811B504CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811C050CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C070CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C140CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C150CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020004CBSMsg1List;


/**
 * 割賦契約情報の引継登録処理を行います。<p>
 * <BR>
 * @author 富士通
 */
public class JKKKapKeiInfoHktgiAddCC extends AbstractCommonComponent
{
	/** 割賦契約一意照会 */
	private static final String TEMPLATE_ID_EKK2541A010 = "EKK2541A010";
	/** 機器提供サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0341A010 = "EKK0341A010";
	/** サービス契約回線内訳一覧照会（現在利用中）*/
	private static final String TEMPLATE_ID_EKK0251B003 = "EKK0251B003";
	/** オプションサービス契約一覧照会 */
	private static final String TEMPLATE_ID_EKK0351B010 = "EKK0351B010";
	/** お客様一意照会 */
	private static final String TEMPLATE_ID_ECK0011A010 = "ECK0011A010";
	/** サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	
	/** 機器提供サービス契約締結 */
	private static final String TEMPLATE_ID_EKK0341C040 = "EKK0341C040";	
	/** 機器提供サービス契約機器設置完了 */
	private static final String TEMPLATE_ID_EKK0341C110 = "EKK0341C110";
	/** 機器提供サービス契約解約 */
	private static final String TEMPLATE_ID_EKK0341C340 = "EKK0341C340";
	/** 機器提供サービス契約解約確定 */
	private static final String TEMPLATE_ID_EKK0341C350 = "EKK0341C350";
	
	/** オプションサービス契約解約 */
	private static final String TEMPLATE_ID_EKK0351C240 = "EKK0351C240";
	/** オプションサービス契約解約確定 */
	private static final String TEMPLATE_ID_EKK0351C250 = "EKK0351C250";
	/** オプションサービス契約＜ISP＞登録 */
	private static final String TEMPLATE_ID_EKK0361D010 = "EKK0361D010";
	/** オプションサービス契約＜ISP＞開始 */
	private static final String TEMPLATE_ID_EKK0361C040 = "EKK0361C040";
	/** オプションサービス契約＜ISP＞照査 */
	private static final String TEMPLATE_ID_EKK0361C010 = "EKK0361C010";
	/** オプションサービス契約＜ISP＞締結 */
	private static final String TEMPLATE_ID_EKK0361C020 = "EKK0361C020";
	
	/** 割賦契約解約 */
	private static final String TEMPLATE_ID_EKK2541C190 = "EKK2541C190";
	/** 割賦契約引継登録 */
	private static final String TEMPLATE_ID_EKK2541D020 = "EKK2541D020";
	
	/** 申込内容承認登録 */
	private static final String TEMPLATE_ID_EKK0011D020 = "EKK0011D020";
	/** 進捗登録 */
	private static final String TEMPLATE_ID_EKK1091D010 = "EKK1091D010";
	/** 機器場所番号変更 */
	private static final String TEMPLATE_ID_EKKA0020004 = "EKKA0020004";
	/** 料金プラン一覧照会（オプションサービスコード） */
	private static final String TEMPLATE_ID_EKK0591B001 = "EKK0591B001";
	/** 申込明細照査・後続業務依頼 */
	private static final String TEMPLATE_ID_EKK0021C060 = "EKK0021C060";
	
	/** 料金スケジュール定義一覧照会 */
	private static final String TEMPLATE_ID_ECH0501B010 = "ECH0501B010";
	
	/** エラーフラグ（エラー）*/
	private static final String ERR_FLG_ERR = "E";
	/** エラーフラグ（ワーニング）*/
	private static final String ERR_FLG_WARNING = "W";
	
	/** 機能コード（チェック＆登録） */
	private static final String FUNC_CODE_1 = "1";
	/** 機能コード（チェックのみ） */
	private static final String FUNC_CODE_2 = "2";
	
	/** 機器登録CC実行パラメータ */
	private static final String KIKI_CREATE_CC_PARAM = "JKKKikiAddCC";
	/** 機器登録CC登録データ格納キー */
	private static final String KIKI_CREATE_LIST = "kikiCreateList";
	/** 工事CC連携用データ格納キー */
	private static final String KOJI_RENKEI_MAP_KEY = "kojifixtext";
	/** 引継登録CCおよび機器登録CC内で使用する引継先サービス契約の更新タイムスタンプ格納キー */
	private static final String SAKI_COM_SVC_UP_DTM = "SAKI_COM_SVC_UP_DTM";
	/** 引継登録CC内で使用する引継元サービス契約の更新タイムスタンプ格納キー */
	private static final String MOTO_COM_SVC_UP_DTM = "MOTO_COM_SVC_UP_DTM";
	/** 申込内容承認登録で登録した申込明細番号格納キー */
	private static final String KEY_MSKM_DTL_NO = "MSKM_DTL_NO";
	
	/** サービス契約ステータス（受付済） */
	private static final String SVC_KEI_STAT_010 = "010";
	/** サービス契約ステータス（照査済）*/
	private static final String SVC_KEI_STAT_020 = "020";
	/** サービス契約ステータス（締結済）*/
	private static final String SVC_KEI_STAT_030 = "030";
	/** サービス契約ステータス（サービス提供中） */
	private static final String SVC_KEI_STAT_100 = "100";
	
	/** 機器提供サービス契約ステータス（照査済） */
	private static final String KKTK_SVC_KEI_STAT_020 = "020";
	/* ++++++++++ v4.05.00 追加開始 ++++++++++ */
	/** 機器提供サービス契約ステータス（サービス提供中） */
	private static final String KKTK_SVC_KEI_STAT_100 = "100";
	/* ++++++++++ v4.05.00 追加完了 ++++++++++ */
	
	/** 宅内機器異動コード(一部撤去) */
	private static final String TAKNKIKI_IDO_CD_03 = "03";
	
	/* ++++++++++ v9.00.00 削除開始 ++++++++++ */
//	/** 引継種別（オプション） */
//	private static final String HKTGI_DIV_OPTION = "01";
	/* ++++++++++ v9.00.00 削除完了 ++++++++++ */
	
	/** マップキー割引サービス引継設定 */
	private static final String KEY_WRISVC_HKTGI_SETCC = "JKKWrisvcHktgiSetCC";
	
	/* ++++++++++ v4.04.00 追加開始 ++++++++++ */
	/** 違約金発生コード 違約金なし*/
	private static final String PNLTY_HASSEI_CD_NASHI = "0";
	/* ++++++++++ v4.04.00 追加完了 ++++++++++ */
	
	/* ++++++++++ v6.00.00 追加開始 ++++++++++ */
	/** ＭＡＸ日付*/
	private static final String MAX_YMD = "20991231";
	/** EKK0861B002_マンション情報一覧照会（サービス契約番号） */
	private static final String TEMPLATE_ID_EKK0861B002 = "EKK0861B002";
	/** マンション物件コード:マンション*/
	private static final String MANSION_BUKKEN_CD = "001";
	/** 宅内機器種別コード（タブレット）*/
	private static final String TAKNKIKI_SBT_CD_PO = "P0";	
	/* ++++++++++ v6.00.00 追加完了 ++++++++++ */
	
	/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
	/** 機器オプションサービス契約一覧照会（複合検索） */
	private static final String TEMPLATE_ID_EKK2811B504 = "EKK2811B504";
	/** 機器オプションサービス契約登録 */
	private static final String TEMPLATE_ID_EKK2811D010 = "EKK2811D010";
	/** 機器オプションサービス契約照査締結 */
	private static final String TEMPLATE_ID_EKK2811C050 = "EKK2811C050";
	/** 機器オプションサービス契約開始 */
	private static final String TEMPLATE_ID_EKK2811C070 = "EKK2811C070";
	/** 機器オプションサービス契約解約 */
	private static final String TEMPLATE_ID_EKK2811C140 = "EKK2811C140";
	/** 機器オプションサービス契約解約確定 */
	private static final String TEMPLATE_ID_EKK2811C150 = "EKK2811C150";
	
	/** 機器オプションサービスコード（端末補償）*/
	private static final String KKOP_SVC_CD_G03 = "G03";
	
	/** 機器オプションサービス契約ステータス（解約済）*/
	private static final String KKOP_STAT_910 = "910";
	/** 機器オプションサービス契約ステータス（キャンセル済）*/
	private static final String KKOP_STAT_920 = "920";
	
	/** 機器提供サービス契約ステータス（締結済） */
	private static final String KKTK_SVC_KEI_STAT_030 = "030";
	
	/** ﾌﾟﾚﾐｱﾑﾊﾟｯｸ引継種別（移動） */
	private static final String HKTGI_DIV_IDO = "02";
	/** ﾌﾟﾚﾐｱﾑﾊﾟｯｸ引継種別（複写） */
	private static final String HKTGI_DIV_FUKUSHA = "03";
	
	/** 料金グループコード（ｅｏ光ネットマンションタイプ） */
	private static final String PRC_GRP_CD_MT = "04";
	/* ++++++++++ v9.00.00 追加完了 ++++++++++ */
	
	/**
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execKapKeiHktgi(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		String dataMapKey = fixedText;
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		/* ++++++++++ v6.00.01 追加開始 ++++++++++ */
		ArrayList hktgList = null;
		if(ccMsg.containsKey("del_kiki_list"))
		{
			hktgList = (ArrayList)ccMsg.get("del_kiki_list");
		}
		// 一時領域データ(宅内機器種別コードがタブレット場合のみ）
		HashMap<String, Object> commonTemporaryData = new HashMap<String, Object>();
		/* ++++++++++ v6.00.01 追加終了 ++++++++++ */
		
		// エラーフラグ
		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 = (Map)param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 引継先サービス契約更新前タイムスタンプを共通領域に格納します。
		setSvcUpDtm(param, (String)ccMsg.get("saki_upd_dtm_KK0081"));
		
		// 引継元サービス契約更新前タイムスタンプを共通領域に格納します。
		setMotoSvcUpDtm(param, (String)ccMsg.get("moto_upd_dtm_KK0081"));
		
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// 機能コード取得
		String func_code = (String)ccMsg.get("func_code");
		// 引継先サービス契約番号
		String saki_svc_kei_no = (String)ccMsg.get("saki_svc_kei_no");
		// 引継元サービス契約番号
		String moto_svc_kei_no = (String)ccMsg.get("moto_svc_kei_no");
		
		/* ++++++++++ vv6.00.00 追加開始 ++++++++++ */
		String mansion_bukken_cd = "";
		// ***** EKK0861B002（EKK0861B002_マンション情報一覧照会（サービス契約番号））*****
		Object[][] eKK0861B002IN = {
				{ EKK0861B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0861B002 },
				{ EKK0861B002CBSMsg.FUNC_CODE, FUNC_CODE_2},
				{ EKK0861B002CBSMsg.KEY_SVC_KEI_NO, (String)ccMsg.get("saki_svc_kei_no") },
				{ EKK0861B002CBSMsg.KEY_RSV_APLY_YMD, (String)ccMsg.get("unyo_ymd") }
		};
		
		CAANMsg[] eKK0861B002CBSMsg1list = callSC(handle, scCall, param, dataMapKey, eKK0861B002IN).getCAANMsgList(EKK0861B002CBSMsg.EKK0861B002CBSMSG1LIST);
		if(eKK0861B002CBSMsg1list != null && eKK0861B002CBSMsg1list.length > 0)
		{
			String tk_hoshiki_cd =  getNullToStr(eKK0861B002CBSMsg1list[0].getString(EKK0861B002CBSMsg1List.TK_HOSHIKI_CD));
			if(!"".equals(tk_hoshiki_cd))
			{
				mansion_bukken_cd = eKK0861B002CBSMsg1list[0].getString(EKK0861B002CBSMsg1List.MANSION_BUKKEN_CD);
			}
		}
		/* ++++++++++ vv6.00.00 追加完了 ++++++++++ */
		
		// 割賦契約一意照会を実行（引継元）
		// ***** EKK2541A010（割賦契約一意照会）*****
		Object[][] ekk2541a010IN = {
				{ EKK2541A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2541A010 },
				{ EKK2541A010CBSMsg.FUNC_CODE, "2" },
				{ EKK2541A010CBSMsg.KEY_KAP_KEI_NO, (String)ccMsg.get("moto_kap_kei_no") },
				{ EKK2541A010CBSMsg.KEY_GENE_ADD_DTM, "" },
				{ EKK2541A010CBSMsg.KEY_RSV_APLY_YMD, (String)ccMsg.get("unyo_ymd") }
		};
		
		CAANMsg[] ekk2541a010CBSMsg1list 
				= callSC(handle, scCall, param, dataMapKey, ekk2541a010IN).getCAANMsgList(EKK2541A010CBSMsg.EKK2541A010CBSMSG1LIST);
		
		// 結果を一時領域に格納
		temporaryData.put("EKK2541A010_WORK", ekk2541a010CBSMsg1list);
		commonTemporaryData.put("EKK2541A010_WORK", ekk2541a010CBSMsg1list);
		
		// サービス契約一意照会を実行（引継先）
		CAANMsg ekk0081a010CBSMsg_saki = 
			searchEKK0081A010(handle, scCall, param, dataMapKey, saki_svc_kei_no, (String)ccMsg.get("unyo_ymd"));
		
		temporaryData.put("EKK0081A010_WORK", ekk0081a010CBSMsg_saki);
		commonTemporaryData.put("EKK0081A010_WORK", ekk0081a010CBSMsg_saki);
		
		// サービス契約ステータス
		String scv_kei_stat = getNullToStr(ekk0081a010CBSMsg_saki.getString(EKK0081B010CBSMsg1List.SVC_KEI_STAT));
		
		// サービス契約一意照会を実行（引継元）
		CAANMsg ekk0081a010CBSMsg_moto = 
			searchEKK0081A010(handle, scCall, param, dataMapKey, moto_svc_kei_no, (String)ccMsg.get("unyo_ymd"));
		
		temporaryData.put("EKK0081A010_MOTO", ekk0081a010CBSMsg_moto);
		commonTemporaryData.put("EKK0081A010_MOTO", ekk0081a010CBSMsg_moto);
		
		// ***** ECK0011A010（お客様一意照会）*****
		Object[][] eck0011a010IN = {
			{ECK0011A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_ECK0011A010},
			{ECK0011A010CBSMsg.FUNC_CODE,        "2"},
			{ECK0011A010CBSMsg.KEY_SYSID,        ccMsg.get("sysid")},
			{ECK0011A010CBSMsg.KEY_GENE_ADD_DTM, ""},
			{ECK0011A010CBSMsg.KEY_RSV_APLY_YMD, ccMsg.get("unyo_ymd")},
		};
		CAANMsg[] eck0011a010CBSMsg1list 
				= callSC(handle, scCall, param, dataMapKey, eck0011a010IN).getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST);
		// 結果を一時領域に格納
		temporaryData.put("ECK0011A010_WORK", eck0011a010CBSMsg1list);
		commonTemporaryData.put("ECK0011A010_WORK", eck0011a010CBSMsg1list);
		
		// サービス契約回線内訳一覧照会（現在利用中）
		CAANMsg[] ekk025b003list_saki = searchEKK0251B003(handle, scCall, param, dataMapKey, saki_svc_kei_no);
		// 結果を一時領域に格納
		temporaryData.put("EKK0251B003_SAKIWORK", ekk025b003list_saki);
		commonTemporaryData.put("EKK0251B003_SAKIWORK", ekk025b003list_saki);
		
		CAANMsg[] ekk025b003list_moto = searchEKK0251B003(handle, scCall, param, dataMapKey, moto_svc_kei_no);
		
		String moto_place_no = "";
		if(ekk025b003list_moto != null && ekk025b003list_moto.length > 0)
		{
			moto_place_no = getNullToStr(ekk025b003list_moto[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_NO));
		}
		
		/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
		// ECH0501B010（料金スケジュール定義一覧照会）
		Object[][] ech0501b010IN = {
				{ECH0501B010CBSMsg.TEMPLATEID,       TEMPLATE_ID_ECH0501B010},
				{ECH0501B010CBSMsg.FUNC_CODE,        "1"},
				{ECH0501B010CBSMsg.KEY_EVENT_CD,     "03"},
				{ECH0501B010CBSMsg.KEY_STDARDYMD,    (String)ccMsg.get("unyo_ymd")},
			};
			CAANMsg[] ech0501b010CBSMsg1list 
					= callSC(handle, scCall, param, dataMapKey, ech0501b010IN).getCAANMsgList(ECH0501B010CBSMsg.ECH0501B010CBSMSG1LIST);
			// 結果を一時領域に格納
			temporaryData.put("ECH0501B010_WORK", ech0501b010CBSMsg1list);
			commonTemporaryData.put("ECH0501B010_WORK", ech0501b010CBSMsg1list);
		/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
		
		/* ++++++++++ v9.00.00 変更開始 ++++++++++ */
//		// 引継種別がオプションの場合
//		if(HKTGI_DIV_OPTION.equals(ccMsg.get("hktgi_div")))
//		{
		// ﾌﾟﾚﾐｱﾑﾊﾟｯｸ引継種別が移動または複写の場合
		if(HKTGI_DIV_IDO.equals(ccMsg.get("hktgi_div")) || HKTGI_DIV_FUKUSHA.equals(ccMsg.get("hktgi_div")))
		{
		/* ++++++++++ v9.00.00 変更完了 ++++++++++ */
			
			// オプションサービス契約一覧照会を実行
			// ***** EKK0351B010（オプションサービス契約一覧照会）*****
			Object[][] ekk0351b010IN = {
					{ EKK0351B010CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK0351B010 },
					{ EKK0351B010CBSMsg.FUNC_CODE,           "1" },
					{ EKK0351B010CBSMsg.KEY_SVC_KEI_NO,      moto_svc_kei_no },
					{ EKK0351B010CBSMsg.KEY_KKTK_SVC_KEI_NO, "" },
					{ EKK0351B010CBSMsg.KEY_OP_SVC_CD,       ccMsg.get("op_svc_cd") }
			};
			
			CAANMsg[] ekk0351b010CBSMsg1list 
							= callSC(handle, scCall, param, dataMapKey, ekk0351b010IN).getCAANMsgList(EKK0351B010CBSMsg.EKK0351B010CBSMSG1LIST);
			
			// 結果を一時領域に格納
			temporaryData.put("EKK0351B010_WORK", ekk0351b010CBSMsg1list);
			commonTemporaryData.put("EKK0351B010_WORK", ekk0351b010CBSMsg1list);
		}
		
		// サービス契約が受付済以外の場合実行する
		if(!SVC_KEI_STAT_010.equals(scv_kei_stat))
		{
			// 申込内容承認登録SCの実行
			execEKK0011D020(handle, scCall, param, dataMapKey, temporaryData);
		}
		
		/* ++++++++++ v6.00.01 追加開始 ++++++++++ */
		
		//登録された機器情報を格納するリスト
		ArrayList<Map<String, Object>> addedKikiList = new ArrayList<Map<String, Object>>();
		//機器提供サービス契約一意照会の結果
		CAANMsg[] ekk0341a010CBSMsg1list = null;
		
		//接続機器分(タブレットとクレードル)割賦引継を行う。
		for(int i = 0; i < hktgList.size(); i++)
		{
			HashMap childMap = (HashMap)hktgList.get(i);
			// 機器提供サービス契約一意照会
			// ***** EKK0341A010（機器提供サービス契約一意照会）*****
			Object[][] ekk0341a010IN = {
					{ EKK0341A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341A010 },
					{ EKK0341A010CBSMsg.FUNC_CODE, "2" },
					{ EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, (String)childMap.get("kktk_svc_kei_no") },
					{ EKK0341A010CBSMsg.KEY_GENE_ADD_DTM, "" },
					{ EKK0341A010CBSMsg.KEY_RSV_APLY_YMD, ccMsg.get("unyo_ymd") }
			};
			
			ekk0341a010CBSMsg1list = callSC(handle, scCall, param, dataMapKey, ekk0341a010IN).getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
			// 結果を一時領域に格納
			temporaryData.put("EKK0341A010_WORK", ekk0341a010CBSMsg1list);
			//宅内機器種別コード（タブレット）の場合
			if(TAKNKIKI_SBT_CD_PO.equals(ekk0341a010CBSMsg1list[0].getString(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD)))
			{
				commonTemporaryData.put("EKK0341A010_WORK", ekk0341a010CBSMsg1list);
			}
			
			// 機器登録CC呼び出し(ステータス照査済)
			execKikiAddCC(handle, scCall, param, dataMapKey, temporaryData);
			
			// チェック＆登録時のみ実行します。
			if(FUNC_CODE_1.equals(func_code))
			{
				// 機器提供サービス契約一意照会 検索結果
//				CAANMsg[] ekk0341a010cbsmsglist = (CAANMsg[])temporaryData.get("EKK0341A010_WORK");
				// 引継元＿機器提供サービス契約ステータス
				String kktk_svc_kei_stat = ekk0341a010CBSMsg1list[0].getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT);
				
				/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
				// 機器オプションサービス契約一覧照会（複合検索）の実行
				CAANMsg ekk2811b504Msg = execEKK2811B504(handle, scCall, param, dataMapKey, temporaryData);
				/* ++++++++++ v9.00.00 追加終了 ++++++++++ */
				
				/* ++++++++++ v4.05.00 追加開始 ++++++++++ */
				// 引継元＿機器提供サービス契約ステータスが"100":サービス提供中の場合のみ
				if(KKTK_SVC_KEI_STAT_100.equals(kktk_svc_kei_stat))
				{
					// ++++++++++ v4.02.00 開始 ++++++++++
					// 機器提供サービスの解約処理を先に行う
					// 引継元機器を解約する
					// 機器提供サービス契約解約
					execEKK0341C340(handle, scCall, param, dataMapKey, temporaryData);
					
					// 機器提供サービス契約解約確定
					execEKK0341C350(handle, scCall, param, dataMapKey, temporaryData);
					// ++++++++++ v4.02.00 ++++++++++ end
					
					/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
					// 引継元端末保障の解約
					if (ekk2811b504Msg != null)
					{
						// 機器オプションサービスステータスを取得
						String kkopSvcKeiStat = ekk2811b504Msg.getString(EKK2811B504CBSMsg1List.KKOP_SVC_KEI_STAT);
						// 機器オプションサービス契約ステータスが"解約済"・"キャンセル済"以外の場合
						if (!KKOP_STAT_910.equals(kkopSvcKeiStat) && !KKOP_STAT_920.equals(kkopSvcKeiStat))
						{
							// 機器オプションサービス契約解約S-IFを実行する
							execEKK2811C140(handle, scCall, param, dataMapKey, temporaryData, ekk2811b504Msg);
							
							// 機器オプションサービス契約解約確定S-IFを実行する
							execEKK2811C150(handle, scCall, param, dataMapKey, temporaryData, ekk2811b504Msg);
						}
					}
					/* ++++++++++ v9.00.00 追加終了 ++++++++++ */
				}
				/* ++++++++++ v4.05.00 追加終了 ++++++++++ */
				
				// 機器登録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 = (HashMap<String, Object>)createList.get(0);
				//引継先に引継元割賦契約情報を引継する処理の判定のため、格納する
				addedKikiList.add(kktkSvcKeiMap);
				
				// 登録後の更新タイムスタンプを格納します。
				setSvcUpDtm(param, (String)kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.LAST_UPD_DTM));
				
				// ++++++++++ v4.02.00 開始++++++++++
				// 引継先のサービス契約ステータスが照査済、締結済の場合
				if(SVC_KEI_STAT_020.equals(scv_kei_stat) || SVC_KEI_STAT_030.equals(scv_kei_stat))
				{
					if(KKTK_SVC_KEI_STAT_020.equals((String)kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT)))
//					if(!KKTK_SVC_KEI_STAT_030.equals((String)kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT)))
					{
						// 機器提供サービス契約締結SC実行
						execEKK0341C040(handle, scCall, param, dataMapKey, temporaryData);
					}
				}
				
				// 引継先のサービス契約ステータスがサービス提供中の場合
				else if(SVC_KEI_STAT_100.equals(scv_kei_stat))
//				if(!SVC_KEI_STAT_100.equals(scv_kei_stat))
				{
					
					// 機器提供サービス契約締結SC実行
					execEKK0341C040(handle, scCall, param, dataMapKey, temporaryData);
					
					// 機器提供サービス契約機器設置完了SC実行
					execKktkSvcSetFin(handle, scCall, param, dataMapKey, temporaryData);
				}
				// ++++++++++ v4.02.00 ++++++++++ end
				
				/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
				// 引継先端末保障の登録
				if (ekk2811b504Msg != null)
				{
					/* ++++++++++ v15.00.00 削除開始 ++++++++++ */
//					// 機器オプションサービス契約登録SC実行
//					CAANMsg ekk2811d010Msg = execEKK2811D010(handle, scCall, param, dataMapKey, temporaryData, kktkSvcKeiMap, ekk2811b504Msg);
					/* ++++++++++ v15.00.00 削除終了 ++++++++++ */
					
					// 機器オプションサービスステータスを取得
					String kkopSvcKeiStat = ekk2811b504Msg.getString(EKK2811B504CBSMsg1List.KKOP_SVC_KEI_STAT);
					// 機器オプションサービス契約ステータスが"解約済"・"キャンセル済"以外の場合
					if (!KKOP_STAT_910.equals(kkopSvcKeiStat) && !KKOP_STAT_920.equals(kkopSvcKeiStat))
					{
						/* ++++++++++ v15.00.00 追加開始 ++++++++++ */
						// 機器オプションサービス契約登録SC実行
						CAANMsg ekk2811d010Msg = execEKK2811D010(handle, scCall, param, dataMapKey, temporaryData, kktkSvcKeiMap, ekk2811b504Msg);
						/* ++++++++++ v15.00.00 追加終了 ++++++++++ */

						// 引継先のサービス契約ステータスが照査済、締結済の場合
						if(SVC_KEI_STAT_020.equals(scv_kei_stat) || SVC_KEI_STAT_030.equals(scv_kei_stat))
						{
							// 機器オプションサービス契約照査締結SC実行
							execEKK2811C050(handle, scCall, param, dataMapKey, temporaryData, ekk2811d010Msg);
						}
						// 引継先のサービス契約ステータスがサービス提供中の場合
						else if(SVC_KEI_STAT_100.equals(scv_kei_stat))
						{
							// 機器オプションサービス契約照査締結SC実行
							execEKK2811C050(handle, scCall, param, dataMapKey, temporaryData, ekk2811d010Msg);
							
							// 機器オプションサービス契約開始SC実行
							execEKK2811C070(handle, scCall, param, dataMapKey, temporaryData, ekk2811d010Msg);
						}
					}
					/* ++++++++++ v15.00.00 削除開始 ++++++++++ */
//					// 機器オプションサービス契約ステータスが"解約済"・"キャンセル済"の場合、解約する
//					else
//					{
//						// 機器オプションサービス契約照査締結SC実行
//						execEKK2811C050(handle, scCall, param, dataMapKey, temporaryData, ekk2811d010Msg);
//						// 機器オプションサービス契約開始（引継先解約）SC実行
//						execEKK2811C070SakiKaiyaku(handle, scCall, param, dataMapKey, temporaryData, ekk2811d010Msg);
//						// 機器オプションサービス契約解約（引継先解約）SC実行
//						execEKK2811C140SakiKaiyaku(handle, scCall, param, dataMapKey, temporaryData, ekk2811d010Msg);
//						// 機器オプションサービス契約解約確定（引継先解約）SC実行
//						execEKK2811C150SakiKaiyaku(handle, scCall, param, dataMapKey, temporaryData, ekk2811d010Msg);
//					}
					/* ++++++++++ v15.00.00 削除終了 ++++++++++ */
				}
				/* ++++++++++ v9.00.00 追加終了 ++++++++++ */
			}
		}
		/* ++++++++++ v6.00.01 変更開始 ++++++++++ */

		//進捗登録時、設定内容を格納（機器製造番号）
		String tablet_kiki_seizo_no = "";
		ArrayList<String> cradle_kiki_seizo_no = new ArrayList();
		
		// チェック＆登録時のみ実行します。
		if(FUNC_CODE_1.equals(func_code))
		{
			/* ++++++++++ v9.00.00 変更開始 ++++++++++ */
//			// 引継種別がオプションの場合
//			if(HKTGI_DIV_OPTION.equals(ccMsg.get("hktgi_div")))
//			{
			// ﾌﾟﾚﾐｱﾑﾊﾟｯｸ引継種別が移動または複写の場合
			if(HKTGI_DIV_IDO.equals(ccMsg.get("hktgi_div")) || HKTGI_DIV_FUKUSHA.equals(ccMsg.get("hktgi_div")))
			{
			/* ++++++++++ v9.00.00 変更完了 ++++++++++ */
				
				// ***** EKK0591B001（料金プラン一覧照会（オプションサービスコード））*****
				Object[][] ekk591b001IN = {
					{EKK0591B001CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0591B001},
					{EKK0591B001CBSMsg.FUNC_CODE,        "1"},
					{EKK0591B001CBSMsg.KEY_OP_SVC_CD,    ccMsg.get("op_svc_cd")}
				};
				CAANMsg[] ekk0591b000CBSMsg1list 
						= callSC(handle, scCall, param, dataMapKey, ekk591b001IN).getCAANMsgList(EKK0591B001CBSMsg.EKK0591B001CBSMSG1LIST);
				
				temporaryData.put("EKK0591B001_WORK", ekk0591b000CBSMsg1list);
				commonTemporaryData.put("EKK0591B001_WORK", ekk0591b000CBSMsg1list);
				
				/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
				// ﾌﾟﾚﾐｱﾑﾊﾟｯｸ引継種別が移動の場合
				if (HKTGI_DIV_IDO.equals(ccMsg.get("hktgi_div")))
				{
				/* ++++++++++ v9.00.00 追加完了 ++++++++++ */
				
					// 引継元のオプションサービス契約解約
	//				execEKK0351C240(handle, scCall, param, dataMapKey, temporaryData);
					execEKK0351C240(handle, scCall, param, dataMapKey, commonTemporaryData);
					
					// 引継元のオプションサービス契約解約確定
	//				execEKK0351C250(handle, scCall, param, dataMapKey, temporaryData);
					execEKK0351C250(handle, scCall, param, dataMapKey, commonTemporaryData);
				
				/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
				}
				/* ++++++++++ v9.00.00 追加完了 ++++++++++ */
				
				// 引継先のオプションサービス契約＜ISP＞登録
//				execEKK0361D010(handle, scCall, param, dataMapKey, temporaryData);
				execEKK0361D010(handle, scCall, param, dataMapKey, commonTemporaryData);
				
				/* ++++++++++ v4.01.00 修正開始 ++++++++++ */
				// 引継先のサービス契約ステータスが受付済以降の場合
				if(!SVC_KEI_STAT_010.equals(scv_kei_stat))
				{
					// オプションサービス契約＜ISP＞照査
//					execEKK0361C010(handle, scCall, param, dataMapKey, temporaryData);
					execEKK0361C010(handle, scCall, param, dataMapKey, commonTemporaryData);
				}
				
				// 引継先のサービス契約ステータスがサービス照査済以降の場合
				if(!SVC_KEI_STAT_020.equals(scv_kei_stat))
				{
					// オプションサービス契約＜ISP＞締結
//					execEKK0361C020(handle, scCall, param, dataMapKey, temporaryData);
					execEKK0361C020(handle, scCall, param, dataMapKey, commonTemporaryData);
				}
				/* ++++++++++ v4.01.00 修正終了 ++++++++++ */
				
				// 引継先のサービス契約ステータスがサービス提供中の場合
				if(SVC_KEI_STAT_100.equals(scv_kei_stat))
				{
					// 引継先のオプションサービス契約をサービス提供中にする
					// オプションサービス契約＜ISP＞開始
//					execEKK0361C040(handle, scCall, param, dataMapKey, temporaryData);
					execEKK0361C040(handle, scCall, param, dataMapKey, commonTemporaryData);
				}
			}
			
			//■割賦引継登録処理を行う（タブレットのみ、登録処理）
			for(int j = 0; j < addedKikiList.size(); j++)
			{
				HashMap kikiAddedMap = (HashMap)addedKikiList.get(j);
				
				//宅内機器種別コードの判定
				if(!TAKNKIKI_SBT_CD_PO.equals((String)kikiAddedMap.get(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD)))
				{
					cradle_kiki_seizo_no.add((String)kikiAddedMap.get(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO));
					continue;
				}
				//
				tablet_kiki_seizo_no = (String)kikiAddedMap.get(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO);
				
				/* ++++++++++ vv6.00.00 変更開始 ++++++++++ */
				// 引継先に引継元割賦契約情報を引継する
//				execEKK2541D020(handle, scCall, param, dataMapKey, temporaryData);
				execEKK2541D020(handle, scCall, param, dataMapKey, commonTemporaryData, mansion_bukken_cd, kikiAddedMap);
				/* ++++++++++ vv6.00.00 変更完了 ++++++++++ */
				
				// 引継元の割賦契約を解約する
//				execEKK2541C190(handle, scCall, param, dataMapKey, temporaryData);
				execEKK2541C190(handle, scCall, param, dataMapKey, commonTemporaryData);
				
				// 割引サービス引継設定を実行する
//				execWrisvcHktgiSetCall(handle, scCall, param, dataMapKey, ccMsg, temporaryData);
				execWrisvcHktgiSetCall(handle, scCall, param, dataMapKey, ccMsg, commonTemporaryData, kikiAddedMap);
				
				// 場所番号が異なる場合、宅内機器連携処理（機器場所番号変更）を行う
				String saki_place_no = getNullToStr(ekk025b003list_saki[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_NO));
				if(!moto_place_no.equals(saki_place_no))
				{
//					execKikiPlaceUpdate(handle, scCall, param, dataMapKey, temporaryData);
					execKikiPlaceUpdate(handle, scCall, param, dataMapKey, commonTemporaryData, kikiAddedMap);
				}
			}
		}
		/* ++++++++++ v6.00.01 変更終了 ++++++++++ */
		
		// 進捗登録SCを実行する
		StringBuilder sb = new StringBuilder();
		
		sb.append("処理区分：割賦引継　");
		sb.append("　ﾌﾟﾚﾐｱﾑﾊﾟｯｸ引継種別：" + (String)ccMsg.get("hktgi_div_nm"));
		// ++++++++++ v4.02.00 ++++++++++ str
//		sb.append("　引継先お客さまＩＤ：" + saki_svc_kei_no);
		sb.append("　引継元お客さまＩＤ：" + moto_svc_kei_no);
		// ++++++++++ v4.02.00 ++++++++++ end
		/* ++++++++++ v6.00.01 変更開始 ++++++++++ */
		sb.append("　タブレット機器製造番号：" + tablet_kiki_seizo_no);
		if(cradle_kiki_seizo_no.size() > 0)
		{
			for(int j = 0; j < cradle_kiki_seizo_no.size(); j++)
			{
				sb.append("　クレードル機器製造番号：" + cradle_kiki_seizo_no.get(j));
			}
			
		}
		/* ++++++++++ v6.00.01 変更終了 ++++++++++ */
		
		// 引継先
//		execShinchokuToroku(handle, scCall, param, dataMapKey, temporaryData, saki_svc_kei_no, sb.toString());
		execShinchokuToroku(handle, scCall, param, dataMapKey, commonTemporaryData, saki_svc_kei_no, sb.toString());
		
		sb = new StringBuilder();
		
		sb.append("処理区分：割賦引継　");
		sb.append("　ﾌﾟﾚﾐｱﾑﾊﾟｯｸ引継種別：" + (String)ccMsg.get("hktgi_div_nm"));
		// ++++++++++ v4.02.00 ++++++++++ str
//		sb.append("　引継元お客さまＩＤ：" + moto_svc_kei_no);
		sb.append("　引継先お客さまＩＤ：" + saki_svc_kei_no);
		// ++++++++++ v4.02.00 ++++++++++ end
		/* ++++++++++ v6.00.01 変更開始 ++++++++++ */
		sb.append("　タブレット機器製造番号：" + tablet_kiki_seizo_no);
		if(cradle_kiki_seizo_no.size() > 0)
		{
			for(int j = 0; j < cradle_kiki_seizo_no.size(); j++)
			{
				sb.append("　クレードル機器製造番号：" + cradle_kiki_seizo_no.get(j));
			}
			
		}
		/* ++++++++++ v6.00.01 変更終了 ++++++++++ */
		// 引継元
//		execShinchokuToroku(handle, scCall, param, dataMapKey, temporaryData, moto_svc_kei_no, sb.toString());
		execShinchokuToroku(handle, scCall, param, dataMapKey, commonTemporaryData, moto_svc_kei_no, sb.toString());
		
		// サービス契約ステータスが受付済以外かつ機能コードが１の場合実行する
		if(!SVC_KEI_STAT_010.equals(scv_kei_stat) && FUNC_CODE_1.equals(func_code))
		{
			// 申込明細照査・後続業務依頼SCの実行
			execEKK0021C060(handle, scCall, param, dataMapKey, temporaryData);
		}
		
		
		
		return param;
	}
	
	/**
	 * サービス契約回線内訳一覧照会（現在利用中）情報の取得処理<br>
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param svc_kei_no
	 * @return CAANMsg[]
	 * @throws Exception 
	 */
	private CAANMsg[] searchEKK0251B003(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param,
										String dataMapKey,
										String svc_kei_no) throws Exception
	{
		
		// サービス契約回線内訳一覧照会（現在利用中）を実行
		// ***** EKK0251B003（サービス契約回線内訳一覧照会（現在利用中））*****
		Object[][] ekk0251b003IN = {
				{ EKK0251B003CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0251B003 },
				{ EKK0251B003CBSMsg.FUNC_CODE, "1" },
				{ EKK0251B003CBSMsg.KEY_SVC_KEI_NO, svc_kei_no }
		};
		
		CAANMsg[] ekk0251b003CBSMsg1list 
						= callSC(handle, scCall, param, dataMapKey, ekk0251b003IN).getCAANMsgList(EKK0251B003CBSMsg.EKK0251B003CBSMSG1LIST);
		
		return ekk0251b003CBSMsg1list;
	}
	
	/**
	 * サービス契約一意照会情報の取得処理<br>
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param svc_kei_no
	 * @param rsv_aply_ymd
	 * @return CAANMsg
	 * @throws Exception 
	 */
	private CAANMsg searchEKK0081A010(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param,
										String dataMapKey,
										String svc_kei_no,
										String rsv_aply_ymd) throws Exception
	{
		
		// サービス契約一意照会を実行
		// ***** EKK0081A010（サービス契約一意照会）*****
		Object[][] ekk0081a010IN = {
				{ EKK0081A010CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0081A010 },
				{ EKK0081A010CBSMsg.FUNC_CODE,        "2" },
				{ EKK0081A010CBSMsg.KEY_SVC_KEI_NO,   svc_kei_no },
				{ EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, "" },
				{ EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, rsv_aply_ymd }
		};
		
		CAANMsg ekk0081a010CBSMsg 
						= callSC(handle, scCall, param, dataMapKey, ekk0081a010IN).getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST)[0];
		
		return ekk0081a010CBSMsg;
	}
	
	/**
	 * 機器登録部品を呼び出す。
	 * 
	 * @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);
		
		
		CAANMsg[] ekk0341a010cbsmsglist = (CAANMsg[])temporaryData.get("EKK0341A010_WORK");
		CAANMsg[] ekk0251b003cbsmsglist = (CAANMsg[])temporaryData.get("EKK0251B003_SAKIWORK");
		CAANMsg[] eck0011a010cbsmsglist = (CAANMsg[])temporaryData.get("ECK0011A010_WORK");
		
		
		// 共通情報のマッピング
		outMap.put("func_code", ccMsg.get("func_code"));
		// サービス契約番号
		outMap.put("svc_kei_no", ccMsg.get("saki_svc_kei_no"));
		// 異動区分
		outMap.put("ido_div", ccMsg.get("ido_div"));
		// 基準日
		outMap.put("stdardymd", ccMsg.get("unyo_ymd"));
		// 工事案件番号
		outMap.put("kojiak_no", "");
		// 機器登録データ格納Mapキー
		outMap.put(KOJI_RENKEI_MAP_KEY, KIKI_CREATE_LIST);
		// 更新年月日時分秒（サービス契約）
		outMap.put("upd_dtm_svc_kei", getSvcUpDtm(param));
		// 一覧Indx（割賦契約更新画面では空白を設定）
		outMap.put("ichiranIndex", "");
		
		ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();

		HashMap<String, Object> childMap = new HashMap();
		// 機器提供種別コードを取得
		childMap.put("kktk_sbt_cd", ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.KKTK_SBT_CD));
		// 配送区分コード
		childMap.put("haiso_div", "");
		// 配送方法区分コード
		childMap.put("haiso_way_cd", "");
		// 機器製造番号
		childMap.put("kiki_seizo_no", ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO));
		// 送付先名
		childMap.put("kiki_sohus_nm", eck0011a010cbsmsglist[0].getString(ECK0011A010CBSMsg1List.CUST_NM));
		// 送付先名カナ
		childMap.put("kiki_sohus_kana", eck0011a010cbsmsglist[0].getString(ECK0011A010CBSMsg1List.CUST_KANA));
		// 住所コード
		childMap.put("kiki_sohus_ad_cd", ekk0251b003cbsmsglist[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_AD_CD));
		// 郵便番号
		childMap.put("kiki_sohus_pcd", ekk0251b003cbsmsglist[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_PCD));
		// 都道府県
		childMap.put("kiki_sohus_state_nm", ekk0251b003cbsmsglist[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_STATE_NM));
		// 市区町村
		childMap.put("kiki_sohus_city_nm", ekk0251b003cbsmsglist[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_CITY_NM));
		// 大字通称
		childMap.put("kiki_sohus_oaztsu_nm", ekk0251b003cbsmsglist[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_OAZTSU_NM));
		// 字丁目
		childMap.put("kiki_sohus_azcho_nm", ekk0251b003cbsmsglist[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_AZCHO_NM));
		// 番地・号
		childMap.put("kiki_sohus_bnchigo", ekk0251b003cbsmsglist[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_BNCHIGO));
		// 建物名
		childMap.put("kiki_sohus_adrttm", ekk0251b003cbsmsglist[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_ADRTTM));
		// 部屋番号
		childMap.put("kiki_sohus_adrrm", ekk0251b003cbsmsglist[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_ADRRM));
		// 電話番号
		childMap.put("kiki_sohus_telno", ekk0251b003cbsmsglist[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_TELNO));
		// 持込機器ＭＡＣ
		childMap.put("macad", "");
//		// 機器提供開始年月日
//		childMap.put("kktk_sta_ymd", "");
		// 機器型式コードを取得
		childMap.put("taknkiki_model_cd", ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD));
		// 倉庫名
		childMap.put("soko_cd", "");
		// 機器送料有無
		childMap.put("kiki_soryo_um", ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.KIKI_SORYO_UM));
		// 付加情報
		childMap.put("kiki_huka_info_cd", ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.KIKI_HUKA_INFO_CD));
		// ＴＶコース
		childMap.put("tv_pcrs_cd", "");
		// 販売種別コードを取得
		childMap.put("hambai_sbt_cd", ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.HAMBAI_SBT_CD));
		// 配送依頼指定年月日
		childMap.put("haiso_req_shitei_ymd", ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.HAISO_REQ_SHITEI_YMD));
		// 手動入力（機器送付先情報）
		childMap.put("kiki_shs_ad_man_input_flg", "0");
		/* ++++++++++ v6.00.01 変更開始 ++++++++++ */
		// サービス開始起算年月日
		childMap.put("svc_sta_kisan_ymd", ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.SVC_STA_KISAN_YMD));
		/* ++++++++++ v6.00.01 変更終了 ++++++++++ */
		
		/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
		// 予約適用年月日（入力）
		childMap.put("input_rsv_aply_ymd", getRsvAplyYmd(ccMsg, temporaryData));
		/* ++++++++++ v9.00.00 追加終了 ++++++++++ */
		/* ++++++++++ v10.00.02 追加開始 ++++++++++ */
		// 端末機器種別コード
		String kikiSbtCD = ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD);
		if ("P0".equals(kikiSbtCD))
		{
			// 保証・補償期間開始日算出基準年月日
			childMap.put("hcprd_stad_snststd_ymd", ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.HCPRD_STAD_SNSTSTD_YMD));
			
			// 保証・補償期間開始日算出基準年月日識別コード
			childMap.put("hcprd_stad_snststd_ymd_scd", ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.HCPRD_STAD_SNSTSTD_YMD_SCD));
		}
		else
		{
			// 保証・補償期間開始日算出基準年月日
			childMap.put("hcprd_stad_snststd_ymd", new String());
			
			// 保証・補償期間開始日算出基準年月日識別コード
			childMap.put("hcprd_stad_snststd_ymd_scd", new String());
		}
		/* ++++++++++ v10.00.02 追加終了 ++++++++++ */
		
		/* ++++++++++ v10.00.01 追加開始 ++++++++++ */
		// 出荷完了時処理済フラグ
		childMap.put("shka_fin_ji_syrzm_flg", ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.SHKA_FIN_JI_SYRZM_FLG));
		/* ++++++++++ v10.00.01 追加終了 ++++++++++ */
		
		list.add(childMap);

		outMap.put("kiki_list", list);

		JKKKikiAddCC jKkkikiAddCC = new JKKKikiAddCC();
		jKkkikiAddCC.addKikiInfo(handle, param, KIKI_CREATE_CC_PARAM);
		
	}
	
	/**
	 * 進捗登録SCを呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param svc_kei_no
	 * @param prg_tkjk
	 * @return boolean
	 * @throws Throwable 
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void execShinchokuToroku(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData,
									String svc_kei_no,
									String prg_tkjk) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// 申込明細番号明細番号を取得
		String mskm_dtl_no= getMskmDtlNo(param);
		
		if("".equals(mskm_dtl_no))
		{
			CAANMsg ekk0081a010CBSMsg = (CAANMsg)temporaryData.get("EKK0081A010_WORK");
			mskm_dtl_no = ekk0081a010CBSMsg.getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO);
		}
		
//		StringBuilder sb = new StringBuilder();
//		
//		sb.append("処理区分：割賦引継　");
//		sb.append("　引継種別：" + (String)ccMsg.get("hktgi_div_nm"));
//		sb.append("　引継先お客さまＩＤ：" + (String)ccMsg.get("sysid"));
		
		/* ++++++++++ vv6.00.00 変更開始 ++++++++++ */
		String tkjk1 = "";
		String tkjk2 = "";
		if(prg_tkjk.length() > 128)
		{
			tkjk1 = prg_tkjk.substring(0,128);
			if(prg_tkjk.length() > 256)
			{
				tkjk2 = prg_tkjk.substring(128,256);
			}
			else
			{
				tkjk2 = prg_tkjk.substring(128);
			}
		}
		else
		{
			tkjk1 = prg_tkjk;
		}
		/* ++++++++++ vv6.00.00 変更終了 ++++++++++ */
		
		// 進捗登録SC
		// ***** EKK1091D010（進捗登録）*****
		Object[][] ekk1091d010IN = {
			{EKK1091D010CBSMsg.TEMPLATEID,             TEMPLATE_ID_EKK1091D010},
			{EKK1091D010CBSMsg.FUNC_CODE,              ccMsg.get("func_code")},
			{EKK1091D010CBSMsg.MSKM_DTL_NO,            mskm_dtl_no},
//			{EKK1091D010CBSMsg.SEIKY_KEI_NO,           ""},
//			{EKK1091D010CBSMsg.SEIKY_WAY_NO_KOZA,      ""},
//			{EKK1091D010CBSMsg.SEIKY_WAY_NO_CRECARD,   ""},
			{EKK1091D010CBSMsg.SVC_KEI_NO,             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")},
			{EKK1091D010CBSMsg.IDO_DTM,                ccMsg.get("sysdate_stp")},
			{EKK1091D010CBSMsg.PRG_STAT,               "G003"},	// 割賦情報引継完了:G003
			{EKK1091D010CBSMsg.PRG_MEMO,               ""},
			/* ++++++++++ vv6.00.00 変更開始 ++++++++++ */
			{EKK1091D010CBSMsg.PRG_TKJK_1,             tkjk1},
			{EKK1091D010CBSMsg.PRG_TKJK_2,             tkjk2},
//			{EKK1091D010CBSMsg.PRG_TKJK_1,             prg_tkjk},
//			{EKK1091D010CBSMsg.PRG_TKJK_2,             ""},
			/* ++++++++++ vv6.00.00 変更終了 ++++++++++ */
		};
		
		// 登録データを格納します。
		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);
		
	}
	
	
	/**
	 * 機器提供サービス契約締結を呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return CAANMsg
	 * @throws Throwable 
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0341C040(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// 機器登録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 = (HashMap<String, Object>)createList.get(0);
		
		// 機器提供サービス契約締結SC呼び出し
		// ***** EKK0341C040（機器提供サービス契約締結）*****
		Object[][] ekk0341c040IN = {
			{EKK0341C040CBSMsg.TEMPLATEID,        TEMPLATE_ID_EKK0341C040},
			{EKK0341C040CBSMsg.FUNC_CODE,         ccMsg.get("func_code")},
			{EKK0341C040CBSMsg.KKTK_SVC_KEI_NO,   (String)kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO)},
			{EKK0341C040CBSMsg.IDO_DIV,            ccMsg.get("ido_div")},
			{EKK0341C040CBSMsg.UPD_DTM_BF,         getSvcUpDtm(param)}
		};
		
		CAANMsg ekk0341c040cbsMsg_out = callSC(handle, scCall, param, dataMapKey, ekk0341c040IN);
		// 更新タイムスタンプをワーク領域にセットします。
		setSvcUpDtm(param, ekk0341c040cbsMsg_out.getString(EKK0341C040CBSMsg.UPD_DTM));
		
	}
	
	/**
	 * 機器提供サービス契約機器設置完了を呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return CAANMsg
	 * @throws Throwable 
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void execKktkSvcSetFin(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// 機器登録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 = (HashMap<String, Object>)createList.get(0);
		
		CAANMsg ekk0081a010CBSMsg = (CAANMsg)temporaryData.get("EKK0081A010_WORK");
		
		// 機器提供サービス契約機器設置完了SC呼び出し
		// ***** EKK0341C110（機器提供サービス契約機器設置完了）*****
		Object[][] ekk0341c110IN = {
			{EKK0341C110CBSMsg.TEMPLATEID,        TEMPLATE_ID_EKK0341C110},
			{EKK0341C110CBSMsg.FUNC_CODE,         ccMsg.get("func_code")},
			{EKK0341C110CBSMsg.KKTK_SVC_KEI_NO,   (String)kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO)},
			{EKK0341C110CBSMsg.KIKI_SEIZO_NO,     (String)kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO)},
			{EKK0341C110CBSMsg.TAKNKIKI_MODEL_CD, (String)kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD)},
			{EKK0341C110CBSMsg.HUZOKUHIN_MODEL_CD, ""},
			{EKK0341C110CBSMsg.HOSHO_STAYMD,       ""},
			// ++++++++++ v4.03.00 ++++++++++ str
//			{EKK0341C110CBSMsg.SVC_STA_YMD,        ccMsg.get("unyo_ymd")},
//			{EKK0341C110CBSMsg.SVC_CHRG_STAYMD,    ccMsg.get("unyo_ymd")},
			// ++++++++++ v4.03.00 ++++++++++ end
			{EKK0341C110CBSMsg.SVC_STA_YMD,        ""},
			{EKK0341C110CBSMsg.SVC_CHRG_STAYMD,    ""},
			{EKK0341C110CBSMsg.IDO_DIV,            ccMsg.get("ido_div")},
			{EKK0341C110CBSMsg.UPD_DTM_BF,         getSvcUpDtm(param)},
			{EKK0341C110CBSMsg.SKJ_YKJT,           "01"}// 01：即時
		};
		
		CAANMsg ekk0341c110cbsMsg_out = callSC(handle, scCall, param, dataMapKey, ekk0341c110IN);
		// 更新タイムスタンプをワーク領域にセットします。
		setSvcUpDtm(param, ekk0341c110cbsMsg_out.getString(EKK0341C110CBSMsg.UPD_DTM));
		
	}
	
	/**
	 * 機器提供サービス契約解約処理
	 * <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0341C340(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		/* ++++++++++ v6.00.01 変更開始 ++++++++++ */
		CAANMsg[] ekk0341a010cbsmsglist = (CAANMsg[])temporaryData.get("EKK0341A010_WORK");
		/* ++++++++++ v6.00.01 変更終了 ++++++++++ */
		
		String mskm_dtl_no =getMskmDtlNo(param);
		
		if("".equals(mskm_dtl_no))
		{
			CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get("EKK0081A010_WORK");
			mskm_dtl_no = getNullToStr((String)ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO));
		}
		
		// ********** IT1-2012-0001934 str **********
		/* ++++++++++ v8.00.01 修正開始 ++++++++++ */
//		// 料金計算対象年月
//		String next_month = getNullToStr((String)ccMsg.get("ryokn_kei_next_month"));
		CAANMsg[] ech0501b010CBSMsg1list = (CAANMsg[])temporaryData.get("ECH0501B010_WORK");
		String next_month = ech0501b010CBSMsg1list[0].getString(ECH0501B010CBSMsg1List.SEIKY_YM);
		/* ++++++++++ v8.00.01 修正終了 ++++++++++ */
		// 料金計算対象年月の末日を取得
		if(!"".equals(next_month))
		{
			next_month = next_month + JPCDateUtil.getEndOfMonth(next_month);
		}
		// ********** IT1-2012-0001934 end **********
		
		// ***** EKK0341C340（機器提供サービス契約解約）*****
		Object[][] ekk0341c340IN = {
				{EKK0341C340CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0341C340},
				{EKK0341C340CBSMsg.FUNC_CODE,         ccMsg.get("func_code")},
				/* ++++++++++ v6.00.01 変更開始 ++++++++++ */
//				{EKK0341C340CBSMsg.KKTK_SVC_KEI_NO,   ccMsg.get("moto_kktk_svc_kei_no")},
				{EKK0341C340CBSMsg.KKTK_SVC_KEI_NO,   ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO)},
				/* ++++++++++ v6.00.01 変更終了 ++++++++++ */
				{EKK0341C340CBSMsg.MSKM_DTL_NO,       mskm_dtl_no},
				{EKK0341C340CBSMsg.RSV_TSTA_KIBO_YMD, ""},
				// ******* 【IT1-2012-0001934】 str *********
				{EKK0341C340CBSMsg.SVC_ENDYMD,        next_month},
				{EKK0341C340CBSMsg.SVC_CHRG_ENDYMD,   next_month},
//				{EKK0341C340CBSMsg.SVC_ENDYMD,        ccMsg.get("unyo_ymd")},
//				{EKK0341C340CBSMsg.SVC_CHRG_ENDYMD,   ccMsg.get("unyo_ymd")},
				// ******* 【IT1-2012-0001934】 end *********
				{EKK0341C340CBSMsg.SVC_DLRE_CD,       ""},
				{EKK0341C340CBSMsg.SVC_DLRE_MEMO,     ""},
				{EKK0341C340CBSMsg.ZANCHI_FLG,        ""},
				{EKK0341C340CBSMsg.PNLTY_HASSEI_CD,   ""},
				{EKK0341C340CBSMsg.IDO_DIV,           ccMsg.get("ido_div")},
				{EKK0341C340CBSMsg.TAKNKIKI_IDO_CD,   TAKNKIKI_IDO_CD_03},
				{EKK0341C340CBSMsg.UPD_DTM_BF,        getMotoSvcUpDtm(param)}
		};
		
		// S-I/F 実行
		CAANMsg ekk0341c340Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0341c340IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		setMotoSvcUpDtm(param, ekk0341c340Msg_out.getString(EKK0341C340CBSMsg.UPD_DTM));
	}
	
	/**
	 * 機器提供サービス契約解約確定処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0341C350(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[] ekk0341a010cbsmsglist = (CAANMsg[])temporaryData.get("EKK0341A010_WORK");
		
		// ******* 【IT1-2012-0001934】 str *********
		/* ++++++++++ v8.00.01 修正開始 ++++++++++ */
		// 料金計算対象年月
//		String next_month = getNullToStr((String)ccMsg.get("ryokn_kei_next_month"));
		CAANMsg[] ech0501b010CBSMsg1list = (CAANMsg[])temporaryData.get("ECH0501B010_WORK");
		String next_month = ech0501b010CBSMsg1list[0].getString(ECH0501B010CBSMsg1List.SEIKY_YM);
		/* ++++++++++ v8.00.01 修正終了 ++++++++++ */
		
		// 料金計算対象年月の末日を取得
		if(!"".equals(next_month))
		{
			next_month = next_month + JPCDateUtil.getEndOfMonth(next_month);
		}
		// ******* 【IT1-2012-0001934】 end *********
		
		// ***** EKK0341C350（機器提供サービス契約解約確定）*****
		Object[][] ekk0341c350IN = {
				{EKK0341C350CBSMsg.TEMPLATEID,      TEMPLATE_ID_EKK0341C350},
				{EKK0341C350CBSMsg.FUNC_CODE,       ccMsg.get("func_code")},
				/* ++++++++++ v6.00.01 変更開始 ++++++++++ */
//				{EKK0341C350CBSMsg.KKTK_SVC_KEI_NO, ccMsg.get("moto_kktk_svc_kei_no")},
				{EKK0341C350CBSMsg.KKTK_SVC_KEI_NO, ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO)},
				/* ++++++++++ v6.00.01 変更終了 ++++++++++ */
				// ******* 【IT1-2012-0001934】 str *********
//				{EKK0341C350CBSMsg.SVC_ENDYMD,      ccMsg.get("unyo_ymd")},
//				{EKK0341C350CBSMsg.SVC_CHRG_ENDYMD, ccMsg.get("unyo_ymd")},
				{EKK0341C350CBSMsg.SVC_ENDYMD,      next_month},
				{EKK0341C350CBSMsg.SVC_CHRG_ENDYMD, next_month},
				// ******* 【IT1-2012-0001934】 end *********
				{EKK0341C350CBSMsg.SVC_DLRE_CD,     "01"}, // "01"固定
				{EKK0341C350CBSMsg.SVC_DLRE_MEMO,   ""},
				{EKK0341C350CBSMsg.ZANCHI_FLG,      ""},
				{EKK0341C350CBSMsg.TAKNKIKI_IDO_CD, ""},
				{EKK0341C350CBSMsg.KAISHU_KIKI_UM,  ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.KAISHU_KIKI_UM)},
				{EKK0341C350CBSMsg.UPD_DTM_BF,      getMotoSvcUpDtm(param)}
		};
		// S-I/F 実行
		CAANMsg ekk0341c350Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0341c350IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		setMotoSvcUpDtm(param, ekk0341c350Msg_out.getString(EKK0341C350CBSMsg.UPD_DTM));
	}
	
	/**
	 * オプションサービス契約解約処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0351C240(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[] ekk0351b010cbsmsg = (CAANMsg[])temporaryData.get("EKK0351B010_WORK");
		
		// ******* 【IT1-2012-0001934】 str *********
		/* ++++++++++ v8.00.01 修正開始 ++++++++++ */
		// 料金計算対象年月
//		String next_month = getNullToStr((String)ccMsg.get("ryokn_kei_next_month"));
		CAANMsg[] ech0501b010CBSMsg1list = (CAANMsg[])temporaryData.get("ECH0501B010_WORK");
		String next_month = ech0501b010CBSMsg1list[0].getString(ECH0501B010CBSMsg1List.SEIKY_YM);
		/* ++++++++++ v8.00.01 修正終了 ++++++++++ */
		
		// 料金計算対象年月の末日を取得
		if(!"".equals(next_month))
		{
			next_month = next_month + JPCDateUtil.getEndOfMonth(next_month);
		}
		// ******* 【IT1-2012-0001934】 end *********
		
		// ***** EKK0351C250（オプションサービス契約解約処理）*****
		Object[][] ekk0351c240IN = {
				{EKK0351C240CBSMsg.TEMPLATEID,      TEMPLATE_ID_EKK0351C240},
				{EKK0351C240CBSMsg.FUNC_CODE,       ccMsg.get("func_code")},
				{EKK0351C240CBSMsg.OP_SVC_KEI_NO,   ekk0351b010cbsmsg[0].getString(EKK0351B010CBSMsg1List.OP_SVC_KEI_NO)},
/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
				{EKK0351C240CBSMsg.MSKM_DTL_NO,     getMskmDtlNo(param)},
/* ++++++++++ v8.00.00 追加終了 ++++++++++ */
//				{EKK0351C240CBSMsg.SVC_ENDYMD,      next_month},
//				{EKK0351C240CBSMsg.SVC_CHRG_ENDYMD, next_month},
				{EKK0351C240CBSMsg.IDO_DIV,         ccMsg.get("ido_div")},
				/* ++++++++++ v4.04.00 追加開始 ++++++++++ */
				{EKK0351C240CBSMsg.PNLTY_HASSEI_CD, PNLTY_HASSEI_CD_NASHI},
				/* ++++++++++ v4.04.00 追加完了 ++++++++++ */
				{EKK0351C240CBSMsg.UPD_DTM_BF,      getMotoSvcUpDtm(param)}
		};
		// S-I/F 実行
		CAANMsg ekk0351c240Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0351c240IN);
		// 更新タイムスタンプをワーク領域にセットします。
		setMotoSvcUpDtm(param, ekk0351c240Msg_out.getString(EKK0351C240CBSMsg.UPD_DTM));
	}
	
	/**
	 * オプションサービス契約解約確定処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0351C250(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[] ekk0351b010cbsmsg = (CAANMsg[])temporaryData.get("EKK0351B010_WORK");
		
		// ******* 【IT1-2012-0001934】 str *********
		/* ++++++++++ v8.00.01 修正開始 ++++++++++ */
		// 料金計算対象年月
//		String next_month = getNullToStr((String)ccMsg.get("ryokn_kei_next_month"));
		CAANMsg[] ech0501b010CBSMsg1list = (CAANMsg[])temporaryData.get("ECH0501B010_WORK");
		String next_month = ech0501b010CBSMsg1list[0].getString(ECH0501B010CBSMsg1List.SEIKY_YM);
		/* ++++++++++ v8.00.01 修正終了 ++++++++++ */
		
		// 料金計算対象年月の末日を取得
		if(!"".equals(next_month))
		{
			next_month = next_month + JPCDateUtil.getEndOfMonth(next_month);
		}
		// ******* 【IT1-2012-0001934】 end *********
		
		// ***** EKK0351C250（オプションサービス契約解約確定処理）*****
		Object[][] ekk0351c250IN = {
				{EKK0351C250CBSMsg.TEMPLATEID,      TEMPLATE_ID_EKK0351C250},
				{EKK0351C250CBSMsg.FUNC_CODE,       ccMsg.get("func_code")},
				{EKK0351C250CBSMsg.OP_SVC_KEI_NO,   ekk0351b010cbsmsg[0].getString(EKK0351B010CBSMsg1List.OP_SVC_KEI_NO)},
				// ******* 【IT1-2012-0001934】 str *********
//				{EKK0351C250CBSMsg.SVC_ENDYMD,      ccMsg.get("unyo_ymd")},
//				{EKK0351C250CBSMsg.SVC_CHRG_ENDYMD, ccMsg.get("unyo_ymd")},
				{EKK0351C250CBSMsg.SVC_ENDYMD,      next_month},
				{EKK0351C250CBSMsg.SVC_CHRG_ENDYMD, next_month},
				// ******* 【IT1-2012-0001934】 end *********
				{EKK0351C250CBSMsg.SVC_DLRE_CD,     "01"}, // "01"固定
				{EKK0351C250CBSMsg.SVC_DLRE_MEMO,   ""},
				{EKK0351C250CBSMsg.DSL_TNT_USER_ID, ""},
				{EKK0351C250CBSMsg.IDO_DIV,         ccMsg.get("ido_div")},
				{EKK0351C250CBSMsg.DSLJI_CHRG_FLG,  "1"},
				{EKK0351C250CBSMsg.UPD_DTM_BF,      getMotoSvcUpDtm(param)}
		};
		// S-I/F 実行
		CAANMsg ekk0351c250Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0351c250IN);
		
	}
	
	/**
	 * オプションサービス契約＜ISP＞登録処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0361D010(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 mskm_dtl_no =getMskmDtlNo(param);
		
		if("".equals(mskm_dtl_no))
		{
			CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get("EKK0081A010_WORK");
			mskm_dtl_no = getNullToStr((String)ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO));
		}
		
		
		CAANMsg[] ekk0591b001CBSMsgList = (CAANMsg[])temporaryData.get("EKK0591B001_WORK");
		
		// ***** EKK0361D010（オプションサービス契約＜ISP＞登録）*****
		Object[][] ekk0361d010IN = {
				{EKK0361D010CBSMsg.TEMPLATEID,      TEMPLATE_ID_EKK0361D010},
				{EKK0361D010CBSMsg.FUNC_CODE,       ccMsg.get("func_code")},
				{EKK0361D010CBSMsg.OP_SVC_CD,       ccMsg.get("op_svc_cd")},
				{EKK0361D010CBSMsg.PCRS_CD,         ekk0591b001CBSMsgList[0].getString(EKK0591B001CBSMsg1List.PCRS_CD)},
				{EKK0361D010CBSMsg.PPLAN_CD,        ekk0591b001CBSMsgList[0].getString(EKK0591B001CBSMsg1List.PPLAN_CD)},
				{EKK0361D010CBSMsg.OYA_KEI_SKBT_CD, "01"},
				{EKK0361D010CBSMsg.SEIKY_KEI_NO,    ccMsg.get("saki_seiky_kei_no")},
				{EKK0361D010CBSMsg.SVC_KEI_NO,      ccMsg.get("saki_svc_kei_no")},
				{EKK0361D010CBSMsg.SYSID,           ccMsg.get("sysid")},
				{EKK0361D010CBSMsg.MSKM_DTL_NO,     mskm_dtl_no},
				{EKK0361D010CBSMsg.IDO_DIV,         ccMsg.get("ido_div")},
				{EKK0361D010CBSMsg.UPD_DTM_BF,      getSvcUpDtm(param)}// 引継先サービス契約
		};
		// S-I/F 実行
		CAANMsg ekk0361d010Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0361d010IN);
		
		temporaryData.put("EKK0361D010_WORK", ekk0361d010Msg_out);
		
		// 更新タイムスタンプをワーク領域にセットします。
		setSvcUpDtm(param, ekk0361d010Msg_out.getString(EKK0361D010CBSMsg.UPD_DTM));
		
	}
	
	/**
	 * オプションサービス契約＜ISP＞照査処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return CAANMsg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0361C010(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// オプションサービス契約<ISP>登録結果を取得する
		CAANMsg ekk0361d010 = (CAANMsg)temporaryData.get("EKK0361D010_WORK");
		
		// ***** EKK0631C010（オプションサービス契約＜ISP＞照査）******
		Object[][] ekk0361c010IN = {
				{EKK0361C010CBSMsg.TEMPLATEID,         TEMPLATE_ID_EKK0361C010},
				{EKK0361C010CBSMsg.FUNC_CODE,          ccMsg.get("func_code")},
				{EKK0361C010CBSMsg.OP_SVC_KEI_NO,      ekk0361d010.getString(EKK0361D010CBSMsg.OP_SVC_KEI_NO)},
				{EKK0361C010CBSMsg.IDO_DIV,            ccMsg.get("ido_div")},
				{EKK0361C010CBSMsg.SHOSA_DSL_FIN_CD,   ""},
				{EKK0361C010CBSMsg.DPAD_ID,            ""},
				{EKK0361C010CBSMsg.IPV6_AD_IFID,       ""},
				{EKK0361C010CBSMsg.UPD_DTM_BF,         getSvcUpDtm(param)},
		};
		
		// サービスインターフェース実行
		CAANMsg ekk0361c010Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0361c010IN);
		
		// 登録時の更新年月日時分秒をワークに設定する。
		setSvcUpDtm(param, ekk0361c010Msg_out.getString(EKK0361C010CBSMsg.UPD_DTM));
	}
	
	/**
	 * オプションサービス契約＜ISP＞締結処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return CAANMsg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0361C020(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// オプションサービス契約<ISP>登録結果を取得する
		CAANMsg ekk0361d010 = (CAANMsg)temporaryData.get("EKK0361D010_WORK");
		
		// ***** EKK0631C020（オプションサービス契約＜ISP＞締結）******
		Object[][] ekk0361c020IN = {
				{EKK0361C020CBSMsg.TEMPLATEID,         TEMPLATE_ID_EKK0361C020},
				{EKK0361C020CBSMsg.FUNC_CODE,          ccMsg.get("func_code")},
				{EKK0361C020CBSMsg.OP_SVC_KEI_NO,      ekk0361d010.getString(EKK0361D010CBSMsg.OP_SVC_KEI_NO)},
				{EKK0361C020CBSMsg.IDO_DIV,            ccMsg.get("ido_div")},
				{EKK0361C020CBSMsg.IPV6_AD_IFID,       ""},
				{EKK0361C020CBSMsg.RULE0059_AUTO_APLY, "0"},
				{EKK0361C020CBSMsg.UPD_DTM_BF,         getSvcUpDtm(param)},
		};
		
		// サービスインターフェース実行
		CAANMsg ekk0361c020Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0361c020IN);
		
		// 登録時の更新年月日時分秒をワークに設定する。
		setSvcUpDtm(param, ekk0361c020Msg_out.getString(EKK0361C020CBSMsg.UPD_DTM));
	}
	
	/**
	 * オプションサービス契約＜ISP＞開始処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0361C040(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 ekk0361d010cbsmsg = (CAANMsg)temporaryData.get("EKK0361D010_WORK");
		
		// ***** EKK0361C040（オプションサービス契約＜ISP＞開始処理）*****
		Object[][] ekk0361c040IN = {
				{EKK0361C040CBSMsg.TEMPLATEID,      TEMPLATE_ID_EKK0361C040},
				{EKK0361C040CBSMsg.FUNC_CODE,       ccMsg.get("func_code")},
				{EKK0361C040CBSMsg.OP_SVC_KEI_NO,   ekk0361d010cbsmsg.getString(EKK0361D010CBSMsg.OP_SVC_KEI_NO)},
				{EKK0361C040CBSMsg.SKJ_YKGT,        "01"}, // 即時
				{EKK0361C040CBSMsg.OP_HKTGI_SK_SVC_KEI_NO, ccMsg.get("saki_svc_kei_no")},
				{EKK0361C040CBSMsg.IDO_DIV,         ccMsg.get("ido_div")},
				{EKK0361C040CBSMsg.UPD_DTM_BF,      getSvcUpDtm(param)}// 引継先サービス契約
		};
		// S-I/F 実行
		CAANMsg ekk0361c040Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0361c040IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		setSvcUpDtm(param, ekk0361c040Msg_out.getString(EKK0361C040CBSMsg.UPD_DTM));
	}
	
	/**
	 * 割賦契約解約処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK2541C190(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		/* ++++++++++ v8.00.01 修正開始 ++++++++++ */
		// 料金計算対象年月
//		String next_month = getNullToStr((String)ccMsg.get("ryokn_kei_next_month"));
		CAANMsg[] ech0501b010CBSMsg1list = (CAANMsg[])temporaryData.get("ECH0501B010_WORK");
		String next_month = ech0501b010CBSMsg1list[0].getString(ECH0501B010CBSMsg1List.SEIKY_YM);
		/* ++++++++++ v8.00.01 修正終了 ++++++++++ */
		
		// 料金計算対象年月の末日を取得
		if(!"".equals(next_month))
		{
			next_month = next_month + JPCDateUtil.getEndOfMonth(next_month);
		}
		
		// ***** EKK2541C190（割賦契約解約）*****
		Object[][] ekk2541c190IN = {
				{EKK2541C190CBSMsg.TEMPLATEID,      TEMPLATE_ID_EKK2541C190},
				{EKK2541C190CBSMsg.FUNC_CODE,       ccMsg.get("func_code")},
				{EKK2541C190CBSMsg.KAP_KEI_NO,      ccMsg.get("moto_kap_kei_no")},
/* ++++++++++ v8.00.00 変更開始 ++++++++++ */
//				{EKK2541C190CBSMsg.MSKM_DTL_NO,     ccMsg.get("moto_mskm_dtl_no")},
				{EKK2541C190CBSMsg.MSKM_DTL_NO,     getMskmDtlNo(param)},
/* ++++++++++ v8.00.00 変更終了 ++++++++++ */
				{EKK2541C190CBSMsg.IDO_DIV,         ccMsg.get("ido_div")},
				{EKK2541C190CBSMsg.PNLTY_HASSEI_CD, "0"},
				{EKK2541C190CBSMsg.KAP_SEIKY_ENDYMD, next_month},
				{EKK2541C190CBSMsg.KAP_KEI_DSL_YMD, next_month},
				{EKK2541C190CBSMsg.UPD_DTM_BF,      ccMsg.get("moto_upd_dtm")}
		};
		// S-I/F 実行
		callSC(handle, scCall, param, dataMapKey, ekk2541c190IN);
		
	}
	
	
	/**
	 * 割賦契約引継登録処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK2541D020(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData,
									String mansion_bukken_cd,
									HashMap<String, Object> kktkSvcKeiMap) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		/* ++++++++++ v6.00.01 変更開始 ++++++++++ */
		// 機器登録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 = (HashMap<String, Object>)createList.get(0);
		/* ++++++++++ v6.00.01 変更終了 ++++++++++ */
		
		CAANMsg ekk0081a010cbsmsg = (CAANMsg)temporaryData.get("EKK0081A010_WORK");
		
//		String ymd = (String)ccMsg.get("unyo_ymd");
		String ymd = "";
		if(SVC_KEI_STAT_100.equals(ekk0081a010cbsmsg.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT)))
		{
			// サービス課金開始日
			String svc_chrg_ymd = ekk0081a010cbsmsg.getString(EKK0081A010CBSMsg1List.SVC_CHRG_STAYMD);
			/* ++++++++++ v8.00.01 修正開始 ++++++++++ */
			// 割賦請求終了日（料金計算対象年月）
//			String next_month = getNullToStr((String)ccMsg.get("ryokn_kei_next_month"));
			CAANMsg[] ech0501b010CBSMsg1list = (CAANMsg[])temporaryData.get("ECH0501B010_WORK");
			String next_month = ech0501b010CBSMsg1list[0].getString(ECH0501B010CBSMsg1List.SEIKY_YM);
			/* ++++++++++ v8.00.01 修正終了 ++++++++++ */
			
			// 料金計算対象年月の末日を取得
			if(!"".equals(next_month))
			{
				next_month = next_month + JPCDateUtil.getEndOfMonth(next_month);
			}
//			String seiky_end_ymd = (String)ccMsg.get("moto_kap_kei_seiky_end_ymd");
			String seiky_end_ymd = next_month;
			
			// 引継元の割賦終了日以前に、引継先のネット契約の課金が開始された場合
			if(seiky_end_ymd.compareTo(svc_chrg_ymd) >= 0)
			{
				
				// 引継元の割賦請求終了年月日の翌月月初を取得
				String addOneMonth = JPCDateUtil.addMonth(seiky_end_ymd, 1);
				if(addOneMonth.length() == 8)
				{
					ymd = addOneMonth.substring(0, 6) + "01";
				}
				
			}
			// 引継元の割賦終了日以降に、引継先のネット契約の課金が開始された場合
			else if(seiky_end_ymd.compareTo(svc_chrg_ymd) < 0)
			{
				/* ++++++++++ vv6.00.00 変更開始 ++++++++++ */
				//「マンション物件コード=マンション」の場合
				if(MANSION_BUKKEN_CD.equals(mansion_bukken_cd))
				{
					if(svc_chrg_ymd.length() == 8)
					{
						ymd = svc_chrg_ymd.substring(0, 6) + "01";
					}
				}
				else
				{
					// 引継先のネット契約のサービス課金開始年月日の翌月月初を取得
					String addOneMonth = JPCDateUtil.addMonth(svc_chrg_ymd, 1);
					if(addOneMonth.length() == 8)
					{
						ymd = addOneMonth.substring(0, 6) + "01";
					}
				}
				
//				CAANMsg ekk0081a010cbsmsg_moto = (CAANMsg)temporaryData.get("EKK0081A010_MOTO");
//				// サービス課金開始日
//				String svc_chrg_ymd_moto = ekk0081a010cbsmsg_moto.getString(EKK0081A010CBSMsg1List.SVC_CHRG_STAYMD);
//				
//				// 引継元のネット契約のサービス課金開始年月日の翌月月初を取得
//				String addOneMonth = JPCDateUtil.addMonth(svc_chrg_ymd_moto, 1);
//				if(addOneMonth.length() == 8)
//				{
//					ymd = addOneMonth.substring(0, 6) + "01";
//				}
				/* ++++++++++ vv6.00.00 変更完了 ++++++++++ */
			}
		}
		else
		{
			/* ++++++++++ vv6.00.00 変更開始 ++++++++++ */
//			ymd = (String)ccMsg.get("unyo_ymd");
			ymd = MAX_YMD;
			/* ++++++++++ vv6.00.00 変更完了 ++++++++++ */
		}
		
		// ***** EKK2541D020（割賦契約引継登録）*****
		Object[][] ekk2541d020IN = {
				{EKK2541D020CBSMsg.TEMPLATEID,         TEMPLATE_ID_EKK2541D020},
				{EKK2541D020CBSMsg.FUNC_CODE,          ccMsg.get("func_code")},
				{EKK2541D020CBSMsg.KKTK_SVC_KEI_NO,    kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO)},
				{EKK2541D020CBSMsg.ADD_JI_KIKI_CHG_NO, kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO)},
				{EKK2541D020CBSMsg.MSKM_DTL_NO,        kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.MSKM_DTL_NO)},
				{EKK2541D020CBSMsg.IDO_DIV,            ccMsg.get("ido_div")},
				{EKK2541D020CBSMsg.KAP_KEI_CHRG_STAYMD, ymd}, 
				{EKK2541D020CBSMsg.HKTGI_MOTO_KAP_KEI_NO, ccMsg.get("moto_kap_kei_no")}
		};
		// S-I/F 実行
		callSC(handle, scCall, param, dataMapKey, ekk2541d020IN);
		
	}
	
	/**
	 * 申込内容承認登録処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0011D020(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// ***** EKK0011D020（申込内容承認登録）*****
		Object[][] ekk0011d020IN = {
				{EKK0011D020CBSMsg.TEMPLATEID,      TEMPLATE_ID_EKK0011D020},
				{EKK0011D020CBSMsg.FUNC_CODE,       ccMsg.get("func_code")},
				{EKK0011D020CBSMsg.SYSID,           ccMsg.get("sysid")},
				{EKK0011D020CBSMsg.MSKM_SBT_CD,     "00041"},
				{EKK0011D020CBSMsg.MSKM_UK_DTM,     ccMsg.get("opdate_stp")},
				{EKK0011D020CBSMsg.MSKM_YMD,        ccMsg.get("unyo_ymd")}, 
				{EKK0011D020CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD, "04"}
		};
		
		
		// 登録データを格納します。
		ArrayList<HashMap<String, Object>> inList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		
		// 申込形態コード "05"（書面）
		inMap.put(EKK0011D020CBSMsg1List.MSKM_FORM_CD, "05");
		
		inList.add(inMap);
		
		CAANMsg ekk0011d020Msg = callSCArray(handle, scCall, param, dataMapKey, ekk0011d020IN, "EKK0011D020CBSMsg1List", inList);
		
		CAANMsg[] ekk0011d020outlist = ekk0011d020Msg.getCAANMsgList(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);
		
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		if (ekk0011d020outlist != null) {
			// 登録した申込明細番号を作業領域に格納する
			setMskmDtlNo(param, getNullToStr(ekk0011d020outlist[0].getString(EKK0011D020CBSMsg1List.MSKM_DTL_NO)));
			// 機器登録CCに渡す申込明細番号を設定
			workMap.put("mskm_dtl_no", getNullToStr(ekk0011d020outlist[0].getString(EKK0011D020CBSMsg1List.MSKM_DTL_NO)));
		}
		
		workMap.put("ekk0011d020_upd_dtm", ekk0011d020Msg.getString(EKK0011D020CBSMsg.UPD_DTM));
		
	}
	
	/**
	 * 機器場所番号更新処理<br>
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void execKikiPlaceUpdate(SessionHandle handle, 
											ServiceComponentRequestInvoker scCall, 
											IRequestParameterReadWrite param, 
											String dataMapKey,
											HashMap<String, Object> temporaryData,
											HashMap<String, Object> kktkSvcKeiMap) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		/* ++++++++++ v6.00.01 変更開始 ++++++++++ */
		// 機器登録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 = (HashMap<String, Object>)createList.get(0);
		/* ++++++++++ v6.00.01 変更終了 ++++++++++ */
		
		String seizo_no = getNullToStr((String)kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO));
		
		CAANMsg[] ekk0251b003cbsmsglist = (CAANMsg[])temporaryData.get("EKK0251B003_SAKIWORK");
		
		if(!"".equals(seizo_no))
		{
			// ***** EKKA0020004（機器場所番号変更）*****
			Object[][] ekka0020004IN = {
					{ EKKA0020004CBSMsg.TEMPLATEID, TEMPLATE_ID_EKKA0020004 },
					{ EKKA0020004CBSMsg.FUNC_CODE, "1" },
			};
			
			// 検索データを格納します。
			ArrayList<HashMap<String, Object>> inList = new ArrayList<HashMap<String, Object>>();
			HashMap<String, Object> inMap = null;
			
			inMap = new HashMap<String, Object>();
			
			// ＫＥＹ＿宅内機器型式コード
			inMap.put(EKKA0020004CBSMsg1List.KEY_TK_MDL_CD, kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD));
			// ＫＥＹ＿機器製造番号
			inMap.put(EKKA0020004CBSMsg1List.KEY_KK_SEIZO_NO, seizo_no);
			// ＫＥＹ＿変更理由コード（場所番号変更）
			inMap.put(EKKA0020004CBSMsg1List.KEY_CHG_RSN_CD, "1");
			// ＫＥＹ＿宅内機器基本Ｔ更新日付
			inMap.put(EKKA0020004CBSMsg1List.KEY_BTRY_UPD_DTTM, ccMsg.get("kihont_upd_dttm"));
			// 設置場所番号
			inMap.put(EKKA0020004CBSMsg1List.SETPLACE_NO, ekk0251b003cbsmsglist[0].getString(EKK0251B003CBSMsg1List.KAISEN_PLACE_NO));
			// サービス契約番号
			inMap.put(EKKA0020004CBSMsg1List.SVC_KEI_NO, ccMsg.get("saki_svc_kei_no"));
				
			inList.add(inMap);
			
			CAANMsg ekka0020004CBSMsg
							= callSCArray(handle, scCall, param, dataMapKey, ekka0020004IN, "EKKA0020004CBSMsg1List", inList);
		}
	}
	
	/**
	 * 申込明細照査・後続業務依頼処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0021C060(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		Map<Object, Object> workMap = param.getMappingWorkArea();
		String upd_dtm_bf = (String)workMap.get("ekk0011d020_upd_dtm");
		
		// ***** EKK0021C060（申込明細照査・後続業務依頼）*****
		Object[][] ekk0021c060IN = {
				{EKK0021C060CBSMsg.TEMPLATEID,      TEMPLATE_ID_EKK0021C060},
				{EKK0021C060CBSMsg.FUNC_CODE,       ccMsg.get("func_code")},
				{EKK0021C060CBSMsg.KZKWRK_REQYMD,   ccMsg.get("unyo_ymd")},
				{EKK0021C060CBSMsg.MSKM_DTL_NO,     getMskmDtlNo(param)},
				{EKK0021C060CBSMsg.IDO_DIV,         ccMsg.get("ido_div")},
				{EKK0021C060CBSMsg.UPD_DTM_BF,      upd_dtm_bf}
		};
		// S-I/F 実行
		callSC(handle, scCall, param, dataMapKey, ekk0021c060IN);
		
	}
	
	/**
	 * 割引サービス引継設定ＣＣ呼び出し処理<br>
	 * 
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param ccMsg
	 * @param tempData
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void execWrisvcHktgiSetCall(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param,
										String dataMapKey,
										HashMap<String, Object> ccMsg,
										HashMap<String, Object> tempData,
										HashMap<String, Object> kktkSvcKeiMap) throws Throwable
	{
		param.setData(KEY_WRISVC_HKTGI_SETCC, new HashMap<String, Object>());
		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData(KEY_WRISVC_HKTGI_SETCC);
		
		// 引継元サービス契約情報を取得
		CAANMsg ekk0081a010msg_moto = (CAANMsg)tempData.get("EKK0081A010_MOTO");
		// 引継元機器提供サービス契約情報を取得
		CAANMsg[] ekk0341a010cbsmsglist = (CAANMsg[])tempData.get("EKK0341A010_WORK");
		// 引継元オプションサービス契約情報を取得
		CAANMsg[] ekk0351b010cbsmsg = (CAANMsg[])tempData.get("EKK0351B010_WORK");
		// 引継先サービス契約情報を取得
		CAANMsg ekk0081a010msg_saki = (CAANMsg)tempData.get("EKK0081A010_WORK");
		
		// 引継ぎ元サービス契約マップ
		HashMap<String, Object> motoMap = new HashMap<String, Object>();
		// サービス契約番号
		motoMap.put("SVC_KEI_NO", ekk0081a010msg_moto.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
		// サービス契約ステータス
		motoMap.put("SVC_KEI_STAT", ekk0081a010msg_moto.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
		// SYSID
		motoMap.put("SYSID", ekk0081a010msg_moto.getString(EKK0081A010CBSMsg1List.SYSID));
		// サービスコード
		motoMap.put("SVC_CD", ekk0081a010msg_moto.getString(EKK0081A010CBSMsg1List.SVC_CD));
		// サービス開始年月日
		motoMap.put("SVC_STA_YMD", ekk0081a010msg_moto.getString(EKK0081A010CBSMsg1List.SVC_STA_YMD));
		// サービス課金開始年月日
		motoMap.put("SVC_CHRG_STAYMD", ekk0081a010msg_moto.getString(EKK0081A010CBSMsg1List.SVC_CHRG_STAYMD));
		// サービス終了年月日
		motoMap.put("SVC_ENDYMD", ekk0081a010msg_moto.getString(EKK0081A010CBSMsg1List.SVC_ENDYMD));
		// サービス課金終了年月日
		motoMap.put("SVC_CHRG_ENDYMD", ekk0081a010msg_moto.getString(EKK0081A010CBSMsg1List.SVC_CHRG_ENDYMD));
		
		// 引継ぎ元機器提供サービス契約リスト
		ArrayList<HashMap<String, Object>> moto_kktk_svc_list = new ArrayList<HashMap<String, Object>>();
		// 引継ぎ元機器提供サービス契約マップ
		HashMap<String, Object> motokktkMap = new HashMap<String, Object>();
		// 機器提供サービス契約番号
		motokktkMap.put("KKTK_SVC_KEI_NO", (String)ccMsg.get("moto_kktk_svc_kei_no"));
		// 機器提供サービス契約ステータスは割引サービス設定CCで未使用のため、設定なし
		
		// 機器提供サービスコード
		motokktkMap.put("KKTK_SVC_CD", ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
		
		/* ++++++++++ v9.00.00 変更開始 ++++++++++ */
//		// 引継種別がオプションの場合
//		if(HKTGI_DIV_OPTION.equals(ccMsg.get("hktgi_div")))
//		{
		// ﾌﾟﾚﾐｱﾑﾊﾟｯｸ引継種別が移動の場合
		if(HKTGI_DIV_IDO.equals(ccMsg.get("hktgi_div")))
		{
		/* ++++++++++ v9.00.00 変更完了 ++++++++++ */
			
			// オプションサービス契約番号
			motokktkMap.put("OP_SVC_KEI_NO", ekk0351b010cbsmsg[0].getString(EKK0351B010CBSMsg1List.OP_SVC_KEI_NO));
		}
		moto_kktk_svc_list.add(motokktkMap);
		
		// 引継ぎ先サービス契約マップ
		HashMap<String, Object> sakiMap = new HashMap<String, Object>();
		// サービス契約番号
		sakiMap.put("SVC_KEI_NO", ekk0081a010msg_saki.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
		// サービス契約ステータス
		sakiMap.put("SVC_KEI_STAT", ekk0081a010msg_saki.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
		// SYSID
		sakiMap.put("SYSID", ekk0081a010msg_saki.getString(EKK0081A010CBSMsg1List.SYSID));
		// サービスコード
		sakiMap.put("SVC_CD", ekk0081a010msg_saki.getString(EKK0081A010CBSMsg1List.SVC_CD));
		// サービス開始年月日
		sakiMap.put("SVC_STA_YMD", ekk0081a010msg_saki.getString(EKK0081A010CBSMsg1List.SVC_STA_YMD));
		// サービス課金開始年月日
		sakiMap.put("SVC_CHRG_STAYMD", ekk0081a010msg_saki.getString(EKK0081A010CBSMsg1List.SVC_CHRG_STAYMD));
		// サービス終了年月日
		sakiMap.put("SVC_ENDYMD", ekk0081a010msg_saki.getString(EKK0081A010CBSMsg1List.SVC_ENDYMD));
		// サービス課金終了年月日
		sakiMap.put("SVC_CHRG_ENDYMD", ekk0081a010msg_saki.getString(EKK0081A010CBSMsg1List.SVC_CHRG_ENDYMD));
		
		// 引継ぎ先機器提供サービス契約リスト
		ArrayList<HashMap<String, Object>> saki_kktk_svc_list = new ArrayList<HashMap<String, Object>>();
		// 引継ぎ先機器提供サービス契約マップ
		HashMap<String, Object> sakikktkMap = new HashMap<String, Object>();
		
		/* ++++++++++ v6.00.01 変更開始 ++++++++++ */
		// 機器登録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 = (HashMap<String, Object>)createList.get(0);
		/* ++++++++++ v6.00.01 変更終了 ++++++++++ */
		
		// 機器提供サービス契約番号
		sakikktkMap.put("KKTK_SVC_KEI_NO", (String)kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		// 機器提供サービス契約ステータスは割引サービス設定CCで未使用のため、設定なし
		
		/* ++++++++++ v9.00.00 変更開始 ++++++++++ */
//		// 引継種別がオプションの場合
//		if(HKTGI_DIV_OPTION.equals(ccMsg.get("hktgi_div")))
//		{
		// ﾌﾟﾚﾐｱﾑﾊﾟｯｸ引継種別が移動または複写の場合
		if(HKTGI_DIV_IDO.equals(ccMsg.get("hktgi_div")) || HKTGI_DIV_FUKUSHA.equals(ccMsg.get("hktgi_div")))
		{
		/* ++++++++++ v9.00.00 変更完了 ++++++++++ */
			
			// オプションサービス契約<ISP>登録結果を取得する
			CAANMsg ekk0361d010 = (CAANMsg)tempData.get("EKK0361D010_WORK");
			
			// オプションサービス契約番号
			sakikktkMap.put("OP_SVC_KEI_NO", ekk0361d010.getString(EKK0351B010CBSMsg1List.OP_SVC_KEI_NO));
		}
		saki_kktk_svc_list.add(sakikktkMap);
		
		outMap.put("MOTO_KK_T_SVC_KEI", motoMap);
		outMap.put("MOTO_KK_T_KKTK_SVC_KEI_List", moto_kktk_svc_list);
		outMap.put("SAKI_KK_T_SVC_KEI", sakiMap);
		outMap.put("SAKI_KK_T_KKTK_SVC_KEI_List", saki_kktk_svc_list);
		
		JKKWrisvcHktgiSetCC jkkwrisvcsetcc = new JKKWrisvcHktgiSetCC();
		jkkwrisvcsetcc.execute(handle, param, KEY_WRISVC_HKTGI_SETCC);
	}
	
	/**
	 * 申込明細番号を取得します。
	 * @param param リクエストパラメータ
	 * @param dataMapKey
	 * @param temporaryData
	 * @return String
	 * @throws Exception 
	 */
	private String getMskmDtlNo(IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData) throws Exception
	{
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get("EKK0081A010_WORK");

		String mskmDtlNo = getNullToStr((String)ccMsg.get("moto_mskm_dtl_no"));
		
		if("".equals(mskmDtlNo))
		{
			mskmDtlNo = getNullToStr((String)ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO));
		}

		return mskmDtlNo;
	}
	
	/**
	 * 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))
		{
			throw new SCCallException("戻り値不正", return_code.toString(), status);
		}
		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 (((String)mappingData[i][0]).startsWith("key_"))
			{
				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;
	}
	

	/**
	 * 訪問対応依頼登録チェックＣＣのチェック処理用サービスインターフェイス作成。<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));
//		
//		// チェック用サービスインターフェイス
//		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;
	}
	
	/**
	 * メッセージ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);

	}
	
	/**
	 * @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;
	}
	
	/**
	 * 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))
		{
			throw new SCCallException("戻り値不正", return_code.toString(), status);
		}
		return msg;
	}
	
	/**
	 * 
	 * @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;
	}
	
	
	/**
	 * サービス契約の更新タイムスタンプを取得します。
	 * @param param リクエストパラメータ
	 * @return UpDtm 更新時間
	 * @throws Exception 
	 */
	private String getSvcUpDtm(IRequestParameterReadWrite param) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		return (String)workMap.get(SAKI_COM_SVC_UP_DTM);

	}
	
	/**
	 * サービス契約の更新タイムスタンプを取得します。
	 * @param param リクエストパラメータ
	 * @return UpDtm 更新時間
	 * @throws Exception 
	 */
	private String getMotoSvcUpDtm(IRequestParameterReadWrite param) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		return (String)workMap.get(MOTO_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(SAKI_COM_SVC_UP_DTM, updDtm);
		}

	}

	/**
	 * サービス契約の更新タイムスタンプを作業領域に格納します。
	 * @param param リクエストパラメータ
	 * @param updDtm 更新時間
	 * @throws Exception 
	 */
	private void setMotoSvcUpDtm(IRequestParameterReadWrite param, String updDtm) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		if(updDtm != null && !"".equals(updDtm))
		{
			workMap.put(MOTO_COM_SVC_UP_DTM, updDtm);
		}

	}
	
	/**
	 * 申込明細番号を取得します。
	 * @param param リクエストパラメータ
	 * @return String 申込明細番号
	 * @throws Exception 
	 */
	private String getMskmDtlNo(IRequestParameterReadWrite param) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		return (String)workMap.get(KEY_MSKM_DTL_NO);

	}
	
	/**
	 * 申込明細番号を作業領域に格納します。
	 * @param param リクエストパラメータ
	 * @param mskm_dtl_no 申込明細番号
	 * @throws Exception 
	 */
	private void setMskmDtlNo(IRequestParameterReadWrite param, String mskm_dtl_no) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();
		
		if(mskm_dtl_no != null && !"".equals(mskm_dtl_no))
		{
			workMap.put(KEY_MSKM_DTL_NO, mskm_dtl_no);
		}

	}
	
	/* ++++++++++ v9.00.00 追加開始 ++++++++++ */
	/**
	 * 機器オプションサービス契約一覧照会（複合検索）メソッド <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @return 
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg execEKK2811B504(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[] ekk0341a010cbsmsglist = (CAANMsg[])temporaryData.get("EKK0341A010_WORK");
		
		// 機器オプションサービス契約情報を取得
		// ***** EKK2811B504（機器オプションサービス契約一覧照会（複合検索））*****
		Object[][] eKK2811B504IN = {
				{EKK2811B504CBSMsg.TEMPLATEID,          TEMPLATE_ID_EKK2811B504},
				{EKK2811B504CBSMsg.FUNC_CODE,           FUNC_CODE_1},
				{EKK2811B504CBSMsg.KEY_KKTK_SVC_KEI_NO, ekk0341a010cbsmsglist[0].getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO)},
				{EKK2811B504CBSMsg.KEY_RSV_APLY_YMD,    ccMsg.get("unyo_ymd")}
		};
		
		// S-I/F実行・出力結果を格納する。
		CAANMsg[] ekk2811b504cbsmsglist = callSC(handle, scCall, param, dataMapKey, eKK2811B504IN).getCAANMsgList(EKK2811B504CBSMsg.EKK2811B504CBSMSG1LIST);
		
		// 解約対象の機器オプションのみを返す
		for (CAANMsg ekk2811b504Msg : ekk2811b504cbsmsglist)
		{
			// 機器オプションサービスコードを取得
			String kkop_svc_cd = ekk2811b504Msg.getString(EKK2811A010CBSMsg1List.KKOP_SVC_CD);
			// 機器オプションサービス契約ステータスを取得
			String kkop_stat = ekk2811b504Msg.getString(EKK2811A010CBSMsg1List.KKOP_SVC_KEI_STAT);
			
			// 機器オプションサービスコードが"端末保障"以外の場合、処理しない
			if (!KKOP_SVC_CD_G03.equals(kkop_svc_cd))
			{
				continue;
			}
			
			return ekk2811b504Msg;
		}
		
		return null;
	}
	
	/**
	 * 機器オプションサービス契約登録 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param kktkSvcKeiMap
	 * @return CAANMsg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg execEKK2811D010(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey, 
										HashMap<String, Object> temporaryData, 
										HashMap<String, Object> kktkSvcKeiMap, 
										CAANMsg ekk2811b504Msg) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// ***** EKK2811D010（機器オプションサービス契約登録）*****
		Object[][] ekk2811d010IN = {
				{ EKK2811D010CBSMsg.TEMPLATEID,                 TEMPLATE_ID_EKK2811D010 },
				{ EKK2811D010CBSMsg.FUNC_CODE,                  ccMsg.get("func_code") },
				{ EKK2811D010CBSMsg.KKOP_SVC_CD,                ekk2811b504Msg.getString(EKK2811B504CBSMsg1List.KKOP_SVC_CD) },
				{ EKK2811D010CBSMsg.PCRS_CD,                    ekk2811b504Msg.getString(EKK2811B504CBSMsg1List.PCRS_CD) },
				{ EKK2811D010CBSMsg.PPLAN_CD,                   ekk2811b504Msg.getString(EKK2811B504CBSMsg1List.PPLAN_CD) },
				{ EKK2811D010CBSMsg.KKTK_SVC_KEI_NO,            (String)kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO) },
				{ EKK2811D010CBSMsg.SYSID,                      ccMsg.get("sysid") },
				{ EKK2811D010CBSMsg.MSKM_DTL_NO,                (String)kktkSvcKeiMap.get(EKK0341A010CBSMsg1List.MSKM_DTL_NO) },
				{ EKK2811D010CBSMsg.FTRIAL_KANYU_YMD,           "" },
				{ EKK2811D010CBSMsg.FTRIAL_PRD_ENDYMD,          "" },
				{ EKK2811D010CBSMsg.HONKANYU_YMD,               "" },
				{ EKK2811D010CBSMsg.HONKANYU_IKO_KIGEN_YMD,     "" },
				{ EKK2811D010CBSMsg.SVC_USE_STA_KIBO_YMD,       "" },
				{ EKK2811D010CBSMsg.RSV_TSTA_KIBO_YMD,          "" },
				{ EKK2811D010CBSMsg.PNLTY_HASSEI_CD,            "" },
				{ EKK2811D010CBSMsg.IDO_DIV,                    (String)ccMsg.get("ido_div") },
				{ EKK2811D010CBSMsg.KIKI_RNTAI_KEI_CHGECHU_FLG, "" }, 
				{ EKK2811D010CBSMsg.SEIKY_KEI_NO,               (String)ccMsg.get("saki_seiky_kei_no") },
				{ EKK2811D010CBSMsg.PRC_KMK_CD,                 "" },
				{ EKK2811D010CBSMsg.UPD_DTM_BF,                 getSvcUpDtm(param)}
		};
		
		// 更新処理実行
		CAANMsg ekk2811d010cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk2811d010IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		setSvcUpDtm(param, ekk2811d010cbsMsg.getString(EKK2811D010CBSMsg.UPD_DTM));
		
		return ekk2811d010cbsMsg;

	}
	
	/**
	 * 機器オプションサービス契約照査締結 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param ekk2811d010Msg
	 * @return CAANMsg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg execEKK2811C050(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData,
										CAANMsg ekk2811d010Msg) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// ***** EKK2811C050（機器オプションサービス契約照査締結）*****
		Object[][] ekk2811c050IN = {
				{ EKK2811C050CBSMsg.TEMPLATEID,      TEMPLATE_ID_EKK2811C050 },
				{ EKK2811C050CBSMsg.FUNC_CODE,       ccMsg.get("func_code") },
				{ EKK2811C050CBSMsg.KKOP_SVC_KEI_NO, ekk2811d010Msg.getString(EKK2811B504CBSMsg1List.KKOP_SVC_KEI_NO)},
				{ EKK2811C050CBSMsg.IDO_DIV,         (String)ccMsg.get("ido_div") },
				{ EKK2811C050CBSMsg.UPD_DTM_BF,      getSvcUpDtm(param)}
		};
		
		// 更新処理実行
		CAANMsg ekk2811c050cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk2811c050IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		setSvcUpDtm(param, ekk2811c050cbsMsg.getString(EKK2811C050CBSMsg.UPD_DTM));
		
		return ekk2811c050cbsMsg;

	}
	
	/**
	 * 機器オプションサービス契約開始 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param ekk2811d010Msg
	 * @return CAANMsg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg execEKK2811C070(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData,
										CAANMsg ekk2811d010Msg) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// サービス開始日
		String svcStaYmd = "";
		// サービス課金開始日
		String svcChrgStaYmd = "";
		
		// 運用日を取得
		String unyoYmd = getNullToStr((String)ccMsg.get("unyo_ymd"));
		
		// 引継先サービス契約
		CAANMsg ekk0081a010CBSMsg = (CAANMsg)temporaryData.get("EKK0081A010_WORK");
		// 引継先料金グループコードを取得
		String prc_grp_cd = getNullToStr(ekk0081a010CBSMsg.getString(EKK0081A010CBSMsg1List.PRC_GRP_CD));
		// 引継先サービス課金開始日を取得
		String svc_chrg_ymd = getNullToStr(ekk0081a010CBSMsg.getString(EKK0081A010CBSMsg1List.SVC_CHRG_STAYMD));
		
		String before_svc_chrg_ymd = "";
		String end_svc_chrg_ymd = "";
		if (!"".equals(svc_chrg_ymd))
		{
			// 引継先サービス課金開始日の前日を取得
			before_svc_chrg_ymd = JPCDateUtil.addDay(svc_chrg_ymd, -1);
			// 引継先サービス課金開始日の同月末日を取得
			end_svc_chrg_ymd = svc_chrg_ymd.substring(0, 6);
			end_svc_chrg_ymd = end_svc_chrg_ymd + JPCDateUtil.getEndOfMonth(end_svc_chrg_ymd);
		}
		
		// 料金計算対象年月
		CAANMsg[] ech0501b010CBSMsg1list = (CAANMsg[])temporaryData.get("ECH0501B010_WORK");
		String seiky_month = getNullToStr(ech0501b010CBSMsg1list[0].getString(ECH0501B010CBSMsg1List.SEIKY_YM));
		
		if(!"".equals(seiky_month))
		{
			// 料金計算対象年月の末日を取得
			seiky_month = seiky_month + JPCDateUtil.getEndOfMonth(seiky_month);
		}
		
		// サービス開始日、サービス課金開始日の設定
		// 引継先サービス課金開始日が料金計算月末日より以前の場合
		if (svc_chrg_ymd.compareTo(seiky_month) <= 0)
		{
			// サービス開始日 ← 料金計算月末日
			svcStaYmd = seiky_month;
			// サービス課金開始日 ← サービス開始日の翌月月初
			svcChrgStaYmd = getNextMonthFirstYmd(svcStaYmd);
		}
		// 引継先サービス課金開始日が料金計算月末日より未来の場合
		else
		{
			// 引継先料金グループコードがマンションの場合
			if (PRC_GRP_CD_MT.equals(prc_grp_cd))
			{
				// 引継先サービス課金開始日の前日と、運用日の小さい方を設定
				if (unyoYmd.compareTo(before_svc_chrg_ymd) < 0)
				{
					// サービス開始日 ← 運用日
					svcStaYmd = unyoYmd;
				}
				else
				{
					// サービス開始日 ← 引継先サービス課金開始日の前日
					svcStaYmd = before_svc_chrg_ymd;
				}
				// サービス課金開始日 ← 引継先サービス課金開始日
				svcChrgStaYmd = svc_chrg_ymd;
			}
			// 引継先料金グループコードがマンション以外の場合
			else
			{
				// 引継先サービス課金開始日の同月末日と、運用日の小さい方を設定
				if (unyoYmd.compareTo(end_svc_chrg_ymd) < 0)
				{
					// サービス開始日 ← 運用日
					svcStaYmd = unyoYmd;
				}
				else
				{
					// サービス開始日 ← 引継先サービス課金開始日の同月末日
					svcStaYmd = end_svc_chrg_ymd;
				}
				// サービス課金開始日 ← 引継先サービス課金開始日の翌月月初
				svcChrgStaYmd = getNextMonthFirstYmd(svc_chrg_ymd);
			}
		}
		
		// ***** EKK2811C070（機器オプションサービス契約開始）*****
		Object[][] ekk2811c070IN = {
				{ EKK2811C070CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK2811C070 },
				{ EKK2811C070CBSMsg.FUNC_CODE,        ccMsg.get("func_code") },
				{ EKK2811C070CBSMsg.KKOP_SVC_KEI_NO,  ekk2811d010Msg.getString(EKK2811B504CBSMsg1List.KKOP_SVC_KEI_NO)},
//OM-2016-0001152 MOD START
//				{ EKK2811C070CBSMsg.SVC_STAYMD,       svcStaYmd},
//				{ EKK2811C070CBSMsg.SVC_CHRG_STAYMD,  svcChrgStaYmd},
//				{ EKK2811C070CBSMsg.PLAN_STAYMD,      svcStaYmd},
//				{ EKK2811C070CBSMsg.PLAN_CHRG_STAYMD, svcChrgStaYmd},
				{ EKK2811C070CBSMsg.SVC_STAYMD_I, svcStaYmd},
				{ EKK2811C070CBSMsg.SVC_CHRG_STAYMD_I, svcChrgStaYmd},
//OM-2016-0001152 MOD END
				{ EKK2811C070CBSMsg.DOJI_STA_UMU,     ""},
				{ EKK2811C070CBSMsg.IDO_DIV,          (String)ccMsg.get("ido_div") },
				{ EKK2811C070CBSMsg.UPD_DTM_BF,       getSvcUpDtm(param)}
		};
		
		// 更新処理実行
		CAANMsg ekk2811c070cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk2811c070IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		setSvcUpDtm(param, ekk2811c070cbsMsg.getString(EKK2811C070CBSMsg.UPD_DTM));
		
		return ekk2811c070cbsMsg;

	}
	
	/**
	 * 機器オプションサービス契約解約 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param ekk2811b504Msg
	 * @return CAANMsg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg execEKK2811C140(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData,
										CAANMsg ekk2811b504Msg) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		String mskm_dtl_no =getMskmDtlNo(param);
		
		if("".equals(mskm_dtl_no))
		{
			CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get("EKK0081A010_WORK");
			mskm_dtl_no = getNullToStr((String)ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO));
		}
		
		// サービス終了日
		String svcEndYmd = "";
		
		// 運用日を取得
		String unyoYmd = getNullToStr((String)ccMsg.get("unyo_ymd"));
		// 引継元機器オプションサービス課金開始日を取得
		String motoSvcChrgStaYmd = ekk2811b504Msg.getString(EKK2811B504CBSMsg1List.SVC_CHRG_STAYMD);
		
		// 引継元機器オプションサービス課金開始日が運用日より未来の場合
		if (unyoYmd.compareTo(motoSvcChrgStaYmd) < 0)
		{
			// サービス終了日 ← 運用日
			svcEndYmd = unyoYmd;
		}
		else
		{
			// 前月
			String calYmd = JPCDateUtil.addMonth(unyoYmd, -1);
			
			// サービス終了日 ← 運用日前月末
			svcEndYmd = calYmd.substring(0, 6) + JPCDateUtil.getEndOfMonth(calYmd.substring(0, 6));
		}
		
		// ***** EKK2811C140（機器オプションサービス契約解約）*****
		Object[][] EKK2811C140IN = {
				{ EKK2811C140CBSMsg.TEMPLATEID,        TEMPLATE_ID_EKK2811C140 },
				{ EKK2811C140CBSMsg.FUNC_CODE,         ccMsg.get("func_code") },
				{ EKK2811C140CBSMsg.KKOP_SVC_KEI_NO,   ekk2811b504Msg.getString(EKK2811B504CBSMsg1List.KKOP_SVC_KEI_NO)},
				{ EKK2811C140CBSMsg.MSKM_DTL_NO,       mskm_dtl_no },
				{ EKK2811C140CBSMsg.RSV_TSTA_KIBO_YMD, "" },
				{ EKK2811C140CBSMsg.SVC_ENDYMD,        svcEndYmd },
				{ EKK2811C140CBSMsg.SVC_CHRG_ENDYMD,   svcEndYmd },
				{ EKK2811C140CBSMsg.SVC_DLRE_CD,       "" },
				{ EKK2811C140CBSMsg.SVC_DLRE_MEMO,     "" },
				{ EKK2811C140CBSMsg.PNLTY_HASSEI_CD,   "" },
				{ EKK2811C140CBSMsg.IDO_DIV,           (String)ccMsg.get("ido_div") },
				{ EKK2811C140CBSMsg.SVC_KEI_NO,        (String)ccMsg.get("moto_svc_kei_no") },
				{ EKK2811C140CBSMsg.UPD_DTM_BF,        getMotoSvcUpDtm(param)}
		};
		
		// 更新処理実行
		CAANMsg ekk2811c140cbsMsg = callSC(handle, scCall, param, dataMapKey, EKK2811C140IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		setMotoSvcUpDtm(param, ekk2811c140cbsMsg.getString(EKK2811C140CBSMsg.UPD_DTM));
		
		return ekk2811c140cbsMsg;

	}
	
	/**
	 * 機器オプションサービス契約解約確定 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param ekk2811b504Msg
	 * @return CAANMsg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg execEKK2811C150(SessionHandle handle, 
										ServiceComponentRequestInvoker scCall, 
										IRequestParameterReadWrite param, 
										String dataMapKey,
										HashMap<String, Object> temporaryData,
										CAANMsg ekk2811b504Msg) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// サービス終了日
		String svcEndYmd = "";
		
		// 引継元機器オプションサービス課金開始日を取得
		String motoSvcChrgStaYmd = ekk2811b504Msg.getString(EKK2811B504CBSMsg1List.SVC_CHRG_STAYMD);
// OM-2018-0001325 2019/01/23 ADD START
		String motoPlanChrgStaYmd = ekk2811b504Msg.getString(EKK2811B504CBSMsg1List.PLAN_CHRG_STAYMD);
// OM-2018-0001325 2019/01/23 ADD END
		
		// 料金計算対象年月
		CAANMsg[] ech0501b010CBSMsg1list = (CAANMsg[])temporaryData.get("ECH0501B010_WORK");
		String seiky_month = getNullToStr(ech0501b010CBSMsg1list[0].getString(ECH0501B010CBSMsg1List.SEIKY_YM));
		
		if(!"".equals(seiky_month))
		{
			// サービス終了日 ← 料金計算対象年月の末日を設定
			svcEndYmd = seiky_month + JPCDateUtil.getEndOfMonth(seiky_month);
		}
		
		// ***** EKK2811C150（機器オプションサービス契約解約確定）*****
		Object[][] ekk2811c150IN = {
				{ EKK2811C150CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK2811C150 },
				{ EKK2811C150CBSMsg.FUNC_CODE,        ccMsg.get("func_code") },
				{ EKK2811C150CBSMsg.KKOP_SVC_KEI_NO,  ekk2811b504Msg.getString(EKK2811B504CBSMsg1List.KKOP_SVC_KEI_NO)},
				{ EKK2811C150CBSMsg.SVC_CHRG_STAYMD,  motoSvcChrgStaYmd },
				{ EKK2811C150CBSMsg.SVC_ENDYMD,       svcEndYmd },
				{ EKK2811C150CBSMsg.SVC_CHRG_ENDYMD,  svcEndYmd },
// OM-2018-0001325 2019/01/23 ADD START
				{ EKK2811C150CBSMsg.PLAN_CHRG_STAYMD, motoPlanChrgStaYmd },
// OM-2018-0001325 2019/01/23 ADD END
				{ EKK2811C150CBSMsg.PLAN_ENDYMD,      svcEndYmd },
				{ EKK2811C150CBSMsg.PLAN_CHRG_ENDYMD, svcEndYmd },
				{ EKK2811C150CBSMsg.SVC_DLRE_CD,      "01" },	// "01"固定
				{ EKK2811C150CBSMsg.SVC_DLRE_MEMO,    "" },
				{ EKK2811C150CBSMsg.DSL_JI_CHRG,      "" },
				{ EKK2811C150CBSMsg.UPD_DTM_BF,       getMotoSvcUpDtm(param)}
		};
		
		// 更新処理実行
		CAANMsg ekk2811c150cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk2811c150IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		setMotoSvcUpDtm(param, ekk2811c150cbsMsg.getString(EKK2811C150CBSMsg.UPD_DTM));
		
		return ekk2811c150cbsMsg;
	}
	
	/* ++++++++++ v15.00.00 削除開始 ++++++++++ */
//	/**
//	 * 機器オプションサービス契約開始（引継先解約） <br>
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @param ekk2811b504Msg
//	 * @param ekk2811d010Msg
//	 * @return CAANMsg
//	 * @throws Throwable
//	 */
//	@SuppressWarnings("unchecked")
//	private CAANMsg execEKK2811C070SakiKaiyaku(SessionHandle handle, 
//										ServiceComponentRequestInvoker scCall, 
//										IRequestParameterReadWrite param, 
//										String dataMapKey,
//										HashMap<String, Object> temporaryData,
//										CAANMsg ekk2811d010Msg) throws Throwable
//	{
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		
//		// 運用日を取得
//		String unyoYmd = getNullToStr((String)ccMsg.get("unyo_ymd"));
//		
//		// ***** EKK2811C070（機器オプションサービス契約開始）*****
//		Object[][] ekk2811c070IN = {
//				{ EKK2811C070CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK2811C070 },
//				{ EKK2811C070CBSMsg.FUNC_CODE,        ccMsg.get("func_code") },
//				{ EKK2811C070CBSMsg.KKOP_SVC_KEI_NO,  ekk2811d010Msg.getString(EKK2811B504CBSMsg1List.KKOP_SVC_KEI_NO)},
//				{ EKK2811C070CBSMsg.SVC_STAYMD,       unyoYmd},
//				{ EKK2811C070CBSMsg.SVC_CHRG_STAYMD,  unyoYmd},
//				{ EKK2811C070CBSMsg.PLAN_STAYMD,      unyoYmd},
//				{ EKK2811C070CBSMsg.PLAN_CHRG_STAYMD, unyoYmd},
//				{ EKK2811C070CBSMsg.DOJI_STA_UMU,     ""},
//				{ EKK2811C070CBSMsg.IDO_DIV,          (String)ccMsg.get("ido_div") },
//				{ EKK2811C070CBSMsg.UPD_DTM_BF,       getSvcUpDtm(param)}
//		};
//		
//		// 更新処理実行
//		CAANMsg ekk2811c070cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk2811c070IN);
//		
//		// 更新タイムスタンプをワーク領域にセットします。
//		setSvcUpDtm(param, ekk2811c070cbsMsg.getString(EKK2811C070CBSMsg.UPD_DTM));
//		
//		return ekk2811c070cbsMsg;
//
//	}
//	
//	/**
//	 * 機器オプションサービス契約解約（引継先解約） <br>
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @param ekk2811b504Msg
//	 * @return CAANMsg
//	 * @throws Throwable
//	 */
//	@SuppressWarnings("unchecked")
//	private CAANMsg execEKK2811C140SakiKaiyaku(SessionHandle handle, 
//										ServiceComponentRequestInvoker scCall, 
//										IRequestParameterReadWrite param, 
//										String dataMapKey,
//										HashMap<String, Object> temporaryData,
//										CAANMsg ekk2811b504Msg) throws Throwable
//	{
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		
//		String mskm_dtl_no =getMskmDtlNo(param);
//		
//		if("".equals(mskm_dtl_no))
//		{
//			CAANMsg ekk0081a010cbsMsg = (CAANMsg)temporaryData.get("EKK0081A010_WORK");
//			mskm_dtl_no = getNullToStr((String)ekk0081a010cbsMsg.getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO));
//		}
//		
//		// 運用日を取得
//		String unyoYmd = getNullToStr((String)ccMsg.get("unyo_ymd"));
//		// 運用日の前日を取得する
//		String beforeUnyoYmd = JPCDateUtil.addDay(unyoYmd, -1);
//		
//		// ***** EKK2811C140（機器オプションサービス契約解約）*****
//		Object[][] EKK2811C140IN = {
//				{ EKK2811C140CBSMsg.TEMPLATEID,        TEMPLATE_ID_EKK2811C140 },
//				{ EKK2811C140CBSMsg.FUNC_CODE,         ccMsg.get("func_code") },
//				{ EKK2811C140CBSMsg.KKOP_SVC_KEI_NO,   ekk2811b504Msg.getString(EKK2811B504CBSMsg1List.KKOP_SVC_KEI_NO)},
//				{ EKK2811C140CBSMsg.MSKM_DTL_NO,       mskm_dtl_no },
//				{ EKK2811C140CBSMsg.RSV_TSTA_KIBO_YMD, "" },
//				{ EKK2811C140CBSMsg.SVC_ENDYMD,        unyoYmd },
//				{ EKK2811C140CBSMsg.SVC_CHRG_ENDYMD,   beforeUnyoYmd },
//				{ EKK2811C140CBSMsg.SVC_DLRE_CD,       "" },
//				{ EKK2811C140CBSMsg.SVC_DLRE_MEMO,     "" },
//				{ EKK2811C140CBSMsg.PNLTY_HASSEI_CD,   "" },
//				{ EKK2811C140CBSMsg.IDO_DIV,           (String)ccMsg.get("ido_div") },
//				{ EKK2811C140CBSMsg.SVC_KEI_NO,        (String)ccMsg.get("moto_svc_kei_no") },
//				{ EKK2811C140CBSMsg.UPD_DTM_BF,        getMotoSvcUpDtm(param)}
//		};
//		
//		// 更新処理実行
//		CAANMsg ekk2811c140cbsMsg = callSC(handle, scCall, param, dataMapKey, EKK2811C140IN);
//		
//		// 更新タイムスタンプをワーク領域にセットします。
//		setMotoSvcUpDtm(param, ekk2811c140cbsMsg.getString(EKK2811C140CBSMsg.UPD_DTM));
//		
//		return ekk2811c140cbsMsg;
//
//	}
//	
//	/**
//	 * 機器オプションサービス契約解約確定（引継先解約） <br>
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param dataMapKey
//	 * @param temporaryData
//	 * @param ekk2811b504Msg
//	 * @return CAANMsg
//	 * @throws Throwable
//	 */
//	@SuppressWarnings("unchecked")
//	private CAANMsg execEKK2811C150SakiKaiyaku(SessionHandle handle, 
//										ServiceComponentRequestInvoker scCall, 
//										IRequestParameterReadWrite param, 
//										String dataMapKey,
//										HashMap<String, Object> temporaryData,
//										CAANMsg ekk2811b504Msg) throws Throwable
//	{
//		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
//		
//		// 運用日を取得
//		String unyoYmd = getNullToStr((String)ccMsg.get("unyo_ymd"));
//		// 運用日の前日を取得する
//		String beforeUnyoYmd = JPCDateUtil.addDay(unyoYmd, -1);
//		
//		// ***** EKK2811C150（機器オプションサービス契約解約確定）*****
//		Object[][] ekk2811c150IN = {
//				{ EKK2811C150CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK2811C150 },
//				{ EKK2811C150CBSMsg.FUNC_CODE,        ccMsg.get("func_code") },
//				{ EKK2811C150CBSMsg.KKOP_SVC_KEI_NO,  ekk2811b504Msg.getString(EKK2811B504CBSMsg1List.KKOP_SVC_KEI_NO)},
//				{ EKK2811C150CBSMsg.SVC_CHRG_STAYMD,  unyoYmd },
//				{ EKK2811C150CBSMsg.SVC_ENDYMD,       unyoYmd },
//				{ EKK2811C150CBSMsg.SVC_CHRG_ENDYMD,  beforeUnyoYmd },
//				{ EKK2811C150CBSMsg.PLAN_ENDYMD,      unyoYmd },
//				{ EKK2811C150CBSMsg.PLAN_CHRG_ENDYMD, beforeUnyoYmd },
//				{ EKK2811C150CBSMsg.SVC_DLRE_CD,      "01" },	// "01"固定
//				{ EKK2811C150CBSMsg.SVC_DLRE_MEMO,    "" },
//				{ EKK2811C150CBSMsg.DSL_JI_CHRG,      "" },
//				{ EKK2811C150CBSMsg.UPD_DTM_BF,       getMotoSvcUpDtm(param)}
//		};
//		
//		// 更新処理実行
//		CAANMsg ekk2811c150cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk2811c150IN);
//		
//		// 更新タイムスタンプをワーク領域にセットします。
//		setMotoSvcUpDtm(param, ekk2811c150cbsMsg.getString(EKK2811C150CBSMsg.UPD_DTM));
//		
//		return ekk2811c150cbsMsg;
//	}
	/* ++++++++++ v15.00.00 削除終了 ++++++++++ */
	
	/**
	 * 翌月月初を返します
	 * @param  ymd    日付
	 * @return String パラメータ日付の翌月月初
	 * @throws Exception 
	 */
	private String getNextMonthFirstYmd(String ymd) throws Exception
	{
		String returnYmd = "";
		
		// 翌月
		String addOneMonth = JPCDateUtil.addMonth(ymd, 1);
		
		if(addOneMonth.length() == 8)
		{
			// 翌月月初
			returnYmd = addOneMonth.substring(0, 6) + "01";
		}
		
		return returnYmd;
	}
	
	/**
	 * 引継先機器の適切な予約適用年月日を返します
	 * @param ccMsg
	 * @param temporaryData
	 * @return String 予約適用年月日
	 * @throws Exception 
	 */
	private String getRsvAplyYmd(HashMap<String, Object> ccMsg, 
								HashMap<String, Object> temporaryData) throws Exception
	{
		// 運用日を取得
		String unyoYmd = getNullToStr((String)ccMsg.get("unyo_ymd"));
		// 運用年月を取得
		String unyoYm = "";
		if (!"".equals(unyoYmd))
		{
			unyoYm = unyoYmd.substring(0, 6);
		}
		
		// 料金計算日
		CAANMsg[] ech0501b010CBSMsg1list = (CAANMsg[])temporaryData.get("ECH0501B010_WORK");
		String eventYmd = getNullToStr(ech0501b010CBSMsg1list[0].getString(ECH0501B010CBSMsg1List.EVENT_YMD));
		// 料金計算年月を取得
		String eventYm = "";
		if (!"".equals(eventYmd))
		{
			eventYm = eventYmd.substring(0, 6);
		}
		
		// 予約適用年月日
		String rsvAlpyYmd = "";
		
		// 運用年月と料金計算年月が同じ月の場合
		if (unyoYm.equals(eventYm))
		{
			// 予約適用年月日に運用日を設定
			rsvAlpyYmd = unyoYmd;
		}
		else
		{
			// 予約適用年月日に料金計算年月末日を設定
			rsvAlpyYmd = eventYm + JPCDateUtil.getEndOfMonth(eventYm);
		}
		
		return rsvAlpyYmd;
	}
	/* ++++++++++ v9.00.00 追加終了 ++++++++++ */
}
