/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKJuushoUpdateDtlUpCC
*	ソースファイル名：JKKJuushoUpdateDtlUpCC.java
*	作成者			：FJ
*	日付			：2013年03月05日
*＜機能概要＞
*	住所変更明細更新の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v5.00.00	2013/03/05	FJ) 田原	【ANK-1438-00-00】緊急出荷機能の実装漏れ（２）
*	v5.00.01	2013/03/26	FJ) 田原	【IT1-2013-0000644】障害対応
*	v5.00.02	2013/07/10	FJ) 古田	【IT2-2013-0000606】障害対応
*   v5.00.03	2013/09/23	FJ) 辛  	【OM-2013-0002214】障害対応
*   v5.00.04	2013/09/30	FJ) 古田  	【OM-2013-0002685】障害対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
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.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2091B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2091B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2101B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2101B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2101C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2101D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2101E010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0081B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0081B010CBSMsg1List;

/**
 * 住所変更明細更新部品です。<p>
 * <br>
 * @author 富士通
 *
 */
public class JKKJuushoUpdateDtlUpCC extends AbstractCommonComponent
{
	/**
	 * サービス契約_工事案件一覧照会
	 */
	private static final String TEMPLATE_ID_EKU0081B010 = "EKU0081B010";
	/**
	 *  住所変更一覧照会
	 */
	private static final String TEMPLATE_ID_EKK2091B001 = "EKK2091B001";
	/**
	 *  住所変更明細一覧照会
	 */
	private static final String TEMPLATE_ID_EKK2101B001 = "EKK2101B001";
	/**
	 *  住所変更明細登録
	 */
	private static final String TEMPLATE_ID_EKK2101D010 = "EKK2101D010";
	/**
	 *  住所変更明細更新
	 */
	private static final String TEMPLATE_ID_EKK2101C010 = "EKK2101C010";
	/**
	 *  住所変更明細論理削除
	 */
	private static final String TEMPLATE_ID_EKK2101E010 = "EKK2101E010";
	/** 工事案件一意照会 */
	private static final String TEMPLATE_ID_EKU0011A010 = "EKU0011A010";
	/**
	 * 住所変更の更新タイムスタンプ格納キー 
	 */
	private static final String KK_COM_ADCHG_UP_DTM = "KK_COM_ADCHG_UP_DTM";
	/**
	 *  機能コード（チェック＆登録）
	 */
	private static final String FUNC_CODE_1 = "1";
	/**
	 *  機能コード（チェックのみ） 
	 */
	private static final String FUNC_CODE_2 = "2";
	/**
	 *  住所変更ステータス（完了済） 
	 */
	private static final String ADCHG_STAT_KANRYOU_ZUMI = "003";
	
	/* ++++++++++ v5.00.02 変更開始 ++++++++++ */
	/** 機器提供サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0341A010 = "EKK0341A010";
	
	/** 機器提供サービスコード */
	private static final String KKTK_SVC_C009 = "C009";
	/** 住所変更明細種別コード(サービス契約内訳番号) */
	private static final String ADCHG_DTL_SBT_CD_SVC_KEI_UCWK = "02";
	/* ++++++++++ v5.00.02 変更完了 ++++++++++ */
	
