/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKGGExchgCC
*	ソースファイル名：JKKGGExchgCC.java
*	作成者			：FJ）藤田
*	日付			：2014年07月15日
*＜機能概要＞
*	ＧＧ乗換登録処理の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v10.00.00	2014/07/15	FJ）藤田	【ANK-1918-00-00】新規作成
*	v10.01.00	2014/08/07	FJ) 藤田	【IT1-2014-0000264】申込明細番号が再度採番される
*	v10.02.00	2014/08/13	FJ) 藤田	【IT1-2014-0000285】ＶＤＳＬ機器がない場合にエラー
*	v10.03.00	2014/08/27	FJ) 藤田	【IT2-2014-0000291】ＧＧ乗換で排他チェックエラー
*	v10.04.00	2014/09/19	FJ) 藤田	【IT2-2014-0000313】ＧＧ乗換時の機器故障対応中チェック
*	v10.05.00	2014/10/06	FJ) 藤田	【IT2-2014-0000317】住変による機器解約予約中にＧＧ乗換できてしまう
*	v10.06.00	2014/10/10	FJ) 藤田	【ANK-1918-06-00】出荷指図連携タイミングの見直し
*	v11.00.00	2014/11/17	FJ) 藤田	【OM-2014-0003565】マンション（ネット＋電話）の撤去解約でサービス契約_工事案件が不正
*	v52.00.00   2021/01/17  FJ)星野 	【ANK-3910-00-00】定額サービスリース品追加対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
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.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EDK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDK0011B080CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0011B080CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDK0011B090CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0011B090CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDK0011C090CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDK0171A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0171A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDK0301A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0301A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDK0301B070CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0301B070CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDK0301C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0451A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EDK0451A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0011C020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0021A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0021C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
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.EKK0341B021CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B021CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B027CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B027CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341C170CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C540CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020005CBSMsg;
import eo.ejb.cbs.cbsmsg.EKKA0020005CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKKA0020005CBSMsg2List;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0411A010CBSMsg1List;


/**
 * ＧＧ乗換登録処理を行います。<p>
 * <BR>
 * @author 富士通
 */
public class JKKGGExchgCC extends AbstractCommonComponent
{
	// SIF実行用
	ServiceComponentRequestInvoker _scCall = null;
	
	// 配送予定年月日
	private static String HAISO_YOTEI_YMD = "20991231";
	// 異動区分：ＧＧ乗換
	private static String IDO_DIV_00085 = "00085";

	// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD START
	/** コード区分　親契約識別コード　サービス契約回線内訳 */
	public static final String CD_DIV_OYAKEISKBTCD_KAISEN = "02";
	// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD END

	// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD START
	/** 物流保全ステータス：完了済み */
	public static final String BTRYHOZN_STAT_FIN = "004";
	/** 物流保全ステータス：キャンセル済み */
	public static final String BTRYHOZN_STAT_CNCL = "009";
	// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD END
	
	/**************************/
	/** CCマップの引継ぎキー **/
	/**************************/
	// 機能コード
	public static String HKTG_KEY_FUNC_CODE = "func_code";
	// 運用日付
	public static String HKTG_KEY_OPEDATE = "ope_date";
	// 販売種別コード
	public static String HKTG_KEY_HAMBAI_SBT_CD = "hambai_sbt_cd";
	// 宅内機器型式コード
	public static String HKTG_KEY_TAKNKIKI_MODEL_CD = "taknkiki_model_cd";
	// 提供種別コード
	public static String HKTG_KEY_TK_SBT_CD = "tk_sbt_cd";
	// 付加情報コード
	public static String HKTG_KEY_HUKA_INFO_CD = "huka_info_cd";
	// SYSID
	public static String HKTG_KEY_SYSID = "sysid";
	// サービス契約番号
	public static String HKTG_KEY_SVC_KEI_NO = "svc_kei_no";
	// 更新年月日時分秒（サービス契約）
	public static String HKTG_KEY_SVC_KEI_UPD_DTM = "svc_kei_upd_dtm";
	
	// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD START
	// 同一回線最新＿更新年月日時分秒
	public static String HKTG_KEY_KAISEN_UPD_DTM = "kaisen_upd_dtm";
	// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD END
	
	// 機器提供サービス契約番号
	public static String HKTG_KEY_KKTK_SVC_KEI_NO = "kktk_svc_kei_no";
	// IT1-2014-0000264 申込明細番号が再度採番される 2014/08/07 藤田 ADD START
	// 申込明細番号
	public static String HKTG_KEY_MSKM_DTL_NO = "mskm_dtl_no";
	// IT1-2014-0000264 申込明細番号が再度採番される 2014/08/07 藤田 ADD END
	// 異動区分
	public static String HKTG_KEY_IDO_DIV = "ido_div";
	// 工事案件番号
	public static String HKTG_KEY_KOJIAK_NO = "kojiak_no";
	// 異動理由コードリスト
	public static String HKTG_KEY_IDO_RSN_CD_LIST = "ido_rsn_cd_list";
	// 異動理由コード
	public static String HKTG_KEY_IDO_RSN_CD = "ido_rsn_cd";
	// 異動理由メモ
	public static String HKTG_KEY_IDO_RSN_MEMO = "ido_rsn_memo";
	// 申込書番号
	public static String HKTG_KEY_MSKMSHO_NO = "mskmsho_no";
	// 工事受付コード
	public static String HKTG_KEY_KOJI_UK_CD = "koji_uk_cd";
	// 工事希望年月日
	public static String HKTG_KEY_KOJI_KIBO_YMD = "koji_kibo_ymd";
	// 工事案件備考
	public static String HKTG_KEY_KOJIAK_BIKO = "kojiak_biko";
	// 工事案件備考１
	public static String HKTG_KEY_KOJIAK_BIKO_1 = "kojiak_biko_1";
	// 工事案件備考２
	public static String HKTG_KEY_KOJIAK_BIKO_2 = "kojiak_biko_2";
	// 申込者名
	public static String HKTG_KEY_MSKMSHA_NM = "mskmsha_nm";
	// 宅内工事希望アポ期限年月日
	public static String HKTG_KEY_TNKJ_KIBO_APO_KIGEN_YMD = "tnkj_kibo_apo_kigen_ymd";
	// 電話連絡希望時間帯コード
	public static String HKTG_KEY_TEL_RRK_KIBO_TIME_CD = "tel_rrk_kibo_time_cd";
	// 工事アポ連絡先指定コード
	public static String HKTG_KEY_KOJI_APO_RRKS_SHITEI_CD = "koji_apo_rrks_shitei_cd";
	// 工事アポ連絡先電話番号
	public static String HKTG_KEY_KOJI_APO_RRKS_TELNO = "koji_apo_rrks_telno";
	
	/****************************/
	/** チェック結果保存マップ **/
	/****************************/
	// チェック結果保存マップの取得用キー
	private static String MESSAGE_LIST = "message_list";
	// チェック結果保存マップにセットされるメッセージキー
	private static String MESSAGEID = "messageId";

	// 申込書番号重複チェックエラー発生時、チェック結果保存マップに設定される
	private static String ERRKEY_MSKMSHONO_DUPLICATE_ERR = "errkey_mskmsho_duplecate_err";
	
	// 配送抑止有無チェックエラー発生時、チェック結果保存マップに設定される
	private static String ERRKEY_HAISOYOKUSIUM_ERR = "errkey_haisoyokusium_err";
	
	// 入荷実績チェックエラー発生時、チェック結果保存マップに設定される
	private static String ERRKEY_NYUKAJISSEKI_NO_ERR = "errkey_nyukajisseki_no_err";

	// 在庫確認チェックエラー発生時、チェック結果保存マップに設定される
	private static String ERRKEY_ZAIKO_NO_ERR = "errkey_zaiko_no_err";
	
	// サービス解約予約存在チェックエラー発生時、チェック結果保存マップに設定される
	private static String ERRKEY_EXISTS_SVC_DSL_ERR = "errkey_exists_svc_dsl_err";

	// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD START
	// 機器提供サービス解約予約存在チェックエラー発生時、チェック結果保存マップに設定される
	private static String ERRKEY_EXISTS_KKTK_SVC_DSL_ERR = "errkey_exists_kktk_svc_dsl_err";
	// 機器故障対応中機器チェックエラー発生時、チェック結果保存マップに設定される
	private static String ERRKEY_KOSHOU_TAIO_KIKI_ERR = "errkey_koshou_taio_kiki_err";
	// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD END

	/**************************/
	/** localWorkMapで使用するキー **/
	/**************************/
	// 運用日付
	private static String LOCAL_MAP_OPEDATE = "ope_date";
	// 運用日時
	private static String LOCAL_MAP_OPEDTM = "ope_dtm";
	// 申込明細番号
	private static String LOCAL_MAP_MSKM_DTL_NO = "mskm_dtl_no";
	// 申込番号
	private static String LOCAL_MAP_MSKM_NO = "mskm_no";
	// 更新年月日時分秒（申込）
	private static String LOCAL_MAP_MSKM_UPD_DTM = "mskm_upd_dtm";
	// 更新後の機器提供サービスリスト
	private static String LOCAL_MAP_KIKI_UPD_LIST = "kktk_upd_list";
	// サービスＩＦ - 引当棚一意照会結果
	private static String LOCAL_MAP_EDK0451A010_RESULTKEY = "EDK0451A010";
	// サービスＩＦ - 機器提供サービス契約一意照会結果
	private static String LOCAL_MAP_EKK0341A010_RESULTKEY = "EKK0341A010";
	// サービスＩＦ - 機器提供サービス契約（予約）
	private static String LOCAL_MAP_EKK0341A010_RSVKIKI_RESULTKEY = "EKK0341A010_rsvkiki";
	// サービスＩＦ - 申込一意照会結果
	private static String LOCAL_MAP_EKK0011A010_RESULT_KEY = "EKK0011A010";
	// サービスＩＦ - 申込明細一意照会結果
	private static String LOCAL_MAP_EKK0021A010_RESULT_KEY = "EKK0021A010";
	// サービスＩＦ - 配送情報ステータス一覧照会結果
	private static String LOCAL_MAP_EDK0011B080_RESULT_KEY = "EDK0011B080";
	// 工事案件番号（返却値）
	private static String LOCAL_MAP_KOJIAK_NO = "kojiak_no";
	// 更新年月日時分秒（サービス契約）
	public static String LOCAL_MAP_SVC_KEI_UPD_DTM = "svc_kei_upd_dtm";
	// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD START
	// 同一回線最新＿更新年月日時分秒
	public static String LOCAL_MAP_KAISEN_UPD_DTM = "kaisen_upd_dtm";
	// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD END
	
	/**
	 * ＧＧ乗換実行処理
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite ggExchange(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
		throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(fixedText);

		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		_scCall = new ServiceComponentRequestInvoker();

		// localWorkMap : このCC内でのみ使用するマップデータに引継ぎ情報などをセット
		Map<String, Object> localWorkMap = new HashMap<String, Object>();
		// 処理日（運用日）
		String opeDate = (String)ccMsg.get(HKTG_KEY_OPEDATE);
		localWorkMap.put(LOCAL_MAP_OPEDATE, opeDate);
		// 運用年月日時分秒
		String opeDtm = JCCBPCommon.getOpeDateTimeStamp(null);
		localWorkMap.put(LOCAL_MAP_OPEDTM, opeDtm);
		// 更新年月日時分秒（サービス契約）
		localWorkMap.put(LOCAL_MAP_SVC_KEI_UPD_DTM, ccMsg.get(HKTG_KEY_SVC_KEI_UPD_DTM));
		// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD START
		// 同一回線最新＿更新年月日時分秒
		localWorkMap.put(LOCAL_MAP_KAISEN_UPD_DTM, ccMsg.get(HKTG_KEY_KAISEN_UPD_DTM));
		// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD END

		//----------------------------------------------------------------//
		// 申込書番号重複チェックを実行
		//----------------------------------------------------------------//
		String kojiAnknNo = (String)ccMsg.get(HKTG_KEY_KOJIAK_NO);
		if (kojiAnknNo == null || "".equals(kojiAnknNo))
		{
			if(!isCorrectUketukeNo(handle, param, ccMsg))
			{
				// 画面から入力された受付番号が申込書番号重複の場合エラー
				errorMessageSet(ERRKEY_MSKMSHONO_DUPLICATE_ERR, ccMsg);
				return param;
			}
		}

		//----------------------------------------------------------------//
		// 配送抑止有無チェックを実行
		//----------------------------------------------------------------//
		if(!isHaisoYokushiUmuChk(handle, param, ccMsg))
		{
			// 配送抑止有無が「有」の場合エラー
			errorMessageSet(ERRKEY_HAISOYOKUSIUM_ERR, ccMsg);
			return param;
		}

		//----------------------------------------------------------------//
		// 引当棚一意照会 ⇒ ワークに保存
		//----------------------------------------------------------------//
		CAANMsg[] edk0451a010cbsMsg1list = getEDK0451A010data(handle, param, localWorkMap, ccMsg);
		localWorkMap.put(LOCAL_MAP_EDK0451A010_RESULTKEY, edk0451a010cbsMsg1list);

		//----------------------------------------------------------------//
		// 入荷実績チェック & 在庫確認チェックを実行
		//----------------------------------------------------------------//
		if(!isTknKikiModlSonzaiChk(handle, param, localWorkMap, ccMsg))
		{
			return param;
		}

		String funcCode = (String)ccMsg.get(HKTG_KEY_FUNC_CODE);
		
		//----------------------------------------------------------------//
		// 機器提供サービス契約一意照会 ⇒ ワークに保存
		//----------------------------------------------------------------//
		// IT1-2014-0000285 ＶＤＳＬ機器がない場合にエラー 2014/08/13 藤田 MOD START
		// ＶＤＳＬ機器が紐づいていない場合は機器提供サービス契約番号が無い
		String kktkSvcKeiNo = (String)ccMsg.get(HKTG_KEY_KKTK_SVC_KEI_NO);
		if (kktkSvcKeiNo != null && !"".equals(kktkSvcKeiNo)) {
			CAANMsg[] ekk0341a010cbsMsg1list = getCurrentKikiSvcKeiInfo(ccMsg, localWorkMap, handle, param);
			localWorkMap.put(LOCAL_MAP_EKK0341A010_RESULTKEY, ekk0341a010cbsMsg1list);
		}
		// IT1-2014-0000285 ＶＤＳＬ機器がない場合にエラー 2014/08/13 藤田 MOD END
		
		//----------------------------------------------------------------//
		// 機器提供サービス契約一覧照会（予約） ⇒ 対象の機器情報をワークに保存
		//----------------------------------------------------------------//
		getKikiSvcKeiRsvInfo(ccMsg, localWorkMap, handle, param);

		//----------------------------------------------------------------//
		// 申込登録 または 内容変更を実施する
		//----------------------------------------------------------------//
// IT1-2014-0000264 申込明細番号が再度採番される 2014/08/07 藤田 ADD START
		//CAANMsg eKK0341A010RsvCBSMsg = (CAANMsg)localWorkMap.get(LOCAL_MAP_EKK0341A010_RSVKIKI_RESULTKEY);
		//if (eKK0341A010RsvCBSMsg == null)
		String mskmDtlNo = (String)ccMsg.get(HKTG_KEY_MSKM_DTL_NO);
		if (mskmDtlNo == null || "".equals(mskmDtlNo))
// IT1-2014-0000264 申込明細番号が再度採番される 2014/08/07 藤田 ADD END
		{
			//----------------------------------------------------------------//
			// 申込内容承認登録
			//----------------------------------------------------------------//
			addMskm(ccMsg, localWorkMap, handle, param);

			//----------------------------------------------------------------//
			// 申込明細照査・後続業務依頼
			//----------------------------------------------------------------//
			if (JPCModelConstant.FUNC_CD_1.equals(funcCode))
			{
				mskmShosa(ccMsg, localWorkMap, handle, param);
			}
		} else
		{
			//----------------------------------------------------------------//
			// 申込明細一意照会 & 申込一意照会
			//----------------------------------------------------------------//
// IT1-2014-0000264 申込明細番号が再度採番される 2014/08/07 藤田 DEL START
//			String mskmDtlNo = (String)eKK0341A010RsvCBSMsg.getString(EKK0341A010CBSMsg1List.MSKM_DTL_NO);
// IT1-2014-0000264 申込明細番号が再度採番される 2014/08/07 藤田 DEL END
			localWorkMap.put(LOCAL_MAP_MSKM_DTL_NO, mskmDtlNo);
			getCurrentMskmInfo(ccMsg, localWorkMap, handle, param);

			//----------------------------------------------------------------//
			// 申込内容変更
			//----------------------------------------------------------------//
			chgMskm(ccMsg, localWorkMap, handle, param);
			
			//----------------------------------------------------------------//
			// 申込明細情報変更
			//----------------------------------------------------------------//
			chgMskmMeisai(ccMsg, localWorkMap, handle, param);
		}
		
		//----------------------------------------------------------------//
		// 工事案件に登録
		//----------------------------------------------------------------//
		// 機能コードが更新モードのときのみ実行
		if (JPCModelConstant.FUNC_CD_1.equals(funcCode))
		{
			execKojiAnkenCC(ccMsg, localWorkMap, handle, param, fixedText);
		}
		
		//----------------------------------------------------------------//
		// 進捗登録
		//----------------------------------------------------------------//
		addPrg(ccMsg, localWorkMap, JKKSvcConst.PRG_STAT_9500,	// 進捗ステータス 9500：工事依頼登録完了
					getGGChgPrgTkjkText(ccMsg, localWorkMap),
					handle, param);

		// 変更後ＶＤＳＬを登録する場合
		if (isVdslKikiInfoChanged(ccMsg, localWorkMap))
		{
			//----------------------------------------------------------------//
			// 型式が変更された場合は、前の配送をキャンセルする
			//----------------------------------------------------------------//
			execHaisoCancel(ccMsg, localWorkMap, handle, param);

			//----------------------------------------------------------------//
			// 返品取消
			//----------------------------------------------------------------//
			henpinCancel(ccMsg, localWorkMap, handle, param);

			//----------------------------------------------------------------//
			// 機器提供サービス契約予約取消
			//----------------------------------------------------------------//
			reserveKikiCancel(ccMsg, localWorkMap, handle, param);

			// 宅内機器型式コードを取得
			String taknkikiModelCd = (String)ccMsg.get(HKTG_KEY_TAKNKIKI_MODEL_CD);
			
			if (taknkikiModelCd != null && !"".equals(taknkikiModelCd))
			{
				// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD START
				if(isKoshouTaioKikiCheck(handle, param, ccMsg, localWorkMap))
				{
					// 故障対応中機器である場合エラー
					errorMessageSet(ERRKEY_KOSHOU_TAIO_KIKI_ERR, ccMsg);
					return param;
				}
				
				if(isKktkSvcDslSonzaiChk(handle, param, localWorkMap, ccMsg))
				{
					// 解約予約中機器である場合エラー
					errorMessageSet(ERRKEY_EXISTS_KKTK_SVC_DSL_ERR, ccMsg);
					return param;
				}
				// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD END
				
				//----------------------------------------------------------------//
				// サービス解約予約存在チェックを実行
				//----------------------------------------------------------------//
				if (isSvcDslSonzaiChk(handle, param, localWorkMap, ccMsg))
				{
					// エラー判定結果を設定
					errorMessageSet(ERRKEY_EXISTS_SVC_DSL_ERR, ccMsg);
					return param;
				}
				
				//----------------------------------------------------------------//
				// 変更後ＶＤＳＬ情報を機器提供サービス契約に登録する
				// 付随処理(1)：ＧＧ乗換に関する異動予約を登録
				// 付随処理(2)：変更前ＶＤＳＬの返品情報を作成
				//----------------------------------------------------------------//
				if (JPCModelConstant.FUNC_CD_1.equals(funcCode))
				{
					execKikiChgCC(ccMsg, localWorkMap, handle, param, fixedText);
				}
	
				//----------------------------------------------------------------//
				// 変更後ＶＤＳＬの配送情報を作成する
				//----------------------------------------------------------------//
				if (JPCModelConstant.FUNC_CD_1.equals(funcCode))
				{
					// 配送受付
					execHaisoUketsuke(ccMsg, localWorkMap, handle, param);
				}
			}
		}
		
		return param;
	}

	/**
	 * 変更前（カレント）ＶＤＳＬの機器サービス契約一意照会
	 * @param ccMsg
	 * @param localWorkMap
	 * @param handle
	 * @param param
	 * @throws Exception
	 */
	private CAANMsg[] getCurrentKikiSvcKeiInfo(
					HashMap<String, Object> ccMsg,
					Map<String, Object> localWorkMap,
					SessionHandle handle,
					IRequestParameterReadWrite param
		) throws Exception
	{
		// 機器提供サービス契約番号を取得
		String kktkSvcKeiNo = (String)ccMsg.get(HKTG_KEY_KKTK_SVC_KEI_NO);

		Object[][] ekk0341a010IN = {
				{EKK0341A010CBSMsg.TEMPLATEID,				"EKK0341A010"},
				{EKK0341A010CBSMsg.FUNC_CODE,				JPCModelConstant.FUNC_CD_2},
				{EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO,		kktkSvcKeiNo},
				{EKK0341A010CBSMsg.KEY_RSV_APLY_YMD,		localWorkMap.get(LOCAL_MAP_OPEDATE)},
			};
			
		// サービスインターフェイスの実行
		return callSC(handle, _scCall, param, ccMsg, ekk0341a010IN).getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
	}
	
