/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKKojiChgPlaceNoCC
*	ソースファイル名：JKKKojiChgPlaceNoCC.java
*	作成者			：FJ
*	日付			：2012年12月12日
*＜機能概要＞
*	サービス契約回線内訳の回線場所住所を更新し、宅内機器管理システムへの場所番号連携を行う共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/12/12	FJ）        新規作成
*	v4.01.00    2013/04/09  FJ）間瀬    【IT1-2013-0000804】対応
*	v5.00.00	2013/04/15	FJ）中井	【IT1-2013-0000939】住所変更サービス契約対応
*   v5.00.01	2013/05/15	FJ)辛	    【IT1-2013-0001200】対応
*   v5.00.02	2013/05/23	FJ) 中井	【IT1-2013-0001240】対応
*   v5.00.03	2013/09/26	FJ) 中井	【OM-2013-0002620】対応
*   v5.00.04	2013/11/19	FJ) 中井	【OM-2013-0004253】対応
*   v7.00.00	2014/02/26	FJ) 中井	【OM-2014-0000678】対応
*   v8.00.00	2014/04/01	FJ) 中井	【OM-2014-0001212】対応
*   v8.00.01	2014/05/07	FJ) 中井	【OM-2014-0001697】対応
*   v13.00.01	2015/04/02	FJ) 森脇	【OM-2015-0000655】対応
*   v14.00.00	2015/05/20	FJ) 森脇	【OM-2015-0000519】対応
*   v14.00.01	2015/05/26	FJ) 森脇	【OM-2015-0001254】対応
*   v15.00.00	2015/07/28	FJ) 熊谷	【OM-2015-0001393】対応
*   v71.00.00	2024/08/16	FJ) 謝		【#85235】サービス契約内訳eo光電話の予約レコードが付替バッチで登録されない
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKHakkoSODConstCC;
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.constant.JKUStrConst;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B007CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B007CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191C061CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0251B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B012CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B012CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341C200CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C220CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C234CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1041B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1041B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1081C011CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1081D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1551D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2401D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020002CBSMsg2List;
import eo.ejb.cbs.cbsmsg.EKKA0020003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020003CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020003CBSMsg2List;
import eo.ejb.cbs.cbsmsg.EKKA0020004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0081B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0081B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0141B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0141B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg1List;

/**
 * 回線場所変更宅内連携部品。<p>
 * <BR>
 * @author 富士通
 */
public class JKKKojiChgPlaceNoCC extends AbstractCommonComponent
{
	/** サービス契約回線内訳一覧照会（サービス契約番号） */
	private static final String TEMPLATE_ID_EKK0251B001 = "EKK0251B001";
	/** サービス契約回線内訳一意照会 */
	private static final String TEMPLATE_ID_EKK0251A010 = "EKK0251A010";
	/** サービス契約回線内訳内容変更 */
	private static final String TEMPLATE_ID_EKK0251C030 = "EKK0251C030";
	/** 機器提供サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0341A010 = "EKK0341A010";
	/** 宅内機器型式一意照会 */
	private static final String TEMPLATE_ID_EZM0411A010 = "EZM0411A010";
	/** 場所番号連携対象機器ワーク登録 */
	private static final String TEMPLATE_ID_EKK2401D010 = "EKK2401D010";
	/** サービス契約_工事案件一覧照会 */
	private static final String TEMPLATE_ID_EKU0081B010 = "EKU0081B010";
	/** 工事案件一意照会 */
	private static final String TEMPLATE_ID_EKU0011A010 = "EKU0011A010";
	/** 工事案件対象宅内機器一覧照会 */
	private static final String TEMPLATE_ID_EKU0141B010 = "EKU0141B010";
	/** 回線利用中サービス契約一覧照会 */
	private static final String TEMPLATE_ID_EKK0081B007 = "EKK0081B007";
/* ++++++++++ v4.01.00 削除開始 ++++++++++ */
//	/** 機器提供サービス契約履歴一覧照会 */
//	private static final String TEMPLATE_ID_EKK0341B025 = "EKK0341B025";
/* ++++++++++ v4.01.00 削除終了 ++++++++++ */

	/** 設置場所番号取得 */
	private static final String TEMPLATE_ID_EKKA0020002 = "EKKA0020002";
	/** 宅内機器一意照会（４） */
	private static final String TEMPLATE_ID_EKKA0020003 = "EKKA0020003";
	/** 機器場所番号変更 */
	private static final String TEMPLATE_ID_EKKA0020004 = "EKKA0020004";

	/** 機器提供サービス契約一覧照会(接続機器情報) */
	private static final String TEMPLATE_ID_EKK0341B012 = "EKK0341B012";
	/** 機器提供サービス契約場所変更 */
	private static final String TEMPLATE_ID_EKK0341C200 = "EKK0341C200";
	/** 機器提供サービス契約場所変更確定 */
	private static final String TEMPLATE_ID_EKK0341C220 = "EKK0341C220";
// OM-2015-0001254 ADD START
	/** 機器提供サービス契約情報変更（契約変更中住所更新） */
	private static final String TEMPLATE_ID_EKK0341C234 = "EKK0341C234";
// OM-2015-0001254 ADD END
	
	/* ++++++++++ v5.00.04 追加開始 ++++++++++ */
	/** サービス契約内訳一覧照会 */
	private static final String TEMPLATE_ID_EKK0161B004 = "EKK0161B004";
	/** サービス契約内訳＜eo光電話＞一意照会 */
	private static final String TEMPLATE_ID_EKK0191A010 = "EKK0191A010";
	/** サービス契約内訳＜eo光電話＞情報変更 */
	private static final String TEMPLATE_ID_EKK0191C060 = "EKK0191C060";
	/* ++++++++++ v5.00.04 追加終了 ++++++++++ */
	/** サービス契約内訳＜eo光電話＞情報変更 */
	private static final String TEMPLATE_ID_EKK0161A010 = "EKK0161A010";
	/** サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	/** サービス契約内訳＜eo光電話＞情報変更（住所変更） */
	private static final String TEMPLATE_ID_EKK0191C061 = "EKK0191C061";
	/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
	/** オーダ設定一覧照会 */
	private static final String TEMPLATE_ID_EKK1041B001 = "EKK1041B001";
	/** オーダ発行条件登録 */
	private static final String TEMPLATE_ID_EKK1081D010 = "EKK1081D010";
	/** オーダ情報作成ワーク登録 */
	private static final String TEMPLATE_ID_EKK1551D010 = "EKK1551D010";
	/** 同一処理番号採番 */
	private static final String TEMPLATE_ID_EKK1081C011 = "EKK1081C011";
	/* ++++++++++ v8.00.00 追加終了 ++++++++++ */
	
	/**
	 * サービス契約の更新タイムスタンプ格納キー
	 */
	private static final String KK_COM_SVC_UP_DTM = "KK_COM_SVC_UP_DTM";
	/**
	 * サービス契約の申込明細番号
	 */
	private static final String MSKM_DTL_NO_PNO = "mskm_dtl_no_pno";

	/** 機能コード（チェック＆登録） */
	private static final String FUNC_CODE_1 = "1";
	/** 機能コード（チェックのみ） */
	private static final String FUNC_CODE_2 = "2";

	/** 機器提供サービス契約ステータス（解約済） */
	private static final String KKTK_SVC_KEI_STAT_KAIYAKU = "910";
	/** 機器提供サービス契約ステータス（キャンセル済） */
	private static final String KOJIAK_SBT_CD_NEW = "920";

	/* ++++++++++ v5.00.00 追加開始 ++++++++++ */
	/** 住所変更処理 住変(新設)+住変(撤去)の場合 */
	private static final String JUHEN_SHORI_ST = "2";
	/* ++++++++++ v5.00.00 追加終了 ++++++++++ */
	/** 住所変更明細種別コード（サービス契約内訳番号）*/
	private static final String ADCHG_DTL_SBT_CD_02 = "02";
	/** 住所変更明細種別コード（サービス契約番号）*/
	private static final String ADCHG_DTL_SBT_CD_01 = "01";
	/** サービスコード（電話）*/
	private static final String SVC_CD_02 = "02";
	/** 予約適用年月日（２０９９１２３１）*/
	private static final String RSV_APLY_YMD_20991231 = "20991231";
	/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
	/** 最新要求種別コード（消去）*/
	private static final String RCNT_YOKYU_SBT_CD_DEL = "08";
	/** 最新要求種別コード（消去）*/
	private static final String AD_CHG_FIX_FIXED = "003";
	/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
	
	

	/**
	 * 回線場所変更の宅内連携をする。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle, 
												IRequestParameterReadWrite param, 
												String fixedText) throws Throwable
	{
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(fixedText);
		ArrayList kktkSvcKeiList = new ArrayList();
		Object[][] inMsg = null;
		
		// 作業領域の取得
		Map workMap = (HashMap)param.getMappingWorkArea();
		
		// 住所変更有無フラグ
		boolean adChgUmFlg = (Boolean)ccMsg.get("adrChangeFlg");
		// 機能コード
		String func_code = (String)ccMsg.get("func_code");
		
		// 住所変更無しの場合,確認のみの場合は発番しない
		if (adChgUmFlg == false || !FUNC_CODE_1.equals(func_code))
		{
			return param;
		}
		
		// 実行モード
		String mskmDtlNo = null;
		String lastUpdDtm = null;
		String placeNo = null;
		
		String baseYmd = JPCBPCommon.getOpeDate(null);	// 基準年月日
		
		inMsg = new Object[][]{
				{EKKA0020002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKKA0020002},
				{EKKA0020002CBSMsg.FUNC_CODE,  "1"},
				{EKKA0020002CBSMsg1List.KEY_SETPLACE_AD_CD, (String)ccMsg.get("kaisen_place_ad_cd")},
				{EKKA0020002CBSMsg1List.KEY_SETPLACE_PCD, (String)ccMsg.get("kaisen_place_pcd")},
				{EKKA0020002CBSMsg1List.KEY_SETPLACE_STATE_NM, (String)ccMsg.get("kaisen_place_state_nm")},
				{EKKA0020002CBSMsg1List.KEY_SETPLACE_CITY_NM, (String)ccMsg.get("kaisen_place_city_nm")},
				{EKKA0020002CBSMsg1List.KEY_SETPLACE_OAZTSU_NM, (String)ccMsg.get("kaisen_place_oaztsu_nm")},
				{EKKA0020002CBSMsg1List.KEY_SETPLACE_AZCHO_NM, (String)ccMsg.get("kaisen_place_azcho_nm")},
				{EKKA0020002CBSMsg1List.KEY_SETPLACE_BNCHIGO, (String)ccMsg.get("kaisen_place_bnchigo")},
				{EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRTTM, (String)ccMsg.get("kaisen_place_adrttm")},
				{EKKA0020002CBSMsg1List.KEY_SETPLACE_ADRRM, (String)ccMsg.get("kaisen_place_adrrm")}
		};
		
		// 設置場所番号取得
		CAANMsg placeMsg = callSC(handle, scCall, param, fixedText, inMsg, placeNo);
		CAANMsg[] placeMsgLst = placeMsg.getCAANMsgList(EKKA0020002CBSMsg.EKKA0020002CBSMSG2LIST);
		
		if (placeMsgLst != null && placeMsgLst.length > 0)
		{
			placeNo = placeMsgLst[0].getString(EKKA0020002CBSMsg2List.SETPLACE_NO);
			workMap.put("place_no", placeNo);
		}
		

	/* ++++++++++ v5.00.00 修正開始 ++++++++++ */
		// サービス契約番号（新設側）
		String jh_init_svckeino_new = (String)ccMsg.get("jh_init_svckeino_new");
		String juhenShori =  (String)ccMsg.get("juhen_shori");
		String svcKeiNo = (String)ccMsg.get("svc_kei_no");
		// サービス契約番号
		if("0".equals(jh_init_svckeino_new) && JUHEN_SHORI_ST.equals(juhenShori)
				&& svcKeiNo != null && !svcKeiNo.equals(ccMsg.get("svc_kei_no_jh")))
		{
			svcKeiNo = (String)ccMsg.get("svc_kei_no_jh");
		}
	/* ++++++++++ v5.00.00 修正終了 ++++++++++ */
		String kaisenUcwkNo = (String)ccMsg.get("svc_kei_kaisen_ucwk_no");
		inMsg = new Object[][]{
				{EKK0251A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0251A010},
				{EKK0251A010CBSMsg.FUNC_CODE,  FUNC_CODE_2},
				{EKK0251A010CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, kaisenUcwkNo},
				{EKK0251A010CBSMsg.KEY_GENE_ADD_DTM, ""}
		};
		
		// 回線内訳情報検索
		CAANMsg msg = callSC(handle, scCall, param, fixedText, inMsg);
		
		mskmDtlNo = (String)ccMsg.get(MSKM_DTL_NO_PNO);
	/* ++++++++++ v5.00.00 修正開始 ++++++++++ */
		if(workMap.get(KK_COM_SVC_UP_DTM) != null && !"".equals(workMap.get(KK_COM_SVC_UP_DTM)))
		{
			lastUpdDtm = (String)workMap.get(KK_COM_SVC_UP_DTM);
		}
		else
		{
			// サービス契約番号
			if("0".equals(jh_init_svckeino_new) && JUHEN_SHORI_ST.equals(juhenShori))
			{
				lastUpdDtm = (String)ccMsg.get("upd_dtm_jh");
			}
			else
			{
				lastUpdDtm = (String)ccMsg.get("upd_dtm");
			}
		}
		/* ++++++++++ v5.00.00 修正終了 ++++++++++ */
		/* ++++++++++ v5.00.03 追加開始 ++++++++++ */
		// 回線の最大の更新日時を取得する
		String lastUpdDtmKsn = (String)ccMsg.get("adchg_ksn_upd_dtm");
		//機器で更新日時が変更されていない場合は、回線最大値を渡す。
		if(lastUpdDtmKsn != null && !"".equals(lastUpdDtmKsn) && lastUpdDtmKsn.compareTo(lastUpdDtm) > 0)
		{
			lastUpdDtm = lastUpdDtmKsn;
		}
		/* ++++++++++ v5.00.03 追加終了 ++++++++++ */
		inMsg = editInMsgEKK0251C030(kaisenUcwkNo, mskmDtlNo, lastUpdDtm, msg, ccMsg, placeNo);
		
		// 回線内訳更新
		msg = callSC(handle, scCall, param, fixedText, inMsg);
		lastUpdDtm = msg.getString(EKK0251C030CBSMsg.UPD_DTM);
		workMap.put(KK_COM_SVC_UP_DTM, lastUpdDtm);
		
		
		// 回線に紐づくサービス契約を取得
		inMsg = new Object[][]{
				{EKK0081B007CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081B007},
				{EKK0081B007CBSMsg.FUNC_CODE,  "1"},
				{EKK0081B007CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, kaisenUcwkNo},
				{EKK0081B007CBSMsg.KEY_OPE_YMD, baseYmd}
		};
		
		// 対象サービス契約検索
		msg = callSC(handle, scCall, param, fixedText, inMsg);
		CAANMsg[] outLst = msg.getCAANMsgList(EKK0081B007CBSMsg.EKK0081B007CBSMSG1LIST);
		
		/* ++++++++++ v7.00.00 修正開始 ++++++++++ */
		ArrayList<CAANMsg> outArList = new ArrayList<CAANMsg>();
// OM-2015-0000655 2015/04/02 MOD START
//		if(outLst == null || outLst.length == 0)
//		{
		ArrayList adchgDtlList = (ArrayList)ccMsg.get("adrChgDtlList");