	/**
	 * 住所変更明細処理を行います。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Throwable 
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite updjuushoUpdateDtl(SessionHandle handle, IRequestParameterReadWrite param, String dataMapKey)  throws Throwable
	{
		// データ情報
		HashMap inMap = (HashMap)param.getData(dataMapKey);
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		String kojiakNo = (String)inMap.get("kojiak_no");
		String kojiakNoBf = "";
		String updateFlg = (String)inMap.get("update_flg");
		String chgTgKeiNo = (String)inMap.get("chg_tg_kei_no");
		CAANMsg eku0081b010CbsMsg1List = null;
		CAANMsg[] eku0011A010cbsMsg1list = execEKU0011A010(handle, scCall, param, kojiakNo, dataMapKey);

		// 工事案件が無いため処理しない
		if(eku0011A010cbsMsg1list == null || eku0011A010cbsMsg1list.length == 0)
		{
			return param;
		}
		
		// 住所変更撤去工事案件番号
//		【OM-2013-0002214】障害対応
//		kojiakNoBf = getNullToStr(eku0011A010cbsMsg1list[0].getString(EKU0011A010CBSMsg1List.AD_CHG_TEKKYO_KJAK_NO));
		kojiakNoBf = kojiakNo;
//		【OM-2013-0002214】障害対応
		
		// 住所変更撤去工事案件番号がない場合
		if(!"".equals(kojiakNoBf))
		{
			// サービス契約_工事案件一覧照会
			eku0081b010CbsMsg1List = execEKU0081B010(handle, scCall, param, dataMapKey, kojiakNoBf);
		}
		else
		{
//			【OM-2013-0002214】障害対応
//			// 連携サービス契約番号
//			String renkisvcKeiNo = getNullToStr(eku0011A010cbsMsg1list[0].getString(EKU0011A010CBSMsg1List.RNKI_SVC_KEI_NO));
//			
//			// サービス契約_工事案件一覧照会
//			eku0081b010CbsMsg1List = execEKU0081B010Svc(handle, scCall, param, dataMapKey, renkisvcKeiNo);
//			
//			// 完了工事案件が無いため処理しない
//			if(eku0081b010CbsMsg1List == null)
//			{
//				return param;
//			}
			return param;
//			【OM-2013-0002214】障害対応
		}
		
		// サービス契約回線内訳番号
		String svckeiKaisenUcwkCwkNo = getNullToStr((String)eku0081b010CbsMsg1List
				.getString(EKU0081B010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO));
		
		// 住所変更一覧照会
		CAANMsg[] ekk2091b001CbsMsg1List = execEKK2091B001(handle, scCall, param, dataMapKey, svckeiKaisenUcwkCwkNo);

		if(ekk2091b001CbsMsg1List == null )
		{
			return param;
		}
		
		boolean updateHantei = false;
		CAANMsg ekk2101b001CbsMsgKeep = null;
		for (CAANMsg ekk2091b001CbsMsg : ekk2091b001CbsMsg1List)
		{
			// 住所変更番号
			String adchgNo = getNullToStr((String)ekk2091b001CbsMsg.getString(EKK2091B001CBSMsg1List.ADCHG_NO));
			// 住所変更ステータス
			String adchgStat = getNullToStr((String)ekk2091b001CbsMsg.getString(EKK2091B001CBSMsg1List.ADCHG_STAT));
			// 住所変更ステータスが完了済であれば処理しません。
			if(ADCHG_STAT_KANRYOU_ZUMI.equals(adchgStat))
			{
				return param;
			}
			
			// 住所変更明細一覧照会
			CAANMsg[] ekk2101b001CbsMsg1List = execEKK2101B001(handle, scCall, param, dataMapKey, adchgNo, inMap);
			/* ++++++++++ v5.00.01 追加開始 ++++++++++ */
			// 住所変更明細種別コード
			String adchg_dtl_sbt_cd_kiki = (String)inMap.get("adchg_dtl_sbt_cd_kiki");
			/* ++++++++++ v5.00.01 追加終了 ++++++++++ */
			for (CAANMsg ekk2101b001CbsMsg : ekk2101b001CbsMsg1List)
			{
				// 変更対象契約番号
				String chafSkbtNo = getNullToStr((String)ekk2101b001CbsMsg.getString(EKK2101B001CBSMsg1List.CHG_TG_KEI_NO));
				/* ++++++++++ v5.00.01 追加開始 ++++++++++ */
				// 住所変更明細種別コード_サービス契約番号の場合
				if("01".equals(adchg_dtl_sbt_cd_kiki))
				{
					// 変更前識別番号
					chafSkbtNo = getNullToStr((String)ekk2101b001CbsMsg.getString(EKK2101B001CBSMsg1List.CHBF_SKBT_NO));
					// 変更前識別番号がない場合
					if("".equals(chafSkbtNo))
					{
						// 変更後識別番号を設定する。
						chafSkbtNo = getNullToStr((String)ekk2101b001CbsMsg.getString(EKK2101B001CBSMsg1List.CHAF_SKBT_NO));
					}
				}
				/* ++++++++++ v5.00.01 追加終了 ++++++++++ */
				// 取得した変更後識別番号とパラメータの変更後識別番号が同じ場合、更新処理を実行します。
				if(chafSkbtNo.equals(chgTgKeiNo))
				{
					updateHantei = true;
					ekk2101b001CbsMsgKeep = ekk2101b001CbsMsg;
					break;
				}
			}
			