	/**
	 * 機器提供サービス契約（予約）取得
	 * @param ccMsg
	 * @param localWorkMap
	 * @param handle
	 * @param param
	 * @throws Exception
	 */
	private void getKikiSvcKeiRsvInfo(
					HashMap<String, Object> ccMsg,
					Map<String, Object> localWorkMap,
					SessionHandle handle,
					IRequestParameterReadWrite param
		) throws Exception
	{
		// ***** EKK0341B021（機器提供サービス契約一覧照会（予約））*****
		Object[][] EKK0341B021IN = {
			{EKK0341B021CBSMsg.TEMPLATEID,          "EKK0341B021"},
			{EKK0341B021CBSMsg.FUNC_CODE,           JPCModelConstant.FUNC_CD_1},
			{EKK0341B021CBSMsg.KEY_SVC_KEI_NO,      ccMsg.get(HKTG_KEY_SVC_KEI_NO)},
			{EKK0341B021CBSMsg.KEY_RSV_IDO_DIV,     IDO_DIV_00085},
		};

		CAANMsg[] ekk0341b021cbsMsgList = callSC(handle, _scCall, param, ccMsg, EKK0341B021IN).getCAANMsgList(EKK0341B021CBSMsg.EKK0341B021CBSMSG1LIST);
		// GG乗換対象のＶＤＳＬ機器（既に予約済のもの）
		for (int i=0; i < ekk0341b021cbsMsgList.length; i++)
		{
			// OM-2014-0003565 マンション（ネット＋電話）の撤去解約でサービス契約_工事案件が不正 2014/11/17 藤田 MOD START
//			String kktkSvcKeiNo = ekk0341b021cbsMsgList[0].getString(EKK0341B021CBSMsg1List.KKTK_SVC_KEI_NO);
//			String rsvGeneAddDtm = ekk0341b021cbsMsgList[0].getString(EKK0341B021CBSMsg1List.RSV_GENE_ADD_DTM);
			String kktkSvcKeiNo = ekk0341b021cbsMsgList[i].getString(EKK0341B021CBSMsg1List.KKTK_SVC_KEI_NO);
			String rsvGeneAddDtm = ekk0341b021cbsMsgList[i].getString(EKK0341B021CBSMsg1List.RSV_GENE_ADD_DTM);
			// OM-2014-0003565 マンション（ネット＋電話）の撤去解約でサービス契約_工事案件が不正 2014/11/17 藤田 MOD END

			if (kktkSvcKeiNo.equals(ccMsg.get(HKTG_KEY_KKTK_SVC_KEI_NO)))
			{
				if (rsvGeneAddDtm != null && !"".equals(rsvGeneAddDtm))
				{
					Object[][] ekk0341a010RSVIN = {
							{EKK0341A010CBSMsg.TEMPLATEID,				"EKK0341A010"},
							{EKK0341A010CBSMsg.FUNC_CODE,				JPCModelConstant.FUNC_CD_1},
							{EKK0341A010CBSMsg.KEY_KKTK_SVC_KEI_NO,		kktkSvcKeiNo},
							{EKK0341A010CBSMsg.KEY_GENE_ADD_DTM,		rsvGeneAddDtm},
						};
						
					// サービスインターフェイスの実行
					CAANMsg[] ekk0341a010RSVMsgList = callSC(handle, _scCall, param, ccMsg, ekk0341a010RSVIN).getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
					
					localWorkMap.put(LOCAL_MAP_EKK0341A010_RSVKIKI_RESULTKEY, ekk0341a010RSVMsgList[0]);
					break;
				}
			}
		}
	}
	
	/**
	 * 申込内容承認登録
	 * @param ccMsg
	 * @param localWorkMap
	 * @param handle
	 * @param param
	 * @throws Exception
	 */
	private void addMskm(
					HashMap<String, Object> ccMsg,
					Map<String, Object> localWorkMap,
					SessionHandle handle,
					IRequestParameterReadWrite param
		) throws Exception
	{
		String opDate = (String)localWorkMap.get(LOCAL_MAP_OPEDATE);
		String opdtm = (String)localWorkMap.get(LOCAL_MAP_OPEDTM);

		CAANMsg[] meisaiList = new CAANMsg[1];
		for (int i=0; i < meisaiList.length; i++) {
			meisaiList[i] = new CAANMsg(EKK0011D020CBSMsg1List.class.getName());
			// 工事アポ連絡先指定コード
			meisaiList[i].set(EKK0011D020CBSMsg1List.KOJI_APO_RRKS_SHITEI_CD, (String)ccMsg.get(HKTG_KEY_KOJI_APO_RRKS_SHITEI_CD));
			// 工事アポ連絡先電話番号
			meisaiList[i].set(EKK0011D020CBSMsg1List.KOJI_APO_RRKS_TELNO, (String)ccMsg.get(HKTG_KEY_KOJI_APO_RRKS_TELNO));
			// 申込書番号
			meisaiList[i].set(EKK0011D020CBSMsg1List.MSKMSHO_NO, (String)ccMsg.get(HKTG_KEY_MSKMSHO_NO));
		}
		
		Object[][] ekk0011d020IN = {
				{EKK0011D020CBSMsg.TEMPLATEID,				"EKK0011D020"},
				{EKK0011D020CBSMsg.FUNC_CODE,				ccMsg.get(HKTG_KEY_FUNC_CODE)},
				{EKK0011D020CBSMsg.SYSID,					ccMsg.get(HKTG_KEY_SYSID)},
				{EKK0011D020CBSMsg.MSKM_SBT_CD,				"00024"},		// 00024：機器機種変更申込
				{EKK0011D020CBSMsg.IDO_DIV,					(String)ccMsg.get(HKTG_KEY_IDO_DIV)},
				{EKK0011C020CBSMsg.KOJI_REQ_INFO_RRK_JIKO,	(String)ccMsg.get(HKTG_KEY_KOJIAK_BIKO)},
				{EKK0011D020CBSMsg.MSKM_UK_DTM,				opdtm},
				{EKK0011D020CBSMsg.MSKM_YMD,				opDate},
				{EKK0011D020CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD,	"04"},	// コンシューマ営業用申込状態識別コード
				{EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST,	meisaiList},
			};

		// サービスインターフェイスの実行
		CAANMsg ekk0011d020cbsMsg = callSC(handle, _scCall, param, ccMsg, ekk0011d020IN);
		CAANMsg[] ekk0011d020cbsMsg1list = ekk0011d020cbsMsg.getCAANMsgList(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);

		// 更新年月日時分秒を保存
		String mskm_upd_dtm = ekk0011d020cbsMsg.getString(EKK0011D020CBSMsg.UPD_DTM);
		localWorkMap.put(LOCAL_MAP_MSKM_UPD_DTM, mskm_upd_dtm);
		
		// 申込明細番号を保存
		String mskm_dtl_no = ekk0011d020cbsMsg1list[0].getString(EKK0011D020CBSMsg1List.MSKM_DTL_NO);
		localWorkMap.put(LOCAL_MAP_MSKM_DTL_NO, mskm_dtl_no);
		
		// 申込番号を保存
		String mskm_no = ekk0011d020cbsMsg.getString(EKK0011D020CBSMsg.MSKM_NO);
		localWorkMap.put(LOCAL_MAP_MSKM_NO, mskm_no);
	}

	/**
	 * 申込明細照査・後続業務依頼
	 * @param ccMsg
	 * @param localWorkMap
	 * @param handle
	 * @param param
	 * @throws Exception
	 */
	private void mskmShosa(
					HashMap<String, Object> ccMsg,
					Map<String, Object> localWorkMap,
					SessionHandle handle,
					IRequestParameterReadWrite param
		) throws Exception
	{
		String opDate = (String)localWorkMap.get(LOCAL_MAP_OPEDATE);
		String mskm_dtl_no = (String)localWorkMap.get(LOCAL_MAP_MSKM_DTL_NO);
		String updDtm = (String)localWorkMap.get(LOCAL_MAP_MSKM_UPD_DTM);
		
		Object[][] ekk0021c060IN = {
				{EKK0021C060CBSMsg.TEMPLATEID,				"EKK0021C060"},
				{EKK0021C060CBSMsg.FUNC_CODE,				ccMsg.get(HKTG_KEY_FUNC_CODE)},
				{EKK0021C060CBSMsg.MSKM_DTL_NO,				mskm_dtl_no},
				{EKK0021C060CBSMsg.KZKWRK_REQYMD,			opDate},
				{EKK0021C060CBSMsg.UPD_DTM_BF,				updDtm},
				{EKK0021C060CBSMsg.IDO_DIV,					ccMsg.get(HKTG_KEY_IDO_DIV)},
			};
			
		// サービスインターフェイスの実行
		callSC(handle, _scCall, param, ccMsg, ekk0021c060IN);
	}
	
	/**
	 * 申込明細一意照会
	 * @param ccMsg
	 * @param localWorkMap
	 * @param handle
	 * @param param
	 * @throws Exception
	 */
	private void getCurrentMskmInfo(
					HashMap<String, Object> ccMsg,
					Map<String, Object> localWorkMap,
					SessionHandle handle,
					IRequestParameterReadWrite param
		) throws Exception
	{
		Object[][] ekk0021a010IN = {
				{EKK0021A010CBSMsg.TEMPLATEID,				"EKK0021A010"},
				{EKK0021A010CBSMsg.FUNC_CODE,				JPCModelConstant.FUNC_CD_2},
				{EKK0021A010CBSMsg.KEY_MSKM_DTL_NO,			localWorkMap.get(LOCAL_MAP_MSKM_DTL_NO)},
			};

		// サービスインターフェイスの実行
		CAANMsg ekk0021a010cbsMsg = callSC(handle, _scCall, param, ccMsg, ekk0021a010IN);
		CAANMsg[] ekk0021a010cbsMsg1list = ekk0021a010cbsMsg.getCAANMsgList(EKK0021A010CBSMsg.EKK0021A010CBSMSG1LIST);

		localWorkMap.put(LOCAL_MAP_EKK0021A010_RESULT_KEY, ekk0021a010cbsMsg1list);
		
		// 更新年月日時分秒を保存
		String mskm_upd_dtm = ekk0021a010cbsMsg1list[0].getString(EKK0021A010CBSMsg1List.LAST_UPD_DTM);
		localWorkMap.put(LOCAL_MAP_MSKM_UPD_DTM, mskm_upd_dtm);
		
		// 申込番号を保存
		String mskm_no = ekk0021a010cbsMsg1list[0].getString(EKK0021A010CBSMsg1List.MSKM_NO);
		localWorkMap.put(LOCAL_MAP_MSKM_NO, mskm_no);
		
		//----------------------------------------------------------------//
		// 申込一意照会
		//----------------------------------------------------------------//
		Object[][] ekk0011A010In = {
				{EKK0011A010CBSMsg.TEMPLATEID,    "EKK0011A010"},
				{EKK0011A010CBSMsg.FUNC_CODE,     "2"},
				{EKK0011A010CBSMsg.KEY_MSKM_NO,   localWorkMap.get(LOCAL_MAP_MSKM_NO)},
			};
		CAANMsg[] ekk0011A010Out = callSC(handle, _scCall, param, ccMsg, ekk0011A010In).getCAANMsgList(EKK0011A010CBSMsg.EKK0011A010CBSMSG1LIST);

		localWorkMap.put(LOCAL_MAP_EKK0011A010_RESULT_KEY, ekk0011A010Out);
	}
	