		if(adchgDtlList.size() > 0 && kaisenUcwkNo.equals((String)ccMsg.get("svc_kei_kaisen_ucwk_no_shinsetsu")))
		{
// OM-2015-0000655 2015/04/02 MOD END
			HashMap childadrMap = null;
			for (int j = 0; j < adchgDtlList.size(); j++)
			{
				childadrMap = (HashMap)adchgDtlList.get(j);
				String adchg_dtl_sbt_cd = (String)childadrMap.get("adchg_dtl_sbt_cd");
				if(!ADCHG_DTL_SBT_CD_01.equals(adchg_dtl_sbt_cd)){
					continue;
				}
				String chaf_skbt_no =  (String)childadrMap.get("chaf_skbt_no");
				if(chaf_skbt_no != null && !"".equals(chaf_skbt_no))
				{
					inMsg = new Object[][]{
							{EKK0081A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081A010},
							{EKK0081A010CBSMsg.FUNC_CODE,  "2"},
							{EKK0081A010CBSMsg.KEY_SVC_KEI_NO, chaf_skbt_no},
							{EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, baseYmd},
					};
					
					// 対象サービス契約検索
					msg = callSC(handle, scCall, param, fixedText, inMsg);
					CAANMsg[] o81Lst = msg.getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
					if(o81Lst != null && o81Lst.length > 0)
					{
						outArList.add(o81Lst[0]);
					}
				}
			}
		}
		else
		{
			for (int i = 0; i < outLst.length; i++)
			{
				outArList.add(outLst[i]);
			}
			
		}
		ArrayList<HashMap<String, String>> kojiMapList = new ArrayList<HashMap<String, String>>();
		
		// ネット、ＴＶ、電話のサービス契約番号を取得
//		String svcKeiNoNet = getSvcKeiNo(outLst, "01");
//		String svcKeiNoTv = getSvcKeiNo(outLst, "03");
//		String svcKeiNoTel = getSvcKeiNo(outLst, "02");
		String svcKeiNoNet = getSvcKeiNo(outArList, "01");
		String svcKeiNoTv = getSvcKeiNo(outArList, "03");
		String svcKeiNoTel = getSvcKeiNo(outArList, "02");
		HashMap<String, String> kojiakMap = null;
		
		/* ++++++++++ v5.00.04 追加開始 ++++++++++ */
		// 電話のサービスの緊急通報用住所を更新する。
//		for (int i = 0; i < outLst.length; i++)
//		{
		for (int i = 0; i < outArList.size(); i++)
		{
//			// サービスコードが"02:電話"かつサービス契約ステータスが"010:受付済み"の場合
//			if ("02".equals(outLst[i].getString(EKK0081B007CBSMsg1List.SVC_CD)) && 
//					"010".equals(outLst[i].getString(EKK0081B007CBSMsg1List.SVC_KEI_STAT)))
//			{
			if ("02".equals(outArList.get(i).getString(EKK0081B007CBSMsg1List.SVC_CD)))
			{
				// サービス契約に紐付くサービス契約内訳＜eo光電話＞の緊急通報用住所を更新する。
//				lastUpdDtm = execSvckeiEmgUpd(handle, scCall, param, fixedText, outLst[i].getString(EKK0081B007CBSMsg1List.SVC_KEI_NO), lastUpdDtm);
//				lastUpdDtm = execSvckeiEmgUpd(handle, scCall, param, fixedText, outArList.get(i).getString(EKK0081B007CBSMsg1List.SVC_KEI_NO), lastUpdDtm, baseYmd);
				lastUpdDtm = execSvckeiEmgUpd(handle, scCall, param, fixedText, outArList.get(i), lastUpdDtm, baseYmd);
				workMap.put(KK_COM_SVC_UP_DTM, lastUpdDtm);
			}
		}
		/* ++++++++++ v5.00.04 追加終了 ++++++++++ */
		// サービス契約単位で工事案件を取得
//		for (int i = 0; i < outLst.length; i++)
		for (int i = 0; i < outArList.size(); i++)
		{
			// 工事案件検索（サービス契約番号に紐づく工事案件の情報（配送作成済フラグ取得）を取得）
//			kojiakMap = getKojiak(handle, scCall, param, fixedText, outLst[i].getString(EKK0081B007CBSMsg1List.SVC_KEI_NO));
			kojiakMap = getKojiak(handle, scCall, param, fixedText, outArList.get(i).getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
			if (kojiakMap != null && isAddKojiakMap(kojiMapList, kojiakMap.get("kojiak_no")))
			{
				kojiMapList.add(kojiakMap);
			}
		}
		
		ArrayList<HashMap<String, String>> kojiakTgKikiList = new ArrayList<HashMap<String, String>>();
		// 工事案件が取得された場合、対象宅内機器を取得する
		for (HashMap<String, String> mp : kojiMapList)
		{
			// 工事案件対象宅内機器のデータを取得する
			kojiakTgKikiList = getKojiakTgKikiList(handle, scCall, param, fixedText, mp, kojiakTgKikiList);
		}

		svcKeiNo = null;
		// サービス契約単位で機器を取得し、連携を行う
//		for (int i = 0; i < outLst.length; i++)
		for (int i = 0; i < outArList.size(); i++)
		{
//			svcKeiNo = outLst[i].getString(EKK0081B007CBSMsg1List.SVC_KEI_NO);
			svcKeiNo = outArList.get(i).getString(EKK0081B007CBSMsg1List.SVC_KEI_NO);
			
			// ネット、ＴＶ、電話以外は対象外
//			if(!isTgtSvc(outLst[i]))
			if(!isTgtSvc(outArList.get(i)))
			{
				continue;
			}
			
			// サービス契約に紐づく対象の機器検索
			HashMap<String, HashMap<String, String>> kktkMap = getKktkInfExecSvcKei(handle, scCall, param, fixedText, svcKeiNo, baseYmd);
			
			for (int j = 0; j < kktkMap.size(); j++)
			{
				HashMap<String, String> map = kktkMap.get(String.valueOf(j));
				/* ++++++++++ v5.00.02 追加開始 ++++++++++ */
				// 電話のサービス契約回線内訳に紐付く機器は、同一回線にネットのサービスが付いている場合、対象外とする。（２度処理しないため）
				if (svcKeiNo.equals(svcKeiNoTel) && map.get("svc_kei_kaisen_ucwk_no") != null && !"".equals(svcKeiNoNet))
				{
					continue;
				}
				/* ++++++++++ v5.00.02 追加終了 ++++++++++ */
				
				HashMap<String, String> kikiRecInfo = getKikiRecInfo(map, kojiakTgKikiList);
				
				// 機器の状態取得（工事中機器(01)、製造番号未決定機器(02)、利用中機器(03)、対象外(00)）
				String kikiStatus = kikiRecInfo.get("kiki_status");
				// 製造番号有無取得
				String seizouUmu = kikiRecInfo.get("seizo_no_um");
				// 工事案件番号
				String kojiak_no = kikiRecInfo.get("kojiak_no");
				// 配送済みフラグ
				String haisoSakseiZumiFlg = kikiRecInfo.get("haiso_saksei_zumi_flg");
				
				// 対象外
				if("00".equals(kikiStatus))
				{
					continue;
				}
				
				// 連携タイミングチェック
				int ptn = getRnkeiPtnExecSvckei(haisoSakseiZumiFlg, kikiStatus, seizouUmu);
				
				String insSvcKei = getInsSvckeiNo(map, svcKeiNo, svcKeiNoNet, svcKeiNoTv, svcKeiNoTel);
				
				// 後日連携の場合、場所番号連携対象機器ワーク登録
				if (1 == ptn)
				{
					addPlnoRnktgkkWkExecSvcKei(handle, scCall, param, fixedText, map, insSvcKei, kikiStatus, kojiak_no, placeNo);
				}
				// 即時連携の場合、宅内連携保持領域に設定
				else if (2 == ptn)
				{
					map.put("svc_kei_no", insSvcKei);
					kktkSvcKeiList.add(map);
				}
			}
			
			// 機器場所番号CCを実行する（回線に紐付くサービス契約分処理）
// OM-2015-0001254 MOD START
//			execKikitkSvcKeiPlaceUpd(handle, param, fixedText, svcKeiNo, placeNo, mskmDtlNo);
			String svc_kei_kaisen_ucwk_no_shinsetsu = (String)ccMsg.get("svc_kei_kaisen_ucwk_no_shinsetsu");
			execKikitkSvcKeiPlaceUpd(handle, param, fixedText, svcKeiNo, placeNo, mskmDtlNo ,svcKeiNoTel ,svcKeiNoNet ,svc_kei_kaisen_ucwk_no_shinsetsu);
// OM-2015-0001254 MOD END
		}
		/* ++++++++++ v7.00.00 修正終了 ++++++++++ */

		
		// 宅内機器管理システム連携
		if (kktkSvcKeiList.size() > 0)
		{
			updTaknkiki(handle, scCall, param, fixedText, kktkSvcKeiList, placeNo);
		}
		
		return param;
	}

	/**
	 * @param kojiMapList
	 * @param kojiak_no
	 * @return boolean
	 * @exception Throwableがスローされます 。
	 */
	public boolean isAddKojiakMap(ArrayList<HashMap<String, String>> kojiMapList, String kojiak_no) throws Throwable
	{
		for(HashMap<String, String> kojiMap : kojiMapList)
		{
			if(kojiak_no.equals(kojiMap.get("kojiak_no")))
			{
				return false;
			}
		}
		
		return true;
	}
	
	/**
	 * チェック処理<br>
	 * サービスコンポーネント実行用CAANMsgを返却します。<br>
	 * <br>
	 * @param handle セッションハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return HashMap<String, Object>
	 * @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));
		
		ArrayList svcKeiNoList = (ArrayList)ccMsg.get("svc_kei_no_list");
		
		Object[][] inMsg = {
				{EKK0251B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0251B001},
				{EKK0251B001CBSMsg.FUNC_CODE,  "1"},
				{EKK0251B001CBSMsg.KEY_SVC_KEI_NO, (String)svcKeiNoList.get(0)}
		};
		
		templates.add(((CAANMsg[])editInMsg(param, inMsg).get(JCMConstants.TEMPLATE_LIST_KEY))[0]);
		
		// チェック用サービスインターフェイス
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, Arrays.asList(templates));
		return paramMap;
	}

	/**
	 * サービスインターフェイス処理結果(エラー情報)の取得<br>
	 * 業務データ取得・書込用I/Fをそのまま返却します。<br>
	 * <br>
	 * @param param デルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param templates CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, 
													CAANMsg[] templates, 
													int returnCode, 
													String fixedText) throws Throwable
	{
		HashMap<String, Object> dataMap = (HashMap)param.getData(fixedText);
		for (CAANMsg template : templates)
		{
			CAANMsg[] workTemplates = {template};
			int templateStatus = template.getInt(EKK0251B001CBSMsg.STATUS);
			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);
			}
			
			editErrorInfoEKK0251B001(dataMap, workTemplates);
		}
		return param;
	}

	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @param placeNo
	 * 
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String dataMapKey,
							Object[][] mappingData,
							String placeNo) throws Exception
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData, placeNo);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		String statKey = EKK0251B001CBSMsg.STATUS;
		
		// リターンコード取得
		int returnCode = (Integer)result.get(JCMConstants.RET_CD_INT_KEY);
		
		int templateStatus = msg.getInt(statKey);
		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);
		}
		
		if (TEMPLATE_ID_EKKA0020002.equals(mappingData[0][1]))
		{
			editErrorInfoEKKA0020002((HashMap<String, Object>)param.getData(dataMapKey), templates);
		}
		else if (TEMPLATE_ID_EKKA0020003.equals(mappingData[0][1]))
		{
			editErrorInfoEKKA0020003((HashMap<String, Object>)param.getData(dataMapKey), templates);
		}
		else if (TEMPLATE_ID_EKKA0020004.equals(mappingData[0][1]))
		{
			editErrorInfoEKKA0020004((HashMap<String, Object>)param.getData(dataMapKey), templates);
		}
		
		//エラー情報のマップを取得
		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));
		
		/* ◇処理結果の判定*/
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = result.get(JCMConstants.RET_CD_INT_KEY).toString();
		Integer status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status.intValue()))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
		return msg;
	}

	/**
	 * 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];
		String statKey = EKK0251B001CBSMsg.STATUS;
		
		// リターンコード取得
		int returnCode = (Integer)result.get(JCMConstants.RET_CD_INT_KEY);
		
		int templateStatus = msg.getInt(statKey);
		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);
		}
		
		setErrorInf(msg, (HashMap<String, Object>)param.getData(dataMapKey));
		
		//エラー情報のマップを取得
		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));
		
		/* ◇処理結果の判定*/
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = result.get(JCMConstants.RET_CD_INT_KEY).toString();
		Integer status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		//■水平展開【IT1-2013-0001200】 START=========================================================================
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode.toString()) && 0 == status))
		{
			// 警告の場合、例外をスローしない
			if(!("0".equals(rtnCode.toString()) && 4 == status))
			{
				throw new SCCallException("戻り値不正", rtnCode.toString(), status);
			}
		}
		//■水平展開 END==========================================================================
		// 異常の場合、SCCallExceptionを生成してスローする