			// 取得した変更後識別番号とパラメータの変更後識別番号が同じ場合、更新処理を実行します。
			if(updateHantei)
			{
				// 解約キャンセルの場合
				if("9".equals(updateFlg))
				{
					//削除IF処理
					execEKK2101E010(handle, scCall, param, dataMapKey, ekk2101b001CbsMsgKeep, inMap);
					
					/* ++++++++++ v5.00.04 変更開始 ++++++++++ */
					// STBをキャンセルした場合、サービス契約内訳（TVコース）を論理削除します。
					execEKK2101E010SvcKeiUcwk(handle, scCall, param, dataMapKey, inMap, adchgNo);
					/* ++++++++++ v5.00.04 変更完了 ++++++++++ */
				}
				// 機器追加の場合
				else if("1".equals(updateFlg))
				{
					/* ++++++++++ v5.00.01 変更開始 ++++++++++ */
					// 住所変更明細種別コード_サービス契約番号の場合
					if("01".equals(adchg_dtl_sbt_cd_kiki))
					{
						//更新IF処理
						execEKK2101C010Svc(handle, scCall, param, dataMapKey, ekk2101b001CbsMsgKeep, inMap);
					}
					else
					{
						//更新IF処理
						execEKK2101C010(handle, scCall, param, dataMapKey, ekk2101b001CbsMsgKeep, inMap);
					}
					
//					//更新IF処理
//					execEKK2101C010(handle, scCall, param, dataMapKey, ekk2101b001CbsMsgKeep, inMap);
					/* ++++++++++ v5.00.01 変更終了 ++++++++++ */
				}
				/* ++++++++++ v5.00.04 変更開始 ++++++++++ */
				// 予約取消の場合
				else if("2".equals(updateFlg))
				{
					execEKK2101C010RsvCancel(handle, scCall, param, dataMapKey, ekk2101b001CbsMsgKeep, inMap);
				}
				/* ++++++++++ v5.00.04 変更完了 ++++++++++ */
			}
			else
			{
				// 機器追加でサービス契約番号以外の場合
				/* ++++++++++ v5.00.01 変更開始 ++++++++++ */
				// if("1".equals(updateFlg))
				if("1".equals(updateFlg) && !"01".equals(adchg_dtl_sbt_cd_kiki))
				/* ++++++++++ v5.00.01 変更終了 ++++++++++ */
				{
					// 機器追加IF処理
					execEKK2101D010(handle, scCall, param, dataMapKey, ekk2091b001CbsMsg, inMap);
					
					// 対象データがSTBの場合、サービス契約内訳データを登録します。
					execEKK2101D010SvcKeiUcwk(handle, scCall, param, dataMapKey, ekk2091b001CbsMsg, inMap);
				}
			}
		}
		
		return param;
	}

	/**
	 * サービス契約_工事案件一覧照会<br>
	 * <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @return CAANMsg[]
	 * @throws Exception
	 */
	private CAANMsg execEKU0081B010(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param,
			String dataMapKey, String kojiakNo) throws Throwable
	{
		// ***** EKU0091B020（サービス契約_工事案件一覧照会）******
		Object[][] eku0081b010IN = {
				{ EKU0081B010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0081B010 },
				{ EKU0081B010CBSMsg.FUNC_CODE, FUNC_CODE_2 }, // "2"固定
				{ EKU0081B010CBSMsg.KEY_SVC_KEI_NO, "" },
				{ EKU0081B010CBSMsg.KEY_KOJIAK_NO, kojiakNo }
		};

		// サービス契約_工事案件一覧照会サービスインターフェイスの実行
		CAANMsg[] eku0081b010cbsMsg1list = callSC(handle, scCall, param, dataMapKey, eku0081b010IN).getCAANMsgList(
				EKU0081B010CBSMsg.EKU0081B010CBSMSG1LIST);
		
		return eku0081b010cbsMsg1list[0];
	}
	
	/**
	 * 住所変更一覧照会<br>
	 * <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @return CAANMsg[]
	 * @throws Exception
	 */
	private CAANMsg[] execEKK2091B001(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param,
			String dataMapKey, String svckeiKaisenUcwkCwkNo) throws Exception
	{
		// ***** EKK2091B001（住所変更一覧照会）******
		Object[][] ekk2091b001IN = {
				{ EKK2091B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2091B001 },
				{ EKK2091B001CBSMsg.FUNC_CODE, FUNC_CODE_1 }, // "1"固定
				{ EKK2091B001CBSMsg.KEY_MSKM_NO, "" },
				{ EKK2091B001CBSMsg.KEY_ADCHG_NO, "" },
//				【OM-2013-0002214】障害対応
//				{ EKK2091B001CBSMsg.KEY_ITNM_SVKEI_KISUW_NO, svckeiKaisenUcwkCwkNo }
				{ EKK2091B001CBSMsg.KEY_ITENS_SVKEI_KISUW_NO, svckeiKaisenUcwkCwkNo }
//				【OM-2013-0002214】障害対応
		};

		// 住所変更一覧照会サービスインターフェイスの実行
		CAANMsg[] ekk2091b001cbsMsg1list = callSC(handle, scCall, param, dataMapKey, ekk2091b001IN).getCAANMsgList(
				EKK2091B001CBSMsg.EKK2091B001CBSMSG1LIST);

		if(ekk2091b001cbsMsg1list == null || ekk2091b001cbsMsg1list.length == 0)
		{
			return null;
		}
		
		//保持している住所更新年月日がない場合、設定します。
		if("".equals(getNullToStr(getAdChgDtm(param))))
		{
			setAdChgDtm(param, getNullToStr((String)ekk2091b001cbsMsg1list[0]
					.getString(EKK2091B001CBSMsg1List.UPD_DTM)));
		}
		
		return ekk2091b001cbsMsg1list;
	}
	
	/**
	 * 住所変更明細一覧照会<br>
	 * <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @return CAANMsg[]
	 * @throws Exception
	 */
	private CAANMsg[] execEKK2101B001(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param,
			String dataMapKey, String adchgNo, HashMap inMap) throws Exception
	{
		// ***** EKK2101B001（住所変更明細一覧照会）******
		Object[][] ekk2101b001IN = {
				{ EKK2101B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2101B001 },
				{ EKK2101B001CBSMsg.FUNC_CODE, FUNC_CODE_1 }, // "1"固定
				{ EKK2101B001CBSMsg.KEY_ADCHG_NO, adchgNo },
				{ EKK2101B001CBSMsg.KEY_ADCHG_DTL_NO, "" },
				{ EKK2101B001CBSMsg.KEY_ADCHG_DTL_SBT_CD, (String)inMap.get("adchg_dtl_sbt_cd_kiki") }
		};

		// 住所変更明細一覧照会サービスインターフェイスの実行
		CAANMsg[] ekk2101b001cbsMsg1list = callSC(handle, scCall, param, dataMapKey, ekk2101b001IN).getCAANMsgList(
				EKK2101B001CBSMsg.EKK2101B001CBSMSG1LIST);

		return ekk2101b001cbsMsg1list;
	}
	
	/**
	 * 住所変更明細登録 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param pcrsCd
	 * @param pplanCd
	 * @param temporaryData
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK2101D010(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param, String dataMapKey,
			CAANMsg ekk2091b001CbsMsg, HashMap inMap) throws Throwable
	{
		
		// ***** EKK2101D010（住所変更明細登録）*****
		Object[][] ekk2101d010IN = {
				{ EKK2101D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2101D010 },
				{ EKK2101D010CBSMsg.FUNC_CODE, inMap.get("func_code") },
				{ EKK2101D010CBSMsg.ADCHG_NO, getNullToStr((String)ekk2091b001CbsMsg.getString(EKK2091B001CBSMsg1List.ADCHG_NO)) },
				{ EKK2101D010CBSMsg.ADCHG_DTL_NO, "" },
				{ EKK2101D010CBSMsg.ADCHG_DTL_SBT_CD, (String)inMap.get("adchg_dtl_sbt_cd_kiki") },
				{ EKK2101D010CBSMsg.CHG_TG_KEI_NO, (String)inMap.get("chg_tg_kei_no") },
				{ EKK2101D010CBSMsg.CHBF_SKBT_NO, "" },
				{ EKK2101D010CBSMsg.CHAF_SKBT_NO, (String)inMap.get("kiki_chg_no") },
				{ EKK2101D010CBSMsg.SVC_KEI_IDO_SBT_CD, "" },
				{ EKK2101D010CBSMsg.SKS_SHS_CHG_UM, "" },
				{ EKK2101D010CBSMsg.ADCHG_WORK_RRK_BIKO, "" },
				{ EKK2101D010CBSMsg.UPD_DTM_BF, getAdChgDtm(param) },
		};

		// 更新処理実行
		CAANMsg ekk2101d010Msg_out = callSC(handle, scCall, param, dataMapKey, ekk2101d010IN);
		// 更新年月日時分秒
		setAdChgDtm(param, getNullToStr((String)ekk2101d010Msg_out.getString(EKK2101D010CBSMsg.UPD_DTM)));
	}
	
	/**
	 * 住所変更明細更新 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param pcrsCd
	 * @param pplanCd
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK2101C010(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param, String dataMapKey,
			CAANMsg ekk2101b001CbsMsg1List, HashMap inMap) throws Throwable
	{
		String svcKeiIdoSbtCd = getNullToStr((String)inMap.get("svc_kei_ido_sbt_cd"));
		if("".equals(svcKeiIdoSbtCd)){
			svcKeiIdoSbtCd = getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.SVC_KEI_IDO_SBT_CD));
		}
		
		// ***** EKK2101C010（住所変更明細更新）*****
		Object[][] ekk2101c010IN = {
				{ EKK2101C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2101C010 },
				{ EKK2101C010CBSMsg.FUNC_CODE, inMap.get("func_code") },
				{ EKK2101C010CBSMsg.ADCHG_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_NO)) },
				{ EKK2101C010CBSMsg.ADCHG_DTL_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_DTL_NO)) },
				{ EKK2101C010CBSMsg.ADCHG_DTL_SBT_CD, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD)) },
				{ EKK2101C010CBSMsg.CHG_TG_KEI_NO, (String)inMap.get("chg_tg_kei_no") },
				{ EKK2101C010CBSMsg.CHBF_SKBT_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.CHAF_SKBT_NO)) },
				{ EKK2101C010CBSMsg.CHAF_SKBT_NO, (String)inMap.get("kiki_chg_no") },
				{ EKK2101C010CBSMsg.SVC_KEI_IDO_SBT_CD, svcKeiIdoSbtCd },
				{ EKK2101C010CBSMsg.SKS_SHS_CHG_UM, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.SKS_SHS_CHG_UM)) },
				{ EKK2101C010CBSMsg.ADCHG_WORK_RRK_BIKO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_WORK_RRK_BIKO)) },
				{ EKK2101C010CBSMsg.UPD_DTM_BF, getAdChgDtm(param) },
		};

		// 更新処理実行
		CAANMsg ekk2101c010Msg_out = callSC(handle, scCall, param, dataMapKey, ekk2101c010IN);
		// 更新年月日時分秒
		setAdChgDtm(param, getNullToStr((String)ekk2101c010Msg_out.getString(EKK2101C010CBSMsg.UPD_DTM)));
	}
	
	/**
	 * 住所変更明細論理削除 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param pcrsCd
	 * @param pplanCd
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK2101E010(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param, String dataMapKey,
			CAANMsg ekk2101b001CbsMsg1List, HashMap inMap) throws Throwable
	{
		
		// ***** EKK2101E010（住所変更明細論理削除）*****
		Object[][] ekk2101E010IN = {
				{ EKK2101E010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2101E010 },
				{ EKK2101E010CBSMsg.FUNC_CODE, inMap.get("func_code") },
				{ EKK2101E010CBSMsg.ADCHG_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_NO)) },
				{ EKK2101E010CBSMsg.ADCHG_DTL_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_DTL_NO)) },
				{ EKK2101E010CBSMsg.UPD_DTM_BF, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.UPD_DTM)) },
		};

		// 更新処理実行
		CAANMsg ekk2101E010Msg_out = callSC(handle, scCall, param, dataMapKey, ekk2101E010IN);
		// 更新年月日時分秒
		//setAdChgDtm(param, getNullToStr((String)ekk2101E010Msg_out.getString(EKK2101E010CBSMsg.UPD_DTM)));
	}
	
	/**
	 * 住所変更の更新タイムスタンプを取得します。
	 * 
	 * @param param リクエストパラメータ
	 * @return UpDtm 更新時間
	 * @throws Exception
	 */
	private String getAdChgDtm(IRequestParameterReadWrite param) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();

		return (String)workMap.get(KK_COM_ADCHG_UP_DTM);
	}

	/**
	 * 住所変更の更新タイムスタンプを取得します。
	 * 
	 * @param param リクエストパラメータ
	 * @param updDtm 更新時間
	 * @throws Exception
	 */
	private void setAdChgDtm(IRequestParameterReadWrite param, String updDtm) throws Exception
	{
		// 作業領域の取得
		Map<Object, Object> workMap = param.getMappingWorkArea();

		if(updDtm != null && !"".equals(updDtm))
		{
			workMap.put(KK_COM_ADCHG_UP_DTM, updDtm);
		}
	}
	
	/**
	 * SCインプット共通データ設定処理を行います。
	 * <br>
	 * @param param
	 * @param templates
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> getParamMsg(IRequestParameterReadWrite param, CAANMsg[] templates) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		/* SCインプット共通データ */
		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		// テンプレートリスト
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
	}

	/**
	 * 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(!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;
	}
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * 
	 * @param str
	 *            文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		return JPCUtilCommon.Rtrim(str);
	}
	
	/**
	 * 工事案件一意照会を取得。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMap
	 * @param fixedText
	 * @return CAANMsg[]
	 * @throws Exception
	 */
	private CAANMsg[] execEKU0011A010(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param,
			String kojiAkNo, String dataMapKey) throws Exception
	{
		// ***** EKU0011A010（工事案件一意照会）*****
		Object[][] eku0011a010IN = {
		{ EKU0011A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0011A010 },
		{ EKU0011A010CBSMsg.FUNC_CODE, "1" },
		{ EKU0011A010CBSMsg.KEY_KOJIAK_NO, kojiAkNo } };

		CAANMsg[] EKU0011A010cbsMsg1list = callSC(handle, scCall, param, dataMapKey, eku0011a010IN).getCAANMsgList(EKU0011A010CBSMsg.EKU0011A010CBSMSG1LIST);

		return EKU0011A010cbsMsg1list;
	}
	
	/**
	 * サービス契約_工事案件一覧照会<br>
	 * <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @return CAANMsg[]
	 * @throws Exception
	 */
	private CAANMsg execEKU0081B010Svc(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param,
			String dataMapKey, String svckeiNo) throws Throwable
	{
		// ***** EKU0091B020（サービス契約_工事案件一覧照会）******
		Object[][] eku0081b010IN = {
				{ EKU0081B010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0081B010 },
				{ EKU0081B010CBSMsg.FUNC_CODE, FUNC_CODE_1 }, // "1"固定
				{ EKU0081B010CBSMsg.KEY_SVC_KEI_NO, svckeiNo },
				{ EKU0081B010CBSMsg.KEY_KOJIAK_NO, "" }
		};

		// サービス契約_工事案件一覧照会サービスインターフェイスの実行
		CAANMsg[] eku0081b010cbsMsg1list = callSC(handle, scCall, param, dataMapKey, eku0081b010IN).getCAANMsgList(
				EKU0081B010CBSMsg.EKU0081B010CBSMSG1LIST);
		
		CAANMsg eku0081b010cbsMsg = null;
			
		for (int i = 0; i < eku0081b010cbsMsg1list.length; i++)
		{
			eku0081b010cbsMsg = eku0081b010cbsMsg1list[i];
			
			String kojiakNo = getNullToStr(eku0081b010cbsMsg.getString(EKU0081B010CBSMsg1List.KOJIAK_NO));
			
			CAANMsg[] eku0011A010cbsMsg1list = execEKU0011A010(handle, scCall, param, kojiakNo, dataMapKey);
			
			if(eku0011A010cbsMsg1list == null || eku0011A010cbsMsg1list.length == 0)
			{
				continue;
			}
			
			String kojiakStat = getNullToStr(eku0011A010cbsMsg1list[0].getString(EKU0011A010CBSMsg1List.KOJIAK_STAT));
			
			// 最新の工事完了を取得する。
			if("200".equals(kojiakStat))
			{
				return eku0081b010cbsMsg;
			}
		}
		
		return eku0081b010cbsMsg;
	}
	
	/* ++++++++++ v5.00.01 追加開始 ++++++++++ */
	/**
	 * 住所変更明細更新 <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param pcrsCd
	 * @param pplanCd
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK2101C010Svc(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param, String dataMapKey,
			CAANMsg ekk2101b001CbsMsg1List, HashMap inMap) throws Throwable
	{
		String svcKeiIdoSbtCd = getNullToStr((String)inMap.get("svc_kei_ido_sbt_cd"));
		if("".equals(svcKeiIdoSbtCd)){
			svcKeiIdoSbtCd = getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.SVC_KEI_IDO_SBT_CD));
		}
		
		// ***** EKK2101C010（住所変更明細更新）*****
		Object[][] ekk2101c010IN = {
				{ EKK2101C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2101C010 },
				{ EKK2101C010CBSMsg.FUNC_CODE, inMap.get("func_code") },
				{ EKK2101C010CBSMsg.ADCHG_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_NO)) },
				{ EKK2101C010CBSMsg.ADCHG_DTL_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_DTL_NO)) },
				{ EKK2101C010CBSMsg.ADCHG_DTL_SBT_CD, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD)) },
				{ EKK2101C010CBSMsg.CHG_TG_KEI_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.CHG_TG_KEI_NO)) },
				{ EKK2101C010CBSMsg.CHBF_SKBT_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.CHBF_SKBT_NO)) },
				{ EKK2101C010CBSMsg.CHAF_SKBT_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.CHAF_SKBT_NO)) },
				{ EKK2101C010CBSMsg.SVC_KEI_IDO_SBT_CD, svcKeiIdoSbtCd },
				{ EKK2101C010CBSMsg.SKS_SHS_CHG_UM, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.SKS_SHS_CHG_UM)) },
				{ EKK2101C010CBSMsg.ADCHG_WORK_RRK_BIKO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_WORK_RRK_BIKO)) },
				{ EKK2101C010CBSMsg.UPD_DTM_BF, getAdChgDtm(param) },
		};

		// 更新処理実行
		CAANMsg ekk2101c010Msg_out = callSC(handle, scCall, param, dataMapKey, ekk2101c010IN);
		// 更新年月日時分秒
		setAdChgDtm(param, getNullToStr((String)ekk2101c010Msg_out.getString(EKK2101C010CBSMsg.UPD_DTM)));
	}
	/* ++++++++++ v5.00.01 追加終了 ++++++++++ */
	
	/* ++++++++++ v5.00.02 変更開始 ++++++++++ */
	/**
	 * 住変明細登録（サービス契約内訳）メソッド
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param ekk2091b001CbsMsg
	 * @param inMap
	 * @return CAANMsg
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void execEKK2101D010SvcKeiUcwk(SessionHandle handle, 
												ServiceComponentRequestInvoker scCall, 
												IRequestParameterReadWrite param, 
												String dataMapKey,
												CAANMsg ekk2091b001CbsMsg,
												HashMap inMap) throws Throwable
	{
		
		String kktkSvcKeiNo = (String)inMap.get("chg_tg_kei_no");
		
		CAANMsg ekk0341a010Msg = getEKK0341A010(handle, scCall, param, dataMapKey, kktkSvcKeiNo);
		
		String kktkSvcCd = getNullToStr(ekk0341a010Msg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
		
		if(!KKTK_SVC_C009.equals(kktkSvcCd))
		{
			return;
		}
		
		String svcKeiUcwkNo = getNullToStr(ekk0341a010Msg.getString(EKK0341A010CBSMsg1List.SVC_KEI_UCWK_NO));
		
		HashMap<String, String> ekk2101D010Map = new HashMap();
		
		ekk2101D010Map.put("func_code", (String)inMap.get("func_code"));
		ekk2101D010Map.put("adchg_dtl_sbt_cd_kiki", ADCHG_DTL_SBT_CD_SVC_KEI_UCWK);
		ekk2101D010Map.put("chg_tg_kei_no", ""); // サービス契約内訳番号の場合、未設定
		ekk2101D010Map.put("kiki_chg_no", svcKeiUcwkNo);// サービス契約内訳番号
		
		execEKK2101D010(handle, scCall, param, dataMapKey, ekk2091b001CbsMsg, ekk2101D010Map);
		
	}
	
	/**
	 * 機器提供サービス契約情報取得メソッド
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param workIchiranMap
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg getEKK0341A010(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									String kktkSvcKeiNo) throws Exception
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);

		// ***** EKK0341A010（機器提供サービス契約一意照会）*****
		Object[][] ekk0341a010IN = {
						{ EKK0341A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341A010 },
						{ EKK0341A010CBSMsg.FUNC_CODE, FUNC_CODE_2 },
						{ EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo },
						{ EKK0341A010CBSMsg.KEY_GENE_ADD_DTM, "" },
						{ EKK0341A010CBSMsg.KEY_RSV_APLY_YMD, JKKBpCommon.getOpeDate(null) },
		};

		CAANMsg[] ekk0341a010cbsMsg = callSC(handle, scCall, param, dataMapKey, ekk0341a010IN).getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);

		return ekk0341a010cbsMsg[0];
	}
	/* ++++++++++ v5.00.02 変更完了 ++++++++++ */
	/* ++++++++++ v5.00.04 変更開始 ++++++++++ */
	/**
	 * 住所変更明細更新（予約取消） <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param ekk2101b001CbsMsg1List
	 * @param inMap
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK2101C010RsvCancel(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param, String dataMapKey,
			CAANMsg ekk2101b001CbsMsg1List, HashMap inMap) throws Throwable
	{
		String svcKeiIdoSbtCd = getNullToStr((String)inMap.get("svc_kei_ido_sbt_cd"));
		if("".equals(svcKeiIdoSbtCd)){
			svcKeiIdoSbtCd = getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.SVC_KEI_IDO_SBT_CD));
		}
		
		// ***** EKK2101C010（住所変更明細更新）*****
		Object[][] ekk2101c010IN = {
				{ EKK2101C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2101C010 },
				{ EKK2101C010CBSMsg.FUNC_CODE, inMap.get("func_code") },
				{ EKK2101C010CBSMsg.ADCHG_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_NO)) },
				{ EKK2101C010CBSMsg.ADCHG_DTL_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_DTL_NO)) },
				{ EKK2101C010CBSMsg.ADCHG_DTL_SBT_CD, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD)) },
				{ EKK2101C010CBSMsg.CHG_TG_KEI_NO, (String)inMap.get("chg_tg_kei_no") },
				{ EKK2101C010CBSMsg.CHBF_SKBT_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.CHBF_SKBT_NO)) },
				{ EKK2101C010CBSMsg.CHAF_SKBT_NO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.CHBF_SKBT_NO)) },
				{ EKK2101C010CBSMsg.SVC_KEI_IDO_SBT_CD, svcKeiIdoSbtCd },
				{ EKK2101C010CBSMsg.SKS_SHS_CHG_UM, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.SKS_SHS_CHG_UM)) },
				{ EKK2101C010CBSMsg.ADCHG_WORK_RRK_BIKO, getNullToStr((String)ekk2101b001CbsMsg1List.getString(EKK2101B001CBSMsg1List.ADCHG_WORK_RRK_BIKO)) },
				{ EKK2101C010CBSMsg.UPD_DTM_BF, getAdChgDtm(param) },
		};

		// 更新処理実行
		CAANMsg ekk2101c010Msg_out = callSC(handle, scCall, param, dataMapKey, ekk2101c010IN);
		// 更新年月日時分秒
		setAdChgDtm(param, getNullToStr((String)ekk2101c010Msg_out.getString(EKK2101C010CBSMsg.UPD_DTM)));
	}

	/**
	 * 住所変更明細論理削除（サービス契約内訳） <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param inMap
	 * @param adchgNo
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK2101E010SvcKeiUcwk(SessionHandle handle, ServiceComponentRequestInvoker scCall, IRequestParameterReadWrite param, String dataMapKey,
			HashMap inMap, String adchgNo) throws Throwable
	{
		String kktkSvcKeiNo = (String)inMap.get("chg_tg_kei_no");
		
		CAANMsg ekk0341a010Msg = getEKK0341A010(handle, scCall, param, dataMapKey, kktkSvcKeiNo);
		
		String kktkSvcCd = getNullToStr(ekk0341a010Msg.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
		
		if(!KKTK_SVC_C009.equals(kktkSvcCd))
		{
			return;
		}
		
		String svcKeiUcwkNo = getNullToStr(ekk0341a010Msg.getString(EKK0341A010CBSMsg1List.SVC_KEI_UCWK_NO));
		
		// 住所変更明細種別コード
		String adchgDtlSbtCd = "";
		
		// 変更後識別番号
		String chafSkbtNo = "";
		
		CAANMsg ekk2101b001CbsMsgWork = null;
		
		// 住所変更明細一覧照会
		HashMap parmMap = new HashMap();
		parmMap.put("adchg_dtl_sbt_cd_kiki", ADCHG_DTL_SBT_CD_SVC_KEI_UCWK);
		
		CAANMsg[] ekk2101b001CbsMsg1List = execEKK2101B001(handle, scCall, param, dataMapKey, adchgNo, parmMap);
		
		for (CAANMsg ekk2101b001CbsMsg : ekk2101b001CbsMsg1List)
		{
			adchgDtlSbtCd = getNullToStr(ekk2101b001CbsMsg.getString(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD));
			
			if(!ADCHG_DTL_SBT_CD_SVC_KEI_UCWK.equals(adchgDtlSbtCd))
			{
				continue;
			}
			
			chafSkbtNo = getNullToStr(ekk2101b001CbsMsg.getString(EKK2101B001CBSMsg1List.CHAF_SKBT_NO));
			
			// 論理削除対象のサービス契約内訳番号を判別
			if(chafSkbtNo.equals(svcKeiUcwkNo))
			{
				ekk2101b001CbsMsgWork = ekk2101b001CbsMsg;
				break;
			}
		}
		// 論理削除を行います。
		if(ekk2101b001CbsMsgWork != null)
		{
			execEKK2101E010(handle, scCall, param, dataMapKey, ekk2101b001CbsMsgWork, inMap);
		}
		
		
	}

	/* ++++++++++ v5.00.04 変更完了 ++++++++++ */
}