	/**
	 * 申込内容変更
	 * @param ccMsg
	 * @param localWorkMap
	 * @param handle
	 * @param param
	 * @throws Exception
	 */
	private void chgMskm(
			HashMap<String, Object> ccMsg,
			Map<String, Object> localWorkMap,
			SessionHandle handle,
			IRequestParameterReadWrite param
		) throws Exception
	{
		CAANMsg[] ekk0011A010Out = (CAANMsg[])localWorkMap.get(LOCAL_MAP_EKK0011A010_RESULT_KEY);

		//----------------------------------------------------------------//
		// 申込内容変更
		//----------------------------------------------------------------//
		Object[][] ekk0011C020In = {
				{EKK0011C020CBSMsg.TEMPLATEID,               "EKK0011C020"},
				{EKK0011C020CBSMsg.FUNC_CODE,                ccMsg.get(HKTG_KEY_FUNC_CODE)},
				{EKK0011C020CBSMsg.MSKM_NO,                  ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.MSKM_NO)},
				{EKK0011C020CBSMsg.KOJI_REQ_INFO_RRK_JIKO,   ccMsg.get(HKTG_KEY_KOJIAK_BIKO)},
				{EKK0011C020CBSMsg.UPD_DTM_BF,               ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.UPD_DTM)},
				{EKK0011C020CBSMsg.MSKM_YMD,                 ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.MSKM_YMD)},
				{EKK0011C020CBSMsg.MSKM_UK_DTM,              ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.MSKM_UK_DTM)},
				{EKK0011C020CBSMsg.MSKM_SBT_CD,              ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.MSKM_SBT_CD)},
				{EKK0011C020CBSMsg.MSKMSHO_ARIV_YMD,         ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.MSKMSHO_ARIV_YMD)},
				{EKK0011C020CBSMsg.MSKM_UK_TNT_USER_ID,      ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.MSKM_UK_TNT_USER_ID)},
				{EKK0011C020CBSMsg.TTL_BUSINESS_MSKM_OPT_CD, ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.TTL_BUSINESS_MSKM_OPT_CD)},
				{EKK0011C020CBSMsg.MSKM_RRKS_TELNO,          ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.MSKM_RRKS_TELNO)},
				{EKK0011C020CBSMsg.MSKM_JSSIS_SBT_CD,        ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.MSKM_JSSIS_SBT_CD)},
				{EKK0011C020CBSMsg.CUST_YOBO_JIKO,           ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.CUST_YOBO_JIKO)},
				{EKK0011C020CBSMsg.TEL_RRK_KIBOD_SBT_CD,     ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.TEL_RRK_KIBOD_SBT_CD)},
				{EKK0011C020CBSMsg.TEL_RRK_KIBO_TIME_CD, ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.TEL_RRK_KIBO_TIME_CD)},
				{EKK0011C020CBSMsg.TAKCHO_KIBOD_SBT_CD,  ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.TAKCHO_KIBOD_SBT_CD)},
				{EKK0011C020CBSMsg.TAKCHO_KIBO_TIME_CD,  ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.TAKCHO_KIBO_TIME_CD)},
				{EKK0011C020CBSMsg.REFERER,              ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.REFERER)},
				{EKK0011C020CBSMsg.SHOSA_BF_RRK_JIKO_YH, ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.SHOSA_BF_RRK_JIKO_YH)},
				{EKK0011C020CBSMsg.SHOSA_BF_RRK_JIKO,    ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.SHOSA_BF_RRK_JIKO)},
				{EKK0011C020CBSMsg.USE_SVC_KEIZK_SBT_CD, ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.USE_SVC_KEIZK_SBT_CD)},
				{EKK0011C020CBSMsg.UK_TNTSHA_SKBT_CD,    ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.UK_TNTSHA_SKBT_CD)},
// ANK-3910-00-00対応 20210117 星野 ADD START
				{EKK0011C020CBSMsg.TEGAK_SVC_MSKM_KIKI,    ekk0011A010Out[0].getString(EKK0011A010CBSMsg1List.TEGAK_SVC_MSKM_KIKI)}
// ANK-3910-00-00対応 20210117 星野 ADD END
			};
		CAANMsg ekk0011C020out = callSC(handle, _scCall, param, ccMsg, ekk0011C020In);
		localWorkMap.put(LOCAL_MAP_MSKM_UPD_DTM, ekk0011C020out.getString(EKK0011C020CBSMsg.UPD_DTM));
	}
	
	/**
	 * 申込明細情報変更
	 * @param ccMsg
	 * @param localWorkMap
	 * @param handle
	 * @param param
	 * @throws Exception
	 */
	private void chgMskmMeisai(
			HashMap<String, Object> ccMsg,
			Map<String, Object> localWorkMap,
			SessionHandle handle,
			IRequestParameterReadWrite param
		) throws Exception
	{

		String mskm_dtl_no = (String)localWorkMap.get(LOCAL_MAP_MSKM_DTL_NO);
		String updDtm      = (String)localWorkMap.get(LOCAL_MAP_MSKM_UPD_DTM);
		CAANMsg[] ekk0021A010Out = (CAANMsg[])localWorkMap.get(LOCAL_MAP_EKK0021A010_RESULT_KEY);
		
		//----------------------------------------------------------------//
		// 申込明細情報変更
		//----------------------------------------------------------------//
		Object[][] ekk0021c040IN = {
				{EKK0021C040CBSMsg.TEMPLATEID,				"EKK0021C040"},
				{EKK0021C040CBSMsg.FUNC_CODE,				ccMsg.get(HKTG_KEY_FUNC_CODE)},
				{EKK0021C040CBSMsg.MSKM_DTL_NO,				mskm_dtl_no},
				{EKK0021C040CBSMsg.KOJI_APO_RRKS_SHITEI_CD,	ccMsg.get(HKTG_KEY_KOJI_APO_RRKS_SHITEI_CD)},
				{EKK0021C040CBSMsg.KOJI_APO_RRKS_TELNO,		ccMsg.get(HKTG_KEY_KOJI_APO_RRKS_TELNO)},
				{EKK0021C040CBSMsg.MSKMSHO_NO,				(String)ccMsg.get(HKTG_KEY_MSKMSHO_NO)},
				{EKK0021C040CBSMsg.NEWCONST_BUKKEN_CD,		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.NEWCONST_BUKKEN_CD)},
				{EKK0021C040CBSMsg.HUKKAT_ANKEN_FLG,		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.HUKKAT_ANKEN_FLG)},
				{EKK0021C040CBSMsg.SAME_EQUIP_RE_MSKM_CD,	ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.SAME_EQUIP_RE_MSKM_CD)},