//		if(!("0".equals(rtnCode) && 0 == status.intValue()))
//		{
//			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
//			throw scCallEx;
//		}
		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 mappingData
	 * @param placeNo
	 * 
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
												Object[][] mappingData,
												String placeNo) 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));
		
		template.set((String)mappingData[0][0], mappingData[0][1]);
		template.set((String)mappingData[1][0], mappingData[1][1]);
		
		if (TEMPLATE_ID_EKKA0020002.equals(mappingData[0][1]))
		{
			CAANMsg[] subMsg = template.getCAANMsgList(EKKA0020002CBSMsg.EKKA0020002CBSMSG1LIST);
			
			if (subMsg == null)
			{
				subMsg = new CAANMsg[1];
			}
			
			CAANMsg msg = subMsg[0];
			
			if (msg == null)
			{
				msg = new CAANMsg(EKKA0020002CBSMsg1List.class.getName());
			}
			
			for (int i = 2; i < mappingData.length; i++)
			{
				if ("".equals(mappingData[i][1]))
				{
					msg.setNull((String)mappingData[i][0]);
				}
				else
				{
					msg.set((String)mappingData[i][0], mappingData[i][1]);
				}
			}
			subMsg[0] = msg;
			template.set(EKKA0020002CBSMsg.EKKA0020002CBSMSG1LIST, subMsg);
		}
		else if (TEMPLATE_ID_EKKA0020003.equals(mappingData[0][1]))
		{
			CAANMsg[] subMsg = template.getCAANMsgList(EKKA0020003CBSMsg.EKKA0020003CBSMSG1LIST);
			ArrayList list = (ArrayList)mappingData[2][1];
			
			if (subMsg == null)
			{
				subMsg = new CAANMsg[list.size()];
			}
			
			for (int i = 0; i < subMsg.length; i++)
			{
				CAANMsg msg = subMsg[i];
				HashMap map = (HashMap)list.get(i);
				
				if (msg == null)
				{
					msg = new CAANMsg(EKKA0020003CBSMsg1List.class.getName());
				}
				
				msg.set("key_tk_mdl_cd", map.get("taknkiki_model_cd"));
				msg.set("key_kk_seizo_no", map.get("kiki_seizo_no"));
				subMsg[i] = msg;
			}
			template.set(EKKA0020003CBSMsg.EKKA0020003CBSMSG1LIST, subMsg);
		}
		else if (TEMPLATE_ID_EKKA0020004.equals(mappingData[0][1]))
		{
			CAANMsg[] subMsg = template.getCAANMsgList(EKKA0020004CBSMsg.EKKA0020004CBSMSG1LIST);
			ArrayList list = (ArrayList)mappingData[2][1];
			
			if (subMsg == null)
			{
				subMsg = new CAANMsg[list.size()];
			}
			
			for (int i = 0; i < subMsg.length; i++)
			{
				CAANMsg msg = subMsg[i];
				HashMap map = (HashMap)list.get(i);
				
				if (msg == null)
				{
					msg = new CAANMsg(EKKA0020004CBSMsg1List.class.getName());
				}
				
				msg.set("key_tk_mdl_cd", map.get("taknkiki_model_cd"));
				msg.set("key_kk_seizo_no", map.get("kiki_seizo_no"));
				msg.set("key_chg_rsn_cd", "1");
				msg.set("key_btry_upd_dttm", map.get("kihont_upd_dttm"));
				msg.set("svc_kei_no", map.get("svc_kei_no"));
				msg.set("setplace_no", placeNo);
				subMsg[i] = msg;
			}
			template.set(EKKA0020004CBSMsg.EKKA0020004CBSMSG1LIST, subMsg);
		}
		else
		{
			for (int i = 2; 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 inMap
	 * @param templates
	 * @throws RequestParameterException
	 */
	private void editErrorInfoEKK0251B001(HashMap<String, Object> inMap, CAANMsg[] templates) throws RequestParameterException
	{
		setErrorInf(templates[0], inMap);
	}

	/**
	 * 
	 * @param inMap
	 * @param templates
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void editErrorInfoEKKA0020002(HashMap<String, Object> inMap, CAANMsg[] templates) throws RequestParameterException
	{
		ArrayList inList = (ArrayList)inMap.get("EKKA0020002CBSMsg1List");
		CAANMsg[] templateArray = templates[0].getCAANMsgList(EKKA0020002CBSMsg.EKKA0020002CBSMSG1LIST);
		HashMap childMap = null;
		
		if (inList == null)
		{
			childMap = new HashMap();
		}
		else
		{
			childMap = (HashMap)inList.get(0);
		}
		
		if (templateArray != null && templateArray.length > 0)
		{
			setErrorInf(templateArray[0], childMap);
		}
		
		if (!templates[0].isNull(EKKA0020002CBSMsg.EKKA0020002CBSMSG1LIST_ERR))
		{
			if (!inMap.containsKey("EKKA0020002CBSMsg1List_err"))
			{
				inMap.put("EKKA0020002CBSMsg1List_err", templates[0].getString(EKKA0020002CBSMsg.EKKA0020002CBSMSG1LIST_ERR));
			}
		}
	}

	/**
	 * 
	 * @param inMap
	 * @param templates
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void editErrorInfoEKKA0020003(HashMap<String, Object> inMap, CAANMsg[] templates) throws RequestParameterException
	{
		ArrayList inList = (ArrayList)inMap.get("EKKA0020003CBSMsg1List");
		CAANMsg[] templateArray = templates[0].getCAANMsgList(EKKA0020003CBSMsg.EKKA0020003CBSMSG1LIST);
		HashMap childMap = null;
		
		if (inList == null)
		{
			childMap = new HashMap();
		}
		else
		{
			childMap = (HashMap)inList.get(0);
		}
		
		if (templateArray != null && templateArray.length > 0)
		{
			setErrorInf(templateArray[0], childMap);
		}
		
		if (!templates[0].isNull(EKKA0020003CBSMsg.EKKA0020003CBSMSG1LIST_ERR))
		{
			if (!inMap.containsKey("EKKA0020003CBSMsg1List_err"))
			{
				inMap.put("EKKA0020003CBSMsg1List_err", templates[0].getString(EKKA0020003CBSMsg.EKKA0020003CBSMSG1LIST_ERR));
			}
		}
	}

	/**
	 * 
	 * @param inMap
	 * @param templates
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private void editErrorInfoEKKA0020004(HashMap<String, Object> inMap, CAANMsg[] templates) throws RequestParameterException
	{
		ArrayList inList = (ArrayList)inMap.get("EKKA0020004CBSMsg1List");
		CAANMsg[] templateArray = templates[0].getCAANMsgList(EKKA0020004CBSMsg.EKKA0020004CBSMSG1LIST);
		HashMap childMap = null;
		
		if (inList == null)
		{
			childMap = new HashMap();
		}
		else
		{
			childMap = (HashMap)inList.get(0);
		}
		
		if (templateArray != null && templateArray.length > 0)
		{
			setErrorInf(templateArray[0], childMap);
		}
		
		if (!templates[0].isNull(EKKA0020004CBSMsg.EKKA0020004CBSMSG1LIST_ERR))
		{
			if (!inMap.containsKey("EKKA0020004CBSMsg1List_err"))
			{
				inMap.put("EKKA0020004CBSMsg1List_err", templates[0].getString(EKKA0020004CBSMsg.EKKA0020004CBSMSG1LIST_ERR));
			}
		}
	}

	/**
	 * 
	 * @param msg
	 * @param map
	 */
	@SuppressWarnings("unchecked")
	private void setErrorInf(CAANMsg msg, HashMap<String, Object> map)
	{
		Iterator<String> msgKey = msg.getSchema().getSchemaKeySet().iterator();
		
		while (msgKey.hasNext())
		{
			String key = msgKey.next();
			
			if (key.endsWith("_err"))
			{
				if (!msg.isNull(key))
				{
					if (!map.containsKey(key))
					{
						map.put(key, msg.getString(key));
					}
				}
			}
		}
	}

	/**
	 * @param kaisenUcwkNo
	 * @param mskmDtlNo
	 * @param lastUpdDtm
	 * @param kaisenMsg
	 * @param ccMsg
	 * @param placeNo
	 * 
	 * @return Object[][]
	 * @throws RequestParameterException
	 */
	private Object[][] editInMsgEKK0251C030(String kaisenUcwkNo,
											String mskmDtlNo,
											String lastUpdDtm,
											CAANMsg kaisenMsg,
											HashMap<String, Object> ccMsg,
											String placeNo) throws RequestParameterException
	{
		CAANMsg msg = kaisenMsg.getCAANMsgList(EKK0251A010CBSMsg.EKK0251A010CBSMSG1LIST)[0];
		
		
		if(mskmDtlNo == null || "".equals(mskmDtlNo))
		{
			mskmDtlNo = msg.getString(EKK0251A010CBSMsg1List.MSKM_DTL_NO);
		}
		String kisn_ad_chk_lv = null;
		if("1".equals((String)ccMsg.get("kisn_plc_ad_mi_fix_flg"))){
			kisn_ad_chk_lv = "2";
		}
		else
		{
			kisn_ad_chk_lv = "1";
		}
		
		/* ++++++++++ v5.00.04 修正開始 ++++++++++ */
		Object[][] inMsg = new Object[][]{
				{EKK0251C030CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0251C030},
				{EKK0251C030CBSMsg.FUNC_CODE,  "1"},
				{EKK0251C030CBSMsg.SVC_KEI_KAISEN_UCWK_NO, kaisenUcwkNo},
				{EKK0251C030CBSMsg.MSKM_DTL_NO, mskmDtlNo},
				{EKK0251C030CBSMsg.KISN_PLC_AD_MI_FIX_FLG, (String)ccMsg.get("kisn_plc_ad_mi_fix_flg")},
				{EKK0251C030CBSMsg.KISN_PLC_AD_MI_FIX_RLS_YMD, msg.getString(EKK0251A010CBSMsg1List.KISN_PLC_AD_MI_FIX_RLS_YMD)},
				{EKK0251C030CBSMsg.KAISEN_PLC_KSH_AD_SAI_FLG, msg.getString(EKK0251A010CBSMsg1List.KAISEN_PLC_KSH_AD_SAI_FLG)},
				{EKK0251C030CBSMsg.CUST_SKK_AD_MI_FIX_FLG, msg.getString(EKK0251A010CBSMsg1List.CUST_SKK_AD_MI_FIX_FLG)},
				{EKK0251C030CBSMsg.CUST_SOS_USE_UM, msg.getString(EKK0251A010CBSMsg1List.CUST_SOS_USE_UM)},
				{EKK0251C030CBSMsg.MANSION_BUKKEN_NO, msg.getString(EKK0251A010CBSMsg1List.MANSION_BUKKEN_NO)},
				{EKK0251C030CBSMsg.KAISEN_PLACE_TELNO, (String)ccMsg.get("telno_shinsetsu")},
				{EKK0251C030CBSMsg.KAISEN_PLC_KANA, msg.getString(EKK0251A010CBSMsg1List.KAISEN_PLC_KANA)},
				{EKK0251C030CBSMsg.KAISEN_PLACE_AD_CD, (String)ccMsg.get("kaisen_place_ad_cd")},
				{EKK0251C030CBSMsg.KAISEN_PLACE_PCD, (String)ccMsg.get("kaisen_place_pcd")},
				{EKK0251C030CBSMsg.KAISEN_PLACE_STATE_NM, (String)ccMsg.get("kaisen_place_state_nm")},
				{EKK0251C030CBSMsg.KAISEN_PLACE_CITY_NM, (String)ccMsg.get("kaisen_place_city_nm")},
				{EKK0251C030CBSMsg.KAISEN_PLACE_OAZTSU_NM, (String)ccMsg.get("kaisen_place_oaztsu_nm")},
				{EKK0251C030CBSMsg.KAISEN_PLACE_AZCHO_NM, (String)ccMsg.get("kaisen_place_azcho_nm")},
				{EKK0251C030CBSMsg.KAISEN_PLACE_BNCHIGO, (String)ccMsg.get("kaisen_place_bnchigo")},
				{EKK0251C030CBSMsg.KAISEN_PLACE_ADRTTM, (String)ccMsg.get("kaisen_place_adrttm")},
				{EKK0251C030CBSMsg.KAISEN_PLACE_ADRRM, (String)ccMsg.get("kaisen_place_adrrm")},
				{EKK0251C030CBSMsg.KAISEN_PLACE_NO, placeNo},
				{EKK0251C030CBSMsg.KISN_PLC_KKK_SEIRI_CHU_FLG, (String)ccMsg.get("kisn_plc_kkk_seiri_chu_flg")},
				{EKK0251C030CBSMsg.KISN_PLC_HSK_CD_1, msg.getString(EKK0251A010CBSMsg1List.KISN_PLC_HSK_CD_1)},
				{EKK0251C030CBSMsg.KISN_PLC_HSK_CD_2, msg.getString(EKK0251A010CBSMsg1List.KISN_PLC_HSK_CD_2)},
				{EKK0251C030CBSMsg.KISN_PLC_HSK_MEMO, (String)ccMsg.get("kisn_plc_hsk_memo")},
				{EKK0251C030CBSMsg.AD_FORM_CD, msg.getString(EKK0251A010CBSMsg1List.AD_FORM_CD)},
				{EKK0251C030CBSMsg.SHUNKO_RSV_YMD, msg.getString(EKK0251A010CBSMsg1List.SHUNKO_RSV_YMD)},
				{EKK0251C030CBSMsg.EPOWER_SODEN_RSV_YMD, msg.getString(EKK0251A010CBSMsg1List.EPOWER_SODEN_RSV_YMD)},
				{EKK0251C030CBSMsg.NYUKYO_RSV_YMD, msg.getString(EKK0251A010CBSMsg1List.NYUKYO_RSV_YMD)},
				{EKK0251C030CBSMsg.HIKIWATASHI_RSV_YMD, msg.getString(EKK0251A010CBSMsg1List.HIKIWATASHI_RSV_YMD)},
				{EKK0251C030CBSMsg.HIKKOSHI_RSV_YMD, msg.getString(EKK0251A010CBSMsg1List.HIKKOSHI_RSV_YMD)},
				{EKK0251C030CBSMsg.XZAHYO, msg.getString(EKK0251A010CBSMsg1List.XZAHYO)},
				{EKK0251C030CBSMsg.YZAHYO, msg.getString(EKK0251A010CBSMsg1List.YZAHYO)},
				{EKK0251C030CBSMsg.LGTD, msg.getString(EKK0251A010CBSMsg1List.LGTD)},
				{EKK0251C030CBSMsg.LTTD, msg.getString(EKK0251A010CBSMsg1List.LTTD)},
				{EKK0251C030CBSMsg.ZAHYO_HOSEI_UM, msg.getString(EKK0251A010CBSMsg1List.ZAHYO_HOSEI_UM)},
				{EKK0251C030CBSMsg.TV_KOBET_TAIO_CD, msg.getString(EKK0251A010CBSMsg1List.TV_KOBET_TAIO_CD)},
				{EKK0251C030CBSMsg.TV_ANTENNA_UM, msg.getString(EKK0251A010CBSMsg1List.TV_ANTENNA_UM)},
				{EKK0251C030CBSMsg.DIRECTION_CD_1, msg.getString(EKK0251A010CBSMsg1List.DIRECTION_CD_1)},
				{EKK0251C030CBSMsg.DIRECTION_CD_2, msg.getString(EKK0251A010CBSMsg1List.DIRECTION_CD_2)},
				{EKK0251C030CBSMsg.KODATE_KCKU_FLR_CNT_CD, msg.getString(EKK0251A010CBSMsg1List.KODATE_KCKU_FLR_CNT_CD)},
				{EKK0251C030CBSMsg.SHUGJ_NYUKYO_FLR_CNT_CD, msg.getString(EKK0251A010CBSMsg1List.SHUGJ_NYUKYO_FLR_CNT_CD)},
				{EKK0251C030CBSMsg.PON_SBT_CD, msg.getString(EKK0251A010CBSMsg1List.PON_SBT_CD)},
				{EKK0251C030CBSMsg.KAISEN_TK_COMP_CD, msg.getString(EKK0251A010CBSMsg1List.KAISEN_TK_COMP_CD)},
				{EKK0251C030CBSMsg.VDSL_USE_TEL_KISN_SBT_CD, msg.getString(EKK0251A010CBSMsg1List.VDSL_USE_TEL_KISN_SBT_CD)},
				{EKK0251C030CBSMsg.VDSL_USE_DKSN_SWCH_RSV_YMD, msg.getString(EKK0251A010CBSMsg1List.VDSL_USE_DKSN_SWCH_RSV_YMD)},
				{EKK0251C030CBSMsg.VDSL_USE_TG_DBKSN_SBT_CD, msg.getString(EKK0251A010CBSMsg1List.VDSL_USE_TG_DBKSN_SBT_CD)},
				{EKK0251C030CBSMsg.VDSL_USE_TG_TELNO, msg.getString(EKK0251A010CBSMsg1List.VDSL_USE_TG_TELNO)},
				{EKK0251C030CBSMsg.HIKKOSHI_YMD, msg.getString(EKK0251A010CBSMsg1List.HIKKOSHI_YMD)},
				{EKK0251C030CBSMsg.GAITO_AREA_SVC_STAYMD, msg.getString(EKK0251A010CBSMsg1List.GAITO_AREA_SVC_STAYMD)},
				{EKK0251C030CBSMsg.TEKKYO_KOJI_KIBO_YMD, msg.getString(EKK0251A010CBSMsg1List.TEKKYO_KOJI_KIBO_YMD)},
				{EKK0251C030CBSMsg.KITEN_HDSHO_CD, msg.getString(EKK0251A010CBSMsg1List.KITEN_HDSHO_CD)},
				{EKK0251C030CBSMsg.SHYAKK_CD, msg.getString(EKK0251A010CBSMsg1List.SHYAKK_CD)},
				{EKK0251C030CBSMsg.KEPCO_BUSIOFFICE_CD, msg.getString(EKK0251A010CBSMsg1List.KEPCO_BUSIOFFICE_CD)},
				{EKK0251C030CBSMsg.SKS_YO_KISN_PLACE_AD_RM_NO, msg.getString(EKK0251A010CBSMsg1List.SKS_YO_KISN_PLACE_AD_RM_NO)},
				{EKK0251C030CBSMsg.TEL_BAS_HOST_ID, msg.getString(EKK0251A010CBSMsg1List.TEL_BAS_HOST_ID)},
				{EKK0251C030CBSMsg.TEL_VLAN_ID, msg.getString(EKK0251A010CBSMsg1List.TEL_VLAN_ID)},
				{EKK0251C030CBSMsg.VLAN_ID_FIX_FLG, msg.getString(EKK0251A010CBSMsg1List.VLAN_ID_FIX_FLG)},
				{EKK0251C030CBSMsg.TEL_VLAN_ID_TRKM_YMD, msg.getString(EKK0251A010CBSMsg1List.TEL_VLAN_ID_TRKM_YMD)},
				{EKK0251C030CBSMsg.SKS_SHS_AD_CHG_UM, msg.getString(EKK0251A010CBSMsg1List.SKS_SHS_AD_CHG_UM)},
				{EKK0251C030CBSMsg.SKS_SHS_AD_CHG_KIBO_YMD, msg.getString(EKK0251A010CBSMsg1List.SKS_SHS_AD_CHG_KIBO_YMD)},
				{EKK0251C030CBSMsg.KSHAD_CHG_UM, msg.getString(EKK0251A010CBSMsg1List.KSHAD_CHG_UM)},
				{EKK0251C030CBSMsg.KSHAD_CHG_KIBO_YMD, msg.getString(EKK0251A010CBSMsg1List.KSHAD_CHG_KIBO_YMD)},
				{EKK0251C030CBSMsg.KISN_AD_CHK_LV, kisn_ad_chk_lv},
				{EKK0251C030CBSMsg.UPD_DTM_BF, lastUpdDtm}
				/* ++++++++++ v5.00.04 修正終了 ++++++++++ */
		};
		return inMsg;
	}
	
	
	/**
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @param baseYmd
	 * 
	 * @return HashMap
	 * @throws Exception
	 */
	private HashMap<String, HashMap<String, String>> getKktkInfExecSvcKei(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String fixedText,
							String svcKeiNo,
							String baseYmd) throws Exception
	{
		HashMap<String, HashMap<String, String>> outMap = new HashMap<String, HashMap<String, String>>();
		String kktkSvcKeiNo = null;
		String geneAddDtm = null;
		int mapCnt = 0;
		Object[][] inMsg = null;
		
		// サービス契約、サービス契約回線内訳に紐づく機器提供サービス契約を取得（履歴＆カレント＆予約の全データ）
/* ++++++++++ v4.01.00 修正開始 ++++++++++ */
//		inMsg = new Object[][]{
//				{EKK0341B025CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341B025},
//				{EKK0341B025CBSMsg.FUNC_CODE,  "1"},
//				{EKK0341B025CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
//		};
		// 機器提供サービス契約一覧照会(接続機器情報) カレント
		inMsg = new Object[][]{
				{EKK0341B012CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341B012},
				{EKK0341B012CBSMsg.FUNC_CODE,  "1"},
				{EKK0341B012CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
		};
/* ++++++++++ v4.01.00 修正終了 ++++++++++ */
		
		CAANMsg rsvMsg = callSC(handle, scCall, param, fixedText, inMsg);
/* ++++++++++ v4.01.00 修正開始 ++++++++++ */
//		CAANMsg[] rsvMsgLst = rsvMsg.getCAANMsgList(EKK0341B025CBSMsg.EKK0341B025CBSMSG1LIST);
		CAANMsg[] rsvMsgLst = rsvMsg.getCAANMsgList(EKK0341B012CBSMsg.EKK0341B012CBSMSG1LIST);
/* ++++++++++ v4.01.00 修正終了 ++++++++++ */
		HashMap<String, String> ctrlMap = new HashMap<String, String>();
		
// OM-2015-0000519 ADD START
		if (rsvMsgLst != null)
		{
// OM-2015-0000519 ADD END
			// 取得した機器提供サービス契約に対する処理(カレント)
			for (CAANMsg msg : rsvMsgLst)
			{
				/* ++++++++++ v4.01.00 修正開始 ++++++++++ */
				//			kktkSvcKeiNo = msg.getString(EKK0341B025CBSMsg1List.KKTK_SVC_KEI_NO);
				kktkSvcKeiNo = msg.getString(EKK0341B012CBSMsg1List.KKTK_SVC_KEI_NO);
				/* ++++++++++ v4.01.00 修正終了 ++++++++++ */

				// カレント取得対象チェック
				if (!ctrlMap.containsKey(kktkSvcKeiNo))
				{
					// カレントの機器情報検索
					HashMap<String, String> data = getKktkSvcKei(handle, scCall, param, fixedText, kktkSvcKeiNo, null, baseYmd);

					if (data != null)
					{
						outMap.put(String.valueOf(mapCnt), data);
						mapCnt++;
						ctrlMap.put(kktkSvcKeiNo, kktkSvcKeiNo);
					}
				}
				/* ++++++++++ v4.01.00 追加開始 ++++++++++ */
			}
// OM-2015-0000519 ADD START
		}
// OM-2015-0000519 ADD END
		
		// 機器提供サービス契約一覧照会(接続機器情報) 世代
		inMsg = new Object[][]{
				{EKK0341B012CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341B012},
				{EKK0341B012CBSMsg.FUNC_CODE,  "2"},
				{EKK0341B012CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}
		};
		
		rsvMsg = callSC(handle, scCall, param, fixedText, inMsg);
		rsvMsgLst = rsvMsg.getCAANMsgList(EKK0341B012CBSMsg.EKK0341B012CBSMSG1LIST);
		
// OM-2015-0000519 ADD START
		if (rsvMsgLst != null)
		{
// OM-2015-0000519 ADD END
			// 取得した機器提供サービス契約に対する処理(世代)
			for (CAANMsg msg : rsvMsgLst)
			{
				kktkSvcKeiNo = msg.getString(EKK0341B012CBSMsg1List.KKTK_SVC_KEI_NO);
				/* ++++++++++ v4.01.00 追加終了 ++++++++++ */

				/* ++++++++++ v4.01.00 修正開始 ++++++++++ */
				// 予約レコード判定
				//			if (isRsvChk(msg, baseYmd) == false)
				if (msg.getString(EKK0341B012CBSMsg1List.GENE_ADD_DTM_RSV) == null || "".equals(msg.getString(EKK0341B012CBSMsg1List.GENE_ADD_DTM_RSV)))
					/* ++++++++++ v4.01.00 修正終了 ++++++++++ */
				{
					continue;
				}

				/* ++++++++++ v4.01.00 修正開始 ++++++++++ */
				// 予約の機器情報検索
				//			geneAddDtm = msg.getString(EKK0341B025CBSMsg1List.GENE_ADD_DTM);
				geneAddDtm = msg.getString(EKK0341B012CBSMsg1List.GENE_ADD_DTM_RSV);
				/* ++++++++++ v4.01.00 修正開始 ++++++++++ */
				HashMap<String, String> data = getKktkSvcKei(handle, scCall, param, fixedText, kktkSvcKeiNo, geneAddDtm, null);

				// 既に追加された機器情報と比較する
				if (data != null && isRsvKikiInfoAddChk(data, outMap))
				{
					outMap.put(String.valueOf(mapCnt), data);
					mapCnt++;
				}
			}
// OM-2015-0000519 ADD START
		}
// OM-2015-0000519 ADD END
		
		return outMap;
	}

	/**
	 * 
	 * @param data
	 * @param outMap
	 * @return boolean
	 * @throws Exception
	 */
	private boolean isRsvKikiInfoAddChk(HashMap<String, String> data, HashMap<String, HashMap<String, String>> outMap) throws Exception
	{
/* ++++++++++ v4.01.00 追加開始 ++++++++++ */
		String rsvAplyCd = data.get("rsv_aply_cd");
		
		// 予約適用コードチェック
		if (!"1".equals(rsvAplyCd) && !"2".equals(rsvAplyCd))
		{
			return false;
		}
/* ++++++++++ v4.01.00 追加終了 ++++++++++ */
		
		HashMap<String, String> mp = null;
		// 予約データの宅内機器型式コードと機器製造番号がカレントと同様のものは対象外とする
		for (int i = 0; i < outMap.size() ; i++)
		{
			mp = outMap.get(String.valueOf(i));
			
			// 機器製造番号・宅内機器型式コードが未設定のレコードは対象外とする
			if (mp.get("kiki_seizo_no") != null && mp.get("taknkiki_model_cd") != null)
			{
				if(mp.get("kiki_seizo_no").equals(data.get("kiki_seizo_no")) && mp.get("taknkiki_model_cd").equals(data.get("taknkiki_model_cd")))
				{
					return false;
				}
			}
			
			// 機器製造番号がnullの場合
			if (mp.get("kiki_seizo_no") == null && mp.get("taknkiki_model_cd") != null)
			{
				if (data.get("kiki_seizo_no") == null && mp.get("taknkiki_model_cd").equals(data.get("taknkiki_model_cd")))
				{
					return false;
				}
			}
		}
		
		return true;
	}
	
	/**
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param kktkSvcKeiNo
	 * @param geneAddDtm
	 * @param baseYmd
	 * 
	 * @return HashMap
	 * @throws Exception
	 */
	private HashMap<String, String> getKktkSvcKei(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String fixedText,
							String kktkSvcKeiNo,
							String geneAddDtm,
							String baseYmd) throws Exception
	{
		HashMap<String, String> outMap = null;
		Object[][] inMsg = null;
		
		if (geneAddDtm == null)
		{
			inMsg = new Object[][]{
					{EKK0341A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341A010},
					{EKK0341A010CBSMsg.FUNC_CODE,  "2"},
					{EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo},
					{EKK0341A010CBSMsg.KEY_GENE_ADD_DTM, ""},
					{EKK0341A010CBSMsg.KEY_RSV_APLY_YMD, baseYmd}
			};
		}
		else
		{
			inMsg = new Object[][]{
					{EKK0341A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341A010},
					{EKK0341A010CBSMsg.FUNC_CODE,  "1"},
					{EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO, kktkSvcKeiNo},
					{EKK0341A010CBSMsg.KEY_GENE_ADD_DTM, geneAddDtm},
					{EKK0341A010CBSMsg.KEY_RSV_APLY_YMD, ""}
			};
		}
		
		// 機器情報検索
		CAANMsg curMsg = callSC(handle, scCall, param, fixedText, inMsg);
		
		CAANMsg[] curMsgLst = curMsg.getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
		
		// ステータスチェック
		if (isKktkSvcKeiStat(curMsgLst[0].getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT)))
		{
			String seizoNoUm = null;
			
			// 型式が決まっていない場合
			if(curMsgLst[0].isNull(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD))
			{
				seizoNoUm = "1";
			}
			else
			{
				// 宅内機器型式の検索
				seizoNoUm = getTaknkikiModel(handle, scCall, param, fixedText, curMsgLst[0].getString(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD));
			}
			
			outMap = new HashMap<String, String>();
			
			outMap.put("kktk_svc_kei_no", kktkSvcKeiNo);														// 機器提供サービス契約番号
			outMap.put("kiki_seizo_no", curMsgLst[0].getString(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO));			// 機器製造番号
			outMap.put("kiki_chg_no", curMsgLst[0].getString(EKK0341A010CBSMsg1List.KIKI_CHG_NO));				// 機器変更番号
			outMap.put("taknkiki_model_cd", curMsgLst[0].getString(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD));	// 宅内機器型式コード
			outMap.put("seizo_no_um", seizoNoUm);																// 製造番号有無
			outMap.put("kktk_svc_kei_stat", curMsgLst[0].getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT));	// 機器提供サービス契約ステータス
			outMap.put("kktk_svc_cd", curMsgLst[0].getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));				// 機器提供サービスコード
			outMap.put("svc_kei_kaisen_ucwk_no", curMsgLst[0].getString(EKK0341A010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO));	// サービス契約回線内訳
/* ++++++++++ v4.01.00 追加開始 ++++++++++ */
			outMap.put("rsv_aply_cd", curMsgLst[0].getString(EKK0341A010CBSMsg1List.RSV_APLY_CD));				// 予約適用コード
/* ++++++++++ v4.01.00 追加終了 ++++++++++ */
// OM-2015-0001254 ADD START
			outMap.put("gene_add_dtm", curMsgLst[0].getString(EKK0341A010CBSMsg1List.GENE_ADD_DTM));
			outMap.put("kiki_stc_saki_nm", curMsgLst[0].getString(EKK0341A010CBSMsg1List.KIKI_STC_SAKI_NM));
			outMap.put("kiki_stc_saki_kana", curMsgLst[0].getString(EKK0341A010CBSMsg1List.KIKI_STC_SAKI_KANA));
			outMap.put("kiki_stc_sk_ksh_ad_sai_flg", curMsgLst[0].getString(EKK0341A010CBSMsg1List.KIKI_STC_SK_KSH_AD_SAI_FLG));
// OM-2015-0001254 ADD END
		}
		
		return outMap;
	}
	
	/**
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @return HashMap
	 * @throws Exception
	 */
	private HashMap<String, String> getKojiak(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String fixedText,
							String svcKeiNo) throws Exception
	{
		HashMap<String, String> outMap = null;
		
		Object[][] inMsg = new Object[][]{
				{EKU0081B010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0081B010},
				{EKU0081B010CBSMsg.FUNC_CODE,  "1"},
				{EKU0081B010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo},
				{EKU0081B010CBSMsg.KEY_KOJIAK_NO, ""}
		};
		
		// サービス契約＿工事案件検索
		CAANMsg kojiakMsg = callSC(handle, scCall, param, fixedText, inMsg);
		CAANMsg[] msgList = kojiakMsg.getCAANMsgList(EKU0081B010CBSMsg.EKU0081B010CBSMSG1LIST);
		
		if (msgList == null || msgList.length == 0)
		{
			return outMap;
		}
		
		String kojiakNo = msgList[0].getString(EKU0081B010CBSMsg1List.KOJIAK_NO);
		inMsg = new Object[][]{
				{EKU0011A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0011A010},
				{EKU0011A010CBSMsg.FUNC_CODE,  "1"},
				{EKU0011A010CBSMsg.KEY_KOJIAK_NO, kojiakNo}
		};
		
		// 工事案件検索
		CAANMsg outMsg = callSC(handle, scCall, param, fixedText, inMsg);
		String haisoSakseiZumiFlg = getKojiakStat(outMsg);
		
		// 工事案件チェック
		if (haisoSakseiZumiFlg == null)
		{
			return outMap;
		}
		
		outMap = new HashMap<String, String>();
		outMap.put("svc_kei_no", svcKeiNo);
		outMap.put("kojiak_no", kojiakNo);
		outMap.put("haiso_saksei_zumi_flg", haisoSakseiZumiFlg);
		
		return outMap;
	}
	
	/**
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param kojiakMap
	 * @param kojiakTgKikiList
	 * @return ArrayList
	 * @throws Exception
	 */
	private ArrayList<HashMap<String, String>> getKojiakTgKikiList(SessionHandle handle,
							ServiceComponentRequestInvoker scCall,
							IRequestParameterReadWrite param,
							String fixedText,
							HashMap<String, String> kojiakMap,
							ArrayList<HashMap<String, String>> kojiakTgKikiList) throws Exception
	{
		Object[][] inMsg = new Object[][]{
				{EKU0141B010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0141B010},
				{EKU0141B010CBSMsg.FUNC_CODE,  "1"},
				{EKU0141B010CBSMsg.KEY_KOJIAK_NO, kojiakMap.get("kojiak_no")},
				{EKU0141B010CBSMsg.SEARCH_TYPE, "1"},
				{EKU0141B010CBSMsg.MAX_SEARCH_NUM, "2000"}
		};
		
		// 工事案件対象宅内機器検索
		CAANMsg outMsg = callSC(handle, scCall, param, fixedText, inMsg);
		
		// ステータスチェック
		CAANMsg[] outMsgList = outMsg.getCAANMsgList(EKU0141B010CBSMsg.EKU0141B010CBSMSG1LIST);
		
		// 取得できなかった場合
		if (outMsgList == null || outMsgList.length == 0)
		{
			return kojiakTgKikiList;
		}
		
		HashMap<String, String> outMap = null;
		
		// 工事中機器の判定処理を実施するためにリスト保持する
		for(CAANMsg msg : outMsgList)
		{
			outMap = new HashMap<String, String>();
			outMap.put(msg.getString(EKU0141B010CBSMsg1List.KKTK_SVC_KEI_NO), msg.getString(EKU0141B010CBSMsg1List.KKTK_SVC_KEI_NO));
			outMap.put("kojiak_trgt_taknkiki_stat", msg.getString(EKU0141B010CBSMsg1List.KOJIAK_TRGT_TAKNKIKI_STAT));
			outMap.put("kojiak_no", kojiakMap.get("kojiak_no"));
			outMap.put("haiso_saksei_zumi_flg", kojiakMap.get("haiso_saksei_zumi_flg"));
			
			kojiakTgKikiList.add(outMap);
		}
		
		return kojiakTgKikiList;
	}

	/**
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param taknkikiModelCd
	 * @return String
	 * @throws Exception
	 */
	private String getTaknkikiModel(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String fixedText,
							String taknkikiModelCd) throws Exception
	{
		String rtnValue = null;
		Object[][] inMsg = new Object[][]{
					{EZM0411A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EZM0411A010},
					{EZM0411A010CBSMsg.FUNC_CODE,  "1"},
					{EZM0411A010CBSMsg.KEY_TAKNKIKI_MODEL_CD, taknkikiModelCd}
		};
		
		// 宅内機器型式情報検索
		CAANMsg outMsg = callSC(handle, scCall, param, fixedText, inMsg);
		
		CAANMsg[] outMsgLst = outMsg.getCAANMsgList(EZM0411A010CBSMsg.EZM0411A010CBSMSG1LIST);
		
		if (outMsgLst != null && outMsgLst.length > 0)
		{
			rtnValue = outMsgLst[0].getString(EZM0411A010CBSMsg1List.SEIZO_NO_UM);
		}
		
		return rtnValue;
	}
	
	
	/**
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param list
	 * @param placeNo
	 * 
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void updTaknkiki(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String fixedText,
							ArrayList list,
							String placeNo) throws Exception
	{
		ArrayList updList = new ArrayList();
		Object[][] inMsg = new Object[][]{
					{EKKA0020003CBSMsg.TEMPLATEID, TEMPLATE_ID_EKKA0020003},
					{EKKA0020003CBSMsg.FUNC_CODE,  "1"},
					{EKKA0020003CBSMsg.EKKA0020003CBSMSG1LIST, list}
		};
		
		// 宅内機器一意照会
		CAANMsg outMsg = callSC(handle, scCall, param, fixedText, inMsg, placeNo);
		CAANMsg[] outMsgLst = outMsg.getCAANMsgList(EKKA0020003CBSMsg.EKKA0020003CBSMSG2LIST);
		
		if(outMsgLst != null)
		{
			for (int i = 0; i < list.size(); i++)
			{
				HashMap map = (HashMap)list.get(i);
				String seizoNo = (String)map.get("kiki_seizo_no");
				String modelCd = (String)map.get("taknkiki_model_cd");
				
				for (int j = 0; j < outMsgLst.length; j++)
				{
					if (seizoNo.equals(outMsgLst[j].getString(EKKA0020003CBSMsg2List.KK_SEIZO_NO))
						&& modelCd.equals(outMsgLst[j].getString(EKKA0020003CBSMsg2List.TK_MDL_CD)))
					{
						map.put("kihont_upd_dttm", outMsgLst[j].getString(EKKA0020003CBSMsg2List.KIHONT_UPD_DTTM));
						updList.add(map);
					}
				}
			}
			
			if(updList.size() > 0)
			{
				inMsg = new Object[][]{
						{EKKA0020004CBSMsg.TEMPLATEID, TEMPLATE_ID_EKKA0020004},
						{EKKA0020004CBSMsg.FUNC_CODE,  "1"},
						{EKKA0020004CBSMsg.EKKA0020004CBSMSG1LIST, updList}
				};
				
				// 機器場所番号変更
				outMsg = callSC(handle, scCall, param, fixedText, inMsg, placeNo);
			}
		}
		
	}
	
	/**
	 * 機器提供サービス契約ステータスのチェックをする。
	 * 「解約済」「キャンセル済」の場合false、以外はtrueを返却する。
	 * 
	 * @param svcKeiStat
	 * @return boolean
	 * @throws Exception
	 */
	private boolean isKktkSvcKeiStat(String svcKeiStat) throws Exception
	{
		if ("910".equals(svcKeiStat) || "920".equals(svcKeiStat))
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * 予約レコードのチェックをする。
	 * 
	 * @param msg
	 * @param baseYmd
	 * 
	 * @return boolean
	 * @throws Exception
	 */
	private boolean isRsvChk(CAANMsg msg, String baseYmd) throws Exception
	{
		String rsvAplyYmd = msg.getString("rsv_aply_ymd");
		String rsvAplyCd = msg.getString("rsv_aply_cd");
		
		// 予約適用年月日チェック
		if (rsvAplyYmd != null && JPCUtilCommon.isPastDate(rsvAplyYmd, baseYmd, "1"))
		{
			return false;
		}
		
		// 予約適用コードチェック
		if ("1".equals(rsvAplyCd) || "2".equals(rsvAplyCd))
		{
			return true;
		}
		
		return false;
	}
	
	/**
	 * 工事案件のチェックをする。
	 * 工事案件ステータスが下記の場合はtrue、以外はfalseを返却する。
	 * 「受付済」「依頼済」「宅内調査完了済」「工事会社決定済」「宅内機器予定登録済」「仮鍵開発行依頼済」「現場作業完了済」
	 * 
	 * @param msg
	 * @return String
	 * @throws Exception
	 */
	private String getKojiakStat(CAANMsg msg) throws Exception
	{
		CAANMsg[] msgList = msg.getCAANMsgList(EKU0011A010CBSMsg.EKU0011A010CBSMSG1LIST);
		
		if (msgList == null || msgList.length == 0)
		{
			return null;
		}
		
		String stat = msgList[0].getString(EKU0011A010CBSMsg1List.KOJIAK_STAT);
		String flg = msgList[0].getString(EKU0011A010CBSMsg1List.HAISO_SAKSEI_ZUMI_FLG);
		
		if (JKUStrConst.CD00474_UK_ZM.equals(stat) || JKUStrConst.CD00474_IRI_ZM.equals(stat) || JKUStrConst.CD00474_TAKNI_CHOSA_FIN_ZM.equals(stat))
		{
			return flg;
		}
		else if (JKUStrConst.CD00474_KOCOMP_KETTEI_ZM.equals(stat) || JKUStrConst.CD00474_TAKNI_CHOSA_RSV_ZM.equals(stat))
		{
			return flg;
		}
		else if (JKUStrConst.CD00474_KR_KAGI_KAIHAT_IRI_ZM.equals(stat) || JKUStrConst.CD00474_GEMBA_SAGYO_FIN_ZM.equals(stat))
		{
			return flg;
		}
		
		return null;
	}
	/**
	 * 宅内機器管理への連携パターンのチェックをする。
	 * 0:対象外、1:後日連携、2:即時連携
	 * 
	 * @param haisoSakseiZumiFlg
	 * @param kikiStatus
	 * @param seizoUmu
	 * @return int
	 * @throws Exception
	 */
	private int getRnkeiPtnExecSvckei(String haisoSakseiZumiFlg, String kikiStatus, String seizoUmu) throws Exception
	{
		// 工事中機器の場合
		if ("01".equals(kikiStatus))
		{
			// 製造番号有無が無しの場合、対象外
			if ("0".equals(seizoUmu))
			{
				return 0;
			}
			
			// 配送未作成の場合
			if ("0".equals(haisoSakseiZumiFlg))
			{
				return 0;
			}
			else
			{
				return 1;
			}
		}
		
		// 製造番号未決定機器の場合
		if ("02".equals(kikiStatus))
		{
			// 製造番号有無が無しの場合、対象外
			if ("0".equals(seizoUmu))
			{
				return 0;
			}
			
			return 1;
		}
		
		// 利用中機器の場合
		if ("03".equals(kikiStatus))
		{
			// 製造番号有無が無しの場合、対象外
			if ("0".equals(seizoUmu))
			{
				return 0;
			}
			
			return 2;
		}
		
		// 対象外
		return 0;
	}
	
	/**
	 * 機器の状況を取得する。
	 * 00:対象外、01:工事中機器、02:製造番号未決定機器、03:利用中機器
	 * 
	 * @param map
	 * @param kojiTgkikiList
	 * @return HashMap
	 * @throws Exception
	 */
	private HashMap<String, String> getKikiRecInfo(HashMap<String, String> map, ArrayList<HashMap<String, String>> kojiTgkikiList) throws Exception
	{
		HashMap<String, String> retMap = new HashMap<String, String>();
		
		String kikiSeizoNo = map.get("kiki_seizo_no");
		String kktkSvcKeiNo = map.get("kktk_svc_kei_no");
		String kktkSvcKeiStat = map.get("kktk_svc_kei_stat");
		HashMap<String, String> retKojiakMap = null;
		
		// 製造番号有無を設定
		retMap.put("seizo_no_um", getSeizoUmu(map));

		// 解約済み、キャンセル済みの機器は対象外
		if(!isKktkSvcKeiStat(kktkSvcKeiStat))
		{
			retMap.put("kiki_status", "00");
			retMap.put("kojiak_no", null);
			return retMap;
		}
		
		retKojiakMap = getTargetKojiKiki(kktkSvcKeiNo, kojiTgkikiList);
		// 工事中機器の場合
		if (retKojiakMap != null)
		{
			retMap.put("kiki_status", "01");
			retMap.put("kojiak_no", retKojiakMap.get("kojiak_no"));
			retMap.put("haiso_saksei_zumi_flg", retKojiakMap.get("haiso_saksei_zumi_flg"));
			return retMap;
		}
		
		// 製造番号未決定機器の場合
		if ((kikiSeizoNo == null || kikiSeizoNo.length() == 0) && isKktkSvcKeiStat(kktkSvcKeiStat))
		{
			retMap.put("kiki_status", "02");
			retMap.put("kojiak_no", null);
			return retMap;
		}

		// 利用中機器
		retMap.put("kiki_status", "03");
		retMap.put("kojiak_no", null);
		return retMap;
	}
	
	/**
	 * 製造番号の有無を取得する。
	 * 0:なし、1:あり
	 * 
	 * @param map
	 * @param kojiakMap
	 * @return int
	 * @throws Exception
	 */
	private String getSeizoUmu(HashMap<String, String> map) throws Exception
	{
		String seizoNoUm = map.get("seizo_no_um");
		
		// 製造番号有無が無しの場合
		if (seizoNoUm == null || seizoNoUm.length() == 0 || "0".equals(seizoNoUm))
		{
			return "0";
		}
		
		return "1";
	}

	/**
	 * 
	 * @param kktkSvcKeiNo
	 * @param kojiTgkikiList
	 * @return HashMap
	 * @throws Exception
	 */
	private HashMap<String, String> getTargetKojiKiki(String kktkSvcKeiNo, ArrayList<HashMap<String, String>> kojiTgkikiList) throws Exception
	{
		HashMap<String, String> retMap = new HashMap<String, String>();
		
		for (HashMap<String, String> mp:kojiTgkikiList)
		{
			
			//機器提供サービス契約番号チェック
			if (mp.containsKey(kktkSvcKeiNo) && !JKUStrConst.CD00475_NASHI.equals(mp.get("kojiak_trgt_taknkiki_stat")))
			{
				// 工事中機器とする
				retMap.put("kojiak_no", mp.get("kojiak_no"));
				retMap.put("haiso_saksei_zumi_flg", mp.get("haiso_saksei_zumi_flg"));
				return retMap;
			}
		}
		
		// 対象外
		return null;
	}
	
	/**
	 * 
	 * @param svckeiList
	 * @param svc_cd
	 * @return String
	 * @throws Exception
	 */
	private String getSvcKeiNo(ArrayList<CAANMsg>  svckeiList, String svc_cd) throws Exception
	{
		for (CAANMsg msg : svckeiList)
		{
			// サービスコードが等しい場合
			if (svc_cd.equals(msg.getString(EKK0081B007CBSMsg1List.SVC_CD)))
			{
				return msg.getString(EKK0081B007CBSMsg1List.SVC_KEI_NO);
			}
		}
		
		return "";
	}
	
	/**
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param map
	 * @param svcKeiNo
	 * @param kikiStatus
	 * @param kojiakNoBase
	 * @param placeNo
	 * 
	 * @throws Exception
	 */
	private void addPlnoRnktgkkWkExecSvcKei(SessionHandle handle,
							ServiceComponentRequestInvoker scCall,
							IRequestParameterReadWrite param,
							String fixedText,
							HashMap<String, String> map,
							String svcKeiNo,
							String kikiStatus,
							String kojiakNoBase,
							String placeNo) throws Exception
	{
		String kojiakNo = "";
		String sbtCd = "2";
		
		// 工事中機器の場合
		if ("01".equals(kikiStatus))
		{
			kojiakNo = kojiakNoBase;
			sbtCd = "1";
		}
		
		Object[][] inMsg = new Object[][]{
					{EKK2401D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2401D010},
					{EKK2401D010CBSMsg.FUNC_CODE,  "1"},
					{EKK2401D010CBSMsg.SVC_KEI_NO, svcKeiNo},
					{EKK2401D010CBSMsg.KKTK_SVC_KEI_NO, map.get("kktk_svc_kei_no")},
					{EKK2401D010CBSMsg.KIKI_CHG_NO, map.get("kiki_chg_no")},
					{EKK2401D010CBSMsg.PLACE_NO, placeNo},
					{EKK2401D010CBSMsg.KOJIAK_NO, kojiakNo},
					{EKK2401D010CBSMsg.PLACE_NO_RNK_JKN_SBT_CD, sbtCd},
					{EKK2401D010CBSMsg.PLACE_NO_RNK_STAT_CD, "1"}
		};
		
		// 場所番号連携対象機器ワーク登録
		callSC(handle, scCall, param, fixedText, inMsg);
	}

	/**
	 * 
	 * @param map
	 * @param svcKeiNo
	 * @param svcKeiNoNet
	 * @param svcKeiNoTv
	 * @param svcKeiNoTel
	 * @return String
	 * @throws Exception
	 */
	private String getInsSvckeiNo(HashMap<String, String> map,
									String svcKeiNo,
									String svcKeiNoNet,
									String svcKeiNoTv,
									String svcKeiNoTel) throws Exception
	{
		// 回線に紐づく機器でない場合
		if(map.get("svc_kei_kaisen_ucwk_no") == null || "".equals(map.get("svc_kei_kaisen_ucwk_no")))
		{
			return svcKeiNo;
		}
		
		String kktk_svc_cd = map.get("kktk_svc_cd");
		
		//対象機器がV-ONUの場合
		if ("C013".equals(kktk_svc_cd))
		{
			return svcKeiNoTv;
		}
		else
		{
			// ネット+電話が契約されている場合
			if (!"".equals(svcKeiNoNet) && !"".equals(svcKeiNoTel))
			{
				return svcKeiNoNet;
			}
			// ネットのみ契約されている場合
			else if(!"".equals(svcKeiNoNet))
			{
				return svcKeiNoNet;
			}
			// 電話のみ契約されている場合
			else if(!"".equals(svcKeiNoTel))
			{
				return svcKeiNoTel;
			}
		}
		
		return "";
	}
	
	/**
	 * 
	 * @param msg
	 * @return boolean
	 */
	private boolean isTgtSvc(CAANMsg msg)
	{
		// ネット、ＴＶ、電話以外は対象外
		if (!("01".equals(msg.getString(EKK0081B007CBSMsg1List.SVC_CD))
			|| "02".equals(msg.getString(EKK0081B007CBSMsg1List.SVC_CD))
			|| "03".equals(msg.getString(EKK0081B007CBSMsg1List.SVC_CD))))
		{
			return false;
		}
		
		// モバイルは対象外
		if ("07".equals(msg.getString(EKK0081B007CBSMsg1List.PRC_GRP_CD))
			|| "08".equals(msg.getString(EKK0081B007CBSMsg1List.PRC_GRP_CD))
			|| "09".equals(msg.getString(EKK0081B007CBSMsg1List.PRC_GRP_CD)))
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * 機器提供サービス契約情報場所番号更新部品を呼び出す。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @param placeNo
	 * @param lastUpdDtm
	 * @param mskmDtlNo
	 * @return void
	 */
	@SuppressWarnings("unchecked")
// OM-2015-0001254 MOD START
//	private void execKikitkSvcKeiPlaceUpd(SessionHandle handle, 
//											IRequestParameterReadWrite param, 
//											String fixedText,
//											String svcKeiNo,
//											String placeNo,
//											String mskmDtlNo) throws Throwable
	private void execKikitkSvcKeiPlaceUpd(SessionHandle handle, 
											IRequestParameterReadWrite param, 
											String fixedText,
											String svcKeiNo,
											String placeNo,
											String mskmDtlNo,
											String svcKeiNoTel,
											String svcKeiNoNet,
											String svc_kei_kaisen_ucwk_no_shinsetsu) throws Throwable
// OM-2015-0001254 MOD END
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(fixedText);
		
		// マップ生成
		HashMap<String, Object> kikiCCMap = new HashMap<String, Object>();
		String kikiCCMapKey = "JKKKikitkSvcKeiPlaceUpdCC";
		
		// マップ編集
		// 機能コード
		kikiCCMap.put(JCMConstants.FUNC_CODE_KEY, "1");
		// サービス契約番号
		kikiCCMap.put("svc_kei_no", svcKeiNo);
		// 機器設置先場所番号
		kikiCCMap.put("kiki_stc_saki_place_no", placeNo);
		// 異動区分
		kikiCCMap.put("ido_div", ccMsg.get("ido_div"));
		// 申込明細番号
		kikiCCMap.put("mskm_dtl_no", mskmDtlNo);
// OM-2015-0001254 ADD START
		kikiCCMap.put("kiki_stc_saki_ad_cd", ccMsg.get("kaisen_place_ad_cd"));
		kikiCCMap.put("kiki_stc_saki_pcd", ccMsg.get("kaisen_place_pcd"));
		kikiCCMap.put("kiki_stc_saki_state_nm", ccMsg.get("kaisen_place_state_nm"));
		kikiCCMap.put("kiki_stc_saki_city_nm", ccMsg.get("kaisen_place_city_nm"));
		kikiCCMap.put("kiki_stc_saki_oaztsu_nm", ccMsg.get("kaisen_place_oaztsu_nm"));
		kikiCCMap.put("kiki_stc_saki_azcho_nm", ccMsg.get("kaisen_place_azcho_nm"));
		kikiCCMap.put("kiki_stc_saki_bnchigo", ccMsg.get("kaisen_place_bnchigo"));
		kikiCCMap.put("kiki_stc_saki_adrttm", ccMsg.get("kaisen_place_adrttm"));
		kikiCCMap.put("kiki_stc_saki_adrrm", ccMsg.get("kaisen_place_adrrm"));
		kikiCCMap.put("kiki_stc_sk_telno", ccMsg.get("telno_shinsetsu"));
		kikiCCMap.put("kiki_sts_kkk_seiri_chu_flg", ccMsg.get("kisn_plc_kkk_seiri_chu_flg"));
		kikiCCMap.put("ad_mi_fix_flg", ccMsg.get("kisn_plc_ad_mi_fix_flg"));
		kikiCCMap.put("svcKeiNoTel", svcKeiNoTel);
		kikiCCMap.put("svcKeiNoNet", svcKeiNoNet);
		kikiCCMap.put("svc_kei_kaisen_ucwk_no_shinsetsu", svc_kei_kaisen_ucwk_no_shinsetsu);
// OM-2015-0001254 ADD END
		
		// マップ設定
		param.setData(kikiCCMapKey, kikiCCMap);
		
		// 呼び出し
		execKktkSvcKeiPlaceUpdate(handle, param, kikiCCMapKey);
	}
	
	/**
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execKktkSvcKeiPlaceUpdate(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		String dataMapKey = fixedText;
		
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		
		// 機能コード
		String func_code = (String)ccMsg.get("func_code");
		
		// 一時領域データ
		HashMap<String, Object> temporaryData = new HashMap<String, Object>();
		
		// SC呼び出し部品のインスタンス生成
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// ***** 機器提供サービス契約一覧照会(接続機器情報)*****
		Object[][] ekk0341b012IN = {
			{EKK0341B012CBSMsg.TEMPLATEID,       TEMPLATE_ID_EKK0341B012},
// OM-2015-0001254 MOD START
//			{EKK0341B012CBSMsg.FUNC_CODE,        FUNC_CODE_1},
			{EKK0341B012CBSMsg.FUNC_CODE,        FUNC_CODE_2},
// OM-2015-0001254 MOD END
			{EKK0341B012CBSMsg.KEY_SVC_KEI_NO,   (String)ccMsg.get("svc_kei_no")},
		};
		
		
		CAANMsg[] ekk0341b012cbsMsg1list = callSC(handle, scCall, param, dataMapKey, ekk0341b012IN).getCAANMsgList(EKK0341B012CBSMsg.EKK0341B012CBSMSG1LIST);

		if(ekk0341b012cbsMsg1list == null || ekk0341b012cbsMsg1list.length == 0)
		{
			return param;
		}
		
		// 機器提供サービス契約ステータス
		String kktkSvcStat = "";
		// 機器提供サービス契約番号
		String kktkSvcKeiNo = "";

		for (int i = 0; i < ekk0341b012cbsMsg1list.length; i++)
		{
// OM-2015-0001254 ADD START
			String svc_kei_kaisen_ucwk_no_shinsetsu = (String)ccMsg.get("svc_kei_kaisen_ucwk_no_shinsetsu");
			// 転居先の回線機器以外は対象外
			if (!getNullToStr(ekk0341b012cbsMsg1list[i].getString(EKK0341B012CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO)).equals(svc_kei_kaisen_ucwk_no_shinsetsu))
			{
				continue;
			}
			// サービス契約番号
			String svcKeiNo = (String)ccMsg.get("svc_kei_no");
			// サービス契約番号（ネット）
			String svcKeiNoTel = (String)ccMsg.get("svcKeiNoTel");
			// サービス契約番号（電話）
			String svcKeiNoNet = (String)ccMsg.get("svcKeiNoNet");
			// 電話のサービス契約回線内訳に紐付く機器は、同一回線にネットのサービスが付いている場合、対象外とする。（２度処理しないため）
			if (svcKeiNo.equals(svcKeiNoTel) && !"".equals(getNullToStr(ekk0341b012cbsMsg1list[i].getString(EKK0341B012CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO))) && !"".equals(svcKeiNoNet))
			{
				continue;
			}
// OM-2015-0001254 ADD END
			
			kktkSvcStat = getNullToStr(ekk0341b012cbsMsg1list[i].getString(EKK0341B012CBSMsg1List.KKTK_SVC_KEI_STAT));
			
			// 解約済またはキャンセル済みは対象外とします。
			if(KKTK_SVC_KEI_STAT_KAIYAKU.equals(kktkSvcStat) || KOJIAK_SBT_CD_NEW.equals(kktkSvcStat))
			{
				continue;
			}
			
			kktkSvcKeiNo = getNullToStr(ekk0341b012cbsMsg1list[i].getString(EKK0341B012CBSMsg1List.KKTK_SVC_KEI_NO));
			
// OM-2015-0001254 MOD START
			String geneAddDtm = getNullToStr(ekk0341b012cbsMsg1list[i].getString(EKK0341B012CBSMsg1List.GENE_ADD_DTM));
			
			HashMap<String, String> data = getKktkSvcKei(handle, scCall, param, fixedText, kktkSvcKeiNo, geneAddDtm, null);
			if (data == null || data.size() == 0) 
			{
				continue;
			}
//			// 機器提供サービス契約場所変更
//			CAANMsg ekk0341c200Msg_out = execEKK0341C200(handle, scCall, param, dataMapKey, temporaryData, ekk0341b012cbsMsg1list[i], kktkSvcKeiNo);
// OM-2015-0001254 MOD END
			
			// チェック登録時のみ実行
			if(FUNC_CODE_1.equals(func_code))
			{
// OM-2015-0001254 MOD START
//				// 機器提供サービス契約場所変更確定
//				execEKK0341C220(handle, scCall, param, dataMapKey, temporaryData, ekk0341c200Msg_out, kktkSvcKeiNo);
				execEKK0341C234(handle, scCall, param, dataMapKey, temporaryData, data, kktkSvcKeiNo);
// OM-2015-0001254 MOD END
			}
		}

		return param;
	}
	
// OM-2015-0001254 ADD START
	
	/**
	 * 機器提供サービス契約情報変更（住所変更）メソッド
	 * <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param EKK0341C234Msg_out
	 * @param kktkSvcKeiNo
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg execEKK0341C234(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData,
									HashMap<String, String> data,
									String kktkSvcKeiNo) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		// 作業領域の取得
		Map workMap = (HashMap)param.getMappingWorkArea();
		
		String kisn_ad_chk_lv = null;
		if("1".equals((String)ccMsg.get("ad_mi_fix_flg"))){
			kisn_ad_chk_lv = "2";
		}
		else
		{
			kisn_ad_chk_lv = "1";
		}

		// ***** EKK0341C234（機器提供サービス契約情報変更（住所変更））*****
		Object[][] EKK0341C234IN = {
				{EKK0341C234CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341C234},
				{EKK0341C234CBSMsg.FUNC_CODE, ccMsg.get("func_code")},
				{EKK0341C234CBSMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo},
				{EKK0341C234CBSMsg.GENE_ADD_DTM, getNullToStr(data.get("gene_add_dtm"))},
				{EKK0341C234CBSMsg.KIKI_STC_SAKI_NM, getNullToStr(data.get("kiki_stc_saki_nm"))},
				{EKK0341C234CBSMsg.KIKI_STC_SAKI_KANA, getNullToStr(data.get("kiki_stc_saki_kana"))},
				{EKK0341C234CBSMsg.KIKI_STC_SAKI_AD_CD, getNullToStr((String)ccMsg.get("kiki_stc_saki_ad_cd"))},
				{EKK0341C234CBSMsg.KIKI_STC_SAKI_PCD, getNullToStr((String)ccMsg.get("kiki_stc_saki_pcd"))},
				{EKK0341C234CBSMsg.KIKI_STC_SAKI_STATE_NM, getNullToStr((String)ccMsg.get("kiki_stc_saki_state_nm"))},
				{EKK0341C234CBSMsg.KIKI_STC_SAKI_CITY_NM, getNullToStr((String)ccMsg.get("kiki_stc_saki_city_nm"))},
				{EKK0341C234CBSMsg.KIKI_STC_SAKI_OAZTSU_NM, getNullToStr((String)ccMsg.get("kiki_stc_saki_oaztsu_nm"))},
				{EKK0341C234CBSMsg.KIKI_STC_SAKI_AZCHO_NM, getNullToStr((String)ccMsg.get("kiki_stc_saki_azcho_nm"))},
				{EKK0341C234CBSMsg.KIKI_STC_SAKI_BNCHIGO, getNullToStr((String)ccMsg.get("kiki_stc_saki_bnchigo"))},
				{EKK0341C234CBSMsg.KIKI_STC_SAKI_ADRTTM, getNullToStr((String)ccMsg.get("kiki_stc_saki_adrttm"))},
				{EKK0341C234CBSMsg.KIKI_STC_SAKI_ADRRM, getNullToStr((String)ccMsg.get("kiki_stc_saki_adrrm"))},
				{EKK0341C234CBSMsg.KIKI_STC_SK_KSH_AD_SAI_FLG, getNullToStr(data.get("kiki_stc_sk_ksh_ad_sai_flg"))},
				{EKK0341C234CBSMsg.KIKI_STC_SK_TELNO, (String)ccMsg.get("kiki_stc_sk_telno")},
				{EKK0341C234CBSMsg.KIKI_STC_SAKI_PLACE_NO, getNullToStr((String)ccMsg.get("kiki_stc_saki_place_no"))},
				{EKK0341C234CBSMsg.KIKI_STS_KKK_SEIRI_CHU_FLG, (String)ccMsg.get("kiki_sts_kkk_seiri_chu_flg")},
				{EKK0341C234CBSMsg.AD_MI_FIX_FLG, (String)ccMsg.get("ad_mi_fix_flg")},
				{EKK0341C234CBSMsg.IDO_DIV, getNullToStr((String)ccMsg.get("ido_div"))},
				{EKK0341C234CBSMsg.UPD_DTM_BF, (String)workMap.get(KK_COM_SVC_UP_DTM)},
				{EKK0341C234CBSMsg.KIKI_STC_AD_CHK_LV, kisn_ad_chk_lv}
		};
		// S-I/F 実行
		CAANMsg EKK0341C234Msg_out = callSC(handle, scCall, param, dataMapKey, EKK0341C234IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		workMap.put(KK_COM_SVC_UP_DTM, EKK0341C234Msg_out.getString(EKK0341C234CBSMsg.UPD_DTM));
		
		return EKK0341C234Msg_out;
	}
// OM-2015-0001254 ADD END
	
	/**
	 * 機器提供サービス契約場所変更メソッド
	 * <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param ekk0341b012Msg
	 * @param kktkSvcKeiNo
	 * @return CAANMsg
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg execEKK0341C200(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData,
									CAANMsg ekk0341b012Msg,
									String kktkSvcKeiNo) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		// 作業領域の取得
		Map workMap = (HashMap)param.getMappingWorkArea();
		
		// ***** EKK0341C200（機器提供サービス契約場所変更）*****
		Object[][] ekk0341c200IN = {
				{EKK0341C200CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341C200},
				{EKK0341C200CBSMsg.FUNC_CODE, ccMsg.get("func_code")},
				{EKK0341C200CBSMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo},
				{EKK0341C200CBSMsg.KIKI_STC_SAKI_PLACE_NO, getNullToStr((String)ccMsg.get("kiki_stc_saki_place_no"))},
				{EKK0341C200CBSMsg.MSKM_DTL_NO, getMskmDtlNo(ccMsg, ekk0341b012Msg)},
				{EKK0341C200CBSMsg.RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)},
				{EKK0341C200CBSMsg.IDO_DIV, getNullToStr((String)ccMsg.get("ido_div"))},
				{EKK0341C200CBSMsg.TAKNKIKI_IDO_CD, getNullToStr(ekk0341b012Msg.getString(EKK0341B012CBSMsg1List.TAKNKIKI_IDO_CD))},
				{EKK0341C200CBSMsg.UPD_DTM_BF, (String)workMap.get(KK_COM_SVC_UP_DTM)}
		};
		// S-I/F 実行
		CAANMsg ekk0341c200Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0341c200IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		workMap.put(KK_COM_SVC_UP_DTM, ekk0341c200Msg_out.getString(EKK0341C200CBSMsg.UPD_DTM));
		
		return ekk0341c200Msg_out;
	}
	
	/**
	 * 機器提供サービス契約場所変更確定メソッド
	 * <br>
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param ekk0341c200Msg_out
	 * @param kktkSvcKeiNo
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execEKK0341C220(SessionHandle handle, 
									ServiceComponentRequestInvoker scCall, 
									IRequestParameterReadWrite param, 
									String dataMapKey,
									HashMap<String, Object> temporaryData,
									CAANMsg ekk0341c200Msg_out,
									String kktkSvcKeiNo) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(dataMapKey);
		// 作業領域の取得
		Map workMap = (HashMap)param.getMappingWorkArea();
		
		// ***** EKK0341C220（機器提供サービス契約場所変更確定）*****
		Object[][] ekk0341c220IN = {
				{EKK0341C220CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0341C220},
				{EKK0341C220CBSMsg.FUNC_CODE, ccMsg.get("func_code")},
				{EKK0341C220CBSMsg.KKTK_SVC_KEI_NO, kktkSvcKeiNo},
				{EKK0341C220CBSMsg.GENE_ADD_DTM, getNullToStr(ekk0341c200Msg_out.getString(EKK0341C220CBSMsg.GENE_ADD_DTM))},
				{EKK0341C220CBSMsg.RSV_APLY_YMD, JPCBPCommon.getOpeDate(null)},
				{EKK0341C220CBSMsg.IDO_DIV, getNullToStr((String)ccMsg.get("ido_div"))},
				{EKK0341C220CBSMsg.UPD_DTM_BF, (String)workMap.get(KK_COM_SVC_UP_DTM)}
		};
		// S-I/F 実行
		CAANMsg ekk0341c220Msg_out = callSC(handle, scCall, param, dataMapKey, ekk0341c220IN);
		
		// 更新タイムスタンプをワーク領域にセットします。
		workMap.put(KK_COM_SVC_UP_DTM, ekk0341c220Msg_out.getString(EKK0341C220CBSMsg.UPD_DTM));
	}
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		if (str == null || "".equals(str.trim()))
		{
			return "";
		}
		return str.trim();
	}
	/**
	 * 申込明細番号を取得します。
	 * @param ccMsg 
	 * @param ekk0341b012Msg
	 * @return retStr 
	 */
	private String getMskmDtlNo(HashMap<String, Object> ccMsg, CAANMsg ekk0341b012Msg)
	{
		String retStr = getNullToStr((String)ccMsg.get(MSKM_DTL_NO_PNO));
		
		if("".equals(retStr))
		{
			retStr = getNullToStr(ekk0341b012Msg.getString(EKK0341B012CBSMsg1List.MSKM_DTL_NO));
		}
		
		return retStr;
	}
	/* ++++++++++ v5.00.04 追加開始 ++++++++++ */
	/**
	 * サービス契約番号から取得したサービス契約内訳＜eo光電話＞に対して緊急通報用住所の情報変更を行う。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param svcKeiNo
	 * @param lastUpdDtm
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private String execSvckeiEmgUpd(SessionHandle handle,
							ServiceComponentRequestInvoker scCall,
							IRequestParameterReadWrite param,
							String fixedText,
							CAANMsg svcKeiMsg,
							String lastUpdDtm,
							String baseYmd) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(fixedText);
		
		// 作業領域の取得
		Map workMap = (HashMap)param.getMappingWorkArea();
		String svc_kei_ucwk_gadtm = "";
		
		Object[][] inMsg = null;
		/* ++++++++++ v7.00.00 修正開始 ++++++++++ */
		
		// サービス契約内訳一覧照会
//		inMsg = new Object[][]{
//				{EKK0161B004CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0161B004},
//				{EKK0161B004CBSMsg.FUNC_CODE,  "1"},
//				{EKK0161B004CBSMsg.KEY_SVC_KEI_NO, svcKeiNo},
//		};
//		
//		CAANMsg[] svcUcwkMsgList = callSC(handle, scCall, param, fixedText, inMsg).getCAANMsgList(EKK0161B004CBSMsg.EKK0161B004CBSMSG1LIST);
		String kaisenShinsetu = (String)ccMsg.get("svc_kei_kaisen_ucwk_no_shinsetsu");
		String svcKeiNo = svcKeiMsg.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
		/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
		String adChgFix = (String)ccMsg.get("ad_chg_fix");
		/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
		if(svcKeiNo != null && !"".equals(svcKeiNo) && kaisenShinsetu != null && !"".equals(kaisenShinsetu))
		{
			
			
			inMsg = new Object[][]{
					{EKU0081B010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0081B010},
					{EKU0081B010CBSMsg.FUNC_CODE,  "1"},
					{EKU0081B010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo},
					{EKU0081B010CBSMsg.KEY_KOJIAK_NO, ""}
			};
			CAANMsg[] svcKeiKojiMsgList = callSC(handle, scCall, param, fixedText, inMsg).getCAANMsgList(EKU0081B010CBSMsg.EKU0081B010CBSMSG1LIST);
			HashMap tmpSvcKeiUcwkNo = new HashMap<String, String>();
			
			for (int i = 0; i < svcKeiKojiMsgList.length; i++)
			{
				CAANMsg svcKeiKojiMsg =svcKeiKojiMsgList[i];
				if(!tmpSvcKeiUcwkNo.containsValue(kaisenShinsetu) && kaisenShinsetu.equals(svcKeiKojiMsg.getString(EKU0081B010CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO)))
				{
					ArrayList adchgDtlList = (ArrayList)ccMsg.get("adrChgDtlList");
					HashMap childadrMap = null;
					// サービス契約内訳分処理する
					for (int j = 0; j < adchgDtlList.size(); j++)
					{
						childadrMap = (HashMap)adchgDtlList.get(j);
						String adchg_dtl_sbt_cd = (String)childadrMap.get("adchg_dtl_sbt_cd");
						if(!ADCHG_DTL_SBT_CD_02.equals(adchg_dtl_sbt_cd)){
							continue;
						}
						String chaf_skbt_no =  (String)childadrMap.get("chaf_skbt_no");
						/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
						String chbf_skbt_no =  (String)childadrMap.get("chbf_skbt_no");
						/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
						if(chaf_skbt_no != null && !"".equals(chaf_skbt_no))
						{
						
							// サービス契約内訳一覧照会
							inMsg = new Object[][]{
									{EKK0161A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0161A010},
									{EKK0161A010CBSMsg.FUNC_CODE,  "2"},
									{EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, chaf_skbt_no},
									{EKK0161A010CBSMsg.KEY_RSV_APLY_YMD, RSV_APLY_YMD_20991231},
							};
							
							CAANMsg[] svcUcwkMsgList = callSC(handle, scCall, param, fixedText, inMsg).getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
							if(svcUcwkMsgList != null && svcUcwkMsgList.length > 0)
							{
								CAANMsg svcUcwkMsg = svcUcwkMsgList[0];
								//OM-2015-0001393 ADD START
								String svcKeiUcwkStat = svcUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT);
								if(!"910".equals(svcKeiUcwkStat) && !"920".equals(svcKeiUcwkStat)){
								//OM-2015-0001393 ADD END
									/* ++++++++++ v8.00.00 修正開始 ++++++++++ */
									if(svcKeiNo.equals(svcUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_KEI_NO)))
									{
										
										// サービス契約内訳＜eo光電話＞一意照会
										inMsg = new Object[][]{
												{EKK0191A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0191A010},
												// #85235 MOD START
												//{EKK0191A010CBSMsg.FUNC_CODE,  "2"},
												{EKK0191A010CBSMsg.FUNC_CODE,  "1"},
												// #85235 MOD END
												{EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_NO)},
												// #85235 ADD START
												{EKK0191A010CBSMsg.KEY_GENE_ADD_DTM, svcUcwkMsg.getString(EKK0161A010CBSMsg1List.GENE_ADD_DTM)},
												// #85235 ADD END
										};
										
										CAANMsg svcUcwkTelMsg = callSC(handle, scCall, param, fixedText, inMsg).getCAANMsgList(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST)[0];
										
										if(baseYmd.compareTo(svcUcwkMsg.getString(EKK0161A010CBSMsg1List.RSV_APLY_YMD)) < 0)
										{
											// サービス契約内訳＜eo光電話＞情報変更
											inMsg = new Object[][]{
													{EKK0191C061CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0191C061},
													{EKK0191C061CBSMsg.FUNC_CODE,  "1"},
													{EKK0191C061CBSMsg.SVC_KEI_UCWK_NO, svcUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_NO)},
													{EKK0191C061CBSMsg.MSKM_DTL_NO, (String)workMap.get("work_mskm_dtl_no")},
													{EKK0191C061CBSMsg.SVC_UEST_KBTMZ_CD, svcUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_UEST_KBTMZ_CD)},
													{EKK0191C061CBSMsg.SVC_UEST_KBTM_CD, svcUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_UEST_KBTM_CD)},
													{EKK0191C061CBSMsg.PNLTY_HASSEI_CD, svcUcwkMsg.getString(EKK0161A010CBSMsg1List.PNLTY_HASSEI_CD)},
													{EKK0191C061CBSMsg.IDO_DIV, (String)ccMsg.get("ido_div")},
													{EKK0191C061CBSMsg.TELNO, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TELNO)},
													{EKK0191C061CBSMsg.TELNO_USE_PLACE_NO, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TELNO_USE_PLACE_NO)},
													{EKK0191C061CBSMsg.EMG_AD_CD, (String)ccMsg.get("kaisen_place_ad_cd")},
													{EKK0191C061CBSMsg.EMG_HOSEI_PCD, (String)ccMsg.get("kaisen_place_pcd")},
													{EKK0191C061CBSMsg.EMG_BNCHIGO, (String)ccMsg.get("kaisen_place_bnchigo")},
													{EKK0191C061CBSMsg.EMG_ADRTTM, (String)ccMsg.get("kaisen_place_adrttm")},
													{EKK0191C061CBSMsg.EMG_ADRRM, (String)ccMsg.get("kaisen_place_adrrm")},
													{EKK0191C061CBSMsg.EMG_KSH_NM, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.EMG_KSH_NM)},
													{EKK0191C061CBSMsg.EMG_KSH_KANA, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.EMG_KSH_KANA)},
													{EKK0191C061CBSMsg.FIRST_CDR_HASSEI_YMD, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.FIRST_CDR_HASSEI_YMD)},
													{EKK0191C061CBSMsg.TELNO_JUN, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TELNO_JUN)},
													{EKK0191C061CBSMsg.NTT_NO_GUIDE_UM, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.NTT_NO_GUIDE_UM)},
													{EKK0191C061CBSMsg.HELLOPAGE_KEISAI_UM, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.HELLOPAGE_KEISAI_UM)},
													{EKK0191C061CBSMsg.TUWA_DTL_KOKAI_YH, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TUWA_DTL_KOKAI_YH)},
													{EKK0191C061CBSMsg.TEL_NO_PRE_TCHI_CD, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TEL_NO_PRE_TCHI_CD)},
													{EKK0191C061CBSMsg.TSJGS_CD, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TSJGS_CD)},
													{EKK0191C061CBSMsg.MAN_SWITCH_RSV_DTM, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.MAN_SWITCH_RSV_DTM)},
													{EKK0191C061CBSMsg.TOWNPAGE_KEISAI_KANA, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TOWNPAGE_KEISAI_KANA)},
													{EKK0191C061CBSMsg.TOWNPAGE_KEISAI_NM, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TOWNPAGE_KEISAI_NM)},
													{EKK0191C061CBSMsg.VA_TAKNKIKI_MODEL_CD, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.VA_TAKNKIKI_MODEL_CD)},
													{EKK0191C061CBSMsg.VA_KIKI_SEIZO_NO, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.VA_KIKI_SEIZO_NO)},
													{EKK0191C061CBSMsg.VA_PORT_NO, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.VA_PORT_NO)},
													{EKK0191C061CBSMsg.UPD_DTM_BF, lastUpdDtm},
													{EKK0191C061CBSMsg.RULE0059_AUTO_APLY, "0"},
													{EKK0191C061CBSMsg.VA_KIKI_CHG_NO, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.VA_KIKI_CHG_NO)},
													{EKK0191C061CBSMsg.RSV_APLY_YMD, svcUcwkMsg.getString(EKK0161A010CBSMsg1List.RSV_APLY_YMD)},
													// OM-2015-0000655 2015/04/02 ADD START
													{EKK0191C061CBSMsg.EMG_STATE_NM, (String)ccMsg.get("kaisen_place_state_nm")},
													{EKK0191C061CBSMsg.EMG_CITY_NM, (String)ccMsg.get("kaisen_place_city_nm")},
													{EKK0191C061CBSMsg.EMG_OAZTSU_NM, (String)ccMsg.get("kaisen_place_oaztsu_nm")},
													{EKK0191C061CBSMsg.EMG_AZCHO_NM, (String)ccMsg.get("kaisen_place_azcho_nm")},
													// OM-2015-0000655 2015/04/02 ADD END
								
											};
											
											CAANMsg msg = callSC(handle, scCall, param, fixedText, inMsg);
											lastUpdDtm = msg.getString(EKK0191C061CBSMsg.UPD_DTM);
											svc_kei_ucwk_gadtm = msg.getString(EKK0191C061CBSMsg.KK0161_GENE_ADD_DTM);
											
										}
										else
										{
											// サービス契約内訳＜eo光電話＞情報変更
											inMsg = new Object[][]{
													{EKK0191C060CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0191C060},
													{EKK0191C060CBSMsg.FUNC_CODE,  "1"},
													{EKK0191C060CBSMsg.SVC_KEI_UCWK_NO, svcUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_NO)},
													{EKK0191C060CBSMsg.MSKM_DTL_NO, (String)workMap.get("work_mskm_dtl_no")},
													{EKK0191C060CBSMsg.SVC_UEST_KBTMZ_CD, svcUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_UEST_KBTMZ_CD)},
													{EKK0191C060CBSMsg.SVC_UEST_KBTM_CD, svcUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_UEST_KBTM_CD)},
													{EKK0191C060CBSMsg.PNLTY_HASSEI_CD, svcUcwkMsg.getString(EKK0161A010CBSMsg1List.PNLTY_HASSEI_CD)},
													{EKK0191C060CBSMsg.IDO_DIV, (String)ccMsg.get("ido_div")},
													{EKK0191C060CBSMsg.TELNO, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TELNO)},
													{EKK0191C060CBSMsg.TELNO_USE_PLACE_NO, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TELNO_USE_PLACE_NO)},
													{EKK0191C060CBSMsg.EMG_AD_CD, (String)ccMsg.get("kaisen_place_ad_cd")},
													{EKK0191C060CBSMsg.EMG_HOSEI_PCD, (String)ccMsg.get("kaisen_place_pcd")},
													{EKK0191C060CBSMsg.EMG_BNCHIGO, (String)ccMsg.get("kaisen_place_bnchigo")},
													{EKK0191C060CBSMsg.EMG_ADRTTM, (String)ccMsg.get("kaisen_place_adrttm")},
													{EKK0191C060CBSMsg.EMG_ADRRM, (String)ccMsg.get("kaisen_place_adrrm")},
													{EKK0191C060CBSMsg.EMG_KSH_NM, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.EMG_KSH_NM)},
													{EKK0191C060CBSMsg.EMG_KSH_KANA, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.EMG_KSH_KANA)},
													{EKK0191C060CBSMsg.FIRST_CDR_HASSEI_YMD, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.FIRST_CDR_HASSEI_YMD)},
													{EKK0191C060CBSMsg.TELNO_JUN, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TELNO_JUN)},
													{EKK0191C060CBSMsg.NTT_NO_GUIDE_UM, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.NTT_NO_GUIDE_UM)},
													{EKK0191C060CBSMsg.HELLOPAGE_KEISAI_UM, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.HELLOPAGE_KEISAI_UM)},
													{EKK0191C060CBSMsg.TUWA_DTL_KOKAI_YH, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TUWA_DTL_KOKAI_YH)},
													{EKK0191C060CBSMsg.TEL_NO_PRE_TCHI_CD, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TEL_NO_PRE_TCHI_CD)},
													{EKK0191C060CBSMsg.TSJGS_CD, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TSJGS_CD)},
													{EKK0191C060CBSMsg.MAN_SWITCH_RSV_DTM, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.MAN_SWITCH_RSV_DTM)},
													{EKK0191C060CBSMsg.TOWNPAGE_KEISAI_KANA, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TOWNPAGE_KEISAI_KANA)},
													{EKK0191C060CBSMsg.TOWNPAGE_KEISAI_NM, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.TOWNPAGE_KEISAI_NM)},
													{EKK0191C060CBSMsg.VA_TAKNKIKI_MODEL_CD, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.VA_TAKNKIKI_MODEL_CD)},
													{EKK0191C060CBSMsg.VA_KIKI_SEIZO_NO, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.VA_KIKI_SEIZO_NO)},
													{EKK0191C060CBSMsg.VA_PORT_NO, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.VA_PORT_NO)},
													{EKK0191C060CBSMsg.UPD_DTM_BF, lastUpdDtm},
													{EKK0191C060CBSMsg.RULE0059_AUTO_APLY, "0"},
													{EKK0191C060CBSMsg.DOBANITEN_MSKM_UM, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.DOBANITEN_MSKM_UM)},
													{EKK0191C060CBSMsg.DOBANITEN_REQ_CTRL_CD, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.DOBANITEN_REQ_CTRL_CD)},
													{EKK0191C060CBSMsg.DOBANITEN_JDG_CD, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.DOBANITEN_JDG_CD)},
													{EKK0191C060CBSMsg.EMG_KSH_KSITEI_FLG, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.EMG_KSH_KSITEI_FLG)},
													{EKK0191C060CBSMsg.EMG_STATE_NM, (String)ccMsg.get("kaisen_place_state_nm")},
													{EKK0191C060CBSMsg.EMG_CITY_NM, (String)ccMsg.get("kaisen_place_city_nm")},
													{EKK0191C060CBSMsg.EMG_OAZTSU_NM, (String)ccMsg.get("kaisen_place_oaztsu_nm")},
													{EKK0191C060CBSMsg.EMG_AZCHO_NM, (String)ccMsg.get("kaisen_place_azcho_nm")},
													{EKK0191C060CBSMsg.VA_KIKI_CHG_NO, svcUcwkTelMsg.getString(EKK0191A010CBSMsg1List.VA_KIKI_CHG_NO)},
								
											};
											
											CAANMsg msg = callSC(handle, scCall, param, fixedText, inMsg);
											lastUpdDtm = msg.getString(EKK0191C060CBSMsg.UPD_DTM);
											svc_kei_ucwk_gadtm = msg.getString(EKK0191C060CBSMsg.KK0161_GENE_ADD_DTM);
										}
										tmpSvcKeiUcwkNo.put(chaf_skbt_no, kaisenShinsetu);
										
										/* ++++++++++ v8.00.01 修正開始 ++++++++++ */
										//同番移転で住所変更確定前ならSODは発行しない
										if(AD_CHG_FIX_FIXED.equals(adChgFix) || !chaf_skbt_no.equals(chbf_skbt_no))
										{
											//SOD発行処理
											htelNoInfoChgeOdrCtrl(handle, scCall, param, fixedText, svcKeiMsg, svcUcwkMsg, svc_kei_ucwk_gadtm);
										}
										/* ++++++++++ v8.00.01 修正終了 ++++++++++ */
									}
								//OM-2015-0001393 ADD START
								}
								//OM-2015-0001393 ADD END
								/* ++++++++++ v8.00.00 修正終了 ++++++++++ */
							}
						}
					}
				}
			}
		}
		/* ++++++++++ v7.00.00 修正終了 ++++++++++ */
		
		return lastUpdDtm;
	}
	/* ++++++++++ v5.00.04 追加終了 ++++++++++ */
	/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
	/**
	 * 住所一括更新オーダ制御処理<br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param sodMap SODマップ
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite htelNoInfoChgeOdrCtrl(SessionHandle handle,
			ServiceComponentRequestInvoker scCall,
			IRequestParameterReadWrite param,
			String fixedText,
			CAANMsg svcKeiMsg,
			CAANMsg svcUcwkMsg,
			String svc_kei_ucwk_gadtm) throws Throwable
	{

		String svc_kei_no =  svcKeiMsg.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);
		String svc_kei_ucwk_no =  svcUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_NO);
		boolean isZ1Ordered = findZ1OrderHasBeenSent(param, scCall, handle, fixedText, svc_kei_no, svc_kei_ucwk_no);
		// Z1未処理の場合はZ1に相乗りするので変更不要
		if(isZ1Ordered){
			// 緊急通報・変更

			// ***** EKK1081D010（オーダ情報条件登録）*****
			// 機能コード"1"固定
			Object[][] ekk1081c011IN = {
					{EKK1081C011CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1081C011},
					{EKK1081C011CBSMsg.FUNC_CODE, "1"},
			};
			
			// 実行結果を返す。
			CAANMsg EKK1081C011msg = callSC(handle, scCall, param, fixedText, ekk1081c011IN);
			
			// ***** EKK1081D010（オーダ情報条件登録）*****
			Object[][] ekk1081d010IN = {
					{EKK1081D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1081D010},
					{EKK1081D010CBSMsg.FUNC_CODE, "1"},
					{EKK1081D010CBSMsg.SVC_KEI_NO, svc_kei_no},
					{EKK1081D010CBSMsg.SVC_KEI_UCWK_NO, setNull()},
					{EKK1081D010CBSMsg.KKTK_SVC_KEI_NO, setNull()},
					{EKK1081D010CBSMsg.OP_SVC_KEI_NO, setNull()},
					{EKK1081D010CBSMsg.SBOP_SVC_KEI_NO, setNull()},
					{EKK1081D010CBSMsg.SEIOPSVC_KEI_NO, setNull()},
					{EKK1081D010CBSMsg.ORDER_SBT_CD, JKKHakkoSODConstCC.ORDER_SBT_CD_RMG},
					{EKK1081D010CBSMsg.SVC_ORDER_CD, JKKHakkoSODConstCC.SVC_ORDER_CD_EMG},
					{EKK1081D010CBSMsg.YOKYU_SBT_CD, JKKHakkoSODConstCC.YOKYU_SBT_CD_CHG},
					{EKK1081D010CBSMsg.ODR_HAKKO_JOKEN_CD, JKKHakkoSODConstCC.ODR_HAKKO_JOKEN_CD_SOKJI_HAKKO},
					{EKK1081D010CBSMsg.SAME_TRN_NO, EKK1081C011msg.getString(EKK1081C011CBSMsg.SAME_TRN_NO)},
					{EKK1081D010CBSMsg.TAKNKIKI_MODEL_CD, setNull()},
					{EKK1081D010CBSMsg.KIKI_SEIZO_NO, setNull()},
					{EKK1081D010CBSMsg.MLAD, setNull()},
					{EKK1081D010CBSMsg.SPOT_LOGIN_SYSID, setNull()},
					{EKK1081D010CBSMsg.SEND_REQ_FIN_DTM, setNull()},
					{EKK1081D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO, setNull()},
			};
			// 更新処理の実行
			CAANMsg EKK1081D010msg = callSC(handle, scCall, param, fixedText, ekk1081d010IN);

			// ***** EKK1551D010（オーダ情報作成ワーク登録）*****
			Object [][] ekk1551d010IN = {
					{EKK1551D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1551D010},
					{EKK1551D010CBSMsg.FUNC_CODE, "1"},
					{EKK1551D010CBSMsg.ODR_HAKKO_JOKEN_NO, EKK1081D010msg.getString(EKK1081D010CBSMsg.ODR_HAKKO_JOKEN_NO)},
					{EKK1551D010CBSMsg.ODR_NAIYO_CD, JKKHakkoSODConstCC.ODR_NAIYO_CD_251},
					{EKK1551D010CBSMsg.SVC_KEI_NO, svc_kei_no},
					{EKK1551D010CBSMsg.SVKEI_GADTM, svcKeiMsg.getString(EKK0081A010CBSMsg1List.GENE_ADD_DTM)},
					{EKK1551D010CBSMsg.SVC_KEI_UCWK_NO, svcUcwkMsg.getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_NO)},
					{EKK1551D010CBSMsg.SVKEIUW_GADTM, svc_kei_ucwk_gadtm},
					{EKK1551D010CBSMsg.KKTK_SVC_KEI_NO, setNull()},
					{EKK1551D010CBSMsg.KKTSVKEI_GADTM, setNull()},
					{EKK1551D010CBSMsg.OP_SVC_KEI_NO, setNull()},
					{EKK1551D010CBSMsg.OPSVKEI_GADTM, setNull()},
					{EKK1551D010CBSMsg.SBOP_SVC_KEI_NO, setNull()},
					{EKK1551D010CBSMsg.SBOPSVKEI_GADTM, setNull()},
					{EKK1551D010CBSMsg.SEIOPSVC_KEI_NO, setNull()},
					{EKK1551D010CBSMsg.SEIOPSVKEI_GADTM, setNull()},
					{EKK1551D010CBSMsg.HUKA_INF_KEI_NO,  setNull()},
					{EKK1551D010CBSMsg.HUKA_INF_KEI_GADTM, setNull()},
					{EKK1551D010CBSMsg.CHBF_SVKEI_GADTM, setNull()},
					{EKK1551D010CBSMsg.CHBF_SVKEIUW_GADTM, setNull()},
					{EKK1551D010CBSMsg.CHBF_KKTSVKEI_GADTM, setNull()},
					{EKK1551D010CBSMsg.CHBF_OPSVKEI_GADTM, setNull()},
					{EKK1551D010CBSMsg.CHBF_SBOPSVKEI_GADTM, setNull()},
					{EKK1551D010CBSMsg.CHBF_SEIOPSVKEI_GADTM, setNull()},
					{EKK1551D010CBSMsg.KKOP_SVC_KEI_NO_1, setNull()},
					{EKK1551D010CBSMsg.KKOSVKEI_GADTM_1, setNull()},
					{EKK1551D010CBSMsg.CHBF_KKOSVKEI_GADTM_1, setNull()},
					{EKK1551D010CBSMsg.KKOP_SVC_KEI_NO_2,setNull()},
					{EKK1551D010CBSMsg.KKOSVKEI_GADTM_2, setNull()},
					{EKK1551D010CBSMsg.CHBF_KKOSVKEI_GADTM_2, setNull()},
			};
			// 更新処理の実行
			callSC(handle, scCall, param, fixedText, ekk1551d010IN);
		}

		
		return param;
	}
	/**
	 * eo光電話のZ1オーダが発行済みか否かを見つけます
	 * 
	 * @param param リクエストパラメータ一式
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @return チェックしたSOD件数
	 * @throws Exception 任意の例外
	 * @since 2012-12-19 ロット２全網羅ＩＴ内部障害No.146（Z1オーダ未処理なのに重複して電話オーダ出る）
	 */
	public boolean findZ1OrderHasBeenSent(IRequestParameterReadWrite param,
			ServiceComponentRequestInvoker scCall,
			SessionHandle handle,
			String fixedText,
			String svc_kei_no,
			String svc_kei_ucwk_no
			) throws Exception
	{
		return (4 <= findZ1OrderAtKK1041(param, scCall, handle, fixedText, svc_kei_no, svc_kei_ucwk_no));
	}


	/**
	 * Z1オーダにかかるＳＯＤ４種がオーダ受付済か否かを照会します
	 * <pre>
	 * チェック対象ＳＯＤ： 「電話サービスオーダコード／オーダ内容コード」
	 * 　　20ＯＬＳ　　207ＯＬＳ設定・登録
	 * 　　21ＳＩＰ　　218ＳＩＰ・登録
	 * 　　23Radius　　202Radius認証・登録
	 * 　　24緊急通報　250緊急通報・登録
	 * </pre>
	 * @param param リクエストパラメータ一式
	 * @param handle セッションハンドル
	 * @param svc_kei_no サービス契約番号
	 * @return チェックしたSOD件数
	 * @throws Exception 任意の例外
	 * @since 2012-12-19 ロット２全網羅ＩＴ内部障害No.146（Z1オーダ未処理なのに重複して電話オーダ出る）
	 */
	private int findZ1OrderAtKK1041(IRequestParameterReadWrite param,
			ServiceComponentRequestInvoker scCall,
			SessionHandle handle,
			String fixedText,
			String svc_kei_no,
			String svc_kei_ucwk_no
			) throws Exception
	{
		//指定サービス契約番号でオーダ設定一覧照会
		Object[][] inMsg = null;
		
		inMsg = new Object[][]{
				{EKK1041B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1041B001},
				{EKK1041B001CBSMsg.FUNC_CODE,  "1"},
				{EKK1041B001CBSMsg.KEY_SVC_KEI_NO, svc_kei_no},
				{EKK1041B001CBSMsg.KEY_ORDER_SBT_CD, ""},
				{EKK1041B001CBSMsg.KEY_SVC_ORDER_CD, ""},
				{EKK1041B001CBSMsg.KEY_RCNT_YOKYU_SBT_CD, ""},
		};
		
		CAANMsg[] eKK1041B001HashList = callSC(handle, scCall, param, fixedText, inMsg).getCAANMsgList(EKK1041B001CBSMsg.EKK1041B001CBSMSG1LIST);
		int isOrderedZ1 = 0;
		int isOrderedZ1Emg = 0;
	
		//Z1オーダ発行済みか否かを、Radius認証、OLS、SIP　３種の電話サービスオーダと緊急通報オーダがあるかどうかで確認
		if (null != eKK1041B001HashList && 0 < eKK1041B001HashList.length)
		{
			for (CAANMsg eKK1041B001msg : eKK1041B001HashList)
			{
				String odr_sbt_cd = eKK1041B001msg.getString(EKK1041B001CBSMsg1List.ORDER_SBT_CD);
				String svc_order_cd = eKK1041B001msg.getString(EKK1041B001CBSMsg1List.SVC_ORDER_CD);
				String svc_kei_ucwk_no1041 = eKK1041B001msg.getString(EKK1041B001CBSMsg1List.SVC_KEI_UCWK_NO);
				String rcnt_yokyu_sbt_cd = eKK1041B001msg.getString(EKK1041B001CBSMsg1List.RCNT_YOKYU_SBT_CD);
				/* ++++++++++ v8.00.01 修正開始 ++++++++++ */
				if (((JKKHakkoSODConstCC.ORDER_SBT_CD_TEL.equals(odr_sbt_cd) && svc_order_cd.matches("2[0136]"))))
				{
					isOrderedZ1 ++;
				}
				if ((JKKHakkoSODConstCC.ORDER_SBT_CD_RMG.equals(odr_sbt_cd) && JKKHakkoSODConstCC.SVC_ORDER_CD_EMG.equals(svc_order_cd))
					&& (svc_kei_ucwk_no == null || "".equals(svc_kei_ucwk_no) || svc_kei_ucwk_no.equals(svc_kei_ucwk_no1041))
					&& !RCNT_YOKYU_SBT_CD_DEL.equals(rcnt_yokyu_sbt_cd))
				{
					isOrderedZ1 ++;
					isOrderedZ1Emg ++;
				}
				/* ++++++++++ v8.00.01 修正終了 ++++++++++ */
			}
		}
		//緊急通報オーダがない場合は処理しない
		/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
		if(0 == isOrderedZ1Emg)
		{
			isOrderedZ1 = 0;
		}
		/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
		return isOrderedZ1;
	}
	/**
	 * @return null
	 */
	private String setNull()
	{
		return null;
	}
	/* ++++++++++ v8.00.00 追加終了 ++++++++++ */
	
}