//				{EKK0021C040CBSMsg.MSKMSHO_DTL_NO,			ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.MSKM_DTL_NO)},
				{EKK0021C040CBSMsg.UPD_DTM_BF,  			updDtm},
				{EKK0021C040CBSMsg.MSKM_YMD,				ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.MSKM_YMD)},
				{EKK0021C040CBSMsg.MSKM_FORM_CD, 			ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.MSKM_FORM_CD)},
				{EKK0021C040CBSMsg.MSKM_DTL_SBT_CD, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.MSKM_DTL_SBT_CD)},
				{EKK0021C040CBSMsg.RRKS_KTAI_TELNO, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.RRKS_KTAI_TELNO)},
				{EKK0021C040CBSMsg.RRKS_OFFC_NM, 			ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.RRKS_OFFC_NM)},
				{EKK0021C040CBSMsg.DT_RRKS_TELNO, 			ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.DT_RRKS_TELNO)},
				{EKK0021C040CBSMsg.NEW_MSKM_SBT_CD, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.NEW_MSKM_SBT_CD)},
				{EKK0021C040CBSMsg.MSKM_OPTNTY_CD,			ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.MSKM_OPTNTY_CD)},
				{EKK0021C040CBSMsg.TAKCHO_KIBO_APO_KIGEN_YMD, ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.TAKCHO_KIBO_APO_KIGEN_YMD)},
				{EKK0021C040CBSMsg.RRK_JIKO_ADD_DTM, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.RRK_JIKO_ADD_DTM)},
				{EKK0021C040CBSMsg.MSKM_RRKS_MLAD, 			ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.MSKM_RRKS_MLAD)},
				{EKK0021C040CBSMsg.KOJI_PRG_TCHI_MLAD, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.KOJI_PRG_TCHI_MLAD)},
				{EKK0021C040CBSMsg.RRK_JIKO, 				ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.RRK_JIKO)},
				{EKK0021C040CBSMsg.RCNT_SHOKAI_YMD, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.RCNT_SHOKAI_YMD)},
				{EKK0021C040CBSMsg.WEB_SHOKAI_CNT, 			ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.WEB_SHOKAI_CNT)},
				{EKK0021C040CBSMsg.PC_SHOKAI_CNT, 			ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.PC_SHOKAI_CNT)},
				{EKK0021C040CBSMsg.KTAI_SHOKAI_CNT, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.KTAI_SHOKAI_CNT)},
				{EKK0021C040CBSMsg.KJSC_TCH_KTAI_MLAD, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.KJSC_TCH_KTAI_MLAD)},
				{EKK0021C040CBSMsg.KJSC_TCH_PC_MLAD_CHG_YMD, ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.KJSC_TCH_PC_MLAD_CHG_YMD)},
				{EKK0021C040CBSMsg.KJSC_TCH_KTAI_MLAD_CHG_YMD, ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.KJSC_TCH_KTAI_MLAD_CHG_YMD)},
				{EKK0021C040CBSMsg.ML_SEND_JGI_FLG, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.ML_SEND_JGI_FLG)},
				{EKK0021C040CBSMsg.ML_SEND_JGI_RSN_MEMO, 	ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.ML_SEND_JGI_RSN_MEMO)},
				{EKK0021C040CBSMsg.BMP_MSKM_RRKS_TLN, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.BMP_MSKM_RRKS_TLN)},
				{EKK0021C040CBSMsg.OP_SVC_HKTGI_UM, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.OP_SVC_HKTGI_UM)},
				{EKK0021C040CBSMsg.DSL_ATICLE_SOHU_KIBO_UM, ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.DSL_ATICLE_SOHU_KIBO_UM)},
				{EKK0021C040CBSMsg.HNIN_CFM_ATICLE_SBT_CD, 	ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.HNIN_CFM_ATICLE_SBT_CD)},
				{EKK0021C040CBSMsg.KEI_HUKA_CD, 			ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.KEI_HUKA_CD)},
				{EKK0021C040CBSMsg.MAP_TEMP_UM, 			ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.MAP_TEMP_UM)},
				{EKK0021C040CBSMsg.KCN_STB_MSKM_CNT, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.KCN_STB_MSKM_CNT)},
				{EKK0021C040CBSMsg.KCN_STB_KIND_CD, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.KCN_STB_KIND_CD)},
				{EKK0021C040CBSMsg.MANSSBSYS_RNKI_YO_KIJIRAN, ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.MANSSBSYS_RNKI_YO_KIJIRAN)},
				{EKK0021C040CBSMsg.MANSION_ID, 				ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.MANSION_ID)},
				{EKK0021C040CBSMsg.CATID, 					ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.CATID)},
				{EKK0021C040CBSMsg.MKM_UK_SBT_CD, 			ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.MKM_UK_SBT_CD)},
				{EKK0021C040CBSMsg.MSKMSHO_TRAT_IF_TNTSHA_NM, ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.MSKMSHO_TRAT_IF_TNTSHA_NM)},
				{EKK0021C040CBSMsg.MSKMSHO_TRAT_IF_TELNO, 	ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.MSKMSHO_TRAT_IF_TELNO)},
				{EKK0021C040CBSMsg.HNIN_CFM_ATICLE_NM, 		ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.HNIN_CFM_ATICLE_NM)},
				{EKK0021C040CBSMsg.RRK_WAY_HOKI, 			ekk0021A010Out[0].getString(EKK0021A010CBSMsg1List.RRK_WAY_HOKI)},
			};

		// サービスインターフェイスの実行
		callSC(handle, _scCall, param, ccMsg, ekk0021c040IN);
	}
	
	/**
	 * 進捗を登録する
	 * @param ccMsg
	 * @param localWorkMap
	 * @param prgStat
	 * @param prg_tkjk_1
	 * @param handle
	 * @param param
	 * @throws Exception
	 */
	private void addPrg(
						HashMap<String, Object> ccMsg,
						Map<String, Object> localWorkMap,
						String prgStat,
						String prg_tkjk_1,
						SessionHandle handle,
						IRequestParameterReadWrite param
		) throws Exception
	{
		//異動理由明細
		ArrayList<HashMap<String, Object>> list = (ArrayList)ccMsg.get(HKTG_KEY_IDO_RSN_CD_LIST);
		
		String idoRsnMemo = (String)ccMsg.get(HKTG_KEY_IDO_RSN_MEMO);
		
		CAANMsg[] idoList = new CAANMsg[list.size()];
		for (int i=0; i < idoList.length; i++) {
			HashMap<String, Object> childMap = list.get(i);
			idoList[i] = new CAANMsg(EKK1091D010CBSMsg1List.class.getName());
			// 異動理由コード
			idoList[i].set(EKK1091D010CBSMsg1List.IDO_RSN_CD, (String)childMap.get(HKTG_KEY_IDO_RSN_CD));
			// 異動理由メモ
			idoList[i].set(EKK1091D010CBSMsg1List.IDO_RSN_MEMO, idoRsnMemo);
		}

		String opdtm = (String)localWorkMap.get(LOCAL_MAP_OPEDTM);
		
		Object[][] ekk1091d010IN = {
				{EKK1091D010CBSMsg.TEMPLATEID,				"EKK1091D010"},
				{EKK1091D010CBSMsg.FUNC_CODE,				ccMsg.get(HKTG_KEY_FUNC_CODE)},
				{EKK1091D010CBSMsg.MSKM_DTL_NO,				localWorkMap.get(LOCAL_MAP_MSKM_DTL_NO)},
				{EKK1091D010CBSMsg.SVC_KEI_NO,				ccMsg.get(HKTG_KEY_SVC_KEI_NO)},
				{EKK1091D010CBSMsg.IDO_DIV,					ccMsg.get(HKTG_KEY_IDO_DIV)},
				{EKK1091D010CBSMsg.IDO_DTM,					opdtm},
				{EKK1091D010CBSMsg.PRG_STAT,				prgStat},
				{EKK1091D010CBSMsg.PRG_TKJK_1,				prg_tkjk_1},
				{EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST,	idoList},
			};
			
		// サービスインターフェイスの実行
		callSC(handle, _scCall, param, ccMsg, ekk1091d010IN);
	}

	/**
	 * 工事案件ＣＣを実行します
	 * @param ccMsg
	 * @param localWorkMap
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @throws RequestParameterException
	 * @throws Exception
	 */
	private void execKojiAnkenCC(
						HashMap<String, Object> ccMsg,
						Map<String, Object> localWorkMap,
						SessionHandle handle,
						IRequestParameterReadWrite param,
						String fixedText
		) throws RequestParameterException, Exception
	{
		String kojiAnkenCCMapKey = fixedText + "_JKKKojiAnkenCC";
		Map<String, Object> parentMap = new HashMap<String, Object>();
		param.setData(kojiAnkenCCMapKey, parentMap);
		
		String kojiAnknNo = (String)ccMsg.get(HKTG_KEY_KOJIAK_NO);
		if (kojiAnknNo == null || "".equals(kojiAnknNo))
		{
			//********************//
			//*** ＧＧ乗換実行 ***//
			//********************//
			// 機能コード
			parentMap.put("func_code", 		ccMsg.get(HKTG_KEY_FUNC_CODE));
			// 工事受付コード
			parentMap.put("koji_uk_cd", 	"007");	// 007：回線変える
			// 工事受付詳細コード
			parentMap.put("koji_uk_dtl_cd", "D0");	// D0：GG乗換(個別)
			
			// SYSID
			parentMap.put("sysid", ccMsg.get(HKTG_KEY_SYSID));
			// 申込番号
			parentMap.put("mskm_no", localWorkMap.get(LOCAL_MAP_MSKM_NO));
			// 申込明細番号
			parentMap.put("mskm_dtl_no", localWorkMap.get(LOCAL_MAP_MSKM_DTL_NO));
			// サービス契約番号
			parentMap.put("svc_kei_no", ccMsg.get(HKTG_KEY_SVC_KEI_NO));
		}
		else {
			

			// ***** EKU0011A010（工事案件一意照会）*****
			Object[][] eku0011a010IN = {
				{EKU0011A010CBSMsg.TEMPLATEID,          "EKU0011A010"},
				{EKU0011A010CBSMsg.FUNC_CODE,           JPCModelConstant.FUNC_CD_1},
				{EKU0011A010CBSMsg.KEY_KOJIAK_NO,       kojiAnknNo},
			};
			// サービスインターフェイスの実行
			CAANMsg[] eku0011a010cbsMsg = callSC(handle, _scCall, param, ccMsg, eku0011a010IN).getCAANMsgList(EKU0011A010CBSMsg.EKU0011A010CBSMSG1LIST);
			
			if (!getKojiAnkenUpdExecFlg(eku0011a010cbsMsg[0], ccMsg, localWorkMap))
			{
				return;
			}
			
			//********************//
			//*** 工事情報更新 ***//
			//********************//
			// 機能コード
			parentMap.put("func_code", 		ccMsg.get(HKTG_KEY_FUNC_CODE));
			// 工事受付コード
			parentMap.put("koji_uk_cd", 	"070");	// 070：内容変更
			// 工事受付詳細コード
			parentMap.put("koji_uk_dtl_cd", "A5");	// A5：工事情報変える
			// 工事案件番号
			parentMap.put("kojiak_no", 		ccMsg.get(HKTG_KEY_KOJIAK_NO));

			// SYSID
			parentMap.put("sysid", ccMsg.get(HKTG_KEY_SYSID));
			// 申込番号
			parentMap.put("mskm_no", localWorkMap.get(LOCAL_MAP_MSKM_NO));
			// 申込明細番号
			parentMap.put("mskm_dtl_no", localWorkMap.get(LOCAL_MAP_MSKM_DTL_NO));
			// サービス契約番号
			parentMap.put("svc_kei_no", ccMsg.get(HKTG_KEY_SVC_KEI_NO));
		}

		//********************//
		//*** 画面入力項目 ***//
		//********************//
		// 申込者名
		parentMap.put("mskmsha_nm", ccMsg.get(HKTG_KEY_MSKMSHA_NM));
		// 工事範囲コード
		parentMap.put("koji_scope_cd", "");		// NULL固定
		// 工事希望年月日
		parentMap.put("koji_kibo_ymd", ccMsg.get(HKTG_KEY_KOJI_KIBO_YMD));
		// 電話連絡希望時間帯コード
		parentMap.put("tel_rrk_kibo_time_cd", ccMsg.get(HKTG_KEY_TEL_RRK_KIBO_TIME_CD));
		// 宅内工事希望アポ期限年月日
		parentMap.put("tnkj_kibo_apo_kigen_ymd", ccMsg.get(HKTG_KEY_TNKJ_KIBO_APO_KIGEN_YMD));
		// 工事アポ連絡先指定コード
		parentMap.put("koji_apo_rrks_shitei_cd", ccMsg.get(HKTG_KEY_KOJI_APO_RRKS_SHITEI_CD));
		// 工事アポ連絡先電話番号
		parentMap.put("koji_apo_rrks_telno", ccMsg.get(HKTG_KEY_KOJI_APO_RRKS_TELNO));
		// 工事案件備考
		parentMap.put("kojiak_biko", ccMsg.get(HKTG_KEY_KOJIAK_BIKO));
		// 工事案件備考1
		parentMap.put("kojiak_biko_1", ccMsg.get(HKTG_KEY_KOJIAK_BIKO_1));
		// 工事案件備考2
		parentMap.put("kojiak_biko_2", ccMsg.get(HKTG_KEY_KOJIAK_BIKO_2));
		// 異動区分
		parentMap.put("ido_div", ccMsg.get(HKTG_KEY_IDO_DIV));
		
		JKKKojiAnkenCC kojiAnkenCC = new JKKKojiAnkenCC();
		kojiAnkenCC.executeKojiAnken(handle, param, kojiAnkenCCMapKey);
		
		parentMap = (Map<String, Object>)param.getData(kojiAnkenCCMapKey);
		localWorkMap.put(LOCAL_MAP_KOJIAK_NO, parentMap.get("new_kojiak_no"));
		param.removeData(kojiAnkenCCMapKey);
	}
	
	/**
	 * 工事案件情報に更新があった場合に、工事案件ＣＣを実行するようフラグを返す
	 * @param bfKojiInfo
	 * @param ccMsg
	 * @param localWorkMap
	 * @return
	 */
	private boolean getKojiAnkenUpdExecFlg(
							CAANMsg bfKojiInfo,
							HashMap<String, Object> ccMsg,
							Map<String, Object> localWorkMap
		)
	{
		String[] mapKeys = {
				"koji_kibo_ymd",
				"kojiak_biko",
				"kojiak_biko_1",
				"kojiak_biko_2",
				"mskmsha_nm",
				"tnkj_kibo_apo_kigen_ymd",
				"tel_rrk_kibo_time_cd",
				"koji_apo_rrks_shitei_cd",
				"koji_apo_rrks_telno",
		};
		
		//***************************//
		//* 工事案件情報（更新前）  *//
		//***************************//
		int i=0;
		Map<String, String> bfkojiInfo = new HashMap();
		// 工事希望年月日
		bfkojiInfo.put(mapKeys[i++], bfKojiInfo.getString(EKU0011A010CBSMsg1List.KOJI_KIBO_YMD));
		// 連絡事項
		bfkojiInfo.put(mapKeys[i++], bfKojiInfo.getString(EKU0011A010CBSMsg1List.KOJIAK_RRK_JIKO));
		// 工事案件備考１
		bfkojiInfo.put(mapKeys[i++], bfKojiInfo.getString(EKU0011A010CBSMsg1List.KOJIAK_BIKO_1));
		// 工事案件備考２
		bfkojiInfo.put(mapKeys[i++], bfKojiInfo.getString(EKU0011A010CBSMsg1List.KOJIAK_BIKO_2));
		// 申込者
		bfkojiInfo.put(mapKeys[i++], bfKojiInfo.getString(EKU0011A010CBSMsg1List.MSKMSHA_NM));
		// 工事アポ予定完了期日
		bfkojiInfo.put(mapKeys[i++], bfKojiInfo.getString(EKU0011A010CBSMsg1List.TNKJ_KIBO_APO_KIGEN_YMD));
		// 電話連絡希望時間帯コード
		bfkojiInfo.put(mapKeys[i++], bfKojiInfo.getString(EKU0011A010CBSMsg1List.TEL_RRK_KIBO_TIME_CD));
		// アポ希望連絡先
		bfkojiInfo.put(mapKeys[i++], bfKojiInfo.getString(EKU0011A010CBSMsg1List.KOJI_APO_RRKS_SHITEI_CD));
		// アポ希望連絡先番号
		bfkojiInfo.put(mapKeys[i++], bfKojiInfo.getString(EKU0011A010CBSMsg1List.KOJI_APO_RRKS_TELNO));
		
		//***************************//
		//* 工事案件情報（画面入力）*//
		//***************************//
		i = 0;
		Map<String, String> afkojiInfo = new HashMap();
		// 工事希望年月日
		afkojiInfo.put(mapKeys[i++], (String)ccMsg.get(HKTG_KEY_KOJI_KIBO_YMD));
		// 工事案件備考 ← 連絡事項
		afkojiInfo.put(mapKeys[i++], (String)ccMsg.get(HKTG_KEY_KOJIAK_BIKO));
		// 工事案件備考１
		afkojiInfo.put(mapKeys[i++], (String)ccMsg.get(HKTG_KEY_KOJIAK_BIKO_1));
		// 工事案件備考２
		afkojiInfo.put(mapKeys[i++], (String)ccMsg.get(HKTG_KEY_KOJIAK_BIKO_2));
		// 申込者
		afkojiInfo.put(mapKeys[i++], (String)ccMsg.get(HKTG_KEY_MSKMSHA_NM));
		// 工事アポ予定完了期日
		afkojiInfo.put(mapKeys[i++], (String)ccMsg.get(HKTG_KEY_TNKJ_KIBO_APO_KIGEN_YMD));
		// 工事アポ希望時間
		afkojiInfo.put(mapKeys[i++], (String)ccMsg.get(HKTG_KEY_TEL_RRK_KIBO_TIME_CD));
		// アポ希望連絡先
		afkojiInfo.put(mapKeys[i++], (String)ccMsg.get(HKTG_KEY_KOJI_APO_RRKS_SHITEI_CD));
		// アポ希望連絡先番号
		afkojiInfo.put(mapKeys[i++], (String)ccMsg.get(HKTG_KEY_KOJI_APO_RRKS_TELNO));
		
		boolean kojiExecFlg = false;
		// 更新前と画面の値を比較 ⇒ 異なるものがあれば工事案件情報更新
		for (i=0; i < mapKeys.length; i++)
		{
			String key = mapKeys[i];
			String bf = bfkojiInfo.get(key);
			String af = afkojiInfo.get(key);
			if (bf == null) bf = "";
			if (af == null) af = "";
			if (!bf.equals(af)) {
				kojiExecFlg = true;
			}
		}
		
		return kojiExecFlg;
	}
	
	
	/**
	 * 機器交換に伴う処理を行うか判定
	 * @param ccMsg
	 * @param localWorkMap
	 * @return
	 */
	private boolean isVdslKikiInfoChanged(
				HashMap<String, Object> ccMsg,
				Map<String, Object> localWorkMap
		)
	{
		// IT1-2014-0000285 ＶＤＳＬ機器がない場合にエラー 2014/08/13 藤田 ADD START
		// ＶＤＳＬ機器が紐づいていない場合は機器提供サービス契約番号が無い
		String kktkSvcKeiNo = (String)ccMsg.get(HKTG_KEY_KKTK_SVC_KEI_NO);
		if (kktkSvcKeiNo == null || "".equals(kktkSvcKeiNo)) {
			// 機器交換系の処理を行わない
			return false;
		}
		// IT1-2014-0000285 ＶＤＳＬ機器がない場合にエラー 2014/08/13 藤田 ADD END
		
		CAANMsg ekk0341a010RsvcbsMsg = (CAANMsg)localWorkMap.get(LOCAL_MAP_EKK0341A010_RSVKIKI_RESULTKEY);
		boolean vdslKiKiUpdExecFlg = true;
		if (ekk0341a010RsvcbsMsg != null)
		{
			String rsvTaknkikiModelCd = ekk0341a010RsvcbsMsg.getString(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD);
			String rsvKktkSbtCd = ekk0341a010RsvcbsMsg.getString(EKK0341A010CBSMsg1List.KKTK_SBT_CD);
			String rsvKikiHukaInfoCd = ekk0341a010RsvcbsMsg.getString(EKK0341A010CBSMsg1List.KIKI_HUKA_INFO_CD);
			
			rsvTaknkikiModelCd = rsvTaknkikiModelCd==null?"":rsvTaknkikiModelCd;
			rsvKktkSbtCd       = rsvKktkSbtCd==null?      "":rsvKktkSbtCd;
			rsvKikiHukaInfoCd  = rsvKikiHukaInfoCd==null? "":rsvKikiHukaInfoCd;

			// 予約がキャンセル済の場合は、判定用の型式コード、提供種別、付加情報を空白にする
			String rsvClYmd = ekk0341a010RsvcbsMsg.getString(EKK0341A010CBSMsg1List.RSV_CL_YMD);
			if (rsvClYmd != null && !"".equals(rsvClYmd))
			{
				rsvTaknkikiModelCd = "";
				rsvKktkSbtCd = "";
				rsvKikiHukaInfoCd = "";
			}
			
			if (rsvTaknkikiModelCd.equals((String)ccMsg.get(HKTG_KEY_TAKNKIKI_MODEL_CD))
			 && rsvKktkSbtCd.equals((String)ccMsg.get(HKTG_KEY_TK_SBT_CD))
			 && rsvKikiHukaInfoCd.equals((String)ccMsg.get(HKTG_KEY_HUKA_INFO_CD)))
			{
				// 変更がなければ機器交換系の処理を行わない
				vdslKiKiUpdExecFlg = false;
			}
		}
		return vdslKiKiUpdExecFlg;
	}
	
	/**
	 * 機器提供サービス契約料金コース変更中止を実行する。
	 * @param ccMsg
	 * @param localWorkMap
	 * @param handle
	 * @param param
	 * @throws Exception
	 */
	private void reserveKikiCancel(
							HashMap<String, Object> ccMsg,
							Map<String, Object> localWorkMap,
							SessionHandle handle,
							IRequestParameterReadWrite param
		) throws Exception 
	{
		CAANMsg ekk0341a010RsvcbsMsg = (CAANMsg)localWorkMap.get(LOCAL_MAP_EKK0341A010_RSVKIKI_RESULTKEY);
		if (ekk0341a010RsvcbsMsg != null)
		{
			String kktkSvcKeiNo = ekk0341a010RsvcbsMsg.getString("kktk_svc_kei_no");
			String rsvGeneAddDtm = ekk0341a010RsvcbsMsg.getString("gene_add_dtm");
		
			// 更新年月日時分秒を取得
			String updDtm = (String)localWorkMap.get(LOCAL_MAP_SVC_KEI_UPD_DTM);

			// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD START
			String oyaKeiSkbtCd = ekk0341a010RsvcbsMsg.getString("oya_kei_skbt_cd");
			// 親契約識別コードが"サービス契約回線内訳"である場合に、同一回線最新＿更新年月日時分秒をセット
			if (CD_DIV_OYAKEISKBTCD_KAISEN.equals(oyaKeiSkbtCd)) {
				updDtm = (String)localWorkMap.get(LOCAL_MAP_KAISEN_UPD_DTM);
			}
			// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD END
			
			// ***** EKK0341C170（機器提供サービス契約料金コース変更中止）*****
			Object[][] ekk0341c170IN = {
				{EKK0341C170CBSMsg.TEMPLATEID,          "EKK0341C170"},
				{EKK0341C170CBSMsg.FUNC_CODE,           ccMsg.get(HKTG_KEY_FUNC_CODE)},
				{EKK0341C170CBSMsg.KKTK_SVC_KEI_NO,     kktkSvcKeiNo},
				{EKK0341C170CBSMsg.GENE_ADD_DTM,        rsvGeneAddDtm},
				{EKK0341C170CBSMsg.UPD_DTM_BF,          updDtm},
			};
			// サービスインターフェイスの実行
			CAANMsg ekk0341c170cbsMsg = callSC(handle, _scCall, param, ccMsg, ekk0341c170IN);
			
			// 更新年月日時分秒を更新
			updDtm = ekk0341c170cbsMsg.getString(EKK0341C170CBSMsg.UPD_DTM);
			localWorkMap.put(LOCAL_MAP_SVC_KEI_UPD_DTM, updDtm);
			// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD START
			localWorkMap.put(LOCAL_MAP_KAISEN_UPD_DTM, updDtm);
			// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD END
			
			// ***** EKK0341C540（機器提供サービス契約機器変更手続中止）*****
			Object[][] ekk0341c540IN = {
				{EKK0341C540CBSMsg.TEMPLATEID,          "EKK0341C540"},
				{EKK0341C540CBSMsg.FUNC_CODE,           ccMsg.get(HKTG_KEY_FUNC_CODE)},
				{EKK0341C540CBSMsg.KKTK_SVC_KEI_NO,     kktkSvcKeiNo},
				{EKK0341C540CBSMsg.GENE_ADD_DTM,        rsvGeneAddDtm},
				{EKK0341C540CBSMsg.RSV_CL_YMD,          localWorkMap.get(LOCAL_MAP_OPEDATE)},
				// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 MOD START
				//{EKK0341C540CBSMsg.RSV_APLY_CD,         "2"},
				{EKK0341C540CBSMsg.RSV_APLY_CD,         "3"},
				// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 MOD END
				{EKK0341C540CBSMsg.UPD_DTM_BF,          updDtm},
			};
			// サービスインターフェイスの実行
			CAANMsg ekk0341c540cbsMsg = callSC(handle, _scCall, param, ccMsg, ekk0341c540IN);
			
			// 更新年月日時分秒を更新
			updDtm = ekk0341c540cbsMsg.getString(EKK0341C540CBSMsg.UPD_DTM);
			localWorkMap.put(LOCAL_MAP_SVC_KEI_UPD_DTM, updDtm);
			// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD START
			localWorkMap.put(LOCAL_MAP_KAISEN_UPD_DTM, updDtm);
			// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD END
		}
	}

	/**
	 * 返品取消処理を実行する。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param dataMap
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void henpinCancel(
							HashMap<String, Object> ccMsg,
							Map<String, Object> localWorkMap,
							SessionHandle handle,
							IRequestParameterReadWrite param
		)  throws Exception 
	{
		CAANMsg[] ekk0341a010cbsMsg1list = (CAANMsg[])localWorkMap.get(LOCAL_MAP_EKK0341A010_RESULTKEY);
		CAANMsg kk0341cur = ekk0341a010cbsMsg1list[0];

		// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD START
		String kikiChgNo = "";
		CAANMsg ekk0341a010RSVMsg = (CAANMsg)localWorkMap.get(LOCAL_MAP_EKK0341A010_RSVKIKI_RESULTKEY);
		if (ekk0341a010RSVMsg != null)
		{
			// 機器変更予約がある場合にカレントの機器変更番号をセットし、返品取消対象とすることで
			// 機器の解約予約を作成されてからのＧＧ乗換登録に対応
			kikiChgNo = getNullToStr(kk0341cur.getString(EKK0341A010CBSMsg1List.KIKI_CHG_NO));
		}
		// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD END
		
		// ***** EDK0301B070（返品機器一覧照会）*****
		Object[][] inParam = {
			{EDK0301B070CBSMsg.TEMPLATEID,            "EDK0301B070"},
			{EDK0301B070CBSMsg.FUNC_CODE,             JPCModelConstant.FUNC_CD_1},
			{EDK0301B070CBSMsg.KEY_TAKNKIKI_MODEL_CD, kk0341cur.getString(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD)},
			{EDK0301B070CBSMsg.KEY_KIKI_SEIZO_NO,     kk0341cur.getString(EKK0341A010CBSMsg1List.KIKI_SEIZO_NO)},
			{EDK0301B070CBSMsg.KEY_KKTK_SVC_KEI_NO,   kk0341cur.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO)}
		};
		CAANMsg[] edk0301b070outList  = callSC(handle, _scCall, param, ccMsg, inParam).getCAANMsgList(EDK0301B070CBSMsg.EDK0301B070CBSMSG1LIST);
		
		for (CAANMsg edk0301b070out : edk0301b070outList)
		{
			// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD START
			// 対象の返品がＧＧ乗換で作成されたものである場合に、返品取消を行う。
			// ***** EDK0301A010（返品機器一意照会）*****
			Object[][] edk0301a010IN = {
				{EDK0301A010CBSMsg.TEMPLATEID,            "EDK0301A010"},
				{EDK0301A010CBSMsg.FUNC_CODE,             JPCModelConstant.FUNC_CD_1},
				{EDK0301A010CBSMsg.KEY_HMPIN_KIKI_NO,     edk0301b070out.getString(EDK0301B070CBSMsg1List.HMPIN_KIKI_NO)},
			};
			CAANMsg[] edk0301a010outList  = callSC(handle, _scCall, param, ccMsg, edk0301a010IN).getCAANMsgList(EDK0301A010CBSMsg.EDK0301A010CBSMSG1LIST);
			String kiki_chg_no = edk0301a010outList[0].getString(EDK0301A010CBSMsg1List.KIKI_CHG_NO);
			if (!kikiChgNo.equals(kiki_chg_no))
			{
				continue;
			}
			// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD END
			
			// 返品機器取消
			Object[][] edk0301c040IN = {
				{EDK0301C040CBSMsg.TEMPLATEID,            "EDK0301C040"},
				{EDK0301C040CBSMsg.FUNC_CODE,             ccMsg.get(HKTG_KEY_FUNC_CODE)},
				{EDK0301C040CBSMsg.KEY_HMPIN_KIKI_NO,     edk0301b070out.getString(EDK0301B070CBSMsg1List.HMPIN_KIKI_NO)},
				{EDK0301C040CBSMsg.LAST_UPD_DTM_BF,       edk0301b070out.getString(EDK0301B070CBSMsg1List.UPD_DTM)}
			};
			
			callSC(handle, _scCall, param, ccMsg, edk0301c040IN);
		}
	}
	
	/**
	 * 機器変更ＣＣを実行します
	 * @param ccMsg
	 * @param localWorkMap
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @throws RequestParameterException
	 * @throws Throwable
	 */
	private void execKikiChgCC(
						HashMap<String, Object> ccMsg,
						Map<String, Object> localWorkMap,
						SessionHandle handle,
						IRequestParameterReadWrite param,
						String fixedText
		) throws RequestParameterException, Throwable
	{

		String kkchgCCMapKey = fixedText + "_JKKKikiChgCC";
		Map<String, Object> parentMap = new HashMap<String, Object>();
		param.setData(kkchgCCMapKey, parentMap);
		
		// 機能コード
		parentMap.put("func_code", 		ccMsg.get(HKTG_KEY_FUNC_CODE));
		// 更新年月日時分秒（サービス契約）
		parentMap.put("upd_dtm", 		localWorkMap.get(LOCAL_MAP_SVC_KEI_UPD_DTM));
		// サービス契約番号
		parentMap.put("key_svc_kei_no", ccMsg.get(HKTG_KEY_SVC_KEI_NO));
		// 異動区分
		parentMap.put("ido_div", 		ccMsg.get(HKTG_KEY_IDO_DIV));
		// 申込明細番号
		Map<Object, Object> workMap = param.getMappingWorkArea();
		workMap.put("mskm_dtl_no", localWorkMap.get(LOCAL_MAP_MSKM_DTL_NO));
		
		// 工事連携データ格納用Mapキー
		parentMap.put("kojifixtext", "mapkey_kojifixtext");
		
		
		CAANMsg[] ekk0341a010cbsMsg1list = (CAANMsg[])localWorkMap.get(LOCAL_MAP_EKK0341A010_RESULTKEY);
		String kktk_svc_ke_no = "";
		String kktk_gene_add_dtm = "";
		if (ekk0341a010cbsMsg1list != null && ekk0341a010cbsMsg1list.length > 0)
		{
			kktk_svc_ke_no = ekk0341a010cbsMsg1list[0].getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO);
			kktk_gene_add_dtm = ekk0341a010cbsMsg1list[0].getString(EKK0341A010CBSMsg1List.GENE_ADD_DTM);
			
			// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD START
			String oyaKeiSkbtCd = ekk0341a010cbsMsg1list[0].getString(EKK0341A010CBSMsg1List.OYA_KEI_SKBT_CD);
			// 親契約識別コードが"サービス契約回線内訳"である場合に、同一回線最新＿更新年月日時分秒をセット
			if (CD_DIV_OYAKEISKBTCD_KAISEN.equals(oyaKeiSkbtCd)) {
				// 更新年月日時分秒（サービス契約）
				parentMap.put("upd_dtm", localWorkMap.get(LOCAL_MAP_KAISEN_UPD_DTM));
			}
			// IT2-2014-0000291 ＧＧ乗換で排他チェックエラー 2014/08/27 藤田 ADD END
		}
		
		
		ArrayList<HashMap<String, Object>> kktkSvcList = new ArrayList<HashMap<String, Object>>();
		parentMap.put("chg_kiki_list", kktkSvcList);
		
		/** 変更前機器情報マップ作成 **/
		HashMap<String, Object> kikiChgMap = new HashMap<String, Object>();
		// 工事案件番号
		kikiChgMap.put("kojiak_no", (String)localWorkMap.get(LOCAL_MAP_KOJIAK_NO));
		// 機器型式コード
		kikiChgMap.put("taknkiki_model_cd", (String)ccMsg.get(HKTG_KEY_TAKNKIKI_MODEL_CD));
		// 提供種別コード
		kikiChgMap.put("kktk_sbt_cd", (String)ccMsg.get(HKTG_KEY_TK_SBT_CD));
		// 販売種別コード
		kikiChgMap.put("hambai_sbt_cd", (String)ccMsg.get(HKTG_KEY_HAMBAI_SBT_CD));
		// 機器提供サービス契約番号
		kikiChgMap.put("kktk_svc_kei_no", kktk_svc_ke_no);
		// 世代登録年月日時分秒（機器提供サービス契約番号）
		kikiChgMap.put("kktk_gene_add_dtm", kktk_gene_add_dtm);
		// 付加情報
		kikiChgMap.put("kiki_huka_info_cd", (String)ccMsg.get(HKTG_KEY_HUKA_INFO_CD));
		// 配送依頼指定年月日
		// ANK-1918-06-00 出荷指図連携タイミングの見直し 2014/10/10 藤田 DEL START
//		kikiChgMap.put("haiso_req_shitei_ymd", HAISO_YOTEI_YMD);
		// ANK-1918-06-00 出荷指図連携タイミングの見直し 2014/10/10 藤田 DEL END
// IT1-2014-0000264 申込明細番号が再度採番される 2014/08/07 藤田 ADD START
		// 配送方法コード
		kikiChgMap.put("haiso_way_cd", "1");	// 1:お客様宅直送
		// 宅内機器異動コード
		kikiChgMap.put("taknkiki_ido_cd", "");	// STBではないので""を設定するが、結果的に機器変更ＣＣの中で"2:交換"がセットされる
		// 機器送料有無
		kikiChgMap.put("kiki_soryo_um", "0");	// 画面に機器送料有無はないので"0"をセット

		// ***** EKK0341B027（機器送付先最新情報一覧照会（SYSID））*****
		Object[][] inParam = {
			{EKK0341B027CBSMsg.TEMPLATEID,            "EKK0341B027"},
			{EKK0341B027CBSMsg.FUNC_CODE,             JPCModelConstant.FUNC_CD_1},
			{EKK0341B027CBSMsg.KEY_SYSID,             ccMsg.get(HKTG_KEY_SYSID)},
		};
		CAANMsg[] ekk0341b027outList  = callSC(handle, _scCall, param, ccMsg, inParam).getCAANMsgList(EKK0341B027CBSMsg.EKK0341B027CBSMSG1LIST);
		
		if (ekk0341b027outList != null && ekk0341b027outList.length > 0)
		{
			// SYSIDに紐づく最新の機器送付先住所をセットする
			CAANMsg kikiMap = ekk0341b027outList[0];
			// 機器送付先住所コード
			kikiChgMap.put("kiki_sohus_ad_cd", kikiMap.getString(EKK0341B027CBSMsg1List.KIKI_SOHUS_AD_CD));
			// 機器送付先郵便番号
			kikiChgMap.put("kiki_sohus_pcd", kikiMap.getString(EKK0341B027CBSMsg1List.KIKI_SOHUS_PCD));
			// 機器送付先都道府県名
			kikiChgMap.put("kiki_sohus_state_nm", kikiMap.getString(EKK0341B027CBSMsg1List.KIKI_SOHUS_STATE_NM));
			// 機器送付先市区町村名
			kikiChgMap.put("kiki_sohus_city_nm", kikiMap.getString(EKK0341B027CBSMsg1List.KIKI_SOHUS_CITY_NM));
			// 機器送付先大字通称名
			kikiChgMap.put("kiki_sohus_oaztsu_nm", kikiMap.getString(EKK0341B027CBSMsg1List.KIKI_SOHUS_OAZTSU_NM));
			// 機器送付先字丁目名
			kikiChgMap.put("kiki_sohus_azcho_nm", kikiMap.getString(EKK0341B027CBSMsg1List.KIKI_SOHUS_AZCHO_NM));
			// 機器送付先番地号
			kikiChgMap.put("kiki_sohus_bnchigo", kikiMap.getString(EKK0341B027CBSMsg1List.KIKI_SOHUS_BNCHIGO));
			// 機器送付先住所補記・建物名
			kikiChgMap.put("kiki_sohus_adrttm", kikiMap.getString(EKK0341B027CBSMsg1List.KIKI_SOHUS_ADRTTM));
			// 機器送付先住所補記・部屋番号
			kikiChgMap.put("kiki_sohus_adrrm", kikiMap.getString(EKK0341B027CBSMsg1List.KIKI_SOHUS_ADRRM));
			// 機器送付先電話番号
			kikiChgMap.put("kiki_sohus_telno", kikiMap.getString(EKK0341B027CBSMsg1List.KIKI_SOHUS_TELNO));
			// 機器送付先名
			kikiChgMap.put("kiki_sohus_nm", kikiMap.getString(EKK0341B027CBSMsg1List.KIKI_SOHUS_NM));
			// 機器送付先カナ名
			kikiChgMap.put("kiki_sohus_kana", kikiMap.getString(EKK0341B027CBSMsg1List.KIKI_SOHUS_KANA));
		}
// IT1-2014-0000264 申込明細番号が再度採番される 2014/08/07 藤田 ADD END
		kktkSvcList.add(kikiChgMap);

		// 機器変更ＣＣを呼び出し
		JKKKikiChgCC kkchgCC = new JKKKikiChgCC();
		kkchgCC.chgKikiInfo(handle, param, kkchgCCMapKey);
		
		// 更新後の機器提供サービス契約を取得
		Map<String, Object> resultMap = (Map<String, Object>)param.getData(kkchgCCMapKey);
		localWorkMap.put(LOCAL_MAP_KIKI_UPD_LIST, resultMap.get("kktk_upd_list"));

		param.removeData(kkchgCCMapKey);
	}

	/**
	 * 配送中止
	 * @param ccMsg
	 * @param localWorkMap
	 * @param handle
	 * @param param
	 * @throws Throwable
	 */
	private void execHaisoCancel(
						HashMap<String, Object> ccMsg,
						Map<String, Object> localWorkMap, 
						SessionHandle handle,
						IRequestParameterReadWrite param
		) throws Throwable
	{
		// サービス契約番号を取得
		String svcKeiNo = (String)ccMsg.get(HKTG_KEY_SVC_KEI_NO);

		// ***** EDK0011B080（配送情報ステータス一覧照会）*****
		Object[][] edk0011b080IN = {
				{EDK0011B080CBSMsg.TEMPLATEID,				"EDK0011B080"},
				{EDK0011B080CBSMsg.FUNC_CODE,				JPCModelConstant.FUNC_CD_1},
				{EDK0011B080CBSMsg.KEY_SVC_KEI_NO,			svcKeiNo},
			};
			
		// サービスインターフェイスの実行
		CAANMsg[] edk0011b080cbsMsg1list 
			= callSC(handle, _scCall, param, ccMsg, edk0011b080IN).getCAANMsgList(EDK0011B080CBSMsg.EDK0011B080CBSMSG1LIST);
		localWorkMap.put(LOCAL_MAP_EDK0011B080_RESULT_KEY, edk0011b080cbsMsg1list);

		// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD START
		String kikiChgNoRsv = "";
		CAANMsg ekk0341a010RSVMsg = (CAANMsg)localWorkMap.get(LOCAL_MAP_EKK0341A010_RSVKIKI_RESULTKEY);
		if (ekk0341a010RSVMsg != null)
		{
			// 機器変更予約の機器変更番号を取得
			kikiChgNoRsv = getNullToStr(ekk0341a010RSVMsg.getString(EKK0341A010CBSMsg1List.KIKI_CHG_NO));
		}
		// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD END
		
		// ＶＤＳＬの機器提供サービス契約番号を取得
		String vdslKktkSvcKeiNo = (String)ccMsg.get(HKTG_KEY_KKTK_SVC_KEI_NO);
		
		for (int i=0; i < edk0011b080cbsMsg1list.length; i++)
		{
			CAANMsg edk0011b080Msg = edk0011b080cbsMsg1list[i];
			
			
			String haisoNo      = edk0011b080Msg.getString(EDK0011B080CBSMsg1List.HAISO_NO);
			String haisoStat    = edk0011b080Msg.getString(EDK0011B080CBSMsg1List.HAISO_STAT);
			String kktkSvcKeiNo = edk0011b080Msg.getString(EDK0011B080CBSMsg1List.KKTK_SVC_KEI_NO);
			
			// 対象のＶＤＳＬの配送ステータスが受付済みの状態ならば
			if ("001".equals(haisoStat) && vdslKktkSvcKeiNo.equals(kktkSvcKeiNo))
			{
				// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD START
				// 対象の配送がＧＧ乗換で作成されたものである場合に、配送中止を行う。
				String haisoTaibpinNo = edk0011b080Msg.getString(EDK0011B080CBSMsg1List.HAISO_TAIBPIN_NO);
				
				// ***** EDK0011B090（契約機器配送対象物品一覧照会）*****
				Object[][] edk0011b090IN = {
					{ EDK0011B090CBSMsg.TEMPLATEID, "EDK0011B090" },
					{ EDK0011B090CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1 },
					{ EDK0011B090CBSMsg.KEY_HAISO_TAIBPIN_NO, haisoTaibpinNo },
				};
				
				boolean isCancelTarget = false;
				CAANMsg[] edk0011b090cbsMsg = callSC(handle, _scCall, param, ccMsg, edk0011b090IN).getCAANMsgList(EDK0011B090CBSMsg.EDK0011B090CBSMSG1LIST);
				for (int j=0; j < edk0011b090cbsMsg.length; j++)
				{
					String kktk_svc_kei_no = edk0011b090cbsMsg[j].getString(EDK0011B090CBSMsg1List.KKTK_SVC_KEI_NO);
					String kiki_chg_no = edk0011b090cbsMsg[j].getString(EDK0011B090CBSMsg1List.KIKI_CHG_NO);
					
					if (vdslKktkSvcKeiNo.equals(kktk_svc_kei_no) && kikiChgNoRsv.equals(kiki_chg_no))
					{
						isCancelTarget = true;
						break;
					}
				}
				
				if (!isCancelTarget)
				{
					continue;
				}
				// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD END
				
				String opeDate = (String)localWorkMap.get(LOCAL_MAP_OPEDATE);
				
				// ***** EDK0011A010（配送一意照会）*****
				Object[][] edk0011a010IN = {
					{ EDK0011A010CBSMsg.TEMPLATEID, "EDK0011A010" },
					{ EDK0011A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1 },
					{ EDK0011A010CBSMsg.KEY_HAISO_NO, haisoNo },
					{ EDK0011A010CBSMsg.KEY_UNYO_YMD, opeDate },
				};
				
				// 配送の更新年月日時分秒を取得
				CAANMsg[] edk0011a010cbsMsg = callSC(handle, _scCall, param, ccMsg, edk0011a010IN).getCAANMsgList(EDK0011A010CBSMsg.EDK0011A010CBSMSG1LIST);
				String updDtmBf = edk0011a010cbsMsg[0].getString(EDK0011A010CBSMsg1List.UPD_DTM);
				
				// ***** EDK0011C090（配送中止）*****
				Object[][] edk0011c090IN = { 
					{ EDK0011C090CBSMsg.TEMPLATEID, "EDK0011C090" }, 
					{ EDK0011C090CBSMsg.FUNC_CODE, (String)ccMsg.get(HKTG_KEY_FUNC_CODE)},
					{ EDK0011C090CBSMsg.HAISO_NO, haisoNo}, 
					{ EDK0011C090CBSMsg.UPD_DTM_BF, updDtmBf }
				};
				
				callSC(handle, _scCall, param, ccMsg, edk0011c090IN);
			}
		}
	}
	
	/**
	 * 配送受付処理実行
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param bunkatsuHisoMap
	 * @return boolean
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execHaisoUketsuke(
						HashMap<String, Object> ccMsg,
						Map<String, Object> localWorkMap, 
						SessionHandle handle,
						IRequestParameterReadWrite param
		) throws Throwable
	{
		// 配送に設定するデータを取得
		HashMap<String, Object> haisoMap = getHaisoKikiMap(ccMsg, localWorkMap, handle, param);
		
		// 配送対象物品明細データ
		ArrayList<CAANMsg> haisoTgBppinList = new ArrayList<CAANMsg>();
		// 配送対象物品に追加
		haisoTgBppinList.add(getHaisoTgBuppinInfo(haisoMap));

		// 配送対象同封物明細データ
		ArrayList<HashMap<String, String>> inHaisoTgDofuList = new ArrayList<HashMap<String, String>>();
		
		// 配送データ
		Object[][] inHaisoMap = new Object[][] {
				{EDK0011D020CBSMsg.TEMPLATEID, "EDK0011D020"},
				{EDK0011D020CBSMsg.FUNC_CODE, ccMsg.get(HKTG_KEY_FUNC_CODE)},
				{EDK0011D020CBSMsg.HISOS_KOCOMP_CD, haisoMap.get(EDK0011D020CBSMsg.HISOS_KOCOMP_CD)},
				{EDK0011D020CBSMsg.HAISO_DIV, (String)haisoMap.get(EDK0011D020CBSMsg.HAISO_DIV)},
				{EDK0011D020CBSMsg.HISOS_KSITEI_FLG, (String)haisoMap.get(EDK0011D020CBSMsg.HISOS_KSITEI_FLG)},
				{EDK0011D020CBSMsg.HISOS_NM, (String)haisoMap.get(EDK0011D020CBSMsg.HISOS_NM)},
				{EDK0011D020CBSMsg.HISOS_AD_CD, (String)haisoMap.get(EDK0011D020CBSMsg.HISOS_AD_CD)},
				{EDK0011D020CBSMsg.HISOS_PCD, (String)haisoMap.get(EDK0011D020CBSMsg.HISOS_PCD)},
				{EDK0011D020CBSMsg.HISOS_STATE_NM, (String)haisoMap.get(EDK0011D020CBSMsg.HISOS_STATE_NM)},
				{EDK0011D020CBSMsg.HISOS_CITY_NM, (String)haisoMap.get(EDK0011D020CBSMsg.HISOS_CITY_NM)},
				{EDK0011D020CBSMsg.HISOS_OAZTSU_NM, (String)haisoMap.get(EDK0011D020CBSMsg.HISOS_OAZTSU_NM)},
				{EDK0011D020CBSMsg.HISOS_AZCHO_NM, (String)haisoMap.get(EDK0011D020CBSMsg.HISOS_AZCHO_NM)},
				{EDK0011D020CBSMsg.HISOS_BNCHIGO, (String)haisoMap.get(EDK0011D020CBSMsg.HISOS_BNCHIGO)},
				{EDK0011D020CBSMsg.HISOS_ADRTTM, (String)haisoMap.get(EDK0011D020CBSMsg.HISOS_ADRTTM)},
				{EDK0011D020CBSMsg.HISOS_ADRRM, (String)haisoMap.get(EDK0011D020CBSMsg.HISOS_ADRRM)},
				{EDK0011D020CBSMsg.HISOS_TELNO, (String)haisoMap.get(EDK0011D020CBSMsg.HISOS_TELNO)},
				// 移動元管理場所識別コード
				{EDK0011D020CBSMsg.IDOMOTO_KRIPLACE_SKCD, (String)haisoMap.get(EDK0011D020CBSMsg.IDOMOTO_KRIPLACE_SKCD)},
				// 配送元倉庫コード
				{EDK0011D020CBSMsg.HAISO_MOTO_SOKO_CD, (String)haisoMap.get(EDK0011D020CBSMsg.HAISO_MOTO_SOKO_CD)},
				// 移動元工事会社コード
				{EDK0011D020CBSMsg.IDOMOTO_KOCOMP_CD, (String)haisoMap.get(EDK0011D020CBSMsg.IDOMOTO_KOCOMP_CD)},
				// 移動元預託先オフィスコード
				{EDK0011D020CBSMsg.IDOMOTO_YTKSKOF_CD, (String)haisoMap.get(EDK0011D020CBSMsg.IDOMOTO_YTKSKOF_CD)},
				{EDK0011D020CBSMsg.HOJIN_SVC_KEI_UK_NO, (String)haisoMap.get(EDK0011D020CBSMsg.HOJIN_SVC_KEI_UK_NO)},
				{EDK0011D020CBSMsg.HOJIN_KEISHA_NM, (String)haisoMap.get(EDK0011D020CBSMsg.HOJIN_KEISHA_NM)},
				{EDK0011D020CBSMsg.HOJIN_RRKS_KTAI_TELNO, (String)haisoMap.get(EDK0011D020CBSMsg.HOJIN_RRKS_KTAI_TELNO)},
				{EDK0011D020CBSMsg.HOJIN_PRC_GRP_CD, (String)haisoMap.get(EDK0011D020CBSMsg.HOJIN_PRC_GRP_CD)},
				{EDK0011D020CBSMsg.HOJIN_PCRS_CD, (String)haisoMap.get(EDK0011D020CBSMsg.HOJIN_PCRS_CD)},
				{EDK0011D020CBSMsg.HOJIN_PPLAN_CD, (String)haisoMap.get(EDK0011D020CBSMsg.HOJIN_PPLAN_CD)},
				{EDK0011D020CBSMsg.HAISO_RSV_YMD, (String)haisoMap.get(EDK0011D020CBSMsg.HAISO_RSV_YMD)},
				{EDK0011D020CBSMsg.AD_MI_FIX_FLG, (String)haisoMap.get(EDK0011D020CBSMsg.AD_MI_FIX_FLG)},
				{EDK0011D020CBSMsg.SHUKKA_TAIKI_FLG, (String)haisoMap.get(EDK0011D020CBSMsg.SHUKKA_TAIKI_FLG)},
				{EDK0011D020CBSMsg.BTRYHOZN_NO, (String)haisoMap.get(EDK0011D020CBSMsg.BTRYHOZN_NO)},
				{EDK0011D020CBSMsg.HAISO_KIGEN_YMD, (String)haisoMap.get(EDK0011D020CBSMsg.HAISO_KIGEN_YMD)},
				{EDK0011D020CBSMsg.HAISO_ARIV_SHITEI_YMD, (String)haisoMap.get(EDK0011D020CBSMsg.HAISO_ARIV_SHITEI_YMD)},
				{EDK0011D020CBSMsg.MSKM_NO, (String)haisoMap.get(EDK0011D020CBSMsg.MSKM_NO)},
				{EDK0011D020CBSMsg.HAISO_ARIV_SHITEI_TIME_CD, (String)haisoMap.get(EDK0011D020CBSMsg.HAISO_ARIV_SHITEI_TIME_CD)},
				{EDK0011D020CBSMsg.TCHISHO_TEMP_CD, (String)haisoMap.get(EDK0011D020CBSMsg.TCHISHO_TEMP_CD)},
				// 配送対象物品明細
				{EDK0011D020CBSMsg.EDK0011D020CBSMSG1LIST, haisoTgBppinList.toArray(new CAANMsg[haisoTgBppinList.size()])},
				// 配送対象同封物明細
				{EDK0011D020CBSMsg.EDK0011D020CBSMSG2LIST, inHaisoTgDofuList.toArray(new CAANMsg[inHaisoTgDofuList.size()])},
		};

		// サービスインターフェイスの実行
		callSC(handle, _scCall, param, ccMsg, inHaisoMap);
	}

	/**
	 * 配送分割するデータを取得（配送物品または機器提供サービス契約データ）
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData
	 * @param ccMsg
	 * @param ekk0341a010CBSMsg_af 更新後データ
	 * @param edk0011b090cbsMsg 除外データ
	 * @param ichiranKojiInfoMap 
	 * @return 配送テーブル登録データ
	 * @throws Throwable
	 */
	private HashMap<String, Object> getHaisoKikiMap(
								HashMap<String, Object> ccMsg, 
								Map<String, Object> localWorkMap,
								SessionHandle handle,
								IRequestParameterReadWrite param
		) throws Throwable
	{
		HashMap<String, Object> retMap = new HashMap<String, Object>();

		ArrayList<HashMap<String, Object>> kikiUpdList = (ArrayList<HashMap<String, Object>>)localWorkMap.get(LOCAL_MAP_KIKI_UPD_LIST);
		
		// 機器変更後の機器提供サービス契約
		HashMap<String, Object> ekk0341a010CBSMsg_af = kikiUpdList.get(0);

// IT1-2014-0000264 申込明細番号が再度採番される 2014/08/07 藤田 MOD START
		// 工事案件番号
//		String kojiak_no_ichiran_edit = (String)ccMsg.get(HKTG_KEY_KOJIAK_NO);
		String kojiak_no_ichiran_edit = "";
// IT1-2014-0000264 申込明細番号が再度採番される 2014/08/07 藤田 MOD END

		// 配送番号
		retMap.put(EDK0011D020CBSMsg.HAISO_NO, "");
		// 配送ステータス
		retMap.put(EDK0011D020CBSMsg.HAISO_STAT, "");
		// 配送受付年月日
		retMap.put(EDK0011D020CBSMsg.HAISO_UK_YMD, "");
		// 配送先工事会社コード
		retMap.put(EDK0011D020CBSMsg.HISOS_KOCOMP_CD, null);
		// 配送区分
		retMap.put(EDK0011D020CBSMsg.HAISO_DIV, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.HAISO_DIV)));
		// 配送先個別指定フラグ
		retMap.put(EDK0011D020CBSMsg.HISOS_KSITEI_FLG, "1");
		// 配送先名
		retMap.put(EDK0011D020CBSMsg.HISOS_NM, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_SOHUS_NM)));
		// 配送先住所コード
		retMap.put(EDK0011D020CBSMsg.HISOS_AD_CD, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_SOHUS_AD_CD)));
		// 配送先郵便番号
		retMap.put(EDK0011D020CBSMsg.HISOS_PCD, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_SOHUS_PCD)));
		// 配送先都道府県名
		retMap.put(EDK0011D020CBSMsg.HISOS_STATE_NM, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_SOHUS_STATE_NM)));
		// 配送先市区町村名
		retMap.put(EDK0011D020CBSMsg.HISOS_CITY_NM, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_SOHUS_CITY_NM)));
		// 配送先大字通称名
		retMap.put(EDK0011D020CBSMsg.HISOS_OAZTSU_NM, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_SOHUS_OAZTSU_NM)));
		// 配送先字丁目名
		retMap.put(EDK0011D020CBSMsg.HISOS_AZCHO_NM, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_SOHUS_AZCHO_NM)));
		// 配送先番地号
		retMap.put(EDK0011D020CBSMsg.HISOS_BNCHIGO, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_SOHUS_BNCHIGO)));
		// 配送先住所補記・建物名
		retMap.put(EDK0011D020CBSMsg.HISOS_ADRTTM, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_SOHUS_ADRTTM)));
		// 配送先住所補記・部屋番号
		retMap.put(EDK0011D020CBSMsg.HISOS_ADRRM, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_SOHUS_ADRRM)));
		// 配送先電話番号
		retMap.put(EDK0011D020CBSMsg.HISOS_TELNO, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_SOHUS_TELNO)));

		// 移動元管理場所識別コード
		retMap.put(EDK0011D020CBSMsg.IDOMOTO_KRIPLACE_SKCD, getKriplaceSkCd(getNullToStr((String)ekk0341a010CBSMsg_af
				.get(EKK0341A010CBSMsg1List.KIKI_STI_JI_KRIPLACE_SKCD))));
		// 配送元倉庫コード
		retMap.put(EDK0011D020CBSMsg.HAISO_MOTO_SOKO_CD, getNullToStr((String)ekk0341a010CBSMsg_af
				.get(EKK0341A010CBSMsg1List.KIKI_HKAT_SHITEI_SOKO_CD)));
		// 移動元工事会社コード
		retMap.put(EDK0011D020CBSMsg.IDOMOTO_KOCOMP_CD,
				getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_STI_JI_KOCOMP_CD)));
		// 移動元預託先オフィスコード
		retMap.put(EDK0011D020CBSMsg.IDOMOTO_YTKSKOF_CD, getNullToStr((String)ekk0341a010CBSMsg_af
				.get(EKK0341A010CBSMsg1List.KIKI_STI_JI_YTKSKOF_CD)));

		// 法人サービス契約受付番号
		retMap.put(EDK0011D020CBSMsg.HOJIN_SVC_KEI_UK_NO, "");
		// 法人サービス契約受付番号子
		// retMap.put(EDK0011D020CBSMsg.HOJIN_SVC_KEI_UK_NOPARTS, "");
		// 法人契約者名
		retMap.put(EDK0011D020CBSMsg.HOJIN_KEISHA_NM, "");
		// 法人連絡先携帯電話番号
		retMap.put(EDK0011D020CBSMsg.HOJIN_RRKS_KTAI_TELNO, "");
		// 法人料金グループコード
		retMap.put(EDK0011D020CBSMsg.HOJIN_PRC_GRP_CD, "");
		// 法人料金コースコード
		retMap.put(EDK0011D020CBSMsg.HOJIN_PCRS_CD, "");
		// 法人料金プランコード
		retMap.put(EDK0011D020CBSMsg.HOJIN_PPLAN_CD, "");
		// 配送予定年月日
		retMap.put(EDK0011D020CBSMsg.HAISO_RSV_YMD, HAISO_YOTEI_YMD);
		// 住所未確定フラグ
		retMap.put(EDK0011D020CBSMsg.AD_MI_FIX_FLG, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.AD_MI_FIX_FLG)));
		// 出荷待機フラグ  - VDSLの宅内型式コードは画面側で確定しているので"0：出荷"
		retMap.put(EDK0011D020CBSMsg.SHUKKA_TAIKI_FLG, "0");
		
		// 物流保全番号
		retMap.put(EDK0011D020CBSMsg.BTRYHOZN_NO, "");
		// 配送期限年月日
		retMap.put(EDK0011D020CBSMsg.HAISO_KIGEN_YMD, "");
		// 配送到着指定年月日
		retMap.put(EDK0011D020CBSMsg.HAISO_ARIV_SHITEI_YMD, "");
		// 申込番号
		retMap.put(EDK0011D020CBSMsg.MSKM_NO, (String)localWorkMap.get(LOCAL_MAP_MSKM_NO));
		// 配送到着指定時間帯コード
		retMap.put(EDK0011D020CBSMsg.HAISO_ARIV_SHITEI_TIME_CD, "0");
		retMap.put(EDK0011D020CBSMsg.TCHISHO_TEMP_CD, "");

		/////////////////////////////////////////////////
		//            配送対象物品明細                 //
		/////////////////////////////////////////////////
		
		// 配送対象物品番号
		retMap.put(EDK0011D020CBSMsg1List.HAISO_TAIBPIN_NO, "");
		// 機器提供サービス契約番号
		retMap.put(EDK0011D020CBSMsg1List.KKTK_SVC_KEI_NO, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO)));
		// 宅内機器種別コード
		retMap.put(EDK0011D020CBSMsg1List.TAKNKIKI_SBT_CD, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.TAKNKIKI_SBT_CD)));
		// 付属品種別コード
		retMap.put(EDK0011D020CBSMsg1List.HUZOKUHIN_SBT_CD, getNullToStr((String)ekk0341a010CBSMsg_af
						.get(EKK0341A010CBSMsg1List.HUZOKUHIN_SBT_CD)));
		// 宅内機器型式コード
		retMap.put(EDK0011D020CBSMsg1List.TAKNKIKI_MODEL_CD, getNullToStr((String)ekk0341a010CBSMsg_af
				.get(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD)));
		// 付属品型式コード
		retMap.put(EDK0011D020CBSMsg1List.HUZOKUHIN_MODEL_CD, getNullToStr((String)ekk0341a010CBSMsg_af
				.get(EKK0341A010CBSMsg1List.HUZOKUHIN_MODEL_CD)));
		// 宅内機器セット品型コード
		retMap.put(EDK0011D020CBSMsg1List.TAKNKIKI_SETHIN_MODEL_CD, getNullToStr((String)ekk0341a010CBSMsg_af
				.get(EKK0341A010CBSMsg1List.TAKNKIKI_SETHIN_MODEL_CD)));
		// 宅内機器セット品番号
		retMap.put(EDK0011D020CBSMsg1List.TAKNKIKI_SETHIN_NO, "");
		// 配送機器変更コード
		retMap.put(EDK0011D020CBSMsg1List.HAISO_KIKI_CHGE_CD, "");
		// 申込明細番号
		retMap.put(EDK0011D020CBSMsg1List.MSKM_DTL_NO, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.MSKM_DTL_NO)));
		// 工事案件番号
		retMap.put(EDK0011D020CBSMsg1List.KOJIAK_NO, kojiak_no_ichiran_edit);
		// 申込書番号
		retMap.put(EDK0011D020CBSMsg1List.MSKMSHO_NO, "");
		// 機器付加情報コード
		retMap.put(EDK0011D020CBSMsg1List.KIKI_HUKA_INFO_CD, getNullToStr((String)ekk0341a010CBSMsg_af
				.get(EKK0341A010CBSMsg1List.KIKI_HUKA_INFO_CD)));
		// 料金コースコード
		retMap.put(EDK0011D020CBSMsg1List.PCRS_CD, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.PCRS_CD)));
		/* ++++++++++ v4.05.00 修正完了 ++++++++++ */
		// 法人販売種別コード
		retMap.put(EDK0011D020CBSMsg1List.HOJIN_HAMBAI_SBT_CD, "");
		// 法人提供種別コード
		retMap.put(EDK0011D020CBSMsg1List.HOJIN_TK_SBT_CD, "");
		// 機器変更番号
		retMap.put(EDK0011D020CBSMsg1List.KIKI_CHG_NO, getNullToStr((String)ekk0341a010CBSMsg_af.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO)));
		// 法人サービス契約受付番号子
		retMap.put(EDK0011D020CBSMsg1List.HOJIN_SVC_KEI_UK_NOPARTS, "");
		// 法人eo読替サービス契約番号
		retMap.put(EDK0011D020CBSMsg1List.HJIN_EO_YKAE_SVKEI_NO, "");
		
		// 登録契機契約異動区分
		retMap.put(EDK0011D020CBSMsg1List.ADD_OPTNTY_KEI_IDO_DIV, IDO_DIV_00085);

		// 登録契機契約異動年月日時分秒
		retMap.put(EDK0011D020CBSMsg1List.ADD_OPTNTY_KEI_IDO_DTM, localWorkMap.get(LOCAL_MAP_OPEDTM));

		// 機器設置先場所番号
		retMap.put(EDK0011D020CBSMsg1List.KIKI_STC_SAKI_PLACE_NO, getNullToStr((String)ekk0341a010CBSMsg_af
				.get(EKK0341A010CBSMsg1List.KIKI_STC_SAKI_PLACE_NO)));

		// 配送元倉庫棚コード
		retMap.put(EDK0011D020CBSMsg1List.HAISO_MOTO_SKDN_CD, getNullToStr((String)ekk0341a010CBSMsg_af
				.get(EKK0341A010CBSMsg1List.KIKI_HKAT_SHITEI_SKDN_CD)));
		// 移動元工事会社棚コード
		retMap.put(EDK0011D020CBSMsg1List.IDOMOTO_KOCOMP_SLF_CD, getNullToStr((String)ekk0341a010CBSMsg_af
				.get(EKK0341A010CBSMsg1List.KIKI_STI_JI_KOCOMP_SLF_CD)));
		// 移動元預託先オフィス棚コード
		retMap.put(EDK0011D020CBSMsg1List.IDOMOTO_YTKSKOF_SLF_CD, getNullToStr((String)ekk0341a010CBSMsg_af
				.get(EKK0341A010CBSMsg1List.KIKI_STI_JI_YTKSKOF_SLF_CD)));
		
		return retMap;
	}
	
	/**
	 * 配送対象物品データセットメソッド
	 * 
	 * @param haisoMap
	 * @return HashMap
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg getHaisoTgBuppinInfo(HashMap<String, Object> haisoMap) throws Exception
	{

		CAANMsg retMap = new CAANMsg(EDK0011D020CBSMsg1List.class.getName());
//		HashMap<String, String> retMap = new HashMap<String, String>();

		// 機器提供サービス契約番号
		retMap.set(EDK0011D020CBSMsg1List.KKTK_SVC_KEI_NO, (String)haisoMap.get(EDK0011D020CBSMsg1List.KKTK_SVC_KEI_NO));
		// 機器変更番号
		retMap.set(EDK0011D020CBSMsg1List.KIKI_CHG_NO, (String)haisoMap.get(EDK0011D020CBSMsg1List.KIKI_CHG_NO));
		// 宅内機器種別コード
		retMap.set(EDK0011D020CBSMsg1List.TAKNKIKI_SBT_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.TAKNKIKI_SBT_CD));
		// 付属品種別コード
		retMap.set(EDK0011D020CBSMsg1List.HUZOKUHIN_SBT_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.HUZOKUHIN_SBT_CD));
		// 宅内機器型式コード
		retMap.set(EDK0011D020CBSMsg1List.TAKNKIKI_MODEL_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.TAKNKIKI_MODEL_CD));
		// 付属品型式コード
		retMap.set(EDK0011D020CBSMsg1List.HUZOKUHIN_MODEL_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.HUZOKUHIN_MODEL_CD));
		// 宅内機器セット品型コード
		retMap.set(EDK0011D020CBSMsg1List.TAKNKIKI_SETHIN_MODEL_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.TAKNKIKI_SETHIN_MODEL_CD));
		// 宅内機器セット品番号
		retMap.set(EDK0011D020CBSMsg1List.TAKNKIKI_SETHIN_NO, (String)haisoMap.get(EDK0011D020CBSMsg1List.TAKNKIKI_SETHIN_NO));
		// 配送機器変更コード
		retMap.set(EDK0011D020CBSMsg1List.HAISO_KIKI_CHGE_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.HAISO_KIKI_CHGE_CD));
		// // トムソンケース番号
		// retMap.set(EDK0011D020CBSMsg1List.TCASE_NO,
		// (String)kktkSvcKei.get(EDK0011D020CBSMsg1List.TCASE_NO));
		// 伝票番号
		// retMap.set(EDK0011D020CBSMsg1List.DENPYO_NO,
		// (String)kktkSvcKei.get(EDK0011D020CBSMsg1List.DENPYO_NO));
		// 申込明細番号
		retMap.set(EDK0011D020CBSMsg1List.MSKM_DTL_NO, (String)haisoMap.get(EDK0011D020CBSMsg1List.MSKM_DTL_NO));
		// 工事案件番号
		retMap.set(EDK0011D020CBSMsg1List.KOJIAK_NO, (String)haisoMap.get(EDK0011D020CBSMsg1List.KOJIAK_NO));
		// 申込書番号
		retMap.set(EDK0011D020CBSMsg1List.MSKMSHO_NO, (String)haisoMap.get(EDK0011D020CBSMsg1List.MSKMSHO_NO));
		// 機器付加情報コード
		retMap.set(EDK0011D020CBSMsg1List.KIKI_HUKA_INFO_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.KIKI_HUKA_INFO_CD));
		// 料金コースコード
		retMap.set(EDK0011D020CBSMsg1List.PCRS_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.PCRS_CD));
		// 法人販売種別コード
		retMap.set(EDK0011D020CBSMsg1List.HOJIN_HAMBAI_SBT_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.HOJIN_HAMBAI_SBT_CD));
		// 法人提供種別コード
		retMap.set(EDK0011D020CBSMsg1List.HOJIN_TK_SBT_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.HOJIN_TK_SBT_CD));
		// 法人eo読替サービス契約番号
		retMap.set(EDK0011D020CBSMsg1List.HJIN_EO_YKAE_SVKEI_NO, (String)haisoMap.get(EDK0011D020CBSMsg1List.HJIN_EO_YKAE_SVKEI_NO));
		// 法人サービス契約受付番号子
		retMap.set(EDK0011D020CBSMsg1List.HOJIN_SVC_KEI_UK_NOPARTS, (String)haisoMap.get(EDK0011D020CBSMsg1List.HOJIN_SVC_KEI_UK_NOPARTS));
		// 登録契機契約異動区分
		retMap.set(EDK0011D020CBSMsg1List.ADD_OPTNTY_KEI_IDO_DIV, (String)haisoMap.get(EDK0011D020CBSMsg1List.ADD_OPTNTY_KEI_IDO_DIV));
		// 登録契機契約異動年月日時分秒
		retMap.set(EDK0011D020CBSMsg1List.ADD_OPTNTY_KEI_IDO_DTM, (String)haisoMap.get(EDK0011D020CBSMsg1List.ADD_OPTNTY_KEI_IDO_DTM));
		// 機器設置先場所番号
		retMap.set(EDK0011D020CBSMsg1List.KIKI_STC_SAKI_PLACE_NO, (String)haisoMap.get(EDK0011D020CBSMsg1List.KIKI_STC_SAKI_PLACE_NO));

		// 配送元倉庫棚コード
		retMap.set(EDK0011D020CBSMsg1List.HAISO_MOTO_SKDN_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.HAISO_MOTO_SKDN_CD));
		// 移動元工事会社棚コード
		retMap.set(EDK0011D020CBSMsg1List.IDOMOTO_KOCOMP_SLF_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.IDOMOTO_KOCOMP_SLF_CD));
		// 移動元預託先オフィス棚コード
		retMap.set(EDK0011D020CBSMsg1List.IDOMOTO_YTKSKOF_SLF_CD, (String)haisoMap.get(EDK0011D020CBSMsg1List.IDOMOTO_YTKSKOF_SLF_CD));

		return retMap;
	}

	/**
	 * 受付番号（申込書番号）が既に登録済の場合、エラーとする
	 * @param handle
	 * @param param
	 * @param ccMsg
	 * @return
	 * @throws Exception
	 */
	private boolean isCorrectUketukeNo(SessionHandle handle, 
							IRequestParameterReadWrite param,
							HashMap<String, Object> ccMsg) throws Exception
	{
		if((String)ccMsg.get(HKTG_KEY_MSKMSHO_NO) != null && !"".equals((String)ccMsg.get(HKTG_KEY_MSKMSHO_NO))){
			// ***** EKK0021B001 申込書番号指定一覧照会 *****
			Object[][] ekk0021B001IN = {
				{EKK0021B001CBSMsg.TEMPLATEID,    "EKK0021B001"},
				{EKK0021B001CBSMsg.FUNC_CODE,     JPCModelConstant.FUNC_CD_1},
				{EKK0021B001CBSMsg.KEY_MSKMSHO_NO, (String)ccMsg.get(HKTG_KEY_MSKMSHO_NO)},
			};
			CAANMsg[] ekk0021B001Out = callSC(handle, _scCall, param, ccMsg, ekk0021B001IN).getCAANMsgList(EKK0021B001CBSMsg.EKK0021B001CBSMSG1LIST);
			// 工事案件番号存在チェック
			if (ekk0021B001Out != null && ekk0021B001Out.length > 0)
			{
				// エラーメッセージを設定
				return false;
			}
		}
		return true;
	}
	
	/**
	 * 配送抑止有無チェック<br>
	 * <br>
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param ccMsg
	 * @return 正常：true エラー：false
	 * @throws Exception 
	 */
	private boolean isHaisoYokushiUmuChk(SessionHandle handle, 
										IRequestParameterReadWrite param,
										HashMap<String, Object> ccMsg) throws Exception
	{
		String taknkiki_model_cd = getNullToStr((String)ccMsg.get(HKTG_KEY_TAKNKIKI_MODEL_CD));
		if (taknkiki_model_cd == null || "".equals(taknkiki_model_cd))
		{
			// 機器型式コードが未入力の場合にはチェックをスルー
			return true;
		}
		
		// ***** EZM0411A010（宅内機器型式一意照会）******
		Object[][] ezm0411a010IN = {
			{EZM0411A010CBSMsg.TEMPLATEID,       "EZM0411A010"},
			{EZM0411A010CBSMsg.FUNC_CODE,        JPCModelConstant.FUNC_CD_1},
			{EZM0411A010CBSMsg.KEY_TAKNKIKI_MODEL_CD,	taknkiki_model_cd}
		};
		
		// 宅内機器型式一意照会サービスインターフェイスの実行
		CAANMsg[] ezm0411a010cbsMsg1list 
			= callSC(handle, _scCall, param, ccMsg, ezm0411a010IN).getCAANMsgList(EZM0411A010CBSMsg.EZM0411A010CBSMSG1LIST);
		
		if (ezm0411a010cbsMsg1list != null && ezm0411a010cbsMsg1list.length > 0)
		{
			// 配送抑止有無を取得する
			String haiso_yoksi_um = getNullToStr(ezm0411a010cbsMsg1list[0].getString(EZM0411A010CBSMsg1List.HAISO_YOKSI_UM));
			
			// 配送抑止有無が「有」の場合、エラー
			if("1".equals(haiso_yoksi_um))
			{
				return false;
			}
		}
		
		return true;
	}

	/**
	 * 宅内機器物流在庫存在チェック<br>
	 * <br>
	 * 指定された宅内機器型式コードが宅内テーブルに存在しているかチェックを行う。
	 * 存在する場合、在庫数が存在するかチェックを行う。
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param temporaryData 検索データ
	 * @param ccMsg
	 * @return データが存在：true データ未存在：false
	 * @throws Exception 
	 */
	private boolean isTknKikiModlSonzaiChk(SessionHandle handle, 
											IRequestParameterReadWrite param,
											Map<String, Object> localWorkMap,
											HashMap<String, Object> ccMsg
		) throws Exception
	{
		String taknkiki_model_cd = getNullToStr((String)ccMsg.get(HKTG_KEY_TAKNKIKI_MODEL_CD));
		if (taknkiki_model_cd == null || "".equals(taknkiki_model_cd))
		{
			// 機器型式コードが未入力の場合にはチェックをスルー
			return true;
		}
		
		// 引当棚一意照会の結果を使用
		CAANMsg edk0451a010cbsMsg1 = ((CAANMsg[])localWorkMap.get(LOCAL_MAP_EDK0451A010_RESULTKEY))[0];

		// 宅内機器物流在庫一覧照会条件明細
		CAANMsg[] buturyuZaikoList = new CAANMsg[1];
		for (int i=0; i < buturyuZaikoList.length; i++) {
			buturyuZaikoList[i] = new CAANMsg(EKKA0020005CBSMsg1List.class.getName());
			// ＫＥＹ＿管理場所識別コード
			buturyuZaikoList[i].set(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_SKBT_CD, "1");		// "1"：倉庫
			// ＫＥＹ＿管理場所コード
			buturyuZaikoList[i].set(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_CD,      "000001");	// 000001：大阪みなと
			// ＫＥＹ＿管理場所棚コード
			buturyuZaikoList[i].set(EKKA0020005CBSMsg1List.KEY_KNRI_PLC_SLF_CD,  edk0451a010cbsMsg1.getString(EDK0451A010CBSMsg1List.SHELF_CD));
			// ＫＥＹ＿宅内機器型式コード
			buturyuZaikoList[i].set(EKKA0020005CBSMsg1List.KEY_TK_MDL_CD,        taknkiki_model_cd);
		}
		
		// ***** EKKA0020005（宅内機器物流在庫一意照会）*****
		Object[][] ekka0020005IN = {
				{ EKKA0020005CBSMsg.TEMPLATEID, "EKKA0020005" },
				{ EKKA0020005CBSMsg.FUNC_CODE,  JPCModelConstant.FUNC_CD_1 },
				{ EKKA0020005CBSMsg.EKKA0020005CBSMSG1LIST, buturyuZaikoList},
		};

		// 宅内機器物流在庫一意照会を実行
		CAANMsg[] ekka0020005CBSMsg2list 
						= callSC(handle, _scCall, param, ccMsg, ekka0020005IN)
														.getCAANMsgList(EKKA0020005CBSMsg.EKKA0020005CBSMSG2LIST);

		if(ekka0020005CBSMsg2list == null || ekka0020005CBSMsg2list.length != buturyuZaikoList.length)
		{
			// エラー判定結果を設定
			errorMessageSet(ERRKEY_NYUKAJISSEKI_NO_ERR, ccMsg);
			return false;
		}

		// 確定処理時は、警告メッセージを出さない
		if (!JPCModelConstant.FUNC_CD_1.equals(ccMsg.get(HKTG_KEY_FUNC_CODE)))
		{
			// 在庫チェックを行います。
			for(int i = 0; i < ekka0020005CBSMsg2list.length; i++)
			{
				if(!isZaikoCheck(ccMsg, ekka0020005CBSMsg2list[i]))
				{
					// エラー判定結果を設定
					errorMessageSet(ERRKEY_ZAIKO_NO_ERR, ccMsg);
				}
			}
		}
		
		return true;
	}
	
	/**
	 * サービス解約予約存在チェック
	 * @param handle
	 * @param param
	 * @param localWorkMap
	 * @param ccMsg
	 * @return
	 * @throws Exception
	 */
	private boolean isSvcDslSonzaiChk(SessionHandle handle, 
				IRequestParameterReadWrite param,
				Map<String, Object> localWorkMap,
				HashMap<String, Object> ccMsg
		) throws Exception
	{
		// 宅内機器型式コードを取得
		String tkSbtCd = (String)ccMsg.get(HKTG_KEY_TK_SBT_CD);
		// 提供種別が"02：レンタル"の場合
		if (JKKStrConst.CD00212_02.equals(tkSbtCd))
		{
			// ***** EKK1681B001（異動予約一覧照会）*****
			Object[][] ekk1681b001IN = {
					{EKK1681B001CBSMsg.TEMPLATEID,			"EKK1681B001"},
					{EKK1681B001CBSMsg.FUNC_CODE,			JPCModelConstant.FUNC_CD_1},
					{EKK1681B001CBSMsg.KEY_SVC_KEI_NO,		ccMsg.get(HKTG_KEY_SVC_KEI_NO)},
					{EKK1681B001CBSMsg.KEY_RSV_APLY_YMD,	localWorkMap.get(LOCAL_MAP_OPEDATE)},
				};
				
			// サービスインターフェイスの実行
			CAANMsg[] ekk1681b001MsgList = callSC(handle, _scCall, param, ccMsg, ekk1681b001IN).getCAANMsgList(EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
			for (int i=0; ekk1681b001MsgList != null && i < ekk1681b001MsgList.length; i++)
			{
				CAANMsg ekk1681b001Msg = ekk1681b001MsgList[i];
				// 異動区分
				String ido_div = ekk1681b001Msg.getString(EKK1681B001CBSMsg1List.IDO_DIV);
				// 異動予約詳細コード
				String ido_rsv_dtl_cd = ekk1681b001Msg.getString(EKK1681B001CBSMsg1List.IDO_RSV_DTL_CD);
				// 異動予約状態コード
				String ido_rsv_stat_cd = ekk1681b001Msg.getString(EKK1681B001CBSMsg1List.IDO_RSV_STAT_CD);
				// サービス契約番号
				String svc_kei_no = ekk1681b001Msg.getString(EKK1681B001CBSMsg1List.SVC_KEI_NO);
				
				// 00：未反映 または 03：予約手続中
				if (JKKSvcConst.IDO_RSV_STAT_00.equals(ido_rsv_stat_cd) || JKKSvcConst.IDO_RSV_STAT_03.equals(ido_rsv_stat_cd))
				{
					// 007：サービス解約
					if (JKKSvcConst.IDO_RSV_DTL_CD_007.equals(ido_rsv_dtl_cd)
						&& svc_kei_no != null && !"".equals(svc_kei_no))
					{
						// サービス解約予約が存在するため、エラーとする
						return true;
					}
				}
			}
		}
		
		return false;
	}

	// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD START
	/**
	 * 機器提供サービス契約解約予約存在チェック
	 * @param handle
	 * @param param
	 * @param localWorkMap
	 * @param ccMsg
	 * @return
	 * @throws Exception
	 */
	private boolean isKktkSvcDslSonzaiChk(SessionHandle handle, 
				IRequestParameterReadWrite param,
				Map<String, Object> localWorkMap,
				HashMap<String, Object> ccMsg
		) throws Exception
	{
		// ***** EKK1681B001（異動予約一覧照会）*****
		Object[][] ekk1681b001IN = {
				{EKK1681B001CBSMsg.TEMPLATEID,			"EKK1681B001"},
				{EKK1681B001CBSMsg.FUNC_CODE,			JPCModelConstant.FUNC_CD_1},
				// IT2-2014-0000317 住変による機器解約予約中にＧＧ乗換できてしまう 2014/10/06 藤田 DEL START
				//{EKK1681B001CBSMsg.KEY_SVC_KEI_NO,		ccMsg.get(HKTG_KEY_SVC_KEI_NO)},
				// IT2-2014-0000317 住変による機器解約予約中にＧＧ乗換できてしまう 2014/10/06 藤田 DEL END
				{EKK1681B001CBSMsg.KEY_KKTK_SVC_KEI_NO,	ccMsg.get(HKTG_KEY_KKTK_SVC_KEI_NO)},
				{EKK1681B001CBSMsg.KEY_RSV_APLY_YMD,	localWorkMap.get(LOCAL_MAP_OPEDATE)},
			};
			
		// サービスインターフェイスの実行
		CAANMsg[] ekk1681b001MsgList = callSC(handle, _scCall, param, ccMsg, ekk1681b001IN).getCAANMsgList(EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
		for (int i=0; ekk1681b001MsgList != null && i < ekk1681b001MsgList.length; i++)
		{
			CAANMsg ekk1681b001Msg = ekk1681b001MsgList[i];
			// 異動区分
			String ido_div = ekk1681b001Msg.getString(EKK1681B001CBSMsg1List.IDO_DIV);
			// 異動予約詳細コード
			String ido_rsv_dtl_cd = ekk1681b001Msg.getString(EKK1681B001CBSMsg1List.IDO_RSV_DTL_CD);
			// 異動予約状態コード
			String ido_rsv_stat_cd = ekk1681b001Msg.getString(EKK1681B001CBSMsg1List.IDO_RSV_STAT_CD);
			// 機器提供サービス契約番号
			String kktk_svc_kei_no = ekk1681b001Msg.getString(EKK1681B001CBSMsg1List.KKTK_SVC_KEI_NO);
			
			// 00：未反映 または 03：予約手続中
			if (JKKSvcConst.IDO_RSV_STAT_00.equals(ido_rsv_stat_cd) || JKKSvcConst.IDO_RSV_STAT_03.equals(ido_rsv_stat_cd))
			{
				// 013：機器提供サービス解約
				if ("013".equals(ido_rsv_dtl_cd)
					&& kktk_svc_kei_no != null && !"".equals(kktk_svc_kei_no))
				{
					// 機器提供サービス解約予約が存在するため、エラーとする
					return true;
				}
			}
		}
		
		return false;
	}

	/**
	 * 機器故障対応中機器チェック<br>
	 * <br>
	 * @param handle
	 * @param param
	 * @param ccMsg
	 * @return localWorkMap
	 * @throws Exception 
	 */
	private boolean isKoshouTaioKikiCheck(
				SessionHandle handle,
				IRequestParameterReadWrite param,
				HashMap<String, Object> ccMsg,
				Map<String, Object> localWorkMap
		) throws Exception
	{
		String svcKeiNo = (String)ccMsg.get(HKTG_KEY_SVC_KEI_NO);
		CAANMsg[] ekk0341a010cbsMsg1list = (CAANMsg[])localWorkMap.get(LOCAL_MAP_EKK0341A010_RESULTKEY);
		if (ekk0341a010cbsMsg1list != null && ekk0341a010cbsMsg1list.length > 0)
		{
			// VDSL機器の機器提供サービス契約番号
			String targetKktkSvcKeiNo = ekk0341a010cbsMsg1list[0].getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO);
			
			// 機器提供サービス契約一覧照会を実行
			// ***** EKK0341B012 *****
			Object[][] ekk0341b012IN = {
					{ EKK0341B012CBSMsg.TEMPLATEID, "EKK0341B012" },
					{ EKK0341B012CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2 },
					{ EKK0341B012CBSMsg.KEY_SVC_KEI_NO,  svcKeiNo} 
			};
			// サービスインターフェイスの実行
			CAANMsg[] ekk0341b012CBSMsg1list = callSC(handle, _scCall, param, ccMsg, ekk0341b012IN).getCAANMsgList(EKK0341B012CBSMsg.EKK0341B012CBSMSG1LIST);
	
			if(ekk0341b012CBSMsg1list != null && ekk0341b012CBSMsg1list.length > 0)
			{
				for (int i = 0; i < ekk0341b012CBSMsg1list.length; i++)
				{
					CAANMsg ekk0341b012Child = ekk0341b012CBSMsg1list[i];
					String kktkSvcKeiNo = ekk0341b012Child.getString(EKK0341B012CBSMsg1List.KKTK_SVC_KEI_NO);
					if (kktkSvcKeiNo.equals(targetKktkSvcKeiNo))
					{
						// 物流保全番号
						String btryhizn_no = getNullToStr(ekk0341b012Child.getString(EKK0341B012CBSMsg1List.BTRYHOZN_NO));
						
						if (!"".equals(btryhizn_no))
						{
							// 物流保全一意照会を実行
							// ***** EDK0171A010 *****
							Object[][] edk0171a010IN = {
									{ EDK0171A010CBSMsg.TEMPLATEID, "EDK0171A010" },
									{ EDK0171A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1 },
									{ EDK0171A010CBSMsg.KEY_BTRYHOZN_NO, btryhizn_no },
									{ EDK0171A010CBSMsg.KEY_UNYO_YMD, (String)localWorkMap.get(LOCAL_MAP_OPEDATE) }
							};

							CAANMsg[] edk0171a010CBSMsg1list = callSC(handle, _scCall, param, ccMsg, edk0171a010IN).getCAANMsgList(EDK0171A010CBSMsg.EDK0171A010CBSMSG1LIST);
							if(edk0171a010CBSMsg1list != null && edk0171a010CBSMsg1list.length > 0)
							{
								// 物流保全ステータス
								String btryHoznStat = getNullToStr(edk0171a010CBSMsg1list[0].getString(EDK0171A010CBSMsg1List.BTRYHOZN_STAT));
								// 物流保全ステータスがキャンセル済、完了済以外の場合は故障対応中としてエラー
								if(!(BTRYHOZN_STAT_FIN.equals(btryHoznStat) || BTRYHOZN_STAT_CNCL.equals(btryHoznStat)))
								{
									return true;
								}
							}
						}
					}
				}
			}
		}
		
		return false;
	}
	// IT2-2014-0000313 ＧＧ乗換時の機器故障対応中チェック 2014/09/19 藤田 ADD END
	
	/**
	 * 引当棚一意照会を実行する
	 * @param handle
	 * @param param
	 * @param scCall
	 * @param hambaiSbtCd
	 * @param tmpWorkMap
	 * @return
	 * @throws Exception
	 */
	private CAANMsg[] getEDK0451A010data(SessionHandle handle, 
										IRequestParameterReadWrite param,
										Map<String, Object> localWorkMap,
										HashMap<String, Object> ccMsg
		) throws Exception
	{
		// 販売種別コードの取得
		String hambaiSbtCd = (String)ccMsg.get(HKTG_KEY_HAMBAI_SBT_CD);
		// ***** EDK0451A010（引当棚一意照会）*****
		Object[][] edk0451a010IN = {
			{EDK0451A010CBSMsg.TEMPLATEID,        "EDK0451A010"},
			{EDK0451A010CBSMsg.FUNC_CODE,         JPCModelConstant.FUNC_CD_1},
			{EDK0451A010CBSMsg.KEY_HAMBAI_SBT_CD, hambaiSbtCd},
			{EDK0451A010CBSMsg.KEY_UNYO_YMD,      (String)localWorkMap.get(LOCAL_MAP_OPEDATE)}
		};
		
		return callSC(handle, _scCall, param, ccMsg, edk0451a010IN).getCAANMsgList(EDK0451A010CBSMsg.EDK0451A010CBSMSG1LIST);
	}
	
	/**
	 * ＧＧ乗換時の進捗特記事項の文字列を作成する
	 * @param ccMsg
	 * @param localWorkMap
	 * @return
	 */
	private String getGGChgPrgTkjkText(
			HashMap<String, Object> ccMsg,
			Map<String, Object> localWorkMap
		)
	{
		// 変更前宅内機器型式コード
		String bfString = "";
		CAANMsg[] ekk0341a010cbsMsg1list = (CAANMsg[])localWorkMap.get(LOCAL_MAP_EKK0341A010_RESULTKEY);
		if (ekk0341a010cbsMsg1list != null && ekk0341a010cbsMsg1list.length > 0)
		{
			bfString = ekk0341a010cbsMsg1list[0].getString(EKK0341A010CBSMsg1List.TAKNKIKI_MODEL_CD);
		}
		// 変更後宅内機器型式コード
		String afString = (String)ccMsg.get(HKTG_KEY_TAKNKIKI_MODEL_CD);
		
		// 進捗特記事項
		return String.format("GG乗換 変更前：%s　変更後：%s", bfString, afString);
	}
	
	/**
	 * 在庫チェックメソッド<br>
	 * <br>
	 * @param ccMsg
	 * @param ekka0020005CBSMsg
	 * @return boolean 在庫が足りる場合：true 在庫が足りない場合：false
	 */
	private boolean isZaikoCheck(HashMap<String, Object> ccMsg, CAANMsg ekka0020005CBSMsg)
	{
		
		BigDecimal goukei = new BigDecimal("0");
		goukei = addBigDecimal(goukei, ekka0020005CBSMsg.getString(EKKA0020005CBSMsg2List.HAISO_UK_JUCHU_CNT)); // 配送受付（受注）数
		goukei = addBigDecimal(goukei, ekka0020005CBSMsg.getString(EKKA0020005CBSMsg2List.HAISO_SHKA_SJI_CNT)); // 配送出荷指示数
		goukei = addBigDecimal(goukei, ekka0020005CBSMsg.getString(EKKA0020005CBSMsg2List.SHELF_MV_SJI_CNT)); // 棚移動指示数
		goukei = addBigDecimal(goukei, ekka0020005CBSMsg.getString(EKKA0020005CBSMsg2List.YBKIKI_HAISO_CHU_CNT)); // 予備機器配送中数
		goukei = addBigDecimal(goukei, ekka0020005CBSMsg.getString(EKKA0020005CBSMsg2List.YBKIKI_HAISO_SJI_CNT)); // 予備機器配送指示数
		goukei = addBigDecimal(goukei, ekka0020005CBSMsg.getString(EKKA0020005CBSMsg2List.YBKIKI_SHKA_FIN_CNT)); // 予備機器出荷完了数
		
		BigDecimal jitsuZaiko = new BigDecimal(ekka0020005CBSMsg.getString(EKKA0020005CBSMsg2List.JZAIKO_CNT));
		
		goukei = jitsuZaiko.subtract(goukei);
		
		if(BigDecimal.ZERO.compareTo(goukei) >= 0)
		{
			return false;
		}
		
		return true;
		
	}

	/**
	 * BigDecimalの加算処理メソッド
	 * @param gokei
	 * @param addStr
	 * @return BigDecimal
	 */
	private BigDecimal addBigDecimal(BigDecimal gokei, String addStr)
	{
		BigDecimal addBd = new BigDecimal(addStr);
		
		return gokei.add(addBd);
	}

	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		if (str == null || "".equals(str.trim()))
		{
			return "";
		}
		return str;
	}

	/**
	 * 値が入っていない場合、"1"(倉庫)を返却する。
	 * 
	 * @param pKriplaceSkCd
	 *            変換対象の管理場所識別コード
	 * @return 変換後の管理場所識別コード
	 */
	private String getKriplaceSkCd(String pKriplaceSkCd)
	{
		// 値が入っていない場合、"1"(倉庫)を返却する。
		if("".equals(pKriplaceSkCd))
		{
			return "1";
		}
		return pKriplaceSkCd;
	}

	/**
	 * エラー情報をマップにセット
	 * @param messageId
	 * @param ccMsg
	 */
	private void errorMessageSet(String messageId, HashMap<String, Object> ccMsg)
	{
		HashMap<String, Object> messageMap = new HashMap<String, Object>();
		messageMap.put(MESSAGEID, messageId);
		ArrayList<HashMap<String, Object>> messageInfo = (ArrayList<HashMap<String, Object>>)ccMsg.get(MESSAGE_LIST);
		if (messageInfo == null) {
			messageInfo = new ArrayList<HashMap<String, Object>>();
			ccMsg.put(MESSAGE_LIST, messageInfo);
		}
		messageInfo.add(messageMap);
	}
	
	/**
	 * 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, 
							HashMap<String, Object> ccMsg,
							Object[][] mappingData
		) throws Exception
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		Object return_code = result.get(JCMConstants.RET_CD_INT_KEY);
		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		editErrorInfoCom(param, ccMsg, templates, (Integer)return_code, mappingData);
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(return_code.toString()) && 0 == status))
		{
			throw new SCCallException("戻り値不正", return_code.toString(), status);
		}
		return msg;
	}

	/**
	 * @param param
	 * @param mappingData
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
												Object[][] mappingData) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		String svcIf = (String)mappingData[0][1];
		
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));

		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if (mappingData[i][1] != null && CAANMsg[].class.equals(mappingData[i][1].getClass()))
			{
				template.set((String)mappingData[i][0], (CAANMsg[])mappingData[i][1]);
			} else {
				if ("".equals(mappingData[i][1]))
				{
					template.setNull((String)mappingData[i][0]);
				}
				else
				{
					template.set((String)mappingData[i][0], mappingData[i][1]);
				}
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param dataMapKey
	 * @param mappingData
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(
										IRequestParameterReadWrite param,
										HashMap<String, Object> ccMsg,
										CAANMsg[] templates, 
										int returnCode,
										Object[][] mappingData
		) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);

		if (returnCode != 0)
		{
			templateStatus = 9000;
		}

		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if (((String)mappingData[i][0]).startsWith("key_"))
			{
				if (!template.isNull(mappingData[i][0] + "_err"))
				{
					if (!ccMsg.containsKey(mappingData[i][0] + "_err"))
					{
						ccMsg.put(mappingData[i][0] + "_err", template.getString(mappingData[i][0] + "_err"));
					}
				}
			}
		}
		return param;
	}

}
