/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom, 2013
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKKkopSvcUseKeiUpdCC
*   ソースファイル名：JKKKkopSvcUseKeiUpdCC.java
*   作成者          ：富士通
*   日付            ：2013年11月29日
*＜機能概要＞
*   機器オプションサービス利用機器契約更新CCクラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v6.00.00    2013/11/29   FJ) 高林    【ANK-1578-00-00】多機能ルータ対応
*   v7.00.00    2014/02/15   FJ) 阮　    【OM-2014-0000652】電話サービス追加時のコース変更対応（自動交換の適正）
*   v8.00.00    2014/04/02   FJ)北谷     【OM-2014-0001143】ネットコース変更で多機能ルータ（VA）が締結済になる
*   v8.01.00    2014/04/16   FJ)藤本     【OM-2014-0001141】ネットが解約済の場合に電話をキャンセル取消しても多機能ルーターが回復されない
*   v8.02.00    2014/04/22   FJ)藤本     【OM-2014-0001556】サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる
*   v8.03.00    2014/05/05   FJ)阮       【OM-2014-0001770】多機能ルーター回復処理の不具合対応
*   v8.04.00    2014/05/14   FJ)藤本     【OM-2014-0001693】ネットのコース変更後に交換機器引渡画面で宅内S連携エラーとなる
*   v8.05.00    2014/05/15   FJ)田中　　 【OM-2014-0001848】対応
*   v9.00.00    2014/06/19   FJ)藤本     【OM-2014-0002146】強制解約後も利用停止状態となっている多機能ルーターが回復できない
*   v9.01.00    2014/07/09   FJ)藤本     【OM-2014-0002322】強制解約時にキャンセル済の多機能ルーターに対する旧機器を回復しようとしてエラー
*   v9.02.00    2014/08/14   FJ)藤本     【OM-2014-0002572】利用停止バッチの多機能ルーター停止処理時に排他エラーが発生
*   v19.00.00   2015/10/06   FJ)中野     【OM-2015-0002509】機器OP解約時にマッピング項目が不正
*   v37.00.00   2018/04/25   FJ)藤本     【ANK-3366-00-00】eo光設備卸対応
*   v39.00.00   2018/11/01   FJ)舘山     【ANK-3412-00-00】５ギガ・１０ギガコース導入対応
*   v40.00.00   2018/11/30   FJ)舘山     【IT1-2018-0000226】多機能ルータの交換ができない
*   v40.01.00   2018/12/14   FJ)舘山     【ANK-3412-10-00】ファミリーパック有効時の機器交換見直し
*   v40.02.00	2019/02/01   FJ)舘山     【ANK-3412-15-00】締結済の多機能ルータ交換対応
*   v41.00.00	2019/04/16   FJ)舘山     【OM-2019-0000362】対応横並び
*   v42.00.00	2019/06/20   FJ)舘山     【OM-2019-0000605】多機能交換でVAが解約されない
*   v48.00.00	2020/01/22   FJ)吉田     【OM-2019-0001446】機器連帯契約変更手続中の機器オプション解約キャンセル時メッセージ出力対応
*   v48.01.00	2020/03/06   FJ)吉田     【OM-2020-0000082】契約変更中の多機能ルーターが強解回復できない
*   v70.00.00	2024/03/12   FJ)吉川     【#83846】HGW瑕疵内障害
*   v71.00.00	2024/09/12   FJ)奥村     【#84868】EO21H0210J0　電話系解約・消去オーダーが発行されていない
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
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.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;

import eo.common.constant.JKKStrConst;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0021B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0021B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B009CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B009CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B029CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B029CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0241B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0241B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321B005CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B005CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B025CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B025CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C050CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C120CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C130CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C131CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C330CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C340CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C350CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C380CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C400CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C410CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C420CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C430CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C450CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341C530CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0771A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0771A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0791A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0791A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2101B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2101B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811B012CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811B012CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2811C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C050CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C080CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C090CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C100CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C110CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C120CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C130CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C140CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C150CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C180CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C190CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C200CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C250CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811C260CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2811D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0411B030CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0411B030CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0411B050CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0411B050CBSMsg1List;
	
/**
 * 機器オプションサービス利用機器契約更新CCクラス
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JKKKkopSvcUseKeiUpdCC extends AbstractCommonComponent 
{

	/** データマップキー（対象データリスト） */
	public static final String KEY_TRGT_DATA_LIST = "trgt_data_list";
	/** データマップキー(サービス終了年月日) */
	public static final String KEY_SVC_ENDYMD = "svc_endymd";
	/** データマップキー(サービス課金終了年月日) */
	public static final String KEY_SVC_CHRG_ENDYMD = "svc_chrg_endymd";
	/** データマップキー(サービス停止年月日) */
	public static final String KEY_SVC_STP_YMD = "svc_stp_ymd";
	/** データマップキー(サービス停止解除年月日) */
	public static final String KEY_SVC_STP_RLS_YMD = "svc_stp_rls_ymd";
	/** データマップキー(回復年月日) */
	public static final String KEY_KAIHK_YMD = "kaihk_ymd";
	/** データマップキー(サービス契約番号) */
	public static final String KEY_SVC_KEI_NO = "svc_kei_no";
	/** データマップキー(異動区分) */
	public static final String KEY_IDO_DIV = "ido_div";
// IT2-2014-0000074対応 20140121 星野 ADD START
	/** データマップキー(住所変更内異動区分) */
	public static final String KEY_ADCHG_IDO_DIV = "adchg_ido_div";
// IT2-2014-0000074対応 20140121 星野 ADD END
	/** データマップキー(機器提供サービス契約番号) */
	public static final String KEY_KKTK_SVC_KEI_NO = "kktk_svc_kei_no";
// ▽▽▽ ANK-3412-00-00 ADD START
	/** データマップキー（世代登録年月日時分秒） */
	public static final String KEY_GENE_ADD_DTM = "gene_add_dtm";
	/** データマップキー（制御：スキップ（返品）） */
	public static final String CTRL_SKIP_HENPIN = "skip_henpin";
// ▲▲▲ ANK-3412-00-00 ADD END
	/** データマップキー(申込明細番号) */
	public static final String KEY_MSKM_DTL_NO = "mskm_dtl_no";
	/** データマップキー(旧機器ステータス) */
	public static final String KEY_OLD_KIKI_STAT = "old_kiki_stat";
	/** データマップキー(解約・キャンセル時申込明細番号) */
	public static final String KEY_DSLCL_MSKM_DTL_NO = "dslCl_mskm_dtl_no";
	/** データマップキー(違約金発生コード) */
	public static final String KEY_PNLTY_HASSEI_CD = "pnlty_hassei_cd";
	/** データマップキー(サービス解約理由メモ) */
	public static final String KEY_SVC_DLRE_MEMO = "svc_dlre_memo";
	/** データマップキー(サービスキャンセル理由コード) */
	public static final String KEY_SVC_CANCEL_RSN_CD = "svc_cancel_rsn_cd";
	/** データマップキー(更新年月日時分秒（更新前）) */
	public static final String KEY_UPD_DTM_BF = "upd_dtm_bf";
	// IT2-2013-0000858 2013/12/21 START
	/** データマップキー(VA機器変更番号) */
	public static final String KEY_VA_KIKI_CHG_NO = "va_kiki_chg_no";
	// IT2-2013-0000858 2013/12/21 END
	/** データマップキー(変更後料金コースコード) */
	public static final String KEY_CHAF_PCRS_CD = "chaf_pcrs_cd";

	/** データマップキー(機器オプションサービス契約番号) */
	public static final String KEY_KKOP_SVC_KEI_NO = "kkop_svc_kei_no";
	/** データマップキー(機器オプションサービス契約ステータス) */
	public static final String KEY_KKOP_SVC_KEI_STAT = "kkop_svc_kei_stat";
	/** データマップキー(機器提供サービス契約ステータス) */
	public static final String KEY_KKTK_SVC_KEI_STAT = "kktk_svc_kei_stat";
	/** データマップキー(機器提供サービスコード) */
	public static final String KEY_KKTK_SVC_CD = "kktk_svc_cd";
	/** データマップキー(配送リスト) */
	public static final String KEY_HAISO_LIST = "haiso_list";
	/** データマップキー(返品リスト) */
	public static final String KEY_HEMPIN_LIST = "hempin_list";
	/** データマップキー(更新年月日時分秒) */
	public static final String KEY_UPD_DTM = "upd_dtm";
	/** データマップキー(更新年月日時分秒)(対となる機器分) */
	public static final String KEY_UPD_DTM_PAIR = "upd_dtm_pair";
	/** データマップキー(サービス契約番号)(対となる機器分) */
	public static final String KEY_SVC_KEI_NO_PAIR = "svc_kei_no_pair";
	/** データマップキー(更新後ＫＫ０３４１世代登録年月日時分秒) */
	public static final String KK0341_GENE_ADD_DTM = "gene_add_dtm";
	

	/** データマップキー(機器提供サービス契約番号(更新用)) */
	private static final String KEY_KKTK_SVC_KEI_NO_UPD = "kktk_svc_kei_no_upd";
	/** データマップキー(機器オプションサービス契約番号(更新用)) */
	private static final String KEY_KKOP_SVC_KEI_NO_UPD = "kkop_svc_kei_no_upd";
	/** データマップキー(機器オプションサービス契約ステータス(更新用)) */
	private static final String KEY_KKOP_SVC_KEI_STAT_UPD = "kkop_svc_kei_stat_upd";

// ▽▽▽ ANK-3412-00-00 ADD START
	/** データマップキー(機器交換有無) */
	public static final String KEY_KIKI_KOKAN_UM = "kiki_kokan_um";
// ▲▲▲ ANK-3412-00-00 ADD END
// ▽▽▽ ANK-3412-04-00 ADD START
	/** データマップキー（交換機器ＯＰ料金コース）*/
	public static final String KEY_KOKAN_KKOP_PCRS_CD = "kokan_kkop_pcrs_cd";
// ▲▲▲ ANK-3412-04-00 ADD END
	
	/** 異動区分（回復） */
	private static final String IDO_DIV_KAIHK = "00004";
	/** 異動区分（解約） */
	private static final String IDO_DIV_DSL = "00005";
	/** 異動区分（撤去(解約)） */
	private static final String IDO_DIV_DSL_TEKKYO = "00006";
	/** 異動区分（キャンセル） */
	private static final String IDO_DIV_CANCEL = "00008";
	/** 異動区分（コース変更） */
	private static final String IDO_DIV_CHANGE = "00009";
	/** 異動区分（中断受付） */
	private static final String IDO_DIV_STP = "00010";
	/** 異動区分（中断解除） */
	private static final String IDO_DIV_STP_RLS = "00011";
// IT2-2014-0000074対応 20140121 星野 ADD START
	/** 異動区分（住所変更・登録） */
	private static final String IDO_DIV_ADCHG_ADD = "00019";	
// IT2-2014-0000074対応 20140121 星野 ADD END
	/** 異動区分（休止受付） */
	private static final String IDO_DIV_PAUSE = "00024";
	/** 異動区分（休止解除） */
	private static final String IDO_DIV_PAUSE_RLS = "00025";
	/** 異動区分（利用停止） */
	private static final String IDO_DIV_USE_STP = "00062";
	/** 異動区分（利用停止解除） */
	private static final String IDO_DIV_USE_STP_RLS = "00063";
	/** 異動区分（強制解約） */
	private static final String IDO_DIV_KSI_DSL = "00064";
	// IT2-2013-0000858 2013/12/21 START
	/** 異動区分（回復） */
	private static final String IDO_DIV_BANGOUKAIHK = "00044";
	// IT2-2013-0000858 2013/12/21 END
	
// IT2-2014-0000074対応 20140121 星野 ADD START
	/** 住所変更内異動区分(解約)             */
	public static final String ADCHG_IDO_DIV_DSL       = "01";
	/** 住所変更内異動区分(撤去解約) */
	public static final String ADCHG_IDO_DIV_DSL_TEKKYO = "06";
// IT2-2014-0000074対応 20140121 星野 ADD END

	/** サービスコード（ネット） */
	private static final String SVC_CD_NET = "01"; 
	/** サービスコード（電話） */
	private static final String SVC_CD_TEL = "02"; 

	/** 料金グループコード（ホーム） */
	private static final String PCRS_GRP_HOME = "02";
	/** 料金グループコード（メゾン） */
	private static final String PCRS_GRP_MAISON = "03";
	/** 料金グループコード（マンション） */
	private static final String PCRS_GRP_MANSION = "04";

	/** 機器オプションサービスコード（ｅｏ光多機能ルーター　ルーター機能） */
	private static final String KKOP_SVC_CD_RT = "G01";
	/** 機器オプションサービスコード（ｅｏ光多機能ルーター　電話アダプター機能） */
	private static final String KKOP_SVC_CD_VA = "G02";

	/** サービス解約理由コード：通常解約 */
	public static final String SVC_DLRE_CD_NORMAL = "01";
	/** サービス解約理由コード：強制解約 */
	public static final String SVC_DLRE_CD_KSI_DSL = "02";
	/** サービス解約理由コード：キャンセルによる解約 */
	public static final String SVC_DLRE_CD_KSI_CAN = "03";
	/** その他の理由によるキャンセル */
	public static final String SVC_CANCEL_RSN_CD_OTHER = "05";

	/** 機器連帯契約変更手続中フラグ：手続中 */
	private static final String KIKI_RNTAI_KEI_CHGECHU_FLG_CHGECHU = "1";

	/** 機器連帯契約変更手続中フラグ：手続中 */
	private static final String KIKI_RNTAI_KEI_CHGECHU_FLG_NOT_CHGECHU = "0";

	/** 機器オプションサービス契約ステータスリスト(メイン) */
	private static final String[] KKOP_SVC_KEI_STAT_MAIN_LIST = {
		JKKSvcConst.SVC_KEI_STAT_100,
		JKKSvcConst.SVC_KEI_STAT_220,
		JKKSvcConst.SVC_KEI_STAT_210,
		JKKSvcConst.SVC_KEI_STAT_030,
		JKKSvcConst.SVC_KEI_STAT_020,
		JKKSvcConst.SVC_KEI_STAT_010,
		JKKSvcConst.SVC_KEI_STAT_910,
		JKKSvcConst.SVC_KEI_STAT_920
	};

	/** 機器オプションサービス契約ステータスリスト(サブ) */
	private static final String[] KKOP_SVC_KEI_STAT_SUB_LIST = {
		JKKSvcConst.SVC_KEI_STAT_100,
		JKKSvcConst.SVC_KEI_STAT_220,
		JKKSvcConst.SVC_KEI_STAT_210,
		JKKSvcConst.SVC_KEI_STAT_030,
		JKKSvcConst.SVC_KEI_STAT_020,
		JKKSvcConst.SVC_KEI_STAT_010
	};

    private static final String[][] DESTINATION_STATUS = {
		{JKKSvcConst.SVC_KEI_STAT_100, JKKSvcConst.SVC_KEI_STAT_100, JKKSvcConst.SVC_KEI_STAT_100, JKKSvcConst.SVC_KEI_STAT_100, 
			JKKSvcConst.SVC_KEI_STAT_100, JKKSvcConst.SVC_KEI_STAT_100, JKKSvcConst.SVC_KEI_STAT_100 ,JKKSvcConst.SVC_KEI_STAT_100},
		{JKKSvcConst.SVC_KEI_STAT_100, JKKSvcConst.SVC_KEI_STAT_220, JKKSvcConst.SVC_KEI_STAT_220, JKKSvcConst.SVC_KEI_STAT_220, 
			JKKSvcConst.SVC_KEI_STAT_220, JKKSvcConst.SVC_KEI_STAT_220, JKKSvcConst.SVC_KEI_STAT_220 , JKKSvcConst.SVC_KEI_STAT_220 },
		{JKKSvcConst.SVC_KEI_STAT_100, JKKSvcConst.SVC_KEI_STAT_220, JKKSvcConst.SVC_KEI_STAT_210, JKKSvcConst.SVC_KEI_STAT_210, 
			JKKSvcConst.SVC_KEI_STAT_210, JKKSvcConst.SVC_KEI_STAT_210, JKKSvcConst.SVC_KEI_STAT_210 , JKKSvcConst.SVC_KEI_STAT_210},
		{JKKSvcConst.SVC_KEI_STAT_100, JKKSvcConst.SVC_KEI_STAT_220, JKKSvcConst.SVC_KEI_STAT_210, JKKSvcConst.SVC_KEI_STAT_030, 
			JKKSvcConst.SVC_KEI_STAT_030, JKKSvcConst.SVC_KEI_STAT_030, JKKSvcConst.SVC_KEI_STAT_030 , JKKSvcConst.SVC_KEI_STAT_030 },
		{JKKSvcConst.SVC_KEI_STAT_100, JKKSvcConst.SVC_KEI_STAT_220, JKKSvcConst.SVC_KEI_STAT_210, JKKSvcConst.SVC_KEI_STAT_030, 
			JKKSvcConst.SVC_KEI_STAT_020, JKKSvcConst.SVC_KEI_STAT_020, JKKSvcConst.SVC_KEI_STAT_020 , JKKSvcConst.SVC_KEI_STAT_020},
		{JKKSvcConst.SVC_KEI_STAT_100, JKKSvcConst.SVC_KEI_STAT_220, JKKSvcConst.SVC_KEI_STAT_210, JKKSvcConst.SVC_KEI_STAT_030, 
			JKKSvcConst.SVC_KEI_STAT_020, JKKSvcConst.SVC_KEI_STAT_010, JKKSvcConst.SVC_KEI_STAT_010 , JKKSvcConst.SVC_KEI_STAT_010}
    };

	/** 機器提供サービスコード（ＶＡ） */
	private static final String KKTK_SVC_CD_VA = "C004";
	/** 機器提供サービスコード（ＢＢＲ） */
	private static final String KKTK_SVC_CD_BBR = "C014";
	/** 機器提供サービスコード（多機能ルータ） */
	private static final String KKTK_SVC_CD_MFR = "C024";

	/** 料金コース速度コード(100M) */
	private static final String PCRS_SPEED_CD_100M = "01";
	/** 料金コース速度コード(100Mプレミアム) */
	private static final String PCRS_SPEED_CD_100M_PREMIUM = "02";

	/** ルータ速度種別コード（100M） */
	private static final String ROUTER_SPEED_SBT_CD_100M = "10";

	/** 照査解約完了コード(照査完了) */
	private static final String SHOSA_DSL_FIN_CD_SHOSA_OK = "1";
	
	/** ルーター優先順位ソートキー */
	private static final String[] KEY_ROUTER_YUSEN = {"pcrs_cd", "gene_add_dtm", "taknkiki_model_cd", "kiki_seizo_no"};
	/** データマップキー（料金コースコード） */
	private static final String KEY_PCRS_CD = "pcrs_cd";

	/** サービス停止解除理由コード：01(利用停止解除) */
	private static final String SVC_STP_RSN_CD_USESTPRLS = "01";

	/** エラーメッセージ */
	private static final String ERR_MSG = "INVALID_RETURN_MESSAGE";

	/** SC呼び出し部品 */
	ServiceComponentRequestInvoker scCall = null;

	/** サービスインタフェース呼び出しで使用するマッパー群 */
	private JKKKkopSvcUseKeiUpdCCMapper mapper = null;

	/** ユーザ任意文字列 */
	private String fixedTextGlobal = null;
	
// ▽▽▽ ANK-3412-15-00 ADD START
	/** 有効な機器ＯＰステータスリスト */
	private static final String ACTIVE_KKOP_STAT_LIST = "020,030";
// ▲▲▲ ANK-3412-15-00 ADD END

	/**
	 * 機器オプションサービス利用機器契約更新CCの初期処理
	 * 
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 */
	private void init(IRequestParameterReadWrite param, String fixedText)
	{
		// SC呼び出し部品のインスタンス生成
		if (null == this.scCall)
		{
			this.scCall = new ServiceComponentRequestInvoker();
		}
		
		// マッパーのインスタンス生成
		if (null == this.mapper)
		{
			this.mapper = new JKKKkopSvcUseKeiUpdCCMapper();
		}
		
		// ユーザ任意文字列をグローバルで保持
		this.fixedTextGlobal = fixedText;
		
		// コントロールマップのエラー情報を初期化
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, new ArrayList<Object>());
	}
	
	/**
	 * 機器オプションサービス利用機器契約更新CCのチェック処理
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @throws Throwable 例外時にスローします
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) 
	throws Throwable
	{
		// 初期処理を実施
		init(param, fixedText);

		return null;
	}

	/**
	 * 機器オプションサービス利用機器契約更新CCのエラー転記処理
	 * 
	 * @param param 業務データ取得・書込用I/F
	 * @param templates CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable 例外時にスローします
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
	throws Throwable
	{
		return param;
	}
	
	/**
	 * 機器オプションサービス利用機器契約更新処理
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return リクエストパラメータ
	 * @throws Throwable 例外時にスローします
	 */
	public IRequestParameterReadWrite updateKkopSvcKeiTran(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText)
			throws Throwable
	{

		// 初期処理を実施
		init(param, fixedText);
		
		String rsvAplyYmd = JCCBPCommon.getOpeDate(null);
		
		// リクエストパラメータの取得処理
		HashMap trgtData = (HashMap)param.getData(this.fixedTextGlobal);
		ArrayList<HashMap<String, Object>> trgtDataList = (ArrayList<HashMap<String, Object>>)trgtData.get(KEY_TRGT_DATA_LIST);
		
		// 対象データリストの件数分、処理を実行
		for (HashMap<String, Object> kkopKeiUpdMap : trgtDataList) 
		{
			// 機器オプションサービス契約更新マップより異動区分を取得
			String idoDiv = (String)kkopKeiUpdMap.get(KEY_IDO_DIV);
// IT2-2014-0000074対応 20140121 星野 ADD START
			String adchgIdoDiv = (String)kkopKeiUpdMap.get(KEY_ADCHG_IDO_DIV);
// IT2-2014-0000074対応 20140121 星野 ADD END
			// 各処理の更新年月日時分秒を更新年月日時分秒(更新前)として保持
			String updDtmBf = (String)kkopKeiUpdMap.get(KEY_UPD_DTM_BF);
			// 各処理後機器の更新世代
			String kousinGeneAddDtm = "";

			// パラメータチェック
			if (IDO_DIV_STP.equals(idoDiv)
					|| IDO_DIV_STP_RLS .equals(idoDiv)
					|| IDO_DIV_PAUSE.equals(idoDiv)
					|| IDO_DIV_PAUSE_RLS.equals(idoDiv))
			{
				// ********************************************************************** //
				// 異動区分                                                               //
				// ---------------------------------------------------------------------- //
				// 「中断受付」                                                           //
				// 「中断解除」                                                           //
				// 「休止受付」                                                           //
				// 「休止変更・予約取消」                                                 //
				// ********************************************************************** //
				// 呼出側で処理を行うため、処理なしで次のレコードへ
				continue;

			} else if (!(IDO_DIV_KAIHK.equals(idoDiv)
							|| IDO_DIV_DSL.equals(idoDiv)
							|| IDO_DIV_DSL_TEKKYO.equals(idoDiv)
							|| IDO_DIV_KSI_DSL.equals(idoDiv)
							|| IDO_DIV_CANCEL.equals(idoDiv)
							|| IDO_DIV_CHANGE.equals(idoDiv)
							|| IDO_DIV_USE_STP.equals(idoDiv)
							|| IDO_DIV_USE_STP_RLS.equals(idoDiv)
							// IT2-2013-0000858 2013/12/21 STRAT
							|| IDO_DIV_BANGOUKAIHK.equals(idoDiv)
							// IT2-2013-0000858 2013/12/21 END
// IT2-2014-0000074対応 20140121 星野 ADD START
							||  ( 
									IDO_DIV_ADCHG_ADD.equals(idoDiv) 
									&& ( ADCHG_IDO_DIV_DSL.equals(adchgIdoDiv) || ADCHG_IDO_DIV_DSL_TEKKYO.equals(adchgIdoDiv) )
								)
// IT2-2014-0000074対応 20140121 星野 ADD END
							)
						)
			{
				// ********************************************************************** //
				// 異動区分が下記以外                                                     //
				// ---------------------------------------------------------------------- //
				// 「回復」                                                               //
				// 「解約」                                                               //
				// 「撤去（解約）」                                                       //
				// 「強制解約」                                                           //
				// 「キャンセル」                                                         //
				// 「コース変更」                                                         //
				// 「利用停止」                                                           //
				// 「利用停止解除」                                                       //
				// 「光電話番号回復」
				// ********************************************************************** //
				// 処理対象外であるため、処理なしで次のレコードへ
				continue;

			}

			// サービス契約種別チェック

			// 機器オプションサービス契約更新マップよりサービス契約番号を取得
			String svcKeiNo       = (String)kkopKeiUpdMap.get(KEY_SVC_KEI_NO);

			String svcCd          = "";	// サービスコード
			String prcGrpCd       = "";	// 料金グループコード

			// サービス契約一意照会サービスIF呼出処理を実施
			HashMap<String, Object> ekk0081a010Hash = new HashMap<String, Object>();
			callEKK0081A010SC(param, handle, svcKeiNo, null, rsvAplyYmd, ekk0081a010Hash);
			// サービス契約情報を取り出す
			CAANMsg[] ekk0081a010List = (CAANMsg[])ekk0081a010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
			if (ekk0081a010List != null && ekk0081a010List.length != 0)
			{
				svcCd = (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_CD);
				prcGrpCd = (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.PRC_GRP_CD);
			}
			// サービスコードが「ネット」かつ料金グループが「ホーム」「メゾン」「マンション」または
			// サービスコードが「電話」
			// 上記以外の場合は処理対象外サービスのため、処理なしで次のレコードへ
			if (!((SVC_CD_NET.equals(svcCd) && (PCRS_GRP_HOME.equals(prcGrpCd)
												|| PCRS_GRP_MAISON.equals(prcGrpCd)
												|| PCRS_GRP_MANSION.equals(prcGrpCd)))
					|| SVC_CD_TEL.equals(svcCd)))
			{
				continue;
			}

			// 機器提供サービス契約更新用リスト
			ArrayList<HashMap<String, Object>> kktkSvcKeiUpdList = new ArrayList<HashMap<String, Object>>();

			// 機器オプション存在チェック
			// 異動区分がコース変更以外の場合、機器オプションサービス契約が既に存在していることを確認
			// 機器オプションサービス契約更新マップよりサービス契約番号を取得
			String kktkSvcKeiNo = (String)kkopKeiUpdMap.get(KEY_KKTK_SVC_KEI_NO);
			// IT2-2013-0000858 2013/12/21 START
			if (!IDO_DIV_CHANGE.equals(idoDiv) && !IDO_DIV_BANGOUKAIHK.equals(idoDiv))
			// IT2-2013-0000858 2013/12/21 END
			{
				String kkopSvcStat = "";	// 設定値なし
				String kkopSvcCd = "";
				// サービスコードに応じて機器オプションサービスコードをセット
				if (SVC_CD_NET.equals(svcCd))
				{
					kkopSvcCd = KKOP_SVC_CD_RT;
				} else {
					kkopSvcCd = KKOP_SVC_CD_VA;
				}
				// 機器オプションサービス契約一覧照会IF呼出処理を実施
				HashMap<String, Object> ekk2811b010Hash = new HashMap<String, Object>();
				callEKK2811B010SC(param, handle, kktkSvcKeiNo, kkopSvcStat, kkopSvcCd, null, ekk2811b010Hash);
				// サービス契約情報を取り出す
				CAANMsg[] ekk2811B010List = (CAANMsg[])ekk2811b010Hash.get(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST);
				if (ekk2811B010List != null && ekk2811B010List.length != 0)
				{
					if (IDO_DIV_KAIHK.equals(idoDiv))
					{
						// ********************************************************************** //
						// 異動区分                                                               //
						// ---------------------------------------------------------------------- //
						// 「回復」                                                               //
						// ********************************************************************** //
						kktkSvcKeiUpdList = kaihkTran(handle, param, ekk2811B010List, kkopKeiUpdMap, svcCd);
						updDtmBf = (String)kkopKeiUpdMap.get(KEY_UPD_DTM_BF);

					} else if (IDO_DIV_DSL.equals(idoDiv)
							|| IDO_DIV_DSL_TEKKYO.equals(idoDiv)
							|| IDO_DIV_KSI_DSL.equals(idoDiv)
// IT2-2014-0000074対応 20140121 星野 ADD START
							||  ( 
									IDO_DIV_ADCHG_ADD.equals(idoDiv) 
									&& ( ADCHG_IDO_DIV_DSL.equals(adchgIdoDiv) || ADCHG_IDO_DIV_DSL_TEKKYO.equals(adchgIdoDiv) )
								)
// IT2-2014-0000074対応 20140121 星野 ADD END
					)
					{
						// ********************************************************************** //
						// 異動区分                                                               //
						// ---------------------------------------------------------------------- //
						// 「解約」                                                               //
						// 「撤去（解約）」                                                       //
						// 「強制解約」                                                           //
						// ********************************************************************** //
						kktkSvcKeiUpdList = dslTran(handle, param, ekk2811B010List, kkopKeiUpdMap, svcCd);
						updDtmBf = (String)kkopKeiUpdMap.get(KEY_UPD_DTM_BF);

					} else if (IDO_DIV_CANCEL.equals(idoDiv))
					{
						// ********************************************************************** //
						// 異動区分                                                               //
						// ---------------------------------------------------------------------- //
						// 「キャンセル」                                                         //
						// ********************************************************************** //
						kktkSvcKeiUpdList = cancelTran(handle, param, ekk2811B010List, kkopKeiUpdMap, svcCd);
						updDtmBf = (String)kkopKeiUpdMap.get(KEY_UPD_DTM_BF);

					} else if (IDO_DIV_USE_STP.equals(idoDiv))
					{
						// ********************************************************************** //
						// 異動区分                                                               //
						// ---------------------------------------------------------------------- //
						// 「利用停止」                                                           //
						// ********************************************************************** //
						kktkSvcKeiUpdList = useStpTran(handle, param, ekk2811B010List, kkopKeiUpdMap);

					} else if (IDO_DIV_USE_STP_RLS.equals(idoDiv))
					{
						// ********************************************************************** //
						// 異動区分                                                               //
						// ---------------------------------------------------------------------- //
						// 「利用停止解除」                                                       //
						// ********************************************************************** //
						kktkSvcKeiUpdList = useStpRlsTran(handle, param, ekk2811B010List, kkopKeiUpdMap);
					}
					// 機器提供サービス契約更新用リストが空でなければ機器提供サービス契約更新処理を行う
					if (null != kktkSvcKeiUpdList && kktkSvcKeiUpdList.size() > 0)
					{
						// サービスインターフェースにセットする値を取得・設定する
						// 申込明細番号
						String mskmDtlNo = (String)kkopKeiUpdMap.get(KEY_MSKM_DTL_NO);
						// 予約適用開始希望年月日
						String rsvTstaKiboYmd = null;
						// サービス終了年月日
						String svcEndYmd = (String)kkopKeiUpdMap.get(KEY_SVC_ENDYMD);
						if (null == svcEndYmd || "".equals(svcEndYmd))
						{
							svcEndYmd = JCCBPCommon.getOpeDate(null); 
						}
						// サービス課金終了年月日
						String svcChrgEndymd = (String)kkopKeiUpdMap.get(KEY_SVC_CHRG_ENDYMD);
						if (null == svcChrgEndymd || "".equals(svcChrgEndymd))
						{
							svcChrgEndymd = JCCBPCommon.getOpeDate(null); 
						}
						// サービス停止年月日
						String svcStpYmd = (String)kkopKeiUpdMap.get(KEY_SVC_STP_YMD);
						if (null == svcStpYmd || "".equals(svcStpYmd))
						{
							svcStpYmd = JCCBPCommon.getOpeDate(null); 
						}
						// サービス停止解除年月日
						String svcStpRlsYmd = (String)kkopKeiUpdMap.get(KEY_SVC_STP_RLS_YMD);
						if (null == svcStpRlsYmd || "".equals(svcStpRlsYmd))
						{
							svcStpRlsYmd = JCCBPCommon.getOpeDate(null); 
						}
						// 回復年月日
						String kaihkYmd = (String)kkopKeiUpdMap.get(KEY_KAIHK_YMD);
						// サービス解約理由コード
						String svcDlreCd;
						if(IDO_DIV_KSI_DSL.equals(idoDiv))
						{
							// 異動区分が「強制解約」の場合のみ「強制解約」
							svcDlreCd = SVC_DLRE_CD_KSI_DSL;
						}
						else
						{
							// その他の異動区分は「通常解約」
							svcDlreCd = SVC_DLRE_CD_NORMAL;
						}
						// サービス停止理由コード
						String svcStpRsnCd = "01";
						// サービス停止解除理由コード
						String svcStpRlsRsnCd = "01";
						// サービスキャンセル理由コード
						String svcCancelRsnCd = "05";
						// サービス解約理由メモ
						String svcDlreMemo = (String)kkopKeiUpdMap.get(KEY_SVC_DLRE_MEMO);
						// 残置フラグ
						String zanchiFlg = "0";
						// 違約金発生コード
						String pnltyHasseiCd = (String)kkopKeiUpdMap.get(KEY_PNLTY_HASSEI_CD);
						// 宅内機器異動コード
						String taknkikiIdoCd = null;
						// 回収機器有無
						String kaishuKikiUm = "0";

						// 機器提供サービス契約更新用リストの全件に対して処理を実行
						for(HashMap<String, Object> kktkKeiUpdMap : kktkSvcKeiUpdList)
						{
							String updKktkSvcKeiNo = (String)kktkKeiUpdMap.get(KEY_KKTK_SVC_KEI_NO_UPD);
							String updKkopSvcKeiNo = (String)kktkKeiUpdMap.get(KEY_KKOP_SVC_KEI_NO_UPD);	// 未利用
							String updKkopSvcKeiStat = (String)kktkKeiUpdMap.get(KEY_KKOP_SVC_KEI_STAT_UPD);
							String updKkopSvcCd = "";
							String beforeUpdateStat = "";
							String afterUpdateStat = "";

							// OM-2014-0001141 ネットが解約済の場合に電話をキャンセル取消しても多機能ルーターが回復されない 2014/04/16 START
							// 機器提供サービス契約一覧照会IF呼出処理を実施
							HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
							callEKK0341A010SC(param, handle, updKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
							CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
							if (null != ekk0341a010List && ekk0341a010List.length > 0)
							{
								// 更新前ステータスとして取得
								beforeUpdateStat = ekk0341a010List[0].getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT);
							}

							if (IDO_DIV_KAIHK.equals(idoDiv))
							{
								// ********************************************************************** //
								// 異動区分                                                               //
								// ---------------------------------------------------------------------- //
								// 「回復」                                                               //
								// ********************************************************************** //
								// 更新前ステータスが「解約済」「キャンセル済」でない場合は回復しない
								if (!JKKSvcConst.SVC_KEI_STAT_910.equals(beforeUpdateStat)
									&& !JKKSvcConst.SVC_KEI_STAT_920.equals(beforeUpdateStat)
									// OM-2014-0002146 強制解約後も利用停止状態となっている多機能ルーターが回復できない 2014/06/19 START
									// 「停止中」の場合は利用停止解除する
									&& !JKKSvcConst.SVC_KEI_STAT_220.equals(beforeUpdateStat)
									// OM-2014-0002146 強制解約後も利用停止状態となっている多機能ルーターが回復できない 2014/06/19 END
									)
								{
									continue;
								}

								// 旧機器ステータスを更新後ステータスとして取得
								afterUpdateStat = (String)kkopKeiUpdMap.get(KEY_OLD_KIKI_STAT);
								
								// OM-2014-0001770 2014/05/05 ADD START
								// 機器提供サービス契約が「220：利用停止中」で外部指定されている場合、多機能ルータの回復先ステータスの再特定を実施
								// 機器提供サービス契約履歴一覧照会を実施
								if (afterUpdateStat != null && !"".equals(afterUpdateStat) && JKKSvcConst.SVC_KEI_STAT_220.equals(afterUpdateStat)) 
								{
									// 機器提供サービス契約履歴一覧照会を実施し、サービス契約配下の全機器を取得
									HashMap<String, Object> EKK0341B025HashUpd = new HashMap<String, Object>();
									callEKK0341B025SC(param, handle, (String)kkopKeiUpdMap.get(KEY_SVC_KEI_NO), EKK0341B025HashUpd);
									// 機器オプションサービス契約情報を取り出す
									CAANMsg[] eKK0341B025ListUpd = (CAANMsg[])EKK0341B025HashUpd.get(EKK0341B025CBSMsg.EKK0341B025CBSMSG1LIST);
									
									// 機器提供サービス契約の回復先ステータス特定処理を実施し、再度指定値を設定
									// 履歴一覧の取得結果を渡し
									// 対象サービス契約の回復後履歴特定処理をコール、回復後ステータスの対象レコードを取得
									afterUpdateStat = rirekiTokuteiTakino(eKK0341B025ListUpd, updKktkSvcKeiNo);
									
									if (afterUpdateStat != null && !"".equals(afterUpdateStat)) {
										// NULLでなければそのまま
									} else {
										// NULLの場合は外部指定のままで
										// 旧機器ステータスを更新後ステータスとして取得
										afterUpdateStat = (String)kkopKeiUpdMap.get(KEY_OLD_KIKI_STAT);
									}
								}
								// OM-2014-0001770 2014/05/05 ADD END
							}
							else
							{
								// ********************************************************************** //
								// 異動区分                                                               //
								// ---------------------------------------------------------------------- //
								// 「回復」以外                                                           //
								// ********************************************************************** //
							// OM-2014-0001141 ネットが解約済の場合に電話をキャンセル取消しても多機能ルーターが回復されない 2014/04/16 END
								if (SVC_CD_NET.equals(svcCd))
								{
									updKkopSvcCd = KKOP_SVC_CD_VA;
								} else {
									updKkopSvcCd = KKOP_SVC_CD_RT;
								}
								// 機器オプションサービス契約一覧照会IF呼出処理を実施し、更新後機器オプションサービス契約ステータスを取得
								HashMap<String, Object> ekk2811b010HashUpd = new HashMap<String, Object>();
								callEKK2811B010SC(param, handle, updKktkSvcKeiNo, null, updKkopSvcCd, null, ekk2811b010HashUpd);
								// 機器オプションサービス契約情報を取り出す
								CAANMsg[] ekk2811B010ListUpd = (CAANMsg[])ekk2811b010HashUpd.get(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST);
	//↓↓↓2014-01-29変更　IT2-2014-0000092（ＶＡ機能解約でルータ機能まで解約されてしまう）↓↓↓
	//							if (ekk2811B010ListUpd == null || ekk2811B010ListUpd.length == 0)
	//							{
	//								afterUpdateStat = updKkopSvcKeiStat;
	//							}
	//							else
	//							{
	//								String updKkopSvcStat = (String)ekk2811B010ListUpd[0].getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT);
	//								if (JKKSvcConst.SVC_KEI_STAT_910.equals(updKkopSvcStat) || JKKSvcConst.SVC_KEI_STAT_920.equals(updKkopSvcStat))
	//								{
	//									afterUpdateStat = updKkopSvcKeiStat;
	//								}
	//								else
	//								{
	//									afterUpdateStat = getDestinationStatus(updKkopSvcKeiStat, updKkopSvcStat);
	//								}
	//							}
	/**************************************************************************************************/
								String tmpkk2811Stat = null;
								for (int x = 0; null != ekk2811B010ListUpd && x < ekk2811B010ListUpd.length; x++)
								{
									CAANMsg koTemp = ekk2811B010ListUpd[x];
									String xstat = koTemp.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT);
									if (!JKKSvcConst.SVC_KEI_STAT_910.equals(xstat) && !JKKSvcConst.SVC_KEI_STAT_920.equals(xstat))
									{
										tmpkk2811Stat = xstat;
										break;
									}
								}
								if (JKKBpCommon.isNull(tmpkk2811Stat))
								{
									afterUpdateStat = updKkopSvcKeiStat;
								}
								else
								{
									afterUpdateStat = getDestinationStatus(updKkopSvcKeiStat, tmpkk2811Stat);
								}
							// OM-2014-0001141 ネットが解約済の場合に電話をキャンセル取消しても多機能ルーターが回復されない 2014/04/16 START
							}
							// OM-2014-0001141 ネットが解約済の場合に電話をキャンセル取消しても多機能ルーターが回復されない 2014/04/16 END

//↑↑↑2014-01-29変更　IT2-2014-0000092（ＶＡ機能解約でルータ機能まで解約されてしまう）↑↑↑
							// 機器提供サービス契約更新前ステータス取得
							if (IDO_DIV_DSL.equals(idoDiv)
									|| IDO_DIV_DSL_TEKKYO.equals(idoDiv)
									|| IDO_DIV_KSI_DSL.equals(idoDiv)
									|| IDO_DIV_CANCEL.equals(idoDiv)
									|| IDO_DIV_USE_STP.equals(idoDiv)
									|| IDO_DIV_USE_STP_RLS.equals(idoDiv)
// IT2-2014-0000074対応 20140121 星野 ADD START
									||  ( 
											IDO_DIV_ADCHG_ADD.equals(idoDiv) 
											&& ( ADCHG_IDO_DIV_DSL.equals(adchgIdoDiv) || ADCHG_IDO_DIV_DSL_TEKKYO.equals(adchgIdoDiv) )
										)
// IT2-2014-0000074対応 20140121 星野 ADD END
							)
							{
								// ********************************************************************** //
								// 異動区分                                                               //
								// ---------------------------------------------------------------------- //
								// 「解約」                                                               //
								// 「撤去（解約）」                                                       //
								// 「強制解約」                                                           //
								// 「キャンセル」                                                         //
								// 「利用停止」                                                           //
								// 「利用停止解除」                                                       //
								// ********************************************************************** //
								// OM-2014-0001141 ネットが解約済の場合に電話をキャンセル取消しても多機能ルーターが回復されない 2014/04/16 START
//								// 機器オプションサービス契約一覧照会IF呼出処理を実施
//								HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
//								callEKK0341A010SC(param, handle, updKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
//								// サービス契約情報を取り出す
//								CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
								// OM-2014-0001141 ネットが解約済の場合に電話をキャンセル取消しても多機能ルーターが回復されない 2014/04/16 END
								if (null != ekk0341a010List && ekk0341a010List.length > 0)
								{
									// OM-2014-0001141 ネットが解約済の場合に電話をキャンセル取消しても多機能ルーターが回復されない 2014/04/16 START
//									beforeUpdateStat = ekk0341a010List[0].getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT);
									// OM-2014-0001141 ネットが解約済の場合に電話をキャンセル取消しても多機能ルーターが回復されない 2014/04/16 END
									// IT2-2013-0000869対応 高林 Add Start
									updDtmBf = ekk0341a010List[0].getString(EKK0341A010CBSMsg1List.LAST_UPD_DTM);
									// IT2-2013-0000869対応 高林 Add End
								}
							}
							// OM-2014-0001141 ネットが解約済の場合に電話をキャンセル取消しても多機能ルーターが回復されない 2014/04/16 START
//							else if (IDO_DIV_KAIHK.equals(idoDiv))
//							{
//								// ********************************************************************** //
//								// 異動区分                                                               //
//								// ---------------------------------------------------------------------- //
//								// 「回復」                                                               //
//								// ********************************************************************** //
//								// 回復の場合は旧機器ステータスを更新前ステータスとして保持
//								beforeUpdateStat = (String)kkopKeiUpdMap.get(KEY_OLD_KIKI_STAT);
//							}
							// OM-2014-0001141 ネットが解約済の場合に電話をキャンセル取消しても多機能ルーターが回復されない 2014/04/16 END

							// 機器提供サービス契約ステータスが更新前後で一致する場合はcontinue
							if (beforeUpdateStat.equals(afterUpdateStat))
							{
								continue;
							}
							
							// 機器提供サービス契約更新処理
							// 機器提供サービス契約ステータス更新前後により呼び出すサービスインターフェースを切り替える
							// 更新前：サービス提供中
							if (JKKSvcConst.SVC_KEI_STAT_100.equals(beforeUpdateStat))
							{
								// 更新後：サービス提供中
								if (JKKSvcConst.SVC_KEI_STAT_100.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：停止中
								else if (JKKSvcConst.SVC_KEI_STAT_220.equals(afterUpdateStat))
								{
									// 機器提供サービス契約停止サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c120Hash = new HashMap<String, Object>();
									callEKK0341C120SC(param, handle, updKktkSvcKeiNo, svcStpYmd, svcStpRsnCd, idoDiv, updDtmBf, ekk0341c120Hash);
								}
								// 更新後：休止・中断中
								else if (JKKSvcConst.SVC_KEI_STAT_210.equals(afterUpdateStat))
								{
									// 未定
								}
								// 更新後：締結済
								else if (JKKSvcConst.SVC_KEI_STAT_030.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：照査済
								else if (JKKSvcConst.SVC_KEI_STAT_020.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：受付済
								else if (JKKSvcConst.SVC_KEI_STAT_010.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：解約済
								else if (JKKSvcConst.SVC_KEI_STAT_910.equals(afterUpdateStat))
								{
									// 機器提供サービス契約解約サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
									callEKK0341C340SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, 
											svcChrgEndymd, svcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, idoDiv, 
											taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
									updDtmBf = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
									// 機器提供サービス契約解約確定サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
									callEKK0341C350SC(param, handle, updKktkSvcKeiNo, svcEndYmd, svcChrgEndymd, svcDlreCd, 
											svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf, ekk0341c350Hash);
									updDtmBf = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：キャンセル済
								else if (JKKSvcConst.SVC_KEI_STAT_920.equals(afterUpdateStat))
								{
									// 機器提供サービス契約解約サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
									callEKK0341C340SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, 
											svcChrgEndymd, svcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, idoDiv, 
											taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
									updDtmBf = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
									// 機器提供サービス契約解約確定サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
									callEKK0341C350SC(param, handle, updKktkSvcKeiNo, svcEndYmd, svcChrgEndymd, svcDlreCd, 
											svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf, ekk0341c350Hash);
									updDtmBf = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.GENE_ADD_DTM);
								}
							}
							// 更新前：停止中
							else if (JKKSvcConst.SVC_KEI_STAT_220.equals(beforeUpdateStat))
							{
								// 更新後：サービス提供中
								if (JKKSvcConst.SVC_KEI_STAT_100.equals(afterUpdateStat))
								{
									// 機器提供サービス契約停止解除サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c130Hash = new HashMap<String, Object>();
									callEKK0341C130SC(param, handle, updKktkSvcKeiNo, svcStpRlsYmd, svcStpRlsRsnCd, idoDiv, updDtmBf, ekk0341c130Hash);
									updDtmBf = (String)ekk0341c130Hash.get(EKK0341C130CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c130Hash.get(EKK0341C130CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：停止中
								else if (JKKSvcConst.SVC_KEI_STAT_220.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：休止・中断中
								else if (JKKSvcConst.SVC_KEI_STAT_210.equals(afterUpdateStat))
								{
									// 機器提供サービス契約停止サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c131Hash = new HashMap<String, Object>();
									callEKK0341C131SC(param, handle, updKktkSvcKeiNo, svcStpRlsYmd, svcStpRlsRsnCd, idoDiv, updDtmBf, ekk0341c131Hash);
									updDtmBf = (String)ekk0341c131Hash.get(EKK0341C131CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c131Hash.get(EKK0341C131CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：締結済
								else if (JKKSvcConst.SVC_KEI_STAT_030.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：照査済
								else if (JKKSvcConst.SVC_KEI_STAT_020.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：受付済
								else if (JKKSvcConst.SVC_KEI_STAT_010.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：解約済
								else if (JKKSvcConst.SVC_KEI_STAT_910.equals(afterUpdateStat))
								{
									// 機器提供サービス契約解約サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
									callEKK0341C340SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, 
											svcChrgEndymd, svcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, idoDiv, 
											taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
									updDtmBf = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
									// 機器提供サービス契約解約確定サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
									callEKK0341C350SC(param, handle, updKktkSvcKeiNo, svcEndYmd, svcChrgEndymd, svcDlreCd, 
											svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf, ekk0341c350Hash);
									updDtmBf = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：キャンセル済
								else if (JKKSvcConst.SVC_KEI_STAT_920.equals(afterUpdateStat))
								{
									// 機器提供サービス契約解約サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
									callEKK0341C340SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, 
											svcChrgEndymd, svcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, idoDiv, 
											taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
									updDtmBf = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
									// 機器提供サービス契約解約確定サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
									callEKK0341C350SC(param, handle, updKktkSvcKeiNo, svcEndYmd, svcChrgEndymd, svcDlreCd, 
											svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf, ekk0341c350Hash);
									updDtmBf = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.GENE_ADD_DTM);
								}
							}
							// 更新前：休止・中断中
							else if (JKKSvcConst.SVC_KEI_STAT_210.equals(beforeUpdateStat))
							{
								// 更新後：サービス提供中
								if (JKKSvcConst.SVC_KEI_STAT_100.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：停止中
								else if (JKKSvcConst.SVC_KEI_STAT_220.equals(afterUpdateStat))
								{
									// 機器提供サービス契約停止サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c120Hash = new HashMap<String, Object>();
									callEKK0341C120SC(param, handle, updKktkSvcKeiNo, svcStpYmd, svcStpRsnCd, idoDiv, updDtmBf, ekk0341c120Hash);
									updDtmBf = (String)ekk0341c120Hash.get(EKK0341C120CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c120Hash.get(EKK0341C120CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：休止・中断中
								else if (JKKSvcConst.SVC_KEI_STAT_210.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：締結済
								else if (JKKSvcConst.SVC_KEI_STAT_030.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：照査済
								else if (JKKSvcConst.SVC_KEI_STAT_020.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：受付済
								else if (JKKSvcConst.SVC_KEI_STAT_010.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：解約済
								else if (JKKSvcConst.SVC_KEI_STAT_910.equals(afterUpdateStat))
								{
									// 機器提供サービス契約解約サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
									callEKK0341C340SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, 
											svcChrgEndymd, svcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, idoDiv, 
											taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
									updDtmBf = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
									// 機器提供サービス契約解約確定サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
									callEKK0341C350SC(param, handle, updKktkSvcKeiNo, svcEndYmd, svcChrgEndymd, svcDlreCd, 
											svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf, ekk0341c350Hash);
									updDtmBf = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：キャンセル済
								else if (JKKSvcConst.SVC_KEI_STAT_920.equals(afterUpdateStat))
								{
									// 機器提供サービス契約解約サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
									callEKK0341C340SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, 
											svcChrgEndymd, svcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, idoDiv, 
											taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
									updDtmBf = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
									// 機器提供サービス契約解約確定サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
									callEKK0341C350SC(param, handle, updKktkSvcKeiNo, svcEndYmd, svcChrgEndymd, svcDlreCd, 
											svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf, ekk0341c350Hash);
									updDtmBf = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.GENE_ADD_DTM);
								}
							}
							// 更新前：締結済
							else if (JKKSvcConst.SVC_KEI_STAT_030.equals(beforeUpdateStat))
							{
								// 更新後：サービス提供中
								if (JKKSvcConst.SVC_KEI_STAT_100.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：停止中
								else if (JKKSvcConst.SVC_KEI_STAT_220.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：休止・中断中
								else if (JKKSvcConst.SVC_KEI_STAT_210.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：締結済
								else if (JKKSvcConst.SVC_KEI_STAT_030.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：照査済
								else if (JKKSvcConst.SVC_KEI_STAT_020.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：受付済
								else if (JKKSvcConst.SVC_KEI_STAT_010.equals(afterUpdateStat))
								{
									//  処理なし
								}
								// 更新後：解約済
								else if (JKKSvcConst.SVC_KEI_STAT_910.equals(afterUpdateStat))
								{
									// #84868 MOD START
//									// 機器提供サービス契約解約サービスIF呼出処理を実施
//									HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
//									callEKK0341C340SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, 
//											svcChrgEndymd, svcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, idoDiv, 
//											taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
//									updDtmBf = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
//									// 機器提供サービス契約解約確定サービスIF呼出処理を実施
//									HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
//									callEKK0341C350SC(param, handle, updKktkSvcKeiNo, svcEndYmd, svcChrgEndymd, svcDlreCd, 
//											svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf, ekk0341c350Hash);
//									updDtmBf = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
//									kousinGeneAddDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.GENE_ADD_DTM);
									if (IDO_DIV_CANCEL.equals(idoDiv))
									{
										// 機器提供サービス契約解約サービスIF呼出処理を実施
										HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
										String kktkSvcDlreCd = SVC_DLRE_CD_KSI_CAN;
										String kktkIdoDiv = IDO_DIV_DSL;
										callEKK0341C340SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, 
												svcChrgEndymd, kktkSvcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, kktkIdoDiv, 
												taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
										updDtmBf = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
										// 機器提供サービス契約解約確定サービスIF呼出処理を実施
										HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
										callEKK0341C350SC(param, handle, updKktkSvcKeiNo, svcEndYmd, svcChrgEndymd, kktkSvcDlreCd, 
												svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf, ekk0341c350Hash);
										updDtmBf = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
										kousinGeneAddDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.GENE_ADD_DTM);
									}
									else
									{
										// 機器提供サービス契約解約サービスIF呼出処理を実施
										HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
										callEKK0341C340SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, 
												svcChrgEndymd, svcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, idoDiv, 
												taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
										updDtmBf = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
										// 機器提供サービス契約解約確定サービスIF呼出処理を実施
										HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
										callEKK0341C350SC(param, handle, updKktkSvcKeiNo, svcEndYmd, svcChrgEndymd, svcDlreCd, 
												svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf, ekk0341c350Hash);
										updDtmBf = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
										kousinGeneAddDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.GENE_ADD_DTM);
									}
									// #84868 MOD END
								}
								// 更新後：キャンセル済
								else if (JKKSvcConst.SVC_KEI_STAT_920.equals(afterUpdateStat))
								{
									// #84868 MOD START
//									// 機器提供サービス契約解約サービスIF呼出処理を実施
//									HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
//									callEKK0341C340SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, 
//											svcChrgEndymd, svcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, idoDiv, 
//											taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
//									updDtmBf = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
//									// 機器提供サービス契約解約確定サービスIF呼出処理を実施
//									HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
//									callEKK0341C350SC(param, handle, updKktkSvcKeiNo, svcEndYmd, svcChrgEndymd, svcDlreCd, 
//											svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf, ekk0341c350Hash);
//									updDtmBf = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
//									kousinGeneAddDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.GENE_ADD_DTM);
									if (IDO_DIV_CANCEL.equals(idoDiv))
									{
										// 機器提供サービス契約解約サービスIF呼出処理を実施
										HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
										String kktkSvcDlreCd = SVC_DLRE_CD_KSI_CAN;
										String kktkIdoDiv = IDO_DIV_DSL;
										callEKK0341C340SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, 
												svcChrgEndymd, kktkSvcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, kktkIdoDiv, 
												taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
										updDtmBf = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
										// 機器提供サービス契約解約確定サービスIF呼出処理を実施
										HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
										callEKK0341C350SC(param, handle, updKktkSvcKeiNo, svcEndYmd, svcChrgEndymd, kktkSvcDlreCd, 
												svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf, ekk0341c350Hash);
										updDtmBf = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
										kousinGeneAddDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.GENE_ADD_DTM);
									}
									else
									{
										// 機器提供サービス契約解約サービスIF呼出処理を実施
										HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
										callEKK0341C340SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, 
												svcChrgEndymd, svcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, idoDiv, 
												taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
										updDtmBf = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
										// 機器提供サービス契約解約確定サービスIF呼出処理を実施
										HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
										callEKK0341C350SC(param, handle, updKktkSvcKeiNo, svcEndYmd, svcChrgEndymd, svcDlreCd, 
												svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf, ekk0341c350Hash);
										updDtmBf = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
										kousinGeneAddDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.GENE_ADD_DTM);
									}
									// #84868 MOD END
								}
							}
							// 更新前：照査済
							else if (JKKSvcConst.SVC_KEI_STAT_020.equals(beforeUpdateStat))
							{
								// 更新後：サービス提供中
								if (JKKSvcConst.SVC_KEI_STAT_100.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：停止中
								else if (JKKSvcConst.SVC_KEI_STAT_220.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：休止・中断中
								else if (JKKSvcConst.SVC_KEI_STAT_210.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：締結済
								else if (JKKSvcConst.SVC_KEI_STAT_030.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：照査済
								else if (JKKSvcConst.SVC_KEI_STAT_020.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：受付済
								else if (JKKSvcConst.SVC_KEI_STAT_010.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：解約済
								else if (JKKSvcConst.SVC_KEI_STAT_910.equals(afterUpdateStat))
								{
									// 機器提供サービス契約キャンセルサービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c330Hash = new HashMap<String, Object>();
									callEKK0341C330SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, svcCancelRsnCd, idoDiv, updDtmBf, ekk0341c330Hash);
									updDtmBf = (String)ekk0341c330Hash.get(EKK0341C330CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c330Hash.get(EKK0341C330CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：キャンセル済
								else if (JKKSvcConst.SVC_KEI_STAT_920.equals(afterUpdateStat))
								{
									// 機器提供サービス契約キャンセルサービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c330Hash = new HashMap<String, Object>();
									callEKK0341C330SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, svcCancelRsnCd, idoDiv, updDtmBf, ekk0341c330Hash);
									updDtmBf = (String)ekk0341c330Hash.get(EKK0341C330CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c330Hash.get(EKK0341C330CBSMsg.GENE_ADD_DTM);
								}
							}
							// 更新前：受付済
							else if (JKKSvcConst.SVC_KEI_STAT_010.equals(beforeUpdateStat))
							{
								// 更新後：サービス提供中
								if (JKKSvcConst.SVC_KEI_STAT_100.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：停止中
								else if (JKKSvcConst.SVC_KEI_STAT_220.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：休止・中断中
								else if (JKKSvcConst.SVC_KEI_STAT_210.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：締結済
								else if (JKKSvcConst.SVC_KEI_STAT_030.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：照査済
								else if (JKKSvcConst.SVC_KEI_STAT_020.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：受付済
								else if (JKKSvcConst.SVC_KEI_STAT_010.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：解約済
								else if (JKKSvcConst.SVC_KEI_STAT_910.equals(afterUpdateStat))
								{
									// 機器提供サービス契約キャンセルサービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c330Hash = new HashMap<String, Object>();
									callEKK0341C330SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, svcCancelRsnCd, idoDiv, updDtmBf, ekk0341c330Hash);
									updDtmBf = (String)ekk0341c330Hash.get(EKK0341C330CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c330Hash.get(EKK0341C330CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：キャンセル済
								else if (JKKSvcConst.SVC_KEI_STAT_920.equals(afterUpdateStat))
								{
									// 機器提供サービス契約キャンセルサービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c330Hash = new HashMap<String, Object>();
									callEKK0341C330SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, svcCancelRsnCd, idoDiv, updDtmBf, ekk0341c330Hash);
									updDtmBf = (String)ekk0341c330Hash.get(EKK0341C330CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c330Hash.get(EKK0341C330CBSMsg.GENE_ADD_DTM);
								}
							}
							// 更新前：解約済
							else if (JKKSvcConst.SVC_KEI_STAT_910.equals(beforeUpdateStat))
							{
								// 更新後：サービス提供中
								if (JKKSvcConst.SVC_KEI_STAT_100.equals(afterUpdateStat))
								{
									// 機器提供サービス契約回復サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c380Hash = new HashMap<String, Object>();
									callEKK0341C380SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, kaihkYmd, idoDiv, updDtmBf, ekk0341c380Hash);
									updDtmBf = (String)ekk0341c380Hash.get(EKK0341C380CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c380Hash.get(EKK0341C380CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：停止中
								else if (JKKSvcConst.SVC_KEI_STAT_220.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：休止・中断中
								else if (JKKSvcConst.SVC_KEI_STAT_210.equals(afterUpdateStat))
								{
									// 休止中機器提供サービス契約回復サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c400Hash = new HashMap<String, Object>();
									callEKK0341C400SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, kaihkYmd, idoDiv, updDtmBf, ekk0341c400Hash);
									updDtmBf = (String)ekk0341c400Hash.get(EKK0341C400CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c400Hash.get(EKK0341C400CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：締結済
								else if (JKKSvcConst.SVC_KEI_STAT_030.equals(afterUpdateStat))
								{
									// 機器オプションサービス契約解約取消サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c430Hash = new HashMap<String, Object>();
									callEKK0341C430SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf, ekk0341c430Hash);
									updDtmBf = (String)ekk0341c430Hash.get(EKK0341C430CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c430Hash.get(EKK0341C430CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：照査済
								else if (JKKSvcConst.SVC_KEI_STAT_020.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：受付済
								else if (JKKSvcConst.SVC_KEI_STAT_010.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：解約済
								else if (JKKSvcConst.SVC_KEI_STAT_910.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：キャンセル済
								else if (JKKSvcConst.SVC_KEI_STAT_920.equals(afterUpdateStat))
								{
									// 処理なし
								}
							}
							// 更新前：キャンセル済
							else if (JKKSvcConst.SVC_KEI_STAT_920.equals(beforeUpdateStat))
							{
								// 更新後：サービス提供中
								if (JKKSvcConst.SVC_KEI_STAT_100.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：停止中
								else if (JKKSvcConst.SVC_KEI_STAT_220.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：休止・中断中
								else if (JKKSvcConst.SVC_KEI_STAT_210.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：締結済
								else if (JKKSvcConst.SVC_KEI_STAT_030.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：照査済
								else if (JKKSvcConst.SVC_KEI_STAT_020.equals(afterUpdateStat))
								{
									// 照査後機器提供サービス契約キャンセル取消サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c420Hash = new HashMap<String, Object>();
									callEKK0341C420SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf, ekk0341c420Hash);
									updDtmBf = (String)ekk0341c420Hash.get(EKK0341C420CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c420Hash.get(EKK0341C420CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：受付済
								else if (JKKSvcConst.SVC_KEI_STAT_010.equals(afterUpdateStat))
								{
									// 照査前機器提供サービス契約キャンセル取消サービスIF呼出処理を実施
									HashMap<String, Object> ekk0341c410Hash = new HashMap<String, Object>();
									callEKK0341C410SC(param, handle, updKktkSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf, ekk0341c410Hash);
									updDtmBf = (String)ekk0341c410Hash.get(EKK0341C410CBSMsg.UPD_DTM);
									kousinGeneAddDtm = (String)ekk0341c410Hash.get(EKK0341C410CBSMsg.GENE_ADD_DTM);
								}
								// 更新後：解約済
								else if (JKKSvcConst.SVC_KEI_STAT_910.equals(afterUpdateStat))
								{
									// 処理なし
								}
								// 更新後：キャンセル済
								else if (JKKSvcConst.SVC_KEI_STAT_920.equals(afterUpdateStat))
								{
									// 処理なし
								}
							}
						}
					}
				}
				// 更新年月日を設定
				if (updDtmBf != null && !"".equals(updDtmBf)) {
					kkopKeiUpdMap.put(KEY_UPD_DTM, updDtmBf);
				}
				// 更新後の機器の世代を設定
				if (kousinGeneAddDtm != null && !"".equals(kousinGeneAddDtm)) {
					kkopKeiUpdMap.put(KK0341_GENE_ADD_DTM, kousinGeneAddDtm);
				}
			}
			// IT2-2013-0000858 2013/12/21 STRAT
			else if (!IDO_DIV_BANGOUKAIHK.equals(idoDiv))
			// IT2-2013-0000858 2013/12/21 END
			{
				// ********************************************************************** //
				// 異動区分                                                               //
				// ---------------------------------------------------------------------- //
				// 「コース変更」                                                         //
				// ********************************************************************** //
				changeTran(handle, param, kkopKeiUpdMap);
				// 更新年月日のMapへの設定はchangeTran内で実施済
			}
			// IT2-2013-0000858 2013/12/21 STRAT
			// 電話番号回復の場合
			else
			{
				// ********************************************************************** //
				// 異動区分                                                               //
				// ---------------------------------------------------------------------- //
				// 「番号回復」                                                           //
				// ********************************************************************** //
				bangoKhk(handle, param, kkopKeiUpdMap);
			}
			// IT2-2013-0000858 2013/12/21 END
		}
		
		// 処理終了
		return param;
		
	}
	
	/**
	 * 回復処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ekk2811B010List 機器オプションサービス契約一覧照会（機器提供サービス契約番号）明細
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @throws Throwable 例外時にスローします
	 */
	private ArrayList<HashMap<String, Object>> kaihkTran(SessionHandle handle,
			IRequestParameterReadWrite param,
			CAANMsg[] ekk2811B010List, HashMap<String, Object> hikitsugiMap, String svc_cd) throws Throwable {

		// 機器提供サービス契約更新用リスト
		ArrayList<HashMap<String, Object>> kktkSvcKeiUpdList = new ArrayList<HashMap<String, Object>>();
		
		// 機器オプションサービス契約取得分だけループ処理を実施
		
		if (ekk2811B010List != null && ekk2811B010List.length > 0)
		{
			String kkopSvcKeiNo = "";
			String kktkSvcKeiNo = "";
			String geneAddDtm = "";
			String svcKeiNo = "";
			// 予約年月日 = 運用日
			String rsvAplyYmd = JCCBPCommon.getOpeDate(null);
			String kkopSvcStat = "";
			// キャンセル・解約時の申込明細番号
			String mskm_dtl_no = (String)hikitsugiMap.get(KEY_DSLCL_MSKM_DTL_NO);
			String svc_kei_no = (String)hikitsugiMap.get(KEY_SVC_KEI_NO);
			// 申込明細番号を取得
			String now_mskm_dtl_no = (String)hikitsugiMap.get(KEY_MSKM_DTL_NO);
			String ido_div = (String)hikitsugiMap.get(KEY_IDO_DIV);
			
			for (int j = 0; j < ekk2811B010List.length; j++)
			{
				HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
				kkopSvcKeiNo = (String)ekk2811B010List[j].getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO);
				kktkSvcKeiNo = (String)ekk2811B010List[j].getString(EKK2811B010CBSMsg1List.KKTK_SVC_KEI_NO);
				if (kkopSvcKeiNo != null && !"".equals(kkopSvcKeiNo))
				{
					// 機器オプションサービス契約一意照会IF呼出処理を実施
					HashMap<String, Object> ekk2811a010Hash = new HashMap<String, Object>();
					callEKK2811A010SC(param, handle, kkopSvcKeiNo, geneAddDtm, rsvAplyYmd, ekk2811a010Hash); // カレントを取得
					// 機器オプションサービス契約一意照会結果を取り出す
					CAANMsg[] ekk2811A010List = (CAANMsg[])ekk2811a010Hash.get(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST);
					if (ekk2811A010List != null && !"".equals(ekk2811A010List) && ekk2811A010List.length > 0)
					{
						CAANMsg ekk2811a010Msg = ekk2811A010List[0];
						kkopSvcStat = (String)ekk2811a010Msg.getString(EKK2811A010CBSMsg1List.KKOP_SVC_KEI_STAT);
						// 機器オプションサービス契約が９１０（解約済）または９２０（キャンセル済）以外の場合、後続処理を実施しない
						if ( !JKKSvcConst.SVC_KEI_STAT_910.equals(kkopSvcStat) && !JKKSvcConst.SVC_KEI_STAT_920.equals(kkopSvcStat)) {
							continue;
						}
						// 機器オプションサービス契約履歴一覧照会を実施
						HashMap<String, Object> EKK2811B012Hash = new HashMap<String, Object>();
						callEKK2811B012SC(param, handle, kkopSvcKeiNo, geneAddDtm, rsvAplyYmd, EKK2811B012Hash); // 履歴一覧を取得
						// 機器オプションサービス契約一意照会結果を取り出す
						CAANMsg[] eKK2811B012List = (CAANMsg[])EKK2811B012Hash.get(EKK2811B012CBSMsg.EKK2811B012CBSMSG1LIST);
						// 履歴が取れない場合後続処理をしない
						if ( eKK2811B012List == null || "".equals(eKK2811B012List) || eKK2811B012List.length < 1 ) {
							continue;
						}
						else 
						{
							// 履歴一覧の取得結果を渡し
							// 対象サービス契約の回復後履歴特定処理をコール、回復後ステータスの対象レコードを取得
							CAANMsg tg_rireki_data = rirekiTokutei(eKK2811B012List,mskm_dtl_no);
							
							if (tg_rireki_data != null && !"".equals(tg_rireki_data)) {
								
								// 取得した対象レコードのステータス別で更新処理を実施する
								// 回復パターン別処理をコールし、機器オプションサービス契約を「解約・キャンセル前」にあるべき姿に戻す
								// IT2-2013-00000853 2013/12/18 START
								kktkSvcKeiUpdList = khkPatanCall(handle , param, tg_rireki_data , hikitsugiMap , null);
								
								// 回復パターン別処理で更新した機器提供サービス契約情報がNULLでない場合
								if (kktkSvcKeiUpdList != null && !"".equals(kktkSvcKeiUpdList) && kktkSvcKeiUpdList.size() > 0 ){
								// IT2-2013-00000853 2013/12/18 END
									// ＜＜機器連帯契約＞＞を更新
									// ペアの機器オプションコード
									String updKkopSvcCd = "";
									// 対象の機器提供オプションサービス契約番号を取得
									String pea_kkop_svc_kei_no = "";
									
									if (SVC_CD_NET.equals(svc_cd))
									{
										updKkopSvcCd = KKOP_SVC_CD_VA;
									} else {
										updKkopSvcCd = KKOP_SVC_CD_RT;
									}
									// EKK2811B010 機器オプションサービス契約一覧照会を実施（回復対象がネットならVA機能「G02」、電話ならルータ機能「G01」指定）
									HashMap<String, Object> ekk2811b010HashUpd = new HashMap<String, Object>();
									// 機器サービス契約番号、解約キャンセル時申込番号、指定サービスコードにて検索
									callEKK2811B010SC(param, handle, kktkSvcKeiNo, null, updKkopSvcCd, mskm_dtl_no, ekk2811b010HashUpd);
									// 機器オプションサービス契約情報を取り出す
									CAANMsg[] ekk2811B010ListUpd = (CAANMsg[])ekk2811b010HashUpd.get(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST);
									// 同じ解約キャンセル申込番号の機器オプションサービス契約が存在する場合後続処理を実施
									if (ekk2811B010ListUpd != null && !"".equals(ekk2811B010ListUpd) && ekk2811B010ListUpd.length > 0 ) {
										// 機器オプションサービス契約番号を取得
										for (int i = 0 ; i < ekk2811B010ListUpd.length ; i ++) {
											CAANMsg ekk2811B010Msg = ekk2811B010ListUpd[0];
											// 機器オプションサービス契約番号
											pea_kkop_svc_kei_no = ekk2811B010Msg.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO);
										}
										// EKK0081B029_同一回線内訳サービス契約一覧照会を実施
										HashMap<String, Object> EKK0081B029Hash = new HashMap<String, Object>();
										callEKK0081B029SC(param, handle, svc_kei_no , geneAddDtm, rsvAplyYmd, EKK0081B029Hash); // 履歴一覧を取得
										// 同一回線内訳サービス契約一覧照会結果を取り出す
										CAANMsg[] eKK0081B029List = (CAANMsg[])EKK0081B029Hash.get(EKK0081B029CBSMsg.EKK0081B029CBSMSG1LIST);
										
										// IT2-2013-00000853 2013/12/18 START
										// 同一回線内訳サービス契約一覧照会にデータある場合
										if (eKK0081B029List != null && !"".equals(eKK0081B029List) && eKK0081B029List.length > 0) {
										// IT2-2013-00000853 2013/12/18 END
											for (int i = 0; i < eKK0081B029List.length ; i ++) {
												CAANMsg eKK0081B029Msg = eKK0081B029List[i];
												// サービスコード
												String SvcCd = "";
												// ネットなら電話、電話ならネット
												if (SVC_CD_NET.equals(svc_cd))
												{
													SvcCd = SVC_CD_TEL;
												} else {
													SvcCd = SVC_CD_NET;
												}
												// ペアのサービス契約番号を取得
												String pea_svc_kei_no = (String)eKK0081B029Msg.getString(EKK0081B029CBSMsg1List.SVC_KEI_NO);
												
												// サービス契約一意照会サービスIF呼出処理を実施
												HashMap<String, Object> ekk0081a010PeaHash = new HashMap<String, Object>();
												callEKK0081A010SC(param, handle, pea_svc_kei_no, null, rsvAplyYmd, ekk0081a010PeaHash);
												// サービス契約情報を取り出す
												CAANMsg[] ekk0081a010PeaList = (CAANMsg[])ekk0081a010PeaHash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
												
												// IT2-2013-00000853 2013/12/18 START
												String svc_kei_last_up_dtm = ekk0081a010PeaList[0].getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM);
												// IT2-2013-00000853 2013/12/18 END
												
												// 一意照会の結果を取得
												CAANMsg ekk0081a010Data = ekk0081a010PeaList[0];
												
												// ペアのサービス契約ステータスを取得
												String pea_svc_kei_stat = ekk0081a010Data.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
												
												// ペアのサービス契約のサービスコードを取得
												// IT2-2013-00000853 2013/12/18 START
												String pea_svc_cd = ekk0081a010Data.getString(EKK0081A010CBSMsg1List.SVC_CD);
												// IT2-2013-00000853 2013/12/18 END
												
												// ペアサービスコードがペア値と一致かつ解約・キャンセル状態以外の場合は後続処理を実施
												if (pea_svc_cd != null && !"".equals(pea_svc_cd)
														&& pea_svc_kei_stat != null && !"".equals(pea_svc_kei_stat) ) {
													if (SvcCd.equals(pea_svc_cd) && !JKKSvcConst.SVC_KEI_STAT_910.equals(pea_svc_kei_stat) && !JKKSvcConst.SVC_KEI_STAT_920.equals(pea_svc_kei_stat)) {
														// ペア機器提供オプションサービス契約の履歴を取得する
														// 機器オプションサービス契約履歴一覧照会を実施
														HashMap<String, Object> EKK2811B012PeaHash = new HashMap<String, Object>();
														callEKK2811B012SC(param, handle, pea_kkop_svc_kei_no, geneAddDtm, rsvAplyYmd, EKK2811B012PeaHash); // 履歴一覧を取得
														// 機器オプションサービス契約一意照会結果を取り出す
														CAANMsg[] eKK2811B012PeaList = (CAANMsg[])EKK2811B012PeaHash.get(EKK2811B012CBSMsg.EKK2811B012CBSMSG1LIST);
														// 履歴が取れない場合後続処理をしない
														if ( eKK2811B012PeaList == null || "".equals(eKK2811B012PeaList) || eKK2811B012PeaList.length < 1 ) {
															// 履歴取れない場合は何もしない
														}
														else 
														{
															// 履歴一覧の取得結果を渡し
															// 対象サービス契約の回復後履歴特定処理をコール、回復後ステータスの対象レコードを取得
															CAANMsg tg_pea_rireki_data = rirekiTokutei(eKK2811B012PeaList,mskm_dtl_no);
															
															// ペアの機器オプション履歴が特定できる場合
															if (tg_pea_rireki_data != null && !"".equals(tg_pea_rireki_data)) {
																// 取得した対象レコードのステータス別で更新処理を実施する
																ArrayList<HashMap<String, Object>> kktkSvcKeiUpdListPea = new ArrayList<HashMap<String, Object>>();
																
																// 回復パターン別処理をコールし、機器オプションサービス契約を「解約・キャンセル前」にあるべき姿に戻す
																// IT2-2013-00000853 2013/12/18 START
																kktkSvcKeiUpdListPea = khkPatanCall(handle , param, tg_pea_rireki_data , hikitsugiMap,svc_kei_last_up_dtm );
																// IT2-2013-00000853 2013/12/18 END
																// ペアの機器オプションが回復された場合のみ、旧機器を解約・キャンセルする
																if (kktkSvcKeiUpdListPea != null && !"".equals(kktkSvcKeiUpdListPea) && kktkSvcKeiUpdListPea.size() > 0) {
																	// 旧旧機器解約処理を実施
																	String workFixedText = "oldKkCnlDelKhkCC";
																	HashMap<String, Object> trgt_data = new HashMap<String, Object>();
																	
																	createUserData(param, workFixedText);
																	HashMap<String, Object> outMap = (HashMap)param.getData(workFixedText);
																	ArrayList<HashMap> list = new ArrayList<HashMap>();
																	list.add(new HashMap<String, Object>());
																	outMap.put("trgt_data_list", list);
																	
																	// サービス契約番号を渡す（セットの電話）
																	trgt_data.put("svc_kei_no", pea_svc_kei_no);
																	// 申込明細番号を渡す
																	trgt_data.put("mskm_sho_dtl_no", now_mskm_dtl_no);
																	// 異動区分を渡す
																	trgt_data.put("ido_div", ido_div);
																	
																	//旧機器に対してキャンセル・解約を行う更新処理を呼出す
																	JKKBpCommon.oldKkCnlDelCall(handle, param, trgt_data, workFixedText);
																	
																	HashMap workOutMap = (HashMap)param.getData(workFixedText);
																	ArrayList<HashMap> workArrayList = (ArrayList<HashMap>)workOutMap.get("trgt_data_list");
																	HashMap workKktkCoshjMap = workArrayList.get(1);
																	// 機器提供サービス契約の更新年月日を取得
																	String kktk_up_dtm = (String)workKktkCoshjMap.get(JKKOldKkCnlDelKhkCC.KEY_UPD_DTM);
																	
																	if (kktk_up_dtm != null && !"".equals(kktk_up_dtm)) {
																		hikitsugiMap.put(KEY_UPD_DTM_BF,kktk_up_dtm);
																		// 回復した旧機器の情報をセット
																		hikitsugiMap.put(KEY_SVC_KEI_NO_PAIR, pea_svc_kei_no);	// ペアのサービス契約番号と更新年月日時分秒を保持
																		hikitsugiMap.put(KEY_UPD_DTM_PAIR, kktk_up_dtm);
																	}
																}
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}

		return kktkSvcKeiUpdList;
	}
	
	/**
	 * 回復後履歴特定処理
	 * @param rirekiGetMap 対象機器オプションサービス契約の履歴データ
	 * @param mskm_dtl_no 解約キャンセル時の申込明細番号
	 * @return getTgdateMap 回復対象ステータスのレコード
	 */
	private CAANMsg rirekiTokutei( CAANMsg[] rirekiGetMap , String mskm_dtl_no ) 
	{
		//回復対象ステータスのレコードを格納
		CAANMsg getTgdateMap = null;
		
		if (rirekiGetMap != null && !"".equals(rirekiGetMap) && rirekiGetMap.length > 0) {
			for (int i = 0 ; i < rirekiGetMap.length ; i++ ) {
				CAANMsg getRirekiGetMap = rirekiGetMap[i];
				
				// 申込明細番号確認（キャンセル・解約時の申込番号であれば正）
				String now_mskm_dtl_no = (String)getRirekiGetMap.getString(EKK2811B012CBSMsg1List.MSKM_DTL_NO);
				// カーソルの申込明細番号とinparamの申込明細番号が一致すれば
				if (mskm_dtl_no.equals(now_mskm_dtl_no)) {
					// 機器オプションサービス契約ステータスを取得
					String kkop_svc_kei_stat = (String)getRirekiGetMap.getString(EKK2811B012CBSMsg1List.KKOP_SVC_KEI_STAT);
					// キャンセル・解約のステータスの場合、後続処理を実施
					if (JKKSvcConst.SVC_KEI_STAT_910.equals(kkop_svc_kei_stat) || JKKSvcConst.SVC_KEI_STAT_920.equals(kkop_svc_kei_stat)) {
						// 再度履歴一覧ループを行う
						for (int a = i+1 ; a < rirekiGetMap.length ; a++ ) {
							// 解約キャンセル申込明細番号レコードより一個前の履歴から再建策
							CAANMsg tgRirekiGetMap = rirekiGetMap[a];
							
							// 履歴対象機器オプションサービス契約ステータスを取得
							String tg_kkop_svc_kei_stat = (String)tgRirekiGetMap.getString(EKK2811B012CBSMsg1List.KKOP_SVC_KEI_STAT);
							if (tg_kkop_svc_kei_stat != null && !"".equals(tg_kkop_svc_kei_stat)) {
								// キャンセル、解約及び利用停止以外の場合は対象として認識
								if (!JKKSvcConst.SVC_KEI_STAT_910.equals(tg_kkop_svc_kei_stat) && !JKKSvcConst.SVC_KEI_STAT_920.equals(tg_kkop_svc_kei_stat) && !JKKSvcConst.SVC_KEI_STAT_220.equals(tg_kkop_svc_kei_stat)) {
									// 回復後対象データとして判断し、返却値に格納
									getTgdateMap = tgRirekiGetMap;
									break;
								}
							}
						}
					}
				}
			}
		}
		// 回復対象ステータスのレコードを返却
		return getTgdateMap;
	}
	
	// OM-2014-0001770 2014/05/05 ADD START
	/**
	 * 回復後履歴特定処理（多機能ルーター用）
	 * @param rirekiGetMap 対象機器提供サービス契約の履歴データ
	 * @param kktkSvcKeiNo 回復対象の多機能ルーターの機器提供サービス契約番号
	 * @return 回復後ステータス
	 */
	private String rirekiTokuteiTakino( CAANMsg[] rirekiGetMap , String kktkSvcKeiNo ) 
	{
		//回復後ステータスを格納
		String kaifukuTgStat = "";
		
		if (rirekiGetMap != null && rirekiGetMap.length > 0) {
			for (int i = rirekiGetMap.length-1 ; i >= 0 ; i-- ) {
				CAANMsg getRirekiGetMap = rirekiGetMap[i];
				
				// 処理中の機器提供サービス契約番号
				String now_kktk_svc_kei_no =  (String)getRirekiGetMap.getString(EKK0341B025CBSMsg1List.KKTK_SVC_KEI_NO);
				// 機器提供サービス契約ステータスの取得
				String kkrk_svc_kei_stat = (String)getRirekiGetMap.getString(EKK0341B025CBSMsg1List.KKTK_SVC_KEI_STAT);
				// 機器提供サービスコード取得
				String kktkSvcCd = (String)getRirekiGetMap.getString(EKK0341B025CBSMsg1List.KKTK_SVC_CD);
				
				// #83846 MOD START
				// 機器提供サービス契約番号で特定（多機能ルータのみを対象に）
				//if (now_kktk_svc_kei_no.equals(kktkSvcKeiNo) && "C024".equals(kktkSvcCd)) {
				// 機器提供サービス契約番号で特定（多機能ルータまたはホームゲートウェイを対象に）
				if (now_kktk_svc_kei_no.equals(kktkSvcKeiNo) && ("C024".equals(kktkSvcCd)||"C025".equals(kktkSvcCd))) {
				// #83846 MOD END
					// キャンセル・解約のステータスの場合、後続処理を実施
					if (JKKSvcConst.SVC_KEI_STAT_910.equals(kkrk_svc_kei_stat) || JKKSvcConst.SVC_KEI_STAT_920.equals(kkrk_svc_kei_stat)) {
						// 再度履歴一覧ループを行う
						for (int a = i-1 ; a >= 0  ; a-- ) {
							// 解約キャンセル申込明細番号レコードより一個前の履歴から再建策
							CAANMsg tgRirekiGetMap = rirekiGetMap[a];
							
							// 履歴対象機器提供サービス契約ステータスを取得
							String tg_kktk_svc_kei_stat = (String)tgRirekiGetMap.getString(EKK0341B025CBSMsg1List.KKTK_SVC_KEI_STAT);
							if (tg_kktk_svc_kei_stat != null && !"".equals(tg_kktk_svc_kei_stat)) {
								// OM-2020-0000082 MOD START
//								// キャンセル、解約及び利用停止以外の場合は対象として認識
//								if (!JKKSvcConst.SVC_KEI_STAT_910.equals(tg_kktk_svc_kei_stat) && !JKKSvcConst.SVC_KEI_STAT_920.equals(tg_kktk_svc_kei_stat) && !JKKSvcConst.SVC_KEI_STAT_220.equals(tg_kktk_svc_kei_stat)) {
								// キャンセル、解約、利用停止、契約変更中以外の場合は対象として認識
								if (!JKKSvcConst.SVC_KEI_STAT_910.equals(tg_kktk_svc_kei_stat) && !JKKSvcConst.SVC_KEI_STAT_920.equals(tg_kktk_svc_kei_stat) 
										&& !JKKSvcConst.SVC_KEI_STAT_220.equals(tg_kktk_svc_kei_stat)&& !JKKSvcConst.KKTK_SVC_KEI_STAT_110.equals(tg_kktk_svc_kei_stat)) {
								// OM-2020-0000082 MOD END
									// 回復後対象データとして判断し、返却値に格納
									kaifukuTgStat = tg_kktk_svc_kei_stat;
									break;
								}
							}
						}
					}
				}

				if (!kaifukuTgStat.isEmpty())
				{
					break;
				}
			}
		}
		// 回復後ステータスを返却
		return kaifukuTgStat;
	}
	// OM-2014-0001770 2014/05/05 ADD END

	/**
	 * 回復パターン別処理
	 * @param tgRirekiMap 対象機器オプションサービス契約の履歴データ
	 * @param hikitsugiMap INパラメータ
	 * @return getTgdateMap 回復対象ステータスのレコード
	 * @throws Throwable 
	 */
	// IT2-2013-00000853 2013/12/18 START
	private ArrayList<HashMap<String, Object>> khkPatanCall(SessionHandle handle,
			IRequestParameterReadWrite param,
			CAANMsg tgRirekiMap, HashMap<String, Object> hikitsugiMap ,String updtm) throws Throwable {
	// IT2-2013-00000853 2013/12/18 END
		// IN申込明細番号による解約が存在する事を確認し、行数を確認
		ArrayList<HashMap<String, Object>> kktkSvcKeiUpdList = new ArrayList<HashMap<String, Object>>();
		
		// 回復対象履歴データリストからデータを取得
		String khk_tg_kkop_svc_kei_stat = (String)tgRirekiMap.getString(EKK2811B012CBSMsg1List.KKOP_SVC_KEI_STAT);
		
		String khk_tg_kkop_svc_kei_no = (String)tgRirekiMap.getString(EKK2811B012CBSMsg1List.KKOP_SVC_KEI_NO);
		
		// IT2-2013-00000853 2013/12/18 START
		// 更新時間がNULLでない場合更新S
		if (!"".equals(updtm) && updtm != null) {
			hikitsugiMap.put(KEY_UPD_DTM_BF,updtm);
		}
		// IT2-2013-00000853 2013/12/18 END
		
		String UdYmd;
		
		if (JKKSvcConst.SVC_KEI_STAT_010.equals(khk_tg_kkop_svc_kei_stat)) {
			// 受付済の場合
			// EKK2811C120 照査前キャンセルを実施
			// 機器オプションサービス契約解約IF呼出処理を実施
			HashMap<String, Object> EKK2811C120Hash = new HashMap<String, Object>();
			int return_cd = callEKK2811C120SC(param, handle, tgRirekiMap, hikitsugiMap , EKK2811C120Hash);
			// 機器オプションサービス契約一意照会結果を取り出す
			// リターンコード
			if (return_cd == 0) {
				HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
				kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO_UPD, (String)hikitsugiMap.get(KEY_KKTK_SVC_KEI_NO));
				kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_NO_UPD, khk_tg_kkop_svc_kei_no);
				kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_STAT_UPD, (String)EKK2811C120Hash.get(EKK2811C120CBSMsg.KKOP_SVC_KEI_STAT));
				kktkSvcKeiUpdList.add(kktkSvcKeiInfo);
				UdYmd =  (String)EKK2811C120Hash.get(EKK2811C120CBSMsg.UPD_DTM);
				hikitsugiMap.put(KEY_UPD_DTM_BF,UdYmd);
			}
		}
		else if (JKKSvcConst.SVC_KEI_STAT_020.equals(khk_tg_kkop_svc_kei_stat)) {
			// 照査済の場合
			// EKK2811C130 照査後キャンセル
			HashMap<String, Object> EKK2811C130Hash = new HashMap<String, Object>();
			int return_cd = callEKK2811C130SC(param, handle, tgRirekiMap, hikitsugiMap , EKK2811C130Hash);
			// 機器オプションサービス契約一意照会結果を取り出す
			// リターンコード
			if (return_cd == 0) {
				HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
				kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO_UPD, (String)hikitsugiMap.get(KEY_KKTK_SVC_KEI_NO));
				kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_NO_UPD, khk_tg_kkop_svc_kei_no);
				kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_STAT_UPD, (String)EKK2811C130Hash.get(EKK2811C130CBSMsg.KKOP_SVC_KEI_STAT));
				kktkSvcKeiUpdList.add(kktkSvcKeiInfo);
				UdYmd =  (String)EKK2811C130Hash.get(EKK2811C130CBSMsg.UPD_DTM);
				hikitsugiMap.put(KEY_UPD_DTM_BF,UdYmd);
			}
		}
		else if (JKKSvcConst.SVC_KEI_STAT_030.equals(khk_tg_kkop_svc_kei_stat)) {
			// 締結済の場合
			// EKK2811C200 解約取消を実施
			HashMap<String, Object> EKK2811C200Hash = new HashMap<String, Object>();
			// IT2-2013-00000853 2013/12/18 STRAT
			String mskmDtlNo = (String)hikitsugiMap.get(EKK2811C190CBSMsg.MSKM_DTL_NO);
			String updDtmBf = (String)hikitsugiMap.get(EKK2811C190CBSMsg.UPD_DTM_BF);
			String idoDiv = (String)hikitsugiMap.get(EKK2811C190CBSMsg.IDO_DIV);
			int return_cd = callEKK2811C200SC(param, handle, khk_tg_kkop_svc_kei_no, mskmDtlNo, idoDiv, updDtmBf, EKK2811C200Hash);
			// IT2-2013-00000853 2013/12/18 END
			// 機器オプションサービス契約一意照会結果を取り出す
			// リターンコード
			if (return_cd == 0) {
				HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
				kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO_UPD, (String)hikitsugiMap.get(KEY_KKTK_SVC_KEI_NO));
				kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_NO_UPD, khk_tg_kkop_svc_kei_no);
				kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_STAT_UPD, (String)EKK2811C200Hash.get(EKK2811C200CBSMsg.KKOP_SVC_KEI_STAT));
				kktkSvcKeiUpdList.add(kktkSvcKeiInfo);
				UdYmd =  (String)EKK2811C200Hash.get(EKK2811C200CBSMsg.UPD_DTM);
				hikitsugiMap.put(KEY_UPD_DTM_BF,UdYmd);
			}
		}
		else if (JKKSvcConst.SVC_KEI_STAT_100.equals(khk_tg_kkop_svc_kei_stat)) {
			// サービス提供中の場合
			// EKK2811C180 回復を実施
			HashMap<String, Object> EKK2811C180Hash = new HashMap<String, Object>();
			int return_cd = callEKK2811C180SC(param, handle, tgRirekiMap, hikitsugiMap , EKK2811C180Hash);
			// 機器オプションサービス契約一意照会結果を取り出す
			// リターンコード
			if (return_cd == 0) {
				HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
				kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO_UPD, (String)hikitsugiMap.get(KEY_KKTK_SVC_KEI_NO));
				kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_NO_UPD, khk_tg_kkop_svc_kei_no);
				kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_STAT_UPD, (String)EKK2811C180Hash.get(EKK2811C180CBSMsg.KKOP_SVC_KEI_STAT));
				kktkSvcKeiUpdList.add(kktkSvcKeiInfo);
				UdYmd =  (String)EKK2811C180Hash.get(EKK2811C180CBSMsg.UPD_DTM);
				hikitsugiMap.put(KEY_UPD_DTM_BF,UdYmd);
			}
		}
		else if (JKKSvcConst.SVC_KEI_STAT_210.equals(khk_tg_kkop_svc_kei_stat)) {
			// 休止中の場合
			// EKK2811C190 休止中回復を実施
			HashMap<String, Object> EKK2811C190Hash = new HashMap<String, Object>();
			int return_cd = callEKK2811C190SC(param, handle, tgRirekiMap, hikitsugiMap , EKK2811C190Hash);
			// 機器オプションサービス契約一意照会結果を取り出す
			// リターンコード
			if (return_cd == 0) {
				HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
				kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO_UPD, (String)hikitsugiMap.get(KEY_KKTK_SVC_KEI_NO));
				kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_NO_UPD, khk_tg_kkop_svc_kei_no);
				kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_STAT_UPD, (String)EKK2811C190Hash.get(EKK2811C190CBSMsg.KKOP_SVC_KEI_STAT));
				kktkSvcKeiUpdList.add(kktkSvcKeiInfo);
				UdYmd =  (String)EKK2811C190Hash.get(EKK2811C190CBSMsg.UPD_DTM);
				hikitsugiMap.put(KEY_UPD_DTM_BF,UdYmd);
			}
			
		} else {
			// 想定外のステータス
		}
		
		return kktkSvcKeiUpdList;
	}
	
	

	/**
	 * 解約処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ekk2811B010List 機器オプションサービス契約一覧照会（機器提供サービス契約番号）明細
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param svcCd サービスコード
	 * @return 機器提供サービス契約更新用リスト
	 * @throws Throwable 例外時にスローします
	 */
	private ArrayList<HashMap<String, Object>> dslTran(SessionHandle handle,
			IRequestParameterReadWrite param,
			CAANMsg[] ekk2811B010List, HashMap<String, Object> kkopKeiUpdMap, String svcCd) throws Throwable {
		
		// ▼▼▼▼▼ OM-2015-0002509 2015/10/06 ADD START ▼▼▼▼▼
		String dsl_ji_Chrg = "0";
		// ▲▲▲▲▲ OM-2015-0002509 2015/10/06 ADD END ▲▲▲▲▲
		// OM-2019-0001446 2020/01/22 ADD START
		// 機器連帯契約変更手続中の機器オプションを解約キャンセルしたこと判定するフラグ
		String kikiRntaiKeiKkopSvcDslCnslFlg = "0";
		// OM-2019-0001446 2020/01/22 ADD END
		// 機器提供サービス契約更新用リスト
		ArrayList<HashMap<String, Object>> kktkSvcKeiUpdList = new ArrayList<HashMap<String, Object>>();

		// 機器オプションサービス契約一覧照会の明細数分処理を実行する
		if (ekk2811B010List != null && ekk2811B010List.length > 0)
		{
			String kkopSvcKeiNo = "";
			String kktkSvcKeiNo = "";
			String geneAddDtm = "";
			String rsvAplyYmd = "";
			String kkopSvcStat = "";
			// 予約適用年月日は運用日付
			rsvAplyYmd = JCCBPCommon.getOpeDate(null);
			
			// 申込明細番号を取得
			String now_mskm_dtl_no = (String)kkopKeiUpdMap.get(KEY_MSKM_DTL_NO);
			String ido_div = (String)kkopKeiUpdMap.get(KEY_IDO_DIV);
			String svc_kei_no = (String)kkopKeiUpdMap.get(KEY_SVC_KEI_NO);
			
			for (int j = 0; j < ekk2811B010List.length; j++)
			{
				HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
				kkopSvcKeiNo = (String)ekk2811B010List[j].getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO);
				kktkSvcKeiNo = (String)ekk2811B010List[j].getString(EKK2811B010CBSMsg1List.KKTK_SVC_KEI_NO);
				if (kkopSvcKeiNo != null && !"".equals(kkopSvcKeiNo))
				{
					// 機器オプションサービス契約一意照会IF呼出処理を実施
					HashMap<String, Object> ekk2811a010Hash = new HashMap<String, Object>();
					callEKK2811A010SC(param, handle, kkopSvcKeiNo, geneAddDtm, rsvAplyYmd, ekk2811a010Hash);		// カレントを取得
					// サービス契約情報を取り出す
					CAANMsg[] ekk2811A010List = (CAANMsg[])ekk2811a010Hash.get(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST);
					if (ekk2811A010List != null && ekk2811A010List.length  != 0)
					{
						for (int k = 0; k < ekk2811A010List.length; k++)
						{
// IT2-2014-0000074対応 20140121 星野 ADD START
// JKKDslRunより、機器引継判定のロジックを移植
							// 機器オプション引継か？
							boolean isKikiOpHktgFlg = isKikiOpHktg(handle, param, kkopSvcKeiNo);
							
// OM-2014-0001848対応 20140514 田中 ADD START
							// 解約／新規のパターンかどうかのチェック
							boolean isKaiShinPtChkFlg = isKaiShinPtChk(handle, param, svc_kei_no);
// OM-2014-0001848対応 20140514 田中 ADD END

// OM-2014-0001848対応 20140514 田中 DEL START						
//							// ※異動区分「住所変更・登録」の場合
//							if (IDO_DIV_ADCHG_ADD.equals(ido_div))
//							{
//								// 機器オプションの場合は、解約しない
//								if (isKikiOpHktgFlg)
//								{
//									continue;
//								}
//							}
//// IT2-2014-0000074対応 20140121 星野 ADD END
// OM-2014-0001848対応 20140514 田中 DEL END

// OM-2014-0001848対応 20140514 田中 ADD START
							// ※異動区分「住所変更・登録」の場合
							if (IDO_DIV_ADCHG_ADD.equals(ido_div) || IDO_DIV_DSL.equals(ido_div))
							{
								// 機器オプションの場合は、解約しない
								// YES 機器オプション引継か？
								if (IDO_DIV_ADCHG_ADD.equals(ido_div) && isKikiOpHktgFlg)
								{
									continue;
								}
								// 解約／新規のパターンかどうか
								else if (IDO_DIV_DSL.equals(ido_div) && isKaiShinPtChkFlg) {
									// YES 機器オプション引継か？
									if (isKikiOpHktgFlg)
									{
										continue;
									}
								}
							}
// OM-2014-0001848対応 20140514 田中 ADD END
							
							CAANMsg ekk2811a010Msg = ekk2811A010List[k];
							kkopSvcStat = (String)ekk2811A010List[k].getString(EKK2811A010CBSMsg1List.KKOP_SVC_KEI_STAT);
							
//↓↓↓2014-01-24追加　IT2-2014-0000076（照査済の多機能ルータが解約されずに残りっぱ）↓↓↓
							String UdYmd = null;
							if (JKKSvcConst.SVC_KEI_STAT_010.equals(kkopSvcStat)
							||	JKKSvcConst.SVC_KEI_STAT_020.equals(kkopSvcStat))
							{
								// 機器オプションサービス契約キャンセルIF呼出処理を実施
								HashMap<String, Object> ekk2811c110Hash = new HashMap<String, Object>();
								// IT2-2013-00000853 2013/12/18 START
								// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 START
//								callEKK2811C110SC(param, handle, kkopSvcKeiNo, kkopKeiUpdMap, ekk2811c110Hash);
								callEKK2811C110SC(param, handle, kkopSvcKeiNo, kkopKeiUpdMap, ekk2811a010Msg, ekk2811c110Hash);
								// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 END
								// IT2-2013-00000853 2013/12/18 END
								if (null != ekk2811c110Hash && ekk2811c110Hash.size() > 0)
								{
									// 機器提供サービス契約更新用リストへ機器オプション解約を行った機器の情報を追加
									String dslSvcKeiNo = (String)kkopKeiUpdMap.get(KEY_KKTK_SVC_KEI_NO);
									kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO_UPD, dslSvcKeiNo);
									kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_NO_UPD, kkopSvcKeiNo);
									kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_STAT_UPD, (String)ekk2811c110Hash.get(EKK2811C110CBSMsg.KKOP_SVC_KEI_STAT));
									kktkSvcKeiUpdList.add(kktkSvcKeiInfo);
									// キャンセル後の更新年月日時分秒を取得
									UdYmd =  (String)ekk2811c110Hash.get(EKK2811C110CBSMsg.UPD_DTM);
									kkopKeiUpdMap.put(KEY_UPD_DTM_BF, UdYmd);
								}
							}
//↑↑↑2014-01-24追加　IT2-2014-0000076（照査済の多機能ルータが解約されずに残りっぱ）↑↑↑
							// 機器オプションサービスステータスが締結中(030)、サービス提供中(100)、
							// 休止・中断中(210)、停止中(220)の場合、後続処理を実行する
							// 上記以外のステータスの場合は次のレコードの処理を行う
//↓↓↓2014-01-24変更　IT2-2014-0000076（照査済の多機能ルータが解約されずに残りっぱ）↓↓↓
//							if (!JKKSvcConst.SVC_KEI_STAT_030.equals(kkopSvcStat)
//									&& !JKKSvcConst.SVC_KEI_STAT_100.equals(kkopSvcStat)
//									&& !JKKSvcConst.SVC_KEI_STAT_210.equals(kkopSvcStat)
//									&& !JKKSvcConst.SVC_KEI_STAT_220.equals(kkopSvcStat))
//							{
//								continue;
//							}
							else if (
								JKKSvcConst.SVC_KEI_STAT_030.equals(kkopSvcStat)
							||  JKKSvcConst.SVC_KEI_STAT_100.equals(kkopSvcStat)
							||  JKKSvcConst.SVC_KEI_STAT_210.equals(kkopSvcStat)
							||  JKKSvcConst.SVC_KEI_STAT_220.equals(kkopSvcStat))
							{
//↑↑↑2014-01-24変更　IT2-2014-0000076（照査済の多機能ルータが解約されずに残りっぱ）↑↑↑
							
								// 機器オプションサービス契約解約IF呼出処理を実施
								HashMap<String, Object> ekk2811c140Hash = new HashMap<String, Object>();
								callEKK2811C140SC(param, handle, kkopSvcKeiNo, kkopKeiUpdMap, ekk2811a010Msg, ekk2811c140Hash);
								// 更新年月日時分秒(更新前)を取得
//↓↓↓2014-01-24変更　IT2-2014-0000076（照査済の多機能ルータが解約されずに残りっぱ）↓↓↓
//								String UdYmd =  (String)ekk2811c140Hash.get(EKK2811C140CBSMsg.UPD_DTM);
								UdYmd =  (String)ekk2811c140Hash.get(EKK2811C140CBSMsg.UPD_DTM);
//↑↑↑2014-01-24変更　IT2-2014-0000076（照査済の多機能ルータが解約されずに残りっぱ）↑↑↑
								
								// 機器オプションサービス契約解約確定IF呼出処理を実施
								HashMap<String, Object> ekk2811c150Hash = new HashMap<String, Object>();

								// ▼▼▼▼▼ OM-2015-0002509 2015/10/06 MOD START ▼▼▼▼▼
								// 解約時課金フラグを引渡すように修正
								dsl_ji_Chrg = chkDslJiChrg(param, handle, kktkSvcKeiNo, svc_kei_no, rsvAplyYmd,dsl_ji_Chrg);
								// callEKK2811C150SC(param, handle, kkopSvcKeiNo, kkopKeiUpdMap, ekk2811a010Msg, ekk2811c150Hash,UdYmd);
								callEKK2811C150SC(param, handle, kkopSvcKeiNo, kkopKeiUpdMap, ekk2811a010Msg, ekk2811c150Hash,UdYmd,dsl_ji_Chrg);
								// ▲▲▲▲▲ OM-2015-0002509 2015/10/06 MOD END ▲▲▲▲▲
								
								if (null != ekk2811c150Hash && ekk2811c150Hash.size() > 0)
								{
									// 機器提供サービス契約更新用リストへ機器オプション解約を行った機器の情報を追加
									String dslSvcKeiNo = (String)kkopKeiUpdMap.get(KEY_KKTK_SVC_KEI_NO);
									kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO_UPD, dslSvcKeiNo);
									kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_NO_UPD, kkopSvcKeiNo);
									kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_STAT_UPD, (String)ekk2811c150Hash.get(EKK2811C150CBSMsg.KKOP_SVC_KEI_STAT));
									kktkSvcKeiUpdList.add(kktkSvcKeiInfo);
									// 解約確定後の更新年月日時分秒(更新前)を取得
									UdYmd =  (String)ekk2811c150Hash.get(EKK2811C150CBSMsg.UPD_DTM);
									kkopKeiUpdMap.put(KEY_UPD_DTM_BF,UdYmd);
								}
							}		//2014-01-24追加　IT2-2014-0000076（照査済の多機能ルータが解約されずに残りっぱ）
							// OM-2014-0002322 強制解約時にキャンセル済の多機能ルーターに対する旧機器を回復しようとしてエラー 2014/07/09 START
							// 解約済、キャンセル済の場合
							else
							{
								// 機器オプションに対して振る舞わないため、後続処理を行わない
								continue;
							}
							// OM-2014-0002322 強制解約時にキャンセル済の多機能ルーターに対する旧機器を回復しようとしてエラー 2014/07/09 END

							// 自分のサービスの対となるサービスの存在有無確認
							String kkopSvcCd = "";
							String pea_kakutei_svc_kei_no = "";
							String candsl_mskm_dtl_no = "";
							if (null != svcCd && !"".equals(svcCd)) 
							{
								// 自サービスがネットの場合にVA、電話の場合にルータの存在有無を確認する
								if (SVC_CD_NET.equals(svcCd))
								{
									kkopSvcCd = KKOP_SVC_CD_VA;
								} else {
									kkopSvcCd = KKOP_SVC_CD_RT;
								}
								
								// EKK0081B029_同一回線内訳サービス契約一覧照会を実施
								HashMap<String, Object> EKK0081B029Hash = new HashMap<String, Object>();
								callEKK0081B029SC(param, handle, svc_kei_no , geneAddDtm, rsvAplyYmd, EKK0081B029Hash); // 履歴一覧を取得
								// 同一回線内訳サービス契約一覧照会結果を取り出す
								CAANMsg[] eKK0081B029List = (CAANMsg[])EKK0081B029Hash.get(EKK0081B029CBSMsg.EKK0081B029CBSMSG1LIST);
								// 同一回線内訳サービス契約一覧照会にデータある場合
								if (eKK0081B029List != null && !"".equals(eKK0081B029List) && eKK0081B029List.length > 0) {
									for (int i = 0; i < eKK0081B029List.length ; i ++) {
										CAANMsg eKK0081B029Msg = eKK0081B029List[i];
										// サービスコード
										String targetPairSvcCd = "";
										// ネットなら電話、電話ならネット
										if (SVC_CD_NET.equals(svcCd))
										{
											targetPairSvcCd = SVC_CD_TEL;
										} else {
											targetPairSvcCd = SVC_CD_NET;
										}
										// ペアのサービス契約番号を取得
										String pea_svc_kei_no = (String)eKK0081B029Msg.getString(EKK0081B029CBSMsg1List.SVC_KEI_NO);
										
										// サービス契約一意照会サービスIF呼出処理を実施
										HashMap<String, Object> ekk0081a010PeaHash = new HashMap<String, Object>();
										callEKK0081A010SC(param, handle, pea_svc_kei_no, null, rsvAplyYmd, ekk0081a010PeaHash);
										// サービス契約情報を取り出す
										CAANMsg[] ekk0081a010PeaList = (CAANMsg[])ekk0081a010PeaHash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
									
										// 一意照会の結果を取得
										CAANMsg ekk0081a010Data = ekk0081a010PeaList[0];
										
										// ペアのサービス契約ステータスを取得
										String pairSvcKeiStat = ekk0081a010Data.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
										
										// ペアのサービス契約のサービスコードを取得
										String pairSvcCd = ekk0081a010Data.getString(EKK0081A010CBSMsg1List.SVC_CD);
										

										// ペアサービスコードがペア値と一致かつ解約・キャンセル状態以外の場合は後続処理を実施
										if (pairSvcCd != null && !"".equals(pairSvcCd)
											&& pairSvcKeiStat != null && !"".equals(pairSvcKeiStat) ) 	{
											if (targetPairSvcCd.equals(pairSvcCd) && !JKKSvcConst.SVC_KEI_STAT_910.equals(pairSvcKeiStat) && !JKKSvcConst.SVC_KEI_STAT_920.equals(pairSvcKeiStat)) {
												// ペアのサービス契約番号を取得
												pea_kakutei_svc_kei_no = (String)eKK0081B029Msg.getString(EKK0081B029CBSMsg1List.SVC_KEI_NO);
												
												// 回復する申込明細番号は連帯で作成した機器オプションの最古申込明細番号を取得する
											}
										}
									
									}
								}
								// 機器オプションサービス契約一覧照会IF呼出処理を実施
								HashMap<String, Object> ekk2811b010Hash = new HashMap<String, Object>();
								// OM-2014-0002322 強制解約時にキャンセル済の多機能ルーターに対する旧機器を回復しようとしてエラー 2014/07/09 START
								// 対の機器オプション情報を取得する条件に、処理対象の機器オプションサービス契約ステータスを指定している。
								// 変更手続中の場合、基本的に機器オプションのステータスは一致していると考えられるため実害は出ていないかもしれないが、
								// ステータスが一致していない場合に対の機器オプションを解約・キャンセルできないため修正。
								// 機器オプションサービス契約ステータスの条件指定を削除（潜在バグ）
//								callEKK2811B010SC(param, handle, kktkSvcKeiNo, kkopSvcStat, kkopSvcCd, null, ekk2811b010Hash);
								callEKK2811B010SC(param, handle, kktkSvcKeiNo, null, kkopSvcCd, null, ekk2811b010Hash);
								// OM-2014-0002322 強制解約時にキャンセル済の多機能ルーターに対する旧機器を回復しようとしてエラー 2014/07/09 END
								// サービス契約情報を取り出す
								CAANMsg[] ekk2811B010ListOther = (CAANMsg[])ekk2811b010Hash.get(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST);
								if (ekk2811B010ListOther != null && ekk2811B010ListOther.length != 0)
								{
									for (int l = 0; l < ekk2811B010ListOther.length; l++)
									{
										CAANMsg ekk2811b010MsgOther = ekk2811B010ListOther[l];
										String kikiRntaiKeiChgechuFlg = (String)ekk2811b010MsgOther.getString(EKK2811B010CBSMsg1List.KIKI_RNTAI_KEI_CHGECHU_FLG);
										// 対の機器オプションサービス契約番号を取得
										String pea_kkop_svc_kei_no = (String)ekk2811b010MsgOther.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO);
										
										// 機器連帯契約変更手続中フラグが"1"の場合のみ後続処理を実行、それ以外はcontinue(空白または１以外の場合はキャンセル)
										// IT2-2013-00000853 2013/12/18 START
										if (null == kikiRntaiKeiChgechuFlg || !KIKI_RNTAI_KEI_CHGECHU_FLG_CHGECHU.equals(kikiRntaiKeiChgechuFlg))
										// IT2-2013-00000853 2013/12/18 END
										{
											continue;
										}
										
										// 排他時間の特定
										// 排他時間を取得する
										String haitatime = "";
										
										// 機器オプションサービス契約一意照会IF呼出処理を実施
										HashMap<String, Object> ekk2811a010peaHash = new HashMap<String, Object>();
										callEKK2811A010SC(param, handle, pea_kkop_svc_kei_no, geneAddDtm, rsvAplyYmd, ekk2811a010peaHash);		// カレントを取得
										// ペアの機器オプションサービス契約情報を取り出す
										CAANMsg[] ekk2811A010peaList = (CAANMsg[])ekk2811a010peaHash.get(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST);
										// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 START
										CAANMsg ekk2811a010peaMsg = new CAANMsg();
										// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 END
										if (ekk2811A010peaList != null && ekk2811A010peaList.length != 0)
										{
											for (int pk = 0; pk < ekk2811A010peaList.length; pk++)
											{
												// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 START
//												CAANMsg ekk2811a010peaMsg = ekk2811A010peaList[pk];
												ekk2811a010peaMsg = ekk2811A010peaList[pk];
												// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 END
												// 機器オプションサービス契約ステータスを取得
												haitatime = (String)ekk2811a010peaMsg.getString(EKK2811A010CBSMsg1List.LAST_UPD_DTM);
												// ペアの機器オプションの排他時間を全体の更新時間にセットする
												// キャンセル解約外は不要
												String kkop_stat = (String)ekk2811a010peaMsg.getString(EKK2811A010CBSMsg1List.KKOP_SVC_KEI_STAT);
												if (!"910".equals(kkop_stat) && !"920".equals(kkop_stat)) {
													kkopKeiUpdMap.put(KEY_UPD_DTM_BF,haitatime);
												}
											}
										}
										
										
										// 機器オプションサービス契約ステータスにより後続処理を分岐
										String kkopSvcStatOther = (String)ekk2811b010MsgOther.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT);
										if (JKKSvcConst.SVC_KEI_STAT_010.equals(kkopSvcStatOther) || JKKSvcConst.SVC_KEI_STAT_020.equals(kkopSvcStatOther))
										{
											// 機器オプションサービス契約キャンセルIF呼出処理を実施
											HashMap<String, Object> ekk2811c110Hash = new HashMap<String, Object>();
											// IT2-2013-00000853 2013/12/18 START
											// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 START
//											callEKK2811C110SC(param, handle, pea_kkop_svc_kei_no, kkopKeiUpdMap, ekk2811c110Hash);
											callEKK2811C110SC(param, handle, pea_kkop_svc_kei_no, kkopKeiUpdMap, ekk2811a010peaMsg, ekk2811c110Hash);
											// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 END
											// IT2-2013-00000853 2013/12/18 END
											UdYmd =  (String)ekk2811c110Hash.get(EKK2811C110CBSMsg.UPD_DTM);
											kkopKeiUpdMap.put(KEY_UPD_DTM_BF,UdYmd);
											// OM-2019-0001446 2020/01/22 ADD START
											// 機器連帯契約変更手続中の機器オプションの解約フラグを立てる
											kikiRntaiKeiKkopSvcDslCnslFlg = "1";
											// OM-2019-0001446 2020/01/22 ADD END
										}
										else if (JKKSvcConst.SVC_KEI_STAT_030.equals(kkopSvcStatOther))
										{
											// 機器オプションサービス契約解約IF呼出処理を実施
											HashMap<String, Object> ekk2811c140HashOther = new HashMap<String, Object>();
											// IT2-2013-00000853 2013/12/18 START
											// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 START
											// ※ペアの機器オプションサービス契約一意照会結果が引数になっていない（潜在バグ）
//											callEKK2811C140SC(param, handle, pea_kkop_svc_kei_no, kkopKeiUpdMap, ekk2811a010Msg, ekk2811c140HashOther);
											callEKK2811C140SC(param, handle, pea_kkop_svc_kei_no, kkopKeiUpdMap, ekk2811a010peaMsg, ekk2811c140HashOther);
											// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 END
											// IT2-2013-00000853 2013/12/18 END
											// 更新年月日時分秒(更新前)を取得
											String udYmd =  (String)ekk2811c140HashOther.get(EKK2811C140CBSMsg.UPD_DTM);
											// 機器オプションサービス契約解約確定IF呼出処理を実施
											HashMap<String, Object> ekk2811c150HashOther = new HashMap<String, Object>();
											
											// ▼▼▼▼▼ OM-2015-0002509 2015/10/06 MOD START ▼▼▼▼▼
//											// IT2-2013-00000853 2013/12/18 STRAT
//											callEKK2811C150SC(param, handle, pea_kkop_svc_kei_no, kkopKeiUpdMap, ekk2811a010Msg, ekk2811c150HashOther,udYmd);
//											// IT2-2013-00000853 2013/12/18 END

											// 解約時課金フラグを引渡すように修正
											dsl_ji_Chrg = chkDslJiChrg(param, handle, kktkSvcKeiNo, pea_kkop_svc_kei_no, rsvAplyYmd,dsl_ji_Chrg);
											callEKK2811C150SC(param, handle, pea_kkop_svc_kei_no, kkopKeiUpdMap, ekk2811a010Msg, ekk2811c150HashOther,udYmd,dsl_ji_Chrg);
											// ▲▲▲▲▲ OM-2015-0002509 2015/10/06 MOD END ▲▲▲▲▲
											
											UdYmd =  (String)ekk2811c150HashOther.get(EKK2811C150CBSMsg.UPD_DTM);
											kkopKeiUpdMap.put(KEY_UPD_DTM_BF,UdYmd);
											// OM-2019-0001446 2020/01/22 ADD START
											// 機器連帯契約変更手続中の機器オプションの解約フラグを立てる
											kikiRntaiKeiKkopSvcDslCnslFlg = "1";
											// OM-2019-0001446 2020/01/22 ADD END
										}
										// OM-2014-0002322 強制解約時にキャンセル済の多機能ルーターに対する旧機器を回復しようとしてエラー 2014/07/09 START
										else
										{
											// 対の機器オプションを解約・キャンセルしていない場合は、後続処理を行わない
											continue;
										}
										// OM-2014-0002322 強制解約時にキャンセル済の多機能ルーターに対する旧機器を回復しようとしてエラー 2014/07/09 END

										// OM-2014-0002322 強制解約時にキャンセル済の多機能ルーターに対する旧機器を回復しようとしてエラー 2014/07/09 START
//										if (pea_kkop_svc_kei_no != null && !"".equals(pea_kkop_svc_kei_no)) {
										if (pea_kkop_svc_kei_no != null && !"".equals(pea_kkop_svc_kei_no)
											&& null != pea_kakutei_svc_kei_no && !"".equals(pea_kakutei_svc_kei_no))
										{
										// OM-2014-0002322 強制解約時にキャンセル済の多機能ルーターに対する旧機器を回復しようとしてエラー 2014/07/09 END
											
											// IT2-2013-00000853 2013/12/18 START
											// 機器オプションサービス契約履歴一覧照会を実施
											HashMap<String, Object> EKK2811B012Hash = new HashMap<String, Object>();
											callEKK2811B012SC(param, handle, pea_kkop_svc_kei_no, geneAddDtm, rsvAplyYmd, EKK2811B012Hash); // 履歴一覧を取得
											// 機器オプションサービス契約一意照会結果を取り出す
											CAANMsg[] eKK2811B012List = (CAANMsg[])EKK2811B012Hash.get(EKK2811B012CBSMsg.EKK2811B012CBSMSG1LIST);
											if (eKK2811B012List != null && !"".equals(eKK2811B012List) && eKK2811B012List.length > 0) {
												// キャンセル解約時申込明細番号
												int mskmLength = eKK2811B012List.length - 1;
												candsl_mskm_dtl_no = eKK2811B012List[mskmLength].getString(EKK2811B012CBSMsg1List.MSKM_DTL_NO);
											}
											// IT2-2013-00000853 2013/12/18 END

											// 旧機器を回復する動き
											// 旧旧機器解約処理を実施
											String workFixedText = "oldKkCnlDelKhkCC";
											HashMap<String, Object> trgt_data = new HashMap<String, Object>();
											
											createUserData(param, workFixedText);
											HashMap<String, Object> outMap = (HashMap)param.getData(workFixedText);
											ArrayList<HashMap> list = new ArrayList<HashMap>();
											list.add(new HashMap<String, Object>());
											outMap.put("trgt_data_list", list);
											
											// サービス契約番号を渡す（セットの電話）
											trgt_data.put("svc_kei_no", pea_kakutei_svc_kei_no);
											// 申込明細番号を渡す
											trgt_data.put("mskm_sho_dtl_no", now_mskm_dtl_no);
											// キャンセル解約時申込明細番号を渡す
											trgt_data.put("candsl_mskm_dtl_no", candsl_mskm_dtl_no);
											// 異動区分を渡す
											trgt_data.put("ido_div", ido_div);
											//旧機器に対して回復を行う更新処理を呼出す
											
											JKKBpCommon.oldKkKhkCall(handle, param, trgt_data, workFixedText);
											
											HashMap workOutMap = (HashMap)param.getData(workFixedText);
											ArrayList<HashMap> workArrayList = (ArrayList<HashMap>)workOutMap.get("trgt_data_list");
											HashMap workKktkCoshjMap = workArrayList.get(1);
											// 機器提供サービス契約の更新年月日を取得
											String kktk_up_dtm = (String)workKktkCoshjMap.get(JKKOldKkCnlDelKhkCC.KEY_UPD_DTM);
											
											if (kktk_up_dtm != null && !"".equals(kktk_up_dtm)) {
												kkopKeiUpdMap.put(KEY_UPD_DTM_BF,kktk_up_dtm);
												// 回復した旧機器の情報をセット
												kkopKeiUpdMap.put(KEY_SVC_KEI_NO_PAIR, pea_kakutei_svc_kei_no);	// ペアのサービス契約番号と更新年月日時分秒を保持
												kkopKeiUpdMap.put(KEY_UPD_DTM_PAIR, kktk_up_dtm);
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
		// OM-2019-0001446 2020/01/22 ADD START
		// 機器連帯契約変更手続中の機器オプションの解約フラグを呼び出し元に返却する
		HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedTextGlobal);
		paramMap.put("kiki_rntai_kei_kkop_svc_dsl_cnsl_Flg", kikiRntaiKeiKkopSvcDslCnslFlg);
		// OM-2019-0001446 2020/01/22 ADD END
		
		return kktkSvcKeiUpdList;
	}

	/**
	 * キャンセル処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ekk2811B010List 機器オプションサービス契約一覧照会（機器提供サービス契約番号）明細
	 * @param hikitsugiMap 機器オプションサービス契約更新マップ
	 * @param svc_cd サービスコード
	 * @return 機器提供サービス契約更新用リスト
	 * @throws Throwable 例外時にスローします
	 */
	private ArrayList<HashMap<String, Object>> cancelTran(SessionHandle handle,
			IRequestParameterReadWrite param,
			CAANMsg[] ekk2811B010List, HashMap<String, Object> hikitsugiMap, String svc_cd) throws Throwable {

		// 機器提供サービス契約更新用リスト
		ArrayList<HashMap<String, Object>> kktkSvcKeiUpdList = new ArrayList<HashMap<String, Object>>();
		// OM-2019-0001446 2020/01/22 ADD START
		// 機器連帯契約変更手続中の機器オプションを解約キャンセルしたこと判定するフラグ
		String kikiRntaiKeiKkopSvcDslCnslFlg = "0";
		// OM-2019-0001446 2020/01/22 ADD END
		
		// 機器オプションサービス契約分だけ実施する
		if (ekk2811B010List != null && ekk2811B010List.length > 0)
		{
			String kkopSvcKeiNo = "";
			String kktkSvcKeiNo = "";
			String geneAddDtm = "";
			String rsvAplyYmd = JCCBPCommon.getOpeDate(null);
			String kkopSvcStat = "";
			// 予約年月日 = 運用日
			rsvAplyYmd = JCCBPCommon.getOpeDate(null);
			String mskm_dtl_no = (String)hikitsugiMap.get(KEY_DSLCL_MSKM_DTL_NO);
			String svc_kei_no = (String)hikitsugiMap.get(KEY_SVC_KEI_NO);
			String UdYmd;
			// 申込番号（現在実施中）
			String now_mskm_dtl_no = (String)hikitsugiMap.get(KEY_MSKM_DTL_NO);
			// 異動区分
			String ido_div = (String)hikitsugiMap.get(KEY_IDO_DIV);
			
			for (int j = 0; j < ekk2811B010List.length; j++)
			{
				HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
				kkopSvcKeiNo = (String)ekk2811B010List[j].getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO);
				kktkSvcKeiNo = (String)ekk2811B010List[j].getString(EKK2811B010CBSMsg1List.KKTK_SVC_KEI_NO);
				// 機器オプションサービス契約一意照会IF呼出処理を実施
				HashMap<String, Object> ekk2811a010Hash = new HashMap<String, Object>();
				callEKK2811A010SC(param, handle, kkopSvcKeiNo, geneAddDtm, rsvAplyYmd, ekk2811a010Hash);		// カレントを取得
				// サービス契約情報を取り出す
				CAANMsg[] ekk2811A010List = (CAANMsg[])ekk2811a010Hash.get(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST);
				if (ekk2811A010List != null && ekk2811A010List.length  != 0)
				{
					for (int k = 0; k < ekk2811A010List.length; k++)
					{
						CAANMsg ekk2811a010Msg = ekk2811A010List[k];
						// 機器オプションサービス契約ステータスを取得
						kkopSvcStat = (String)ekk2811A010List[k].getString(EKK2811A010CBSMsg1List.KKOP_SVC_KEI_STAT);
						// 機器オプションサービスステータスが受付済、照査済、締結済が対象ステータスになる
						// 上記以外のステータスの場合は次のレコードの処理を行う
						if (!JKKSvcConst.SVC_KEI_STAT_010.equals(kkopSvcStat)
								&& !JKKSvcConst.SVC_KEI_STAT_020.equals(kkopSvcStat)
								&& !JKKSvcConst.SVC_KEI_STAT_030.equals(kkopSvcStat))
						{
							continue;
						}
						// ０１０「受付済」、０２０「照査済」の場合キャンセルを実行する
						// EKK2811C110_機器オプションサービス契約キャンセルを実施
						if (JKKSvcConst.SVC_KEI_STAT_010.equals(kkopSvcStat) || JKKSvcConst.SVC_KEI_STAT_020.equals(kkopSvcStat)) {
							HashMap<String, Object> ekk2811c110Hash = new HashMap<String, Object>();
							// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 START
//							int return_cd = callEKK2811C110SC(param, handle, kkopSvcKeiNo, hikitsugiMap, ekk2811c110Hash);
							int return_cd = callEKK2811C110SC(param, handle, kkopSvcKeiNo, hikitsugiMap, ekk2811a010Msg, ekk2811c110Hash);
							// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 END
							// リターンコード
							if (return_cd == 0) {
								kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO_UPD, (String)hikitsugiMap.get(KEY_KKTK_SVC_KEI_NO));
								kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_NO_UPD, kkopSvcKeiNo);
								kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_STAT_UPD, (String)ekk2811c110Hash.get(EKK2811C110CBSMsg.KKOP_SVC_KEI_STAT));
								kktkSvcKeiUpdList.add(kktkSvcKeiInfo);
								UdYmd =  (String)ekk2811c110Hash.get(EKK2811C110CBSMsg.UPD_DTM);
								hikitsugiMap.put(KEY_UPD_DTM_BF,UdYmd);
							}
						}
						// ０３０「締結済」の場合は解約、解約確定を実行する
						// EKK2811C140_機器オプションサービス契約解約を実施
						else if (JKKSvcConst.SVC_KEI_STAT_030.equals(kkopSvcStat)) {
							HashMap<String, Object> ekk2811c140HashOther = new HashMap<String, Object>();
							int return_cd = callEKK2811C140SC(param, handle, kkopSvcKeiNo, hikitsugiMap, ekk2811a010Msg, ekk2811c140HashOther);
							// リターンコード
							if (return_cd == 0) {
								String UdKktkYmd =  (String)ekk2811c140HashOther.get(EKK2811C140CBSMsg.UPD_DTM);
								// EKK2811C150_機器オプションサービス契約解約確定を実施
								HashMap<String, Object> ekk2811c150HashOther = new HashMap<String, Object>();
								// ▼▼▼▼▼ OM-2015-0002509 2015/10/06 MOD START ▼▼▼▼▼
//								int returnCd_EKK2811C150 = callEKK2811C150SC(param, handle, kkopSvcKeiNo, hikitsugiMap, ekk2811a010Msg, ekk2811c150HashOther,UdKktkYmd);

								// 解約時課金フラグを引渡すように修正(キャンセル時は非課金固定)
								int returnCd_EKK2811C150 = callEKK2811C150SC(param, handle, kkopSvcKeiNo, hikitsugiMap, ekk2811a010Msg, ekk2811c150HashOther,UdKktkYmd,"0");
								// ▲▲▲▲▲ OM-2015-0002509 2015/10/06 MOD END ▲▲▲▲▲
								
								// 更新が正常に終了する場合
								if (returnCd_EKK2811C150 == 0) {
									kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO_UPD, (String)hikitsugiMap.get(KEY_KKTK_SVC_KEI_NO));
									kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_NO_UPD, kkopSvcKeiNo);
									kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_STAT_UPD, (String)ekk2811c150HashOther.get(EKK2811C150CBSMsg.KKOP_SVC_KEI_STAT));
									kktkSvcKeiUpdList.add(kktkSvcKeiInfo);
									UdYmd =  (String)ekk2811c150HashOther.get(EKK2811C150CBSMsg.UPD_DTM);
									hikitsugiMap.put(KEY_UPD_DTM_BF,UdYmd);
								}
							}
						}
						
						// 機器提供サービス契約更新用リストが空でない場合
						if (kktkSvcKeiUpdList != null && !"".equals(kktkSvcKeiUpdList) && kktkSvcKeiUpdList.size() > 0) {
							// ＜＜機器連帯契約対象更新＞＞
							// 自分のサービスの対となるサービスの存在有無確認
							String kkopSvcCd = "";
							String pea_kakutei_svc_kei_no = "";
							String candsl_mskm_dtl_no = "";
							if (null != svc_cd && !"".equals(svc_cd)) 
							{
								// 自サービスがネットの場合にVA、電話の場合にルータの存在有無を確認する
								// EKK0081B029_同一回線内訳サービス契約一覧照会を実施
								HashMap<String, Object> EKK0081B029Hash = new HashMap<String, Object>();
								callEKK0081B029SC(param, handle, svc_kei_no , geneAddDtm, rsvAplyYmd, EKK0081B029Hash); // 履歴一覧を取得
								// 同一回線内訳サービス契約一覧照会結果を取り出す
								CAANMsg[] eKK0081B029List = (CAANMsg[])EKK0081B029Hash.get(EKK0081B029CBSMsg.EKK0081B029CBSMSG1LIST);
								// 同一回線内訳サービス契約一覧照会にデータある場合
								if (eKK0081B029List != null && !"".equals(eKK0081B029List) && eKK0081B029List.length > 0) {
									for (int i = 0; i < eKK0081B029List.length ; i ++) {
										CAANMsg eKK0081B029Msg = eKK0081B029List[i];
										// サービスコード
										String targetPairSvcCd = "";
										// ネットなら電話、電話ならネット
										if (SVC_CD_NET.equals(svc_cd))
										{
											targetPairSvcCd = SVC_CD_TEL;
										} else {
											targetPairSvcCd = SVC_CD_NET;
										}
										// ペアのサービス契約番号を取得
										String pea_svc_kei_no = (String)eKK0081B029Msg.getString(EKK0081B029CBSMsg1List.SVC_KEI_NO);
										
										// サービス契約一意照会サービスIF呼出処理を実施
										HashMap<String, Object> ekk0081a010PeaHash = new HashMap<String, Object>();
										callEKK0081A010SC(param, handle, pea_svc_kei_no, null, rsvAplyYmd, ekk0081a010PeaHash);
										// サービス契約情報を取り出す
										CAANMsg[] ekk0081a010PeaList = (CAANMsg[])ekk0081a010PeaHash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
									
										// 一意照会の結果を取得
										CAANMsg ekk0081a010Data = ekk0081a010PeaList[0];
										
										// ペアのサービス契約ステータスを取得
										String pairSvcKeiStat = ekk0081a010Data.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
										
										// ペアのサービス契約のサービスコードを取得
										String pairSvcCd = ekk0081a010Data.getString(EKK0081A010CBSMsg1List.SVC_CD);
										
										// ペアサービスコードがペア値と一致かつ解約・キャンセル状態以外の場合は後続処理を実施
										if (pairSvcCd != null && !"".equals(pairSvcCd)
											&& pairSvcKeiStat != null && !"".equals(pairSvcKeiStat) ) 	{
											if (targetPairSvcCd.equals(pairSvcCd) && !JKKSvcConst.SVC_KEI_STAT_910.equals(pairSvcKeiStat) && !JKKSvcConst.SVC_KEI_STAT_920.equals(pairSvcKeiStat)) {
												// ペアのサービス契約番号を取得
												pea_kakutei_svc_kei_no = (String)eKK0081B029Msg.getString(EKK0081B029CBSMsg1List.SVC_KEI_NO);
												
												// 解約キャンセル時の申込明細番号用（照査履歴の最古レコード）
												// 申込明細履歴一覧照会
												// サービス契約一意照会サービスIF呼出処理を実施
												HashMap<String, Object> EKK0021B002PeaHash = new HashMap<String, Object>();
												callEKK0021B002SC(param, handle, svc_kei_no,EKK0021B002PeaHash);
												// 申込明細履歴一覧照会情報を取り出す
												CAANMsg[] EKK0021B002PeaList = (CAANMsg[])EKK0021B002PeaHash.get(EKK0021B002CBSMsg.EKK0021B002CBSMSG1LIST);
												if (EKK0021B002PeaList != null && !"".equals(EKK0021B002PeaList) && EKK0021B002PeaList.length > 0) {
													// キャンセル解約時申込明細番号
													int mskmLength = EKK0021B002PeaList.length - 1;
													candsl_mskm_dtl_no = EKK0021B002PeaList[mskmLength].getString(EKK0021B002CBSMsg1List.MSKM_DTL_NO);
												}
											}
										}
									
									}
								}
							}
							
							
							// ペアの機器オプション情報を取得
							String updKkopSvcCd = "";
							if (SVC_CD_NET.equals(svc_cd))
							{
								updKkopSvcCd = KKOP_SVC_CD_VA;
							} else {
								updKkopSvcCd = KKOP_SVC_CD_RT;
							}
							// EKK2811B010 機器オプションサービス契約一覧照会を実施（回復対象がネットならVA機能「G02」、電話ならルータ機能「G01」指定）
							HashMap<String, Object> ekk2811b010HashUpd = new HashMap<String, Object>();
							// 機器サービス契約番号、指定サービスコードにて検索(ステータス指定不要)
							callEKK2811B010SC(param, handle, kktkSvcKeiNo, null, updKkopSvcCd, null, ekk2811b010HashUpd);
							// 機器オプションサービス契約情報を取り出す
							CAANMsg[] ekk2811B010ListUpd = (CAANMsg[])ekk2811b010HashUpd.get(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST);
							
							// 機器オプションサービス契約情報
							if (ekk2811B010ListUpd != null && !"".equals(ekk2811B010ListUpd) && ekk2811B010ListUpd.length > 0) {
								for (int i = 0 ; i < ekk2811B010ListUpd.length ; i++ ) {
									CAANMsg ekk2811B010Msg = ekk2811B010ListUpd[i];
									
									// 機器連帯契約変更手続中フラグ取得
									String kkRenkeiHenkouFlg = ekk2811B010Msg.getString(EKK2811B010CBSMsg1List.KIKI_RNTAI_KEI_CHGECHU_FLG);
									
									// ペアの機器オプションサービス契約番号を取得
									String pea_kkop_svc_kei_no = ekk2811B010Msg.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO);
									
									// 機器オプションステータスを取得
									String pea_kkop_svc_kei_stat = ekk2811B010Msg.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT);
									
									// 排他時間を取得する
									String haitatime = "";
									
									// 機器オプションサービス契約一意照会IF呼出処理を実施
									HashMap<String, Object> ekk2811a010peaHash = new HashMap<String, Object>();
									callEKK2811A010SC(param, handle, pea_kkop_svc_kei_no, geneAddDtm, rsvAplyYmd, ekk2811a010peaHash);		// カレントを取得
									// ペアの機器オプションサービス契約情報を取り出す
									CAANMsg[] ekk2811A010peaList = (CAANMsg[])ekk2811a010peaHash.get(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST);
									// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 START
									CAANMsg ekk2811a010peaMsg = new CAANMsg();
									// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 END

									if (ekk2811A010peaList != null && ekk2811A010peaList.length != 0)
									{
										for (int pk = 0; pk < ekk2811A010peaList.length; pk++)
										{
											// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 START
//											CAANMsg ekk2811a010peaMsg = ekk2811A010peaList[pk];
											ekk2811a010peaMsg = ekk2811A010peaList[pk];
											// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 END
											// 機器オプションサービス契約ステータスを取得
											haitatime = (String)ekk2811a010peaMsg.getString(EKK2811A010CBSMsg1List.LAST_UPD_DTM);
											// ペアの機器オプションサービス契約が０１０、０２０、０３０以外の場合は後続処理しない
											if (JKKSvcConst.SVC_KEI_STAT_010.equals(pea_kkop_svc_kei_stat)
													|| !JKKSvcConst.SVC_KEI_STAT_020.equals(pea_kkop_svc_kei_stat)
													|| !JKKSvcConst.SVC_KEI_STAT_030.equals(pea_kkop_svc_kei_stat))
											{
												hikitsugiMap.put(KEY_UPD_DTM_BF,haitatime);
											}
										}
									}
									
									// 機器連帯契約変更手続中フラグが１以外の場合、後続処理を実施しない
									if ("1".equals(kkRenkeiHenkouFlg)) {
										// 機器連帯契約変更手続中フラグが１の場合、ペア機器オプションのステータスを確認・処理する
										// ペアの機器オプションサービス契約が０１０、０２０、０３０以外の場合は後続処理しない
										if (!JKKSvcConst.SVC_KEI_STAT_010.equals(pea_kkop_svc_kei_stat)
												&& !JKKSvcConst.SVC_KEI_STAT_020.equals(pea_kkop_svc_kei_stat)
												&& !JKKSvcConst.SVC_KEI_STAT_030.equals(pea_kkop_svc_kei_stat))
										{
											continue;
										}
										
										if (JKKSvcConst.SVC_KEI_STAT_010.equals(pea_kkop_svc_kei_stat) || JKKSvcConst.SVC_KEI_STAT_020.equals(pea_kkop_svc_kei_stat)) {
											// ステータスが０１０「受付済」、０２０「照査済」の場合
											// EKK2811C110_機器オプションサービス契約キャンセルを実施
											HashMap<String, Object> ekk2811c110Hash = new HashMap<String, Object>();
											// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 START
//											callEKK2811C110SC(param, handle, pea_kkop_svc_kei_no, hikitsugiMap, ekk2811c110Hash);
											callEKK2811C110SC(param, handle, pea_kkop_svc_kei_no, hikitsugiMap, ekk2811a010peaMsg, ekk2811c110Hash);
											// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 END
											UdYmd =  (String)ekk2811c110Hash.get(EKK2811C110CBSMsg.UPD_DTM);
											hikitsugiMap.put(KEY_UPD_DTM_BF,UdYmd);
											// OM-2019-0001446 2020/01/22 ADD START
											// 機器連帯契約変更手続中の機器オプションの解約フラグを立てる
											kikiRntaiKeiKkopSvcDslCnslFlg = "1";
											// OM-2019-0001446 2020/01/22 ADD END
										}
										else if (JKKSvcConst.SVC_KEI_STAT_030.equals(pea_kkop_svc_kei_stat))
										{
											// ステータスが０３０「締結済」の場合
											// EKK2811C140_機器オプションサービス契約解約を実施
											HashMap<String, Object> ekk2811c140HashOther = new HashMap<String, Object>();
											// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 START
											// ※ekk2811B010Msgは最終更新年月日時分秒を保持していない（潜在バグ）
//											int return_cd = callEKK2811C140SC(param, handle, pea_kkop_svc_kei_no, hikitsugiMap, ekk2811B010Msg, ekk2811c140HashOther);
											int return_cd = callEKK2811C140SC(param, handle, pea_kkop_svc_kei_no, hikitsugiMap, ekk2811a010peaMsg, ekk2811c140HashOther);
											// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 END
											// リターンコード
											if (return_cd == 0) {
												String UdKKopYmd =  (String)ekk2811c140HashOther.get(EKK2811C140CBSMsg.UPD_DTM);
												// EKK2811C150_機器オプションサービス契約解約確定を実施
												HashMap<String, Object> ekk2811c150HashOther = new HashMap<String, Object>();
												// ▼▼▼▼▼ OM-2015-0002509 2015/10/06 MOD START ▼▼▼▼▼
//												callEKK2811C150SC(param, handle, pea_kkop_svc_kei_no, hikitsugiMap, ekk2811B010Msg, ekk2811c150HashOther,UdKKopYmd);

												// 解約時課金フラグを引渡すように修正(キャンセル時は非課金固定)
												callEKK2811C150SC(param, handle, pea_kkop_svc_kei_no, hikitsugiMap, ekk2811B010Msg, ekk2811c150HashOther,UdKKopYmd,"0");
												// ▲▲▲▲▲ OM-2015-0002509 2015/10/06 MOD END ▲▲▲▲▲
												UdYmd =  (String)ekk2811c150HashOther.get(EKK2811C150CBSMsg.UPD_DTM);
												hikitsugiMap.put(KEY_UPD_DTM_BF,UdYmd);
											}
											// OM-2019-0001446 2020/01/22 ADD START
											// 機器連帯契約変更手続中の機器オプションの解約フラグを立てる
											kikiRntaiKeiKkopSvcDslCnslFlg = "1";
											// OM-2019-0001446 2020/01/22 ADD END
										}
										

										if (pea_kakutei_svc_kei_no != null && !"".equals(pea_kakutei_svc_kei_no) &&
												pea_kkop_svc_kei_no != null && !"".equals(pea_kkop_svc_kei_no))
										{
											// IT2-2013-00000853 2013/12/18 STRAT
											// 機器オプションサービス契約履歴一覧照会を実施
											HashMap<String, Object> EKK2811B012Hash = new HashMap<String, Object>();
											callEKK2811B012SC(param, handle, pea_kkop_svc_kei_no, geneAddDtm, rsvAplyYmd, EKK2811B012Hash); // 履歴一覧を取得
											// 機器オプションサービス契約一意照会結果を取り出す
											CAANMsg[] eKK2811B012List = (CAANMsg[])EKK2811B012Hash.get(EKK2811B012CBSMsg.EKK2811B012CBSMSG1LIST);
											if (eKK2811B012List != null && !"".equals(eKK2811B012List) && eKK2811B012List.length > 0) {
												// キャンセル解約時申込明細番号
												int mskmLength = eKK2811B012List.length - 1;
												candsl_mskm_dtl_no = eKK2811B012List[mskmLength].getString(EKK2811B012CBSMsg1List.MSKM_DTL_NO);
											}
											// IT2-2013-00000853 2013/12/18 END
											// 旧機器を回復する動き
											// 旧旧機器解約処理を実施
											String workFixedText = "oldKkCnlDelKhkCC";
											HashMap<String, Object> trgt_data = new HashMap<String, Object>();
											
											createUserData(param, workFixedText);
											HashMap<String, Object> outMap = (HashMap)param.getData(workFixedText);
											ArrayList<HashMap> list = new ArrayList<HashMap>();
											list.add(new HashMap<String, Object>());
											outMap.put("trgt_data_list", list);
											
											// サービス契約番号を渡す（セットの電話）
											trgt_data.put("svc_kei_no", pea_kakutei_svc_kei_no);
											// 申込明細番号を渡す
											trgt_data.put("mskm_sho_dtl_no", now_mskm_dtl_no);
											// キャンセル解約時申込明細番号
											trgt_data.put("candsl_mskm_dtl_no", candsl_mskm_dtl_no);
											// 異動区分を渡す
											trgt_data.put("ido_div", ido_div);
											//旧機器に対して回復を行う更新処理を呼出す
											
											JKKBpCommon.oldKkKhkCall(handle, param, trgt_data, workFixedText);
											
											HashMap workOutMap = (HashMap)param.getData(workFixedText);
											ArrayList<HashMap> workArrayList = (ArrayList<HashMap>)workOutMap.get("trgt_data_list");
											HashMap workKktkCoshjMap = workArrayList.get(1);
											// 機器提供サービス契約の更新年月日を取得
											String kktk_up_dtm = (String)workKktkCoshjMap.get(JKKOldKkCnlDelKhkCC.KEY_UPD_DTM);
											
											if (kktk_up_dtm != null && !"".equals(kktk_up_dtm)) {
												hikitsugiMap.put(KEY_UPD_DTM_BF,kktk_up_dtm);
												// 回復した旧機器の情報をセット
												hikitsugiMap.put(KEY_SVC_KEI_NO_PAIR, pea_kakutei_svc_kei_no);	// ペアのサービス契約番号と更新年月日時分秒を保持
												hikitsugiMap.put(KEY_UPD_DTM_PAIR, kktk_up_dtm);
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
		// OM-2019-0001446 2020/01/22 ADD START
		// 機器連帯契約変更手続中の機器オプションの解約キャンセルフラグを呼び出し元に返却する
		HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedTextGlobal);
		paramMap.put("kiki_rntai_kei_kkop_svc_dsl_cnsl_Flg", kikiRntaiKeiKkopSvcDslCnslFlg);
		// OM-2019-0001446 2020/01/22 ADD END
		
		return kktkSvcKeiUpdList;
	}

// ▽▽▽ ANK-3412-00-00 DEL START
//	/**
//	 * コース変更処理
//	 * @param handle セッションハンドル
//	 * @param param リクエストパラメータ
//	 * @param ekk2811b010List 機器オプションサービス契約一覧照会（機器提供サービス契約番号）明細
//	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
//	 * @return 機器提供サービス契約更新用リスト
//	 * @throws Throwable 例外時にスローします
//	 */
//	private void changeTran(SessionHandle handle,
//			IRequestParameterReadWrite param,
//			HashMap<String, Object> kkopKeiUpdMap) 
//			throws Throwable
//	{
//		// 配送リスト
//		ArrayList<HashMap<String, Object>> haisoList = (ArrayList<HashMap<String, Object>>)kkopKeiUpdMap.get(KEY_HAISO_LIST);
//		
//		// 予約適用年月日＝運用日
//		String rsvAplyYmd = JCCBPCommon.getOpeDate(null);
//		
//		if (null == haisoList || haisoList.size() == 0)
//		{
//			haisoList = new ArrayList<HashMap<String, Object>>();
//			kkopKeiUpdMap.put(KEY_HAISO_LIST, haisoList);
//		}
//		// 返品リスト
//		ArrayList<HashMap<String, Object>> hempinList = (ArrayList<HashMap<String, Object>>)kkopKeiUpdMap.get(KEY_HEMPIN_LIST);
//		if (null == hempinList || hempinList.size() == 0)
//		{
//			hempinList = new ArrayList<HashMap<String, Object>>();
//			kkopKeiUpdMap.put(KEY_HEMPIN_LIST, hempinList);
//		}
//
//		// サービス契約番号を取得
//		String svcKeiNo = (String)kkopKeiUpdMap.get(KEY_SVC_KEI_NO);
//		// 機器提供サービス契約一覧照会（サービス契約番号）IF呼出処理を実施
//		HashMap<String, Object> ekk0341b002Hash = new HashMap<String, Object>();
//		callEKK0341B002SC(param, handle, svcKeiNo, ekk0341b002Hash);
//		// 機器提供サービス契約一覧情報を取り出す
//		CAANMsg[] ekk0341b002List = (CAANMsg[])ekk0341b002Hash.get(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);
//
//		// 取得できない場合、処理終了
//		if (ekk0341b002List == null || ekk0341b002List.length == 0)
//		{
//			return;
//		}
//
//		// 非多機能ルータ
//		ArrayList<Map<String, String>> bbrKktkSvcKeiList = new ArrayList<Map<String, String>>();
//		// 多機能ルータ
//		ArrayList<Map<String, String>> mfrKktkSvcKeiList = new ArrayList<Map<String, String>>();
//		for (CAANMsg ekk0341b002CBSMSG : ekk0341b002List)
//		{
//			// 機器提供サービス契約ステータス
//			String kktkSvcKeiStat = (String)ekk0341b002CBSMSG.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
//			// 機器提供サービスコード
//			String kktkSvcCd = (String)ekk0341b002CBSMSG.getString(EKK0341B002CBSMsg1List.KKTK_SVC_CD);
//			//「キャンセル済」「解約済」でなく、 
//			// 機器提供サービスコードが非多機能ルータ(C014)または多機能ルータ(C024)であれば各リストに追加
//			//20131219 IT2-2013-0001718 nakashima Mod start
//			if (!JKKSvcConst.SVC_KEI_STAT_910.equals(kktkSvcKeiStat) && 
//					!JKKSvcConst.SVC_KEI_STAT_920.equals(kktkSvcKeiStat) &&
//					!JKKSvcConst.SVC_KEI_STAT_220.equals(kktkSvcKeiStat))
//			//20131219 IT2-2013-0001718 nakashima Mod end
//			{
//				if (KKTK_SVC_CD_BBR.equals(kktkSvcCd))
//				{
//					bbrKktkSvcKeiList.add(ekk0341b002CBSMSG.getHashMap());
//				}
//				else if (KKTK_SVC_CD_MFR.equals(kktkSvcCd))
//				{
//					mfrKktkSvcKeiList.add(ekk0341b002CBSMSG.getHashMap());
//				}
//			}
//		}
//
//		// 多機能ルータなし、かつ非多機能ルータありの場合に機器交換判定を行う
//		if (mfrKktkSvcKeiList.isEmpty() && !bbrKktkSvcKeiList.isEmpty())
//		{
//			// サービス契約一意照会サービスIF呼出処理を実施
//			HashMap<String, Object> ekk0081a010Hash = new HashMap<String, Object>();
//			callEKK0081A010SC(param, handle, svcKeiNo, null, rsvAplyYmd, ekk0081a010Hash);
//			// サービス契約情報を取り出す
//			CAANMsg[] ekk0081a010List = (CAANMsg[])ekk0081a010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
//			if (ekk0081a010List != null && ekk0081a010List.length != 0)
//			{
//				// 変更前、変更後の料金コースコードを取得
//				String chbfPcrsCd = ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.PCRS_CD);
//				String chafPcrsCd = (String)kkopKeiUpdMap.get(KEY_CHAF_PCRS_CD);
//				// IT2-2013-00000853 2013/12/18 START
//				// コース変更中のサービス契約の状態を取得
//				String chSvcKeiStat = ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
//				
//				// 変更状態フラグ
//				boolean chStatFlg = false;
//				// 変更前後の料金コースが同じ場合はサービス提供中未満と判定し、変更状態フラグをオンにする
//				// そもそも同じ料金コースにコース変更することができない（サービス提供中の場合は予約状態になるため、変更前後の
//				// サービス契約の料金コースは正しく判定できるが、照査済の場合は料金コースが即時反映するため、正しく判定はできない）
//				if (chbfPcrsCd.equals(chafPcrsCd) && "100".compareTo(chSvcKeiStat) > 0) {
//					// 現在変更中のサービス契約状態がサービス提供中未満であることを示す
//					chStatFlg = true;
//				}
//				// IT2-2013-00000853 2013/12/18 END
//
//				// 利用中ルータと判定する優先順でソートする　※多機能ルータ対応前に行っていた撤去ルーター判定の優先順で決定する
//				sortYusen(bbrKktkSvcKeiList, KEY_ROUTER_YUSEN);
//				// 利用中のルータを取得
//				Map<String, String> usingBbrKktkSvcKei = bbrKktkSvcKeiList.get(0);
//				// 機器交換判定
//				// IT2-2013-00000853 2013/12/18 STRAT
//				boolean isKokan = judgeKikiKokan(handle, param, chbfPcrsCd, chafPcrsCd, chStatFlg, usingBbrKktkSvcKei);
//				// IT2-2013-00000853 2013/12/18 END
//				// 機器交換が発生しない場合
//				if (!isKokan)
//				{
//					// 処理終了
//					return;
//				}
//
//				// 取得したサービス契約回線内訳情報を元に多機能ルータの登録を行う
//				HashMap<String, Object> ekk0341d010Hash = new HashMap<String, Object>();
//
//				// サービス契約情報よりSYSIDを取得
//				String sysid = (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SYSID);
//				// お客様一意照会を実施
//				HashMap<String, Object> eck0011a010Hash = new HashMap<String, Object>();
//				callECK0011A010SC(param, handle, sysid, null ,rsvAplyYmd, eck0011a010Hash);
//				CAANMsg[] eck0011a010List = (CAANMsg[])eck0011a010Hash.get(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST);
//
//				// サービス契約回線内訳一覧照会を実施
//				HashMap<String, Object> ekk0241b001Hash = new HashMap<String, Object>();
//				callEKK0241B001SC(param, handle, svcKeiNo, ekk0241b001Hash);
//				CAANMsg[] ekk0241b001List = (CAANMsg[])ekk0241b001Hash.get(EKK0241B001CBSMsg.EKK0241B001CBSMSG1LIST);
//
//				// 課金先一覧照会を実施
//				HashMap<String, Object> ekk0321b005Hash = new HashMap<String, Object>();
//				callEKK0321B005SC(param, handle, svcKeiNo, ekk0321b005Hash);
//				CAANMsg[] ekk0321b005List = (CAANMsg[])ekk0321b005Hash.get(EKK0321B005CBSMsg.EKK0321B005CBSMSG1LIST);
//
//				// 機器提供サービス契約登録IF呼出処理を実施
//				// サービス契約の最終更新年月日時分秒を更新年月日時分秒(更新前)として保持
//				String mfrUpdDtmBf = (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM);
//				callEKK0341D010SC(param, handle, eck0011a010List[0], ekk0241b001List[0], 
//						ekk0321b005List[0], kkopKeiUpdMap, mfrUpdDtmBf, ekk0341d010Hash);
//				if (null == ekk0341d010Hash || ekk0341d010Hash.size() == 0)
//				{
//					return;
//				}
//
//				// 照査・照査締結に必要な情報を取得
//				String svcKeiStat = (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
//				// IT2-2013-00000853 2013/12/18 STRAT
//				// 最終更新ステータス
//				String lastUpKktkSvcStat = svcKeiStat;
//				// IT2-2013-00000853 2013/12/18 END
//				String idoDiv = (String)kkopKeiUpdMap.get(KEY_IDO_DIV);
//				// 多機能ルータの機器提供サービス契約番号
//				String mfrKktkSvcKeiNo = (String)ekk0341d010Hash.get(EKK0341D010CBSMsg.KKTK_SVC_KEI_NO);
//				// 機器提供サービス契約登録の更新年月日時分秒を更新年月日時分秒(更新前)として保持
//				mfrUpdDtmBf = (String)ekk0341d010Hash.get(EKK0341D010CBSMsg.UPD_DTM);
//				// IT2-2013-00000853 2013/12/18 STRAT
//				// 同一回線上のサービス契約情報を取得して機器の最終更新時間を取得する処理
//				// 同一回線上の対となるサービス(ネットに対する電話、電話に対するネット)の照会
//				HashMap<String, Object> ekk0081b009Hash = new HashMap<String, Object>();
//				// 同一場所サービス契約情報照会IF呼出処理を実施
//				callEKK0081B009SC(param, handle, svcKeiNo, ekk0081b009Hash);
//				CAANMsg[] ekk0081b009statList = (CAANMsg[])ekk0081b009Hash.get(EKK0081B009CBSMsg.EKK0081B009CBSMSG1LIST);
//				if (null == ekk0081b009statList || ekk0081b009statList.length == 0)
//				{
//					for (CAANMsg ekk0081b009statInfo : ekk0081b009statList)
//					{
//						String pairSvcCd = (String)ekk0081b009statInfo.getString(EKK0081B009CBSMsg1List.SVC_CD);
//						String pairSvcKeiStat = (String)ekk0081b009statInfo.getString(EKK0081B009CBSMsg1List.SVC_KEI_STAT);
//						// 電話かつそのステータスがサービス提供中以下の場合のみ機器の最終判断を行う
//						if (SVC_CD_TEL.equals(pairSvcCd)
//								&& JKKSvcConst.SVC_KEI_STAT_100.compareTo(pairSvcKeiStat) >= 0)
//						{
//							// 対の電話のステータスが処理中のネットより大きい場合のみ最終更新ステータスの入れ替えを行う
//							if (pairSvcKeiStat.compareTo(svcKeiStat) > 0) {
//								// ステータスの入れ替えを実施する
//								lastUpKktkSvcStat = pairSvcKeiStat;
//							}
//						}
//					}
//				}
//				
//				if (JKKSvcConst.SVC_KEI_STAT_020.equals(lastUpKktkSvcStat))
//				// IT2-2013-00000853 2013/12/18 END
//				{
//					// 登録した多機能ルータの照査を行う
//					HashMap<String, Object> ekk0341c030Hash = new HashMap<String, Object>();
//					// 機器提供サービス契約照査IF呼出処理を実施
//					callEKK0341C030SC(param, handle, mfrKktkSvcKeiNo, null, null, idoDiv, SHOSA_DSL_FIN_CD_SHOSA_OK, mfrUpdDtmBf, ekk0341c030Hash);
//					// 配送情報
//					HashMap<String, Object> haisoInfo = new HashMap<String, Object>();
//					haisoInfo.put(KEY_KKTK_SVC_KEI_NO, (String)ekk0341c030Hash.get(EKK0341C030CBSMsg.KKTK_SVC_KEI_NO));
//					haisoList.add(haisoInfo);
//					// 機器提供サービス契約照査の更新年月日時分秒を更新年月日時分秒(更新前)として保持
//					mfrUpdDtmBf = (String)ekk0341c030Hash.get(EKK0341C030CBSMsg.UPD_DTM);
//				}
//				// IT2-2013-00000853 2013/12/18 STRAT
//				else if(JKKSvcConst.SVC_KEI_STAT_030.compareTo(lastUpKktkSvcStat) <= 0)
//				// IT2-2013-00000853 2013/12/18 END
//				{
//					// 登録した多機能ルータの照査締結を行う
//					HashMap<String, Object> ekk0341c050Hash = new HashMap<String, Object>();
//					// 機器提供サービス契約照査締結IF呼出処理を実施
//					callEKK0341C050SC(param, handle, mfrKktkSvcKeiNo, null, null, idoDiv, mfrUpdDtmBf, ekk0341c050Hash);
//					// 配送情報
//					HashMap<String, Object> haisoInfo = new HashMap<String, Object>();
//					haisoInfo.put(KEY_KKTK_SVC_KEI_NO, (String)ekk0341c050Hash.get(EKK0341C050CBSMsg.KKTK_SVC_KEI_NO));
//					haisoList.add(haisoInfo);
//					// 機器提供サービス契約照査締結の更新年月日時分秒を更新年月日時分秒(更新前)として保持
//					mfrUpdDtmBf = (String)ekk0341c050Hash.get(EKK0341C050CBSMsg.UPD_DTM);
//				}
//
//				// OM-2014-0001693 ネットのコース変更後に交換機器引渡画面で宅内S連携エラーとなる 2014/05/14 START
//				// ※機器提供サービス契約登録を行う場合は、機器設置先場所反映サービスIFの呼び出しは不要（登録時に回線場所番号を設定済み）
//				// OM-2014-0001693 ネットのコース変更後に交換機器引渡画面で宅内S連携エラーとなる 2014/05/14 END
//
//				// 登録した多機能ルータの機器オプションサービス契約登録を行う
//				HashMap<String, Object> ekk2811d010Hash = new HashMap<String, Object>();
//				// 利用中のルータの料金コースより機器オプションの料金コースを決定
//				String oldPcrsCd = (String)usingBbrKktkSvcKei.get(EKK0341B002CBSMsg1List.PCRS_CD);
//				String pcrsCd = "";
//				// 有線ルータ（ｅｏ光ベーシックルーター（１００Ｍ））の場合
//				if (JKKStrConst.CD00134_BASIC_100M_RENT.equals(oldPcrsCd))
//				{
//					pcrsCd = JKKStrConst.CD00134_KKOP_YUSEN;
//				}
//				// 無線ルータ
//				else
//				{
//					pcrsCd = JKKStrConst.CD00134_KKOP_MUSEN;
//				}
//				// 料金コースより料金プランコードを生成
//				String pplanCd = "P" + pcrsCd + "01";
//				// 申込明細番号を取得
//				String mskmDtlNo = (String)kkopKeiUpdMap.get(KEY_MSKM_DTL_NO);
//				// 請求契約番号を取得
//				String seikyKeiNo = (String)ekk0321b005List[0].getString(EKK0321B005CBSMsg1List.SEIKY_KEI_NO);
//				// 機器オプションサービス契約登録IF呼出処理を実施
//				callEKK2811D010SC(param, handle, KKOP_SVC_CD_RT, pcrsCd, pplanCd, mfrKktkSvcKeiNo, sysid, mskmDtlNo, 
//						null, null, null, null, null, null, idoDiv,
//						KIKI_RNTAI_KEI_CHGECHU_FLG_NOT_CHGECHU, seikyKeiNo, null, mfrUpdDtmBf, ekk2811d010Hash);
//				// 機器オプションサービス契約登録IF呼出処理の更新年月日時分秒を更新年月日時分秒(更新前)として保持
//				mfrUpdDtmBf = (String)ekk2811d010Hash.get(EKK2811D010CBSMsg.UPD_DTM);
//				// IT2-2013-00000853 2013/12/18 STRAT
//				// 機器オプションは旧ステータスに合わせて照査締結の更新処理を行う
//				// 多機能ルータの機器提供サービス契約番号
//				String kkopSvcKeiNo = (String)ekk2811d010Hash.get(EKK2811D010CBSMsg.KKOP_SVC_KEI_NO);
//				
//				if (JKKSvcConst.SVC_KEI_STAT_020.equals(svcKeiStat))
//				{
//					// 登録した多機能ルータの機器オプションの照査を行う
//					HashMap<String, Object> EKK2811C030Hash = new HashMap<String, Object>();
//					// 機器オプションサービス契約照査IF呼出処理を実施
//					callEKK2811C030SC(param, handle, kkopSvcKeiNo, null, null, idoDiv, SHOSA_DSL_FIN_CD_SHOSA_OK, mfrUpdDtmBf, EKK2811C030Hash);
//					// 機器提供オプションサービス契約照査の更新年月日時分秒を更新年月日時分秒(更新前)として保持
//					mfrUpdDtmBf = (String)EKK2811C030Hash.get(EKK2811C030CBSMsg.UPD_DTM);
//				}
//				else if(JKKSvcConst.SVC_KEI_STAT_030.compareTo(svcKeiStat) <= 0)
//				{
//					// 登録した多機能ルータの機器オプションの照査・締結を行う
//					HashMap<String, Object> EKK2811C050Hash = new HashMap<String, Object>();
//					// 機器オプションサービス契約照査IF呼出処理を実施
//					callEKK2811C050SC(param, handle, kkopSvcKeiNo, null, null, idoDiv, mfrUpdDtmBf, EKK2811C050Hash);
//					// 機器提供オプションサービス契約照査の更新年月日時分秒を更新年月日時分秒(更新前)として保持
//					mfrUpdDtmBf = (String)EKK2811C050Hash.get(EKK2811C050CBSMsg.UPD_DTM);
//				} 
//				// IT2-2013-00000853 2013/12/18 END
//				// 配送対象が0件である(=多機能ルータの配送が無い)場合、ここで処理を終了する
//				if (haisoList.size() == 0)
//				{
//					return;
//				}
//
//				// 非多機能ルータの解約・キャンセル
//				for (Map<String, String> bbrKktkSvcKei : bbrKktkSvcKeiList)
//				{
//					// 機器提供サービス契約番号
//					String bbrKktkSvcKeiNo = bbrKktkSvcKei.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
//					// 機器提供サービス契約一意照会を実施
//					HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
//					callEKK0341A010SC(param, handle, bbrKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
//					CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
//					CAANMsg ekk0341a010 = ekk0341a010List[0];
//
//					// 旧機器の機器提供サービス契約情報をセット
//					HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
//					kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO, ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
//					kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_STAT, ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT));
//					kktkSvcKeiInfo.put(KEY_KKTK_SVC_CD, ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
//					String updDtmBf = ekk0341a010List[0].getString(EKK0341A010CBSMsg1List.LAST_UPD_DTM);
//					// 機器提供サービス契約ステータスに応じて解約・キャンセル処理を実行
//					dslCancelKktkSvcKei(handle, param, kktkSvcKeiInfo, updDtmBf, svcKeiNo, kkopKeiUpdMap);
//
//					// 返品リストに追加
//					HashMap<String, Object> hempinInfo = new HashMap<String, Object>();
//					hempinInfo.put(KEY_KKTK_SVC_KEI_NO, (String)kktkSvcKeiInfo.get(KEY_KKTK_SVC_KEI_NO));
//					hempinList.add(hempinInfo);
//				}
//// IT2-2013-00000853 2013/12/18 START
////				// 同一回線上の対となるサービス(ネットに対する電話、電話に対するネット)の照会
////				HashMap<String, Object> ekk0081b009Hash = new HashMap<String, Object>();
////				// 同一場所サービス契約情報照会IF呼出処理を実施
////				callEKK0081B009SC(param, handle, svcKeiNo, ekk0081b009Hash);
//// IT2-2013-00000853 2013/12/18 END
//				CAANMsg[] ekk0081b009List = (CAANMsg[])ekk0081b009Hash.get(EKK0081B009CBSMsg.EKK0081B009CBSMSG1LIST);
//				if (null == ekk0081b009List || ekk0081b009List.length == 0)
//				{
//					return;
//				}
//				CAANMsg telSvcKeiInfo = new CAANMsg();
//				for (CAANMsg ekk0081b009Info : ekk0081b009List)
//				{
//					String pairSvcCd = (String)ekk0081b009Info.getString(EKK0081B009CBSMsg1List.SVC_CD);
//					String pairSvcKeiStat = (String)ekk0081b009Info.getString(EKK0081B009CBSMsg1List.SVC_KEI_STAT);
//					// 「電話」かつ「解約済」「キャンセル済」以外を処理対象とする
//					if (SVC_CD_TEL.equals(pairSvcCd)
//							&& !JKKSvcConst.SVC_KEI_STAT_910.equals(pairSvcKeiStat)
//							&& !JKKSvcConst.SVC_KEI_STAT_920.equals(pairSvcKeiStat))
//					{
//						telSvcKeiInfo = ekk0081b009Info;
//						break;
//					}
//				}
//				// 対象データが存在しない場合は処理を終了する
//				// OM-2014-0000589 2013/02/10 MOD START 
////				if (null == telSvcKeiInfo)
//				if (null == telSvcKeiInfo
//						|| telSvcKeiInfo.getString(EKK0081B009CBSMsg1List.SVC_KEI_NO) == null
//						|| "".equals(telSvcKeiInfo.getString(EKK0081B009CBSMsg1List.SVC_KEI_NO)) )
//				// OM-2014-0000589 2013/02/10 MOD END
//				{
//					return;
//				}
//
//				String pairSvcKeiNo = (String)telSvcKeiInfo.getString(EKK0081B009CBSMsg1List.SVC_KEI_NO);
//				// 機器提供サービス契約一覧照会（サービス契約番号）サービスIF呼出処理を実施
//				HashMap<String, Object> pairEkk0341b002Hash = new HashMap<String, Object>();
//				callEKK0341B002SC(param, handle, pairSvcKeiNo, pairEkk0341b002Hash);
//				CAANMsg[] pairEkk0341b002List = (CAANMsg[])pairEkk0341b002Hash.get(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);
//				if (null == pairEkk0341b002List || pairEkk0341b002List.length == 0)
//				{
//					return;
//				}
//				ArrayList<CAANMsg> vaInfoList = new ArrayList<CAANMsg>();
//				for (CAANMsg pairEkk0341b002Info : pairEkk0341b002List)
//				{
//					String vaKktkSvcCd = (String)pairEkk0341b002Info.getString(EKK0341B002CBSMsg1List.KKTK_SVC_CD);
//					String vaKktkSvcKeiStat = (String)pairEkk0341b002Info.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
//					// 「ＶＡ」かつ「解約済」「キャンセル済」以外を処理対象とする
//					if (KKTK_SVC_CD_VA.equals(vaKktkSvcCd)
//							&& !JKKSvcConst.SVC_KEI_STAT_910.equals(vaKktkSvcKeiStat)
//							&& !JKKSvcConst.SVC_KEI_STAT_920.equals(vaKktkSvcKeiStat))
//					{
//						vaInfoList.add(pairEkk0341b002Info);
//					}
//					
//				}
//				// ＶＡが0件の場合、処理を終了する
//				if(null == vaInfoList || vaInfoList.size() == 0)
//				{
//					return;
//				}
//
//				// IT2-2013-00000853 2013/12/18 STRAT
//				String vaKktkSvcKeiStat = "";
//				// VAの解約・キャンセル
//				for (CAANMsg vaInfo : vaInfoList)
//				{
//
//					// 機器提供サービス契約番号
//					String vaKktkSvcKeiNo = vaInfo.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
//					// 機器提供サービス契約一意照会を実施
//					HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
//					callEKK0341A010SC(param, handle, vaKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
//					CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
//					CAANMsg ekk0341a010 = ekk0341a010List[0];
//					// 機器の一意照会の最終更新年月日を取得する
//					String vaUpdDtmBf = ekk0341a010.getString(EKK0341B002CBSMsg1List.LAST_UPD_DTM);
//					vaKktkSvcKeiStat = vaInfo.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
//					// 20140121 IT1-2014-0000030 電話のサービス契約ステータスが「受付済」の場合のみキャンセルする（受付済以外は、多機能ルーターの出荷完了で解約・キャンセルするため） MOD START
//					// 電話のサービス契約ステータスが「照査済」「締結済」の場合のみ解約・キャンセル
////					if (JKKSvcConst.SVC_KEI_STAT_020.equals(vaKktkSvcKeiStat)
////							|| JKKSvcConst.SVC_KEI_STAT_030.equals(vaKktkSvcKeiStat))
//					if (JKKSvcConst.SVC_KEI_STAT_010.equals(vaKktkSvcKeiStat))
//					// 20140121 IT1-2014-0000030 電話のサービス契約ステータスが「受付済」の場合のみキャンセルする（受付済以外は、多機能ルーターの出荷完了で解約・キャンセルするため） MOD END
//					{
//						HashMap<String, Object> vaKktkSvcKeiInfo = new HashMap<String, Object>();
//						vaKktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO, vaInfo.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO));
//						vaKktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_STAT, vaKktkSvcKeiStat);
//						vaKktkSvcKeiInfo.put(KEY_KKTK_SVC_CD, vaInfo.getString(EKK0341B002CBSMsg1List.KKTK_SVC_CD));
//						// 機器提供サービス契約ステータスに応じて解約・キャンセル処理を実行
//						dslCancelKktkSvcKei(handle, param, vaKktkSvcKeiInfo, vaUpdDtmBf, pairSvcKeiNo, kkopKeiUpdMap);
//						// 20140121 IT1-2014-0000030 返品は作成しない（多機能ルーターの出荷完了で返品登録するするため） DEL START
////						// 返品リストに追加
////						HashMap<String, Object> hempinInfo = new HashMap<String, Object>();
////						hempinInfo.put(KEY_KKTK_SVC_KEI_NO, (String)vaKktkSvcKeiInfo.get(KEY_KKTK_SVC_KEI_NO));
////						hempinList.add(hempinInfo);
//						// 20140121 IT1-2014-0000030 返品は作成しない（多機能ルーターの出荷完了で返品登録するするため） DEL END
//					}
//				}
//
//				// 機器連帯契約変更手続中フラグ"1"で機器オプションサービス契約の登録
//				HashMap<String, Object> pairEkk2811d010Hash = new HashMap<String, Object>();
//				// 既存の料金コースより機器オプションの料金コースを決定
//				String oldPairPcrsCd = (String)telSvcKeiInfo.getString(EKK0081B009CBSMsg1List.PCRS_CD);
//				String pairPcrsCd = "";
//				if (JKKSvcConst.PCRS_CD_TEL_1BAN.equals(oldPairPcrsCd))
//				{
//					pairPcrsCd = JKKStrConst.CD00134_KKOP_TEL_1;
//				}
//				else if (JKKSvcConst.PCRS_CD_TEL_2BAN.equals(oldPairPcrsCd))
//				{
//					pairPcrsCd = JKKStrConst.CD00134_KKOP_TEL_2;
//				}
//				// 料金コースより料金プランコードを生成
//				String pairPplanCd = "P" + pairPcrsCd + "01";
//				// 申込明細番号を取得
//				String pairMskmDtlNo = (String)kkopKeiUpdMap.get(KEY_MSKM_DTL_NO);
//				// 機器オプションサービス契約登録IF呼出処理を実施
//				callEKK2811D010SC(param, handle, KKOP_SVC_CD_VA, pairPcrsCd, pairPplanCd, mfrKktkSvcKeiNo, sysid, pairMskmDtlNo, 
//						null, null, null, null, null, null, idoDiv,
//						KIKI_RNTAI_KEI_CHGECHU_FLG_CHGECHU, seikyKeiNo, null, mfrUpdDtmBf, pairEkk2811d010Hash);
//				
//				// 機器オプションサービス契約登録IF呼出処理の更新年月日時分秒を更新年月日時分秒(更新前)として保持
//				mfrUpdDtmBf = (String)pairEkk2811d010Hash.get(EKK2811D010CBSMsg.UPD_DTM);
//				
//				// 機器オプションは旧ステータスに合わせて照査締結の更新処理を行う
//				// 多機能ルータの機器提供サービス契約番号
//				String pairkkopSvcKeiNo = (String)pairEkk2811d010Hash.get(EKK2811D010CBSMsg.KKOP_SVC_KEI_NO);
//				
//				//VAの状態を確認
//				vaKktkSvcKeiStat = vaInfoList.get(0).getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
//				
//				if (JKKSvcConst.SVC_KEI_STAT_020.equals(vaKktkSvcKeiStat))
//				{
//					// 登録した多機能ルータの機器オプションの照査を行う
//					HashMap<String, Object> EKK2811C030Hash = new HashMap<String, Object>();
//					// 機器オプションサービス契約照査IF呼出処理を実施
//					callEKK2811C030SC(param, handle, pairkkopSvcKeiNo, null, null, idoDiv, SHOSA_DSL_FIN_CD_SHOSA_OK, mfrUpdDtmBf, EKK2811C030Hash);
//				}
//				else if (JKKSvcConst.SVC_KEI_STAT_030.compareTo(vaKktkSvcKeiStat) <= 0)
//				{
//					// 登録した多機能ルータの機器オプションの照査・締結を行う
//					HashMap<String, Object> EKK2811C050Hash = new HashMap<String, Object>();
//					// 機器オプションサービス契約照査IF呼出処理を実施
//					callEKK2811C050SC(param, handle, pairkkopSvcKeiNo, null, null, idoDiv, mfrUpdDtmBf, EKK2811C050Hash);
//				}
//			}
//		}
//// OM-2014-0000652 2014/02/15 ADD START
//		else {
//			
//			// サービス契約一意照会サービスIF呼出処理を実施
//			
//			String svcKeiStat = "";
//			
//			HashMap<String, Object> ekk0081a010Hash = new HashMap<String, Object>();
//			callEKK0081A010SC(param, handle, svcKeiNo, null, rsvAplyYmd, ekk0081a010Hash);
//			// サービス契約情報を取り出す
//			CAANMsg[] ekk0081a010List = (CAANMsg[])ekk0081a010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
//			
//			if (ekk0081a010List != null && ekk0081a010List.length != 0)
//			{
//				// 対象ネットサービスのサービス契約ステータスを取得
//				svcKeiStat =  (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
//				
//			}
//			// OM-2014-0000652 2014/02/16 ADD START
//			String kktkSvcKeiStat = "";
//			
//			// 多機能ルータの機器提供サービス契約ステータスを確認
//			for (Map<String, String> mfrKktkSvcKei : mfrKktkSvcKeiList)
//			{
//				// 機器提供サービス契約番号
//				String mfrKktkSvcKeiNo = mfrKktkSvcKei.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
//				// 機器提供サービス契約一意照会を実施
//				HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
//				callEKK0341A010SC(param, handle, mfrKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
//				CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
//				CAANMsg ekk0341a010 = ekk0341a010List[0];
//				
//				// 機器提供サービス契約ステータスを確認
//				kktkSvcKeiStat =  (String)ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT);
//				
//			}
//			// OM-2014-0000652 2014/02/16 ADD END
//			
//			// 多機能がある場合、機器提供サービス契約を確認
//			// 受付済の場合 ※ネットサービスの契約ステータスが100（サービス提供中）のコース変のみ後続
//			// OM-2014-0000652 2014/02/16 MOD START
//			//if (!mfrKktkSvcKeiList.isEmpty() && "100".equals(svcKeiStat))
//			if (!mfrKktkSvcKeiList.isEmpty() && "100".equals(svcKeiStat) && "010".equals(kktkSvcKeiStat))
//			// OM-2014-0000652 2014/02/16 MOD END
//			{
//				// 最終更新年月日（引回用）
//				String mfrUpdDtmBf = "";
//				// 異動区分の取得
//				String idoDiv = (String)kkopKeiUpdMap.get(KEY_IDO_DIV);
//
//				// OM-2014-0001693 ネットのコース変更後に交換機器引渡画面で宅内S連携エラーとなる 2014/05/14 START
//				// サービス契約回線内訳一覧照会を実施
//				HashMap<String, Object> ekk0241b001Hash = new HashMap<String, Object>();
//				callEKK0241B001SC(param, handle, svcKeiNo, ekk0241b001Hash);
//				CAANMsg[] ekk0241b001List = (CAANMsg[])ekk0241b001Hash.get(EKK0241B001CBSMsg.EKK0241B001CBSMSG1LIST);
//				// OM-2014-0001693 ネットのコース変更後に交換機器引渡画面で宅内S連携エラーとなる 2014/05/14 END
//
//				// 非多機能ルータの解約・キャンセル
//				for (Map<String, String> bbrKktkSvcKei : bbrKktkSvcKeiList)
//				{
//					// 機器提供サービス契約番号
//					String bbrKktkSvcKeiNo = bbrKktkSvcKei.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
//					// 機器提供サービス契約一意照会を実施
//					HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
//					callEKK0341A010SC(param, handle, bbrKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
//					CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
//					CAANMsg ekk0341a010 = ekk0341a010List[0];
//
//					// 旧機器の機器提供サービス契約情報をセット
//					HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
//					kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO, ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
//					kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_STAT, ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT));
//					kktkSvcKeiInfo.put(KEY_KKTK_SVC_CD, ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
//					String updDtmBf = ekk0341a010List[0].getString(EKK0341A010CBSMsg1List.LAST_UPD_DTM);
//					// 機器提供サービス契約ステータスに応じて解約・キャンセル処理を実行
//					dslCancelKktkSvcKei(handle, param, kktkSvcKeiInfo, updDtmBf, svcKeiNo, kkopKeiUpdMap);
//
//					// 返品リストに追加
//					HashMap<String, Object> hempinInfo = new HashMap<String, Object>();
//					hempinInfo.put(KEY_KKTK_SVC_KEI_NO, (String)kktkSvcKeiInfo.get(KEY_KKTK_SVC_KEI_NO));
//					hempinList.add(hempinInfo);
//				}
//				
//				// 多機能ルーターの機器提供サービス契約を締結済まで更新
//				for (Map<String, String> mfrKktkSvcKei : mfrKktkSvcKeiList)
//				{
//					// 機器提供サービス契約番号
//					String mfrKktkSvcKeiNo = mfrKktkSvcKei.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
//					// 機器提供サービス契約一意照会を実施
//					HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
//					callEKK0341A010SC(param, handle, mfrKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
//					CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
//					CAANMsg ekk0341a010 = ekk0341a010List[0];
//					
//					// OM-2014-0001143 2014/04/03 start
//					//機器提供サービス契約照査締結の前に、機器オプションを確認して処理が必要か確認
//					// 機器オプションの一覧照会を取得
//					// 機器オプションサービス契約一覧照会IF呼出処理を実施
//					String updKkopSvcCd = KKOP_SVC_CD_RT; //機器オプションサービスコード（ｅｏ光多機能ルーター　ルーター機能） 
//					HashMap<String, Object> ekk2811b010HashUpd = new HashMap<String, Object>();
//					callEKK2811B010SC(param, handle, mfrKktkSvcKeiNo, null, updKkopSvcCd, null, ekk2811b010HashUpd);
//					// 機器オプションサービス契約情報を取り出す
//					CAANMsg[] ekk2811B010ListUpd = (CAANMsg[])ekk2811b010HashUpd.get(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST);
//					
//					boolean kktkUpdFlg = false;
//					if (ekk2811B010ListUpd != null && !"".equals(ekk2811B010ListUpd) && ekk2811B010ListUpd.length > 0) {
//						for (int i = 0 ; i < ekk2811B010ListUpd.length ; i++ ) {
//							CAANMsg ekk2811B010Msg = ekk2811B010ListUpd[i];
//							
//							// 有効なルータ機能が存在することを確認
//							String kkopSvcKeiStat = ekk2811B010Msg.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT);
//							
//							// ルータ機能が受付済の場合（かつ「ｅｏ光多機能ルーター　ルーター機能」）のみ締結までステータスを更新
//							if ("010".equals(kkopSvcKeiStat)) {
//								kktkUpdFlg = true;
//							}
//						}
//					}
//					
//					if(!kktkUpdFlg){
//						continue;
//						//受付済かつ「ｅｏ光多機能ルーター　ルーター機能」の機器オプションがないので
//						//機器提供サービス契約と機器オプションサービス契約の締結処理は不要
//					}
//					// OM-2014-0001143 2014/04/03 end
//					
//					mfrUpdDtmBf = (String)ekk0341a010List[0].getString(EKK0341A010CBSMsg1List.LAST_UPD_DTM);
//					
//					// 登録した多機能ルータの照査締結を行う
//					HashMap<String, Object> ekk0341c050Hash = new HashMap<String, Object>();
//					// 機器提供サービス契約照査締結IF呼出処理を実施
//					callEKK0341C050SC(param, handle, mfrKktkSvcKeiNo, null, null, idoDiv, mfrUpdDtmBf, ekk0341c050Hash);
//					// 配送情報
//					HashMap<String, Object> haisoInfo = new HashMap<String, Object>();
//					haisoInfo.put(KEY_KKTK_SVC_KEI_NO, (String)ekk0341c050Hash.get(EKK0341C050CBSMsg.KKTK_SVC_KEI_NO));
//					haisoList.add(haisoInfo);
//					// 機器提供サービス契約照査締結の更新年月日時分秒を更新年月日時分秒(更新前)として保持
//					mfrUpdDtmBf = (String)ekk0341c050Hash.get(EKK0341C050CBSMsg.UPD_DTM);
//
//					// OM-2014-0001693 ネットのコース変更後に交換機器引渡画面で宅内S連携エラーとなる 2014/05/14 START
//					// 機器設置先場所反映
//					HashMap<String, Object> ekk0341c450Hash = new HashMap<String, Object>();
//					callEKK0341C450SC(param, handle, mfrKktkSvcKeiNo, ekk0241b001List[0], mfrUpdDtmBf, ekk0341c450Hash);
//					// 機器設置先場所反映の更新年月日時分秒を更新年月日時分秒(更新前)として保持
//					mfrUpdDtmBf = (String)ekk0341c450Hash.get(EKK0341C450CBSMsg.UPD_DTM);
//					// OM-2014-0001693 ネットのコース変更後に交換機器引渡画面で宅内S連携エラーとなる 2014/05/14 END
//
//					// OM-2014-0001143 2014/04/03 上に移動 start
//					//// 機器オプションの一覧照会を取得
//					//// 機器オプションサービス契約一覧照会IF呼出処理を実施
//					//String updKkopSvcCd = KKOP_SVC_CD_RT;
//					//HashMap<String, Object> ekk2811b010HashUpd = new HashMap<String, Object>();
//					//callEKK2811B010SC(param, handle, mfrKktkSvcKeiNo, null, updKkopSvcCd, null, ekk2811b010HashUpd);
//					//// 機器オプションサービス契約情報を取り出す
//					//CAANMsg[] ekk2811B010ListUpd = (CAANMsg[])ekk2811b010HashUpd.get(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST);
//					// OM-2014-0001143 2014/04/03 end
//					
//					if (ekk2811B010ListUpd != null && !"".equals(ekk2811B010ListUpd) && ekk2811B010ListUpd.length > 0) {
//						for (int i = 0 ; i < ekk2811B010ListUpd.length ; i++ ) {
//							CAANMsg ekk2811B010Msg = ekk2811B010ListUpd[i];
//							
//							// 有効なルータ機能が存在することを確認
//							String kkopSvcKeiStat = ekk2811B010Msg.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT);
//							
//							// ルータ機能が受付済の場合のみ締結までステータスを更新
//							if ("010".equals(kkopSvcKeiStat)) {
//								// ルーター機能を締結済まで更新
//								// 機器オプションサービス契約番号を取得
//								String kkopSvcKeiNo = ekk2811B010Msg.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO);
//								
//								// 登録した多機能ルータの機器オプションの照査・締結を行う
//								HashMap<String, Object> EKK2811C050Hash = new HashMap<String, Object>();
//								// 機器オプションサービス契約照査IF呼出処理を実施
//								callEKK2811C050SC(param, handle, kkopSvcKeiNo, null, null, idoDiv, mfrUpdDtmBf, EKK2811C050Hash);
//								// 機器提供オプションサービス契約照査の更新年月日時分秒を更新年月日時分秒(更新前)として保持
//								mfrUpdDtmBf = (String)EKK2811C050Hash.get(EKK2811C050CBSMsg.UPD_DTM);
//								
//								// ルーター機能の連帯フラグを０に変更
//								// EKK2811C290_機器オプションサービス契約情報変更
//								HashMap<String, Object> EKK2811C290Hash = new HashMap<String, Object>();
//								
//								String kikiRntaiKeiChgechuFlg = "0";
//								
//								// 機器オプションサービス契約照査IF呼出処理を実施
//								callEKK2811C290SC(param, handle, kkopSvcKeiNo, kikiRntaiKeiChgechuFlg, idoDiv, mfrUpdDtmBf, EKK2811C290Hash);
//								
//							}
//							
//						}
//					}
//				}
//			}
//			else
//			{
//				// 多機能ルーターが受付済以外または多機能も旧ルーターも存在しない場合はないもしない
//			}
//		}
//// OM-2014-0000652 2014/02/15 ADD END
//	}
//	// IT2-2013-00000853 2013/12/18 END
// ▲▲▲ ANK-3412-00-00 DEL END
	
	// IT2-2013-00000858 2013/12/21 STRAT
	/**
	 * 番号回復の主処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ekk2811b010List 機器オプションサービス契約一覧照会（機器提供サービス契約番号）明細
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @return 機器提供サービス契約更新用リスト
	 * @throws Throwable 例外時にスローします
	 */
	private void bangoKhk(SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> kkopKeiUpdMap) 
			throws Throwable
	{
		// INデータ取得
		// サービス契約番号の取得
		String svcKeiNo = (String)kkopKeiUpdMap.get(KEY_SVC_KEI_NO);
		// VA機器変更番号の取得
		String vaKkChgNo = (String)kkopKeiUpdMap.get(KEY_VA_KIKI_CHG_NO);
		// 申込明細番号の取得
		String mskmDtlNo = (String)kkopKeiUpdMap.get(KEY_MSKM_DTL_NO);
		// 異動区分の取得
		String idoDiv = (String)kkopKeiUpdMap.get(KEY_IDO_DIV);
		// 更新年月日時分秒（更新前）
		String updBfDtm = (String)kkopKeiUpdMap.get(KEY_UPD_DTM_BF);
		// 予約適用年月日は固定で運用日
		String rsvAplyYmd = JCCBPCommon.getOpeDate(null);
		
		// サービス契約番号、機器変更番号が空白の場合は後続せずにリターン
		if ((svcKeiNo == null || "".equals(svcKeiNo))
				|| (vaKkChgNo == null || "".equals(vaKkChgNo))
				) 
		{
			return;
		}
		
		// 機器提供サービス契約の一覧照会を実施する
		// 機器提供サービス契約一覧照会（サービス契約番号）IF呼出処理を実施
		HashMap<String, Object> ekk0341b002Hash = new HashMap<String, Object>();
		callEKK0341B002SC(param, handle, svcKeiNo, ekk0341b002Hash);
		// 機器提供サービス契約一覧情報を取り出す
		CAANMsg[] ekk0341b002List = (CAANMsg[])ekk0341b002Hash.get(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);
		// 取得できない場合、処理終了
		if (ekk0341b002List == null || ekk0341b002List.length == 0)
		{
			return;
		}
		// 多機能ルータが存在するかどうかを特定
		CAANMsg tknKKInfoList = null;
		for (int i = 0;i < ekk0341b002List.length ; i++) {
			CAANMsg kikiInfoList = ekk0341b002List[i];
			
			// 機器提供サービスコードの取得
			String kktkSvcCd = (String)kikiInfoList.getString(EKK0341B002CBSMsg1List.KKTK_SVC_CD);
			// 機器提供サービス契約ステータスの取得
			String kktkSvcKeiStat = (String)kikiInfoList.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
			
			// #83846 MOD START
			// 多機能ルーターであり、有効なステータスの場合は後続する
			//if ((kktkSvcCd != null && !"".equals(kktkSvcCd) && "C024".equals(kktkSvcCd))
			// 多機能ルーターまたはホームゲートウェイであり、有効なステータスの場合は後続する
			if ((kktkSvcCd != null && !"".equals(kktkSvcCd) && ("C024".equals(kktkSvcCd)||"C025".equals(kktkSvcCd)))
			// #83846 MOD END
					&& (!"910".equals(kktkSvcKeiStat) && !"920".equals(kktkSvcKeiStat) && !"220".equals(kktkSvcKeiStat))
					) 
			{
				tknKKInfoList = kikiInfoList;
			}
		}
		// 多機能ルータがそもそも存在しない場合は後続処理せずにリターン
		if (tknKKInfoList == null || "".equals(tknKKInfoList)) 
		{
			return;
		}
		// 対象の多機能ルータがどうかを判定する（VA機器変更番号と多機能ルータの機器変更番号を比較）
		// 機器変更番号の取得
		String kkChgNo = (String)tknKKInfoList.getString(EKK0341B002CBSMsg1List.KIKI_CHG_NO);
		if (!vaKkChgNo.equals(kkChgNo)) {
			return;
		}
		// 内訳に紐付く機器であれば機器オプションの一覧照会を実施し、機器オプションの情報を取得
		// 多機能ルータの機器提供サービス契約番号を取得
		String kktkSvcKeiNo = (String)tknKKInfoList.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
		
		// 機器オプションコードは指定でVA機能
		String kkopSvcCd = "G02";
		
		// 機器オプションの一意照会を実施
		// 機器オプションサービス契約一覧照会IF呼出処理を実施
		HashMap<String, Object> ekk2811b010Hash = new HashMap<String, Object>();
		callEKK2811B010SC(param, handle, kktkSvcKeiNo, null, kkopSvcCd, null, ekk2811b010Hash);
		// サービス契約情報を取り出す
		CAANMsg[] ekk2811B010List = (CAANMsg[])ekk2811b010Hash.get(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST);
		if (ekk2811B010List != null && ekk2811B010List.length != 0)
		{
			for (int a = 0; a < ekk2811B010List.length ; a++) {
				CAANMsg vaKkopInfoList = ekk2811B010List[a];
				
				// 機器オプションサービス契約番号の取得
				String kkopSvcKeiNo =  vaKkopInfoList.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO);
				// 機器オプションサービス契約ステータスの取得
				String kkopSvcKeiStat =  vaKkopInfoList.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT);
				// 機器オプションサービスコードの取得
				String kkopSvcKeiCd =  vaKkopInfoList.getString(EKK2811B010CBSMsg1List.KKOP_SVC_CD);
				
				// 多機能ルーターであり、有効なステータスの場合は後続する
				if ((kkopSvcKeiCd != null && !"".equals(kkopSvcKeiCd) && "G02".equals(kkopSvcKeiCd))
						&& (!"910".equals(kkopSvcKeiStat) && !"920".equals(kkopSvcKeiStat) && !"220".equals(kkopSvcKeiStat))
						) 
				{
					// 機器オプションの一意照会を実施
					// 機器オプションサービス契約一意照会IF呼出処理を実施
					HashMap<String, Object> ekk2811a010Hash = new HashMap<String, Object>();
					callEKK2811A010SC(param, handle, kkopSvcKeiNo, null, rsvAplyYmd, ekk2811a010Hash);		// カレントを取得
					// サービス契約情報を取り出す
					CAANMsg[] ekk2811A010List = (CAANMsg[])ekk2811a010Hash.get(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST);
					if (ekk2811A010List != null && ekk2811A010List.length  != 0)
					{
						CAANMsg ekk2811A010onlyOneMsg = ekk2811A010List[0];
						
						// 機器オプションの料金コースコード取得
						String kkopPrcsCd = (String)ekk2811A010onlyOneMsg.getString(EKK2811A010CBSMsg1List.PCRS_CD);
						
						// １ポートコースのみ、２ポートへプラン変更を実施
						if (kkopPrcsCd != null && !"".equals(kkopPrcsCd)) {
							if ("G03".equals(kkopPrcsCd)) {
								// 機器オプションサービス契約プラン変更を実施する
								// INパラメータ一覧を定義
								// 機器オプションサービス契約料金プラン変更
								// INパラメータ一覧
								// 機器オプションサービス契約番号
								String tgkkopSvckeino = (String)ekk2811A010onlyOneMsg.getString(EKK2811A010CBSMsg1List.KKOP_SVC_KEI_NO);
								// 異動区分
								String tgIdoDiv = idoDiv;
								// 予約適用年月日
								String tgRsv_aply_ymd = JCCBPCommon.getOpeDate(null);
								// 申込明細番号
								String tgMskmDtlNo = mskmDtlNo;
								// 料金コースコード(固定値：G04)
								String chgPrcsCd = "G04";
								// 料金プランコード(固定値：PG0401)
								String chgPplanCd = "PG0401";
								// 違約金発生コード
								String pnltyhasseiCd = "0";
								// 更新年月日時分秒(更新前)
								String tgUpdChgBfDtm = (String)ekk2811A010onlyOneMsg.getString(EKK2811A010CBSMsg1List.LAST_UPD_DTM);
								
								HashMap<String, Object> mapEKK2811C250 = new HashMap<String, Object>();
								// 機器オプションサービス契約照査IF呼出処理を実施
								callEKK2811C250SC(param, handle, tgkkopSvckeino, idoDiv, tgRsv_aply_ymd, tgMskmDtlNo, chgPrcsCd, chgPplanCd, pnltyhasseiCd, tgUpdChgBfDtm, mapEKK2811C250);
								// 機器オプションサービス契約登録IF呼出処理の更新年月日時分秒を更新年月日時分秒(更新前)として保持
								tgUpdChgBfDtm = (String)mapEKK2811C250.get(EKK2811C250CBSMsg.UPD_DTM);
								
								// 機器オプションサービス契約プラン変更確定を実施する
								HashMap<String, Object> mapEKK2811C260 = new HashMap<String, Object>();
								// 機器オプションサービス契約照査IF呼出処理を実施
								callEKK2811C260SC(param, handle, tgkkopSvckeino, idoDiv, tgRsv_aply_ymd, tgMskmDtlNo, chgPrcsCd, chgPplanCd, pnltyhasseiCd, tgUpdChgBfDtm, mapEKK2811C260);
								// 機器オプションサービス契約登録IF呼出処理の更新年月日時分秒を更新年月日時分秒(更新前)として保持
								tgUpdChgBfDtm = (String)mapEKK2811C260.get(EKK2811C260CBSMsg.UPD_DTM);
								
								// 最終更新年月日をセット
								if (tgUpdChgBfDtm != null && !"".equals(tgUpdChgBfDtm)) {
									// 機器提供サービス契約の最終更新年月日をセットする
									kkopKeiUpdMap.put(KEY_UPD_DTM,tgUpdChgBfDtm);
								}
							}
						}
						else
						{
							// 最初から２ポートコースならなにもしない
						}
					}	
				}
			}
		}
	}
	// IT2-2013-00000858 2013/12/21 END

	/**
	 * 利用停止処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ekk2811b010List 機器オプションサービス契約一覧照会（機器提供サービス契約番号）明細
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @return 機器提供サービス契約更新用リスト
	 * @throws Throwable 例外時にスローします
	 */
	private ArrayList<HashMap<String, Object>> useStpTran(SessionHandle handle,
			IRequestParameterReadWrite param,
			CAANMsg[] ekk2811b010List, HashMap<String, Object> kkopKeiUpdMap) throws Throwable {

		// 機器提供サービス契約更新用リスト
		ArrayList<HashMap<String, Object>> kktkSvcKeiUpdList = new ArrayList<HashMap<String, Object>>();

		// OM-2014-0002572 利用停止バッチの多機能ルーター停止処理時に排他エラーが発生 2014/08/14 START
		// 予約適用年月日
		String rsvAplyYmd = JCCBPCommon.getOpeDate(null);
		// OM-2014-0002572 利用停止バッチの多機能ルーター停止処理時に排他エラーが発生 2014/08/14 END

		for (CAANMsg ekk2811b010info : ekk2811b010List)
		{
			String kkopSvcStat = (String)ekk2811b010info.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT);
			// サービス提供中および休止・中断中以外は処理対象外とする
			if (!JKKSvcConst.SVC_KEI_STAT_100.equals(kkopSvcStat)
					&& !JKKSvcConst.SVC_KEI_STAT_210.equals(kkopSvcStat))
			{
				continue;
			}

			// 機器オプションサービス契約番号
			String kkopSvcKeiNo = (String)ekk2811b010info.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO);

			// OM-2014-0002572 利用停止バッチの多機能ルーター停止処理時に排他エラーが発生 2014/08/14 START
			// 機器オプションサービス契約一意照会IF呼出処理を実施
			HashMap<String, Object> ekk2811a010Hash = new HashMap<String, Object>();
			callEKK2811A010SC(param, handle, kkopSvcKeiNo, "", rsvAplyYmd, ekk2811a010Hash);
			CAANMsg[] ekk2811A010List = (CAANMsg[])ekk2811a010Hash.get(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST);
			CAANMsg ekk2811a010Msg = ekk2811A010List[0];
			// OM-2014-0002572 利用停止バッチの多機能ルーター停止処理時に排他エラーが発生 2014/08/14 END

			// サービス停止年月日
			String svcStpYmd = (String)kkopKeiUpdMap.get(KEY_SVC_STP_YMD);
			// サービス停止理由コード
			String svcStpRsnCd = "01";
			// 異動区分
			String idoDiv = (String)kkopKeiUpdMap.get(KEY_IDO_DIV);
			// 更新年月日時分秒(更新前)
			// OM-2014-0002572 利用停止バッチの多機能ルーター停止処理時に排他エラーが発生 2014/08/14 START
//			String updDtmBf = (String)kkopKeiUpdMap.get(KEY_UPD_DTM_BF);
			String updDtmBf = ekk2811a010Msg.getString(EKK2811A010CBSMsg1List.LAST_UPD_DTM);
			// OM-2014-0002572 利用停止バッチの多機能ルーター停止処理時に排他エラーが発生 2014/08/14 END
			// 結果取得用マップ
			HashMap<String, Object> ekk2811c080hash = new HashMap<String, Object>();
			int returnCd = callEKK2811C080SC(param, handle, kkopSvcKeiNo, svcStpYmd, svcStpRsnCd, idoDiv, updDtmBf, ekk2811c080hash);
			// 機器オプションサービス契約停止結果を取り出す
			// リターンコード
			if (returnCd == 0)
			{
				HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
				kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO_UPD, (String)kkopKeiUpdMap.get(KEY_KKTK_SVC_KEI_NO));
				kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_NO_UPD, kkopSvcKeiNo);
				kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_STAT_UPD, (String)ekk2811c080hash.get(EKK2811C080CBSMsg.KKOP_SVC_KEI_STAT));
				kktkSvcKeiUpdList.add(kktkSvcKeiInfo);
				updDtmBf =  (String)ekk2811c080hash.get(EKK2811C080CBSMsg.UPD_DTM);
				kkopKeiUpdMap.put(KEY_UPD_DTM_BF, updDtmBf);
			}
		}

		return kktkSvcKeiUpdList;
	}

	/**
	 * 利用停止解除処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ekk2811b010List 機器オプションサービス契約一覧照会（機器提供サービス契約番号）明細
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @return 機器提供サービス契約更新用リスト
	 * @throws Throwable 例外時にスローします
	 */
	private ArrayList<HashMap<String, Object>> useStpRlsTran(SessionHandle handle,
			IRequestParameterReadWrite param,
			CAANMsg[] ekk2811b010List, HashMap<String, Object> kkopKeiUpdMap) throws Throwable {

		// 機器提供サービス契約更新用リスト
		ArrayList<HashMap<String, Object>> kktkSvcKeiUpdList = new ArrayList<HashMap<String, Object>>();

		for (CAANMsg ekk2811b010info : ekk2811b010List)
		{
			String kkopSvcStat = (String)ekk2811b010info.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT);
			// サービス停止中以外は処理対象外とする
			if (!JKKSvcConst.SVC_KEI_STAT_220.equals(kkopSvcStat))
			{
				continue;
			}

			// 履歴一覧照会を行い、停止前のステータスを取得する
			// 機器オプションサービス契約番号
			String kkopSvcKeiNo = (String)ekk2811b010info.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO);
			// 世代登録年月日時分秒
			String geneAddDtm = "";
			// 予約年月日 = 運用日
			String rsvAplyYmd = JCCBPCommon.getOpeDate(null);
			HashMap<String, Object> ekk2811b012hash = new HashMap<String, Object>();
			int returnCd = callEKK2811B012SC(param, handle, kkopSvcKeiNo, geneAddDtm, rsvAplyYmd, ekk2811b012hash);
			// 機器オプションサービス契約履歴一覧照会結果を取り出す
			if (returnCd == 0)
			{
				CAANMsg[] ekk2811b012list = (CAANMsg[])ekk2811b012hash.get(EKK2811B012CBSMsg.EKK2811B012CBSMSG1LIST);
				if (null != ekk2811b012list && ekk2811b012list.length > 0)
				{
					String targetStat = "";
					for (CAANMsg ekk2811b012info : ekk2811b012list)
					{
						// 機器オプションサービス契約ステータスを取得
						String svcKkopKeiStat = (String)ekk2811b012info.getString(EKK2811B012CBSMsg1List.KKOP_SVC_KEI_STAT);
						// ステータスが停止中以外であれば保持し、ループを抜ける
						if (!JKKSvcConst.SVC_KEI_STAT_220.equals(svcKkopKeiStat))
						{
							targetStat = svcKkopKeiStat;
							break;
						}
					}

					// OM-2014-0002572 利用停止バッチの多機能ルーター停止処理時に排他エラーが発生 2014/08/14 START
					// 機器オプションサービス契約一意照会IF呼出処理を実施
					HashMap<String, Object> ekk2811a010Hash = new HashMap<String, Object>();
					callEKK2811A010SC(param, handle, kkopSvcKeiNo, "", rsvAplyYmd, ekk2811a010Hash);
					CAANMsg[] ekk2811A010List = (CAANMsg[])ekk2811a010Hash.get(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST);
					CAANMsg ekk2811a010Msg = ekk2811A010List[0];
					// OM-2014-0002572 利用停止バッチの多機能ルーター停止処理時に排他エラーが発生 2014/08/14 END

					HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
					kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO_UPD, (String)kkopKeiUpdMap.get(KEY_KKTK_SVC_KEI_NO));
					kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_NO_UPD, kkopSvcKeiNo);
					// サービス停止解除所年月日
					String svcStpRlsYmd = (String)kkopKeiUpdMap.get(KEY_SVC_STP_RLS_YMD);
					// サービス停止解除理由コード
					String svcStpRlsRsnCd = SVC_STP_RSN_CD_USESTPRLS;
					// 異動区分
					String idoDiv = (String)kkopKeiUpdMap.get(KEY_IDO_DIV);
					// 更新年月日時分秒(更新前)
					// OM-2014-0002572 利用停止バッチの多機能ルーター停止処理時に排他エラーが発生 2014/08/14 START
//					String updDtmBf = (String)kkopKeiUpdMap.get(KEY_UPD_DTM_BF);
					String updDtmBf = ekk2811a010Msg.getString(EKK2811A010CBSMsg1List.LAST_UPD_DTM);
					// OM-2014-0002572 利用停止バッチの多機能ルーター停止処理時に排他エラーが発生 2014/08/14 END
					// 機器オプションサービス契約ステータス
					String kkopSvcKeiStat = "";

					// 停止前のステータスがサービス提供中の場合
					if (targetStat.equals(JKKSvcConst.SVC_KEI_STAT_100))
					{
						HashMap<String, Object> ekk2811c090hash = new HashMap<String, Object>();
						// 機器オプションサービス契約停止解除を実行
						returnCd = callEKK2811C090SC(param, handle, kkopSvcKeiNo, svcStpRlsYmd, svcStpRlsRsnCd, idoDiv, updDtmBf, ekk2811c090hash);
						if (returnCd == 0)
						{
							// 機器オプションサービス契約ステータスを取得
							kkopSvcKeiStat = (String)ekk2811c090hash.get(EKK2811C090CBSMsg.KKOP_SVC_KEI_STAT);
							kkopKeiUpdMap.put(KEY_UPD_DTM_BF, (String)ekk2811c090hash.get(EKK2811C090CBSMsg.UPD_DTM));
						}
					}
					// 停止前のステータスが休止・中断中の場合
					else if (targetStat.equals(JKKSvcConst.SVC_KEI_STAT_210))
					{
						HashMap<String, Object> ekk2811c100hash = new HashMap<String, Object>();
						// 休止中機器オプションサービス契約停止解除を実行
						returnCd = callEKK2811C100SC(param, handle, kkopSvcKeiNo, svcStpRlsYmd, svcStpRlsRsnCd, idoDiv, updDtmBf, ekk2811c100hash);
						if (returnCd == 0)
						{
							// 機器オプションサービス契約ステータスを取得
							kkopSvcKeiStat = (String)ekk2811c100hash.get(EKK2811C100CBSMsg.KKOP_SVC_KEI_STAT);
							kkopKeiUpdMap.put(KEY_UPD_DTM_BF, (String)ekk2811c100hash.get(EKK2811C100CBSMsg.UPD_DTM));
						}
					}
					if (!"".equals(kkopSvcKeiStat))
					{
						kktkSvcKeiInfo.put(KEY_KKOP_SVC_KEI_STAT_UPD, kkopSvcKeiStat);
						kktkSvcKeiUpdList.add(kktkSvcKeiInfo);
					}
				}
			}
		}

		return kktkSvcKeiUpdList;
	}

	/**
	 * 業務データの取得処理です。
	 * 
	 * @param rslt SVIFの実行結果データ
	 * @return 業務データ
	 */
	private HashMap<String, Object> getWorkCAANMsg(Map<?, ?> rslt)
	{
		CAANMsg[] templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		return parentTemplate.getMsgData();
	}

	/**
	 * エラーチェック処理
	 * 
	 * @param msgList サービスインタフェース実行結果
	 * return void
	 * @throws SCCallException 
	 */
	private int errChk(Map<?, ?> msgList) 
	throws SCCallException
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		int returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// ステータス
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if ((0 != returnCode) || (0 != templateStatus))
		{
			throw new SCCallException(ERR_MSG, String.valueOf(returnCode), templateStatus);
		}
		
		return returnCode;
	}

	/**
	 * 更新後機器提供サービス契約ステータス確定処理
	 * 処理対象の機器の機器オプションサービス契約ステータスと、同一回線上にある機器の機器オプションサービス契約ステータスより
	 * 遷移先ステータスを特定して返却
	 * 
	 * @param kkopSvcKeiStatMain 処理対象の機器の機器提供サービス契約ステータス
	 * @param kkopSvcKeiStatSub 処理対象と同一回線上にある機器の機器提供サービス契約ステータス
	 * return 遷移先ステータス
	 */
	private String getDestinationStatus(String kkopSvcKeiStatMain, String kkopSvcKeiStatSub) 
	{
		String destinationStatus = "";

		int i;
		int j;
		for (i = 0; i < KKOP_SVC_KEI_STAT_MAIN_LIST.length; i++)
		{
			if (KKOP_SVC_KEI_STAT_MAIN_LIST[i].equals(kkopSvcKeiStatMain))
			{
				break;
			}
		}
		for (j = 0; j < KKOP_SVC_KEI_STAT_SUB_LIST.length; j++)
		{
			if (KKOP_SVC_KEI_STAT_SUB_LIST[j].equals(kkopSvcKeiStatSub))
			{
				break;
			}
		}
		if (i < KKOP_SVC_KEI_STAT_MAIN_LIST.length && j < KKOP_SVC_KEI_STAT_SUB_LIST.length)
		{
			destinationStatus = DESTINATION_STATUS[j][i];
		}
		return destinationStatus;
	}
// ▽▽▽ ANK-3412-00-00 DEL START
//	/**
//	 * 機器交換判定処理
//	 * 
//	 * @param handle セッションマネージャなどを持ったハンドル
//	 * @param param リクエストパラメータ
//	 * @param chbfPcrsCd 変更前料金コースコード
//	 * @param chafPcrsCd 変更後料金コースコード
//	 * @param usingBbrKktkSvcKei 利用中ルータの機器提供サービス契約情報
//	 * @return 機器交換が発生する場合はture、発生しない場合はfalse
//	 * @throws Throwable 例外時にスローされます
//	 */
//	private boolean judgeKikiKokan(
//			SessionHandle handle,
//			IRequestParameterReadWrite param,
//			String chbfPcrsCd,
//			String chafPcrsCd,
//			// IT2-2013-00000853 2013/12/18 STRAT
//			boolean chstatFlg,
//			// IT2-2013-00000853 2013/12/18 END
//			Map<String, String> usingBbrKktkSvcKei)
//	throws Throwable
//	{
//		boolean isKokan = false;
//
//		// 予約適用年月日を取得
//		String rsvAplyYmd = JCCBPCommon.getOpeDate(null);
//
//		// 変更前料金コースの料金速度コードを取得
//		// 料金コース一意照会サービスIF呼出処理を実施
//		HashMap<String, Object> chbfEkk0791a010Hash = new HashMap<String, Object>();
//		callEKK0791A010SC(param, handle, chbfPcrsCd, null, rsvAplyYmd, chbfEkk0791a010Hash);
//		CAANMsg[] chbfEkk0791a010List = (CAANMsg[])chbfEkk0791a010Hash.get(EKK0791A010CBSMsg.EKK0791A010CBSMSG1LIST);
//		String chbfPcrsSpeedCd = chbfEkk0791a010List[0].getString(EKK0791A010CBSMsg1List.PCRS_SPEED_CD);
//
//		// 変更前料金コースが100Mの場合
//		// IT2-2013-00000853 2013/12/18 STRAT
//		// サービス提供中未満のコース変更を考慮して、変更状態フラグがオンの時は変更前の料金コースチェックを通り越し
//		// 機器自身の状態判定に委ねる。
//		if (!isPcrsSpeedCd100MOver(chbfPcrsSpeedCd) || chstatFlg)
//		// IT2-2013-00000853 2013/12/18 END
//		{
//			// 変更後料金コースの料金速度コードを取得
//			// 料金コース一意照会サービスIF呼出処理を実施
//			HashMap<String, Object> chafEkk0791a010Hash = new HashMap<String, Object>();
//			callEKK0791A010SC(param, handle, chafPcrsCd, null, rsvAplyYmd, chafEkk0791a010Hash);
//			CAANMsg[] chafEkk0791a010List = (CAANMsg[])chafEkk0791a010Hash.get(EKK0791A010CBSMsg.EKK0791A010CBSMSG1LIST);
//			String chafPcrsSpeedCd = chafEkk0791a010List[0].getString(EKK0791A010CBSMsg1List.PCRS_SPEED_CD);
//
//			// 変更後料金コースが100M超の場合
//			if (isPcrsSpeedCd100MOver(chafPcrsSpeedCd))
//			{
//				// 宅内機器型式照会処理を実施
//				String taknkikiModelCd = (String)usingBbrKktkSvcKei.get(EKK0341B002CBSMsg1List.TAKNKIKI_MODEL_CD);
//				HashMap<String, Object> eZM0411B050Hash = new HashMap<String, Object>();
//				JKKBpCommon.searchTkmdl(param, handle, taknkikiModelCd, eZM0411B050Hash, this.fixedTextGlobal);
//
//				CAANMsg[] eZM0411B050CBSMSG1List = (CAANMsg[])eZM0411B050Hash.get(EZM0411B050CBSMsg.EZM0411B050CBSMSG1LIST);
//				if (null != eZM0411B050CBSMSG1List && eZM0411B050CBSMSG1List.length != 0)
//				{
//					HashMap<String, Object> eZM0411B050CBSMSG1 = eZM0411B050CBSMSG1List[0].getMsgData();
//					// 保有ルーターコード取得
//					String hoyuRouterCd = (String)eZM0411B050CBSMSG1.get(EZM0411B050CBSMsg1List.HOYU_ROUTER_SBT_CD);
//
//					// 利用中のルーター速度種別コードを取得
//					String routerSpeedSbtCd = "";
//					// 宅内機器型式マスタからルーター速度種別コードを取得
//					HashMap<String, Object> eZM0411B030Hash = new HashMap<String, Object>();
//					callEZM0411B030(param, handle, hoyuRouterCd, eZM0411B030Hash);
//					CAANMsg[] eZM0411B030CBSMSG1list = (CAANMsg[])eZM0411B030Hash.get(EZM0411B030CBSMsg.EZM0411B030CBSMSG1LIST);
//					if (null != eZM0411B030CBSMSG1list && eZM0411B030CBSMSG1list.length != 0)
//					{
//						HashMap<String, Object> eZM0411B030CBSMSG1 = eZM0411B030CBSMSG1list[0].getMsgData();
//						routerSpeedSbtCd = (String)eZM0411B030CBSMSG1.get(EZM0411B030CBSMsg1List.ROUTER_SPEED_SBT_CD);
//					}
//
//					// 利用中ルータのルーター速度コードが100Mの場合、ルーター交換を行う
//					if (ROUTER_SPEED_SBT_CD_100M.equals(routerSpeedSbtCd))
//					{
//						isKokan = true;
//					}
//				}
//			}
//		}
//
//		return isKokan;
//	}
//	/**
//	 * 料金速度コードが100M超かどうかを返します。
//	 * 
//	 * @param pcrsSpeedCd 料金速度コード
//	 * @return 料金速度コードが100M超の場合はture、100Mの場合はfalse
//	 * @throws Throwable 例外時にスローされます
//	 */
//	private boolean isPcrsSpeedCd100MOver(String pcrsSpeedCd)
//	{
//		return (!PCRS_SPEED_CD_100M.equals(pcrsSpeedCd) && !PCRS_SPEED_CD_100M_PREMIUM.equals(pcrsSpeedCd));
//	}
//
//	/**
//	 * 利用中ルータと判定する優先順にソートします。
//	 * @param list (ソート対象リスト)
//	 * @param keyCd (ソートキー)
//	 */
//	private void sortYusen(ArrayList<Map<String, String>> list, final String[] keyCd)
//	{
//		Collections.sort(list, new Comparator<Object>()
//		{
//
//			/**
//			 * ソート処理
//			 * 
//			 * @param list
//			 * @param workObj
//			 * @return int
//			 */
//			@SuppressWarnings("unchecked")
//			public int compare(Object list, Object workObj)
//			{
//				for (String key : keyCd)
//				{
//					HashMap<String, Comparable<String>> o1 = (HashMap<String, Comparable<String>>)list;
//					HashMap<String, Comparable<String>> o2 = (HashMap<String, Comparable<String>>)workObj;
//
//					Comparable c1 = o1.get(key);
//					Comparable c2 = o2.get(key);
//					
//					// ソートキーが料金コースの場合
//					if (key.equals(KEY_PCRS_CD))
//					{
//						// c1が「新無線ルーター」、c2が「旧無線ルーター」の場合
//						if (c1.equals(JKKStrConst.CD00134_MUSEN_100M_RENT) && c2.equals(JKKStrConst.CD00134_OLD_MUSEN_100M_RENT))
//						{
//							return -1;
//						}
//						// c1が「新無線ルーター」、c2が「ベーシックルーター」の場合
//						else if (c1.equals(JKKStrConst.CD00134_MUSEN_100M_RENT) && c2.equals(JKKStrConst.CD00134_BASIC_100M_RENT))
//						{
//							return -2;
//						}
//						// c1が「旧無線ルーター」、c2が「新無線ルーター」の場合
//						else if (c1.equals(JKKStrConst.CD00134_OLD_MUSEN_100M_RENT) && c2.equals(JKKStrConst.CD00134_MUSEN_100M_RENT))
//						{
//							return 1;
//						}
//						// c1が「旧無線ルーター」、c2が「ベーシックルーター」の場合
//						else if (c1.equals(JKKStrConst.CD00134_OLD_MUSEN_100M_RENT) && c2.equals(JKKStrConst.CD00134_BASIC_100M_RENT))
//						{
//							return -1;
//						}
//						// c1が「ベーシックルーター」、c2が「新無線ルーター」の場合
//						else if (c1.equals(JKKStrConst.CD00134_BASIC_100M_RENT) && c2.equals(JKKStrConst.CD00134_MUSEN_100M_RENT))
//						{
//							return 2;
//						}
//						// c1が「ベーシックルーター」、c2が「旧無線ルーター」の場合
//						else if (c1.equals(JKKStrConst.CD00134_BASIC_100M_RENT) && c2.equals(JKKStrConst.CD00134_OLD_MUSEN_100M_RENT))
//						{
//							return 1;
//						}
//						
//					}
//					int check = c1.compareTo(c2);
//					if (check != 0)
//					{
//						return check * -1;
//					}
//				}
//				return 0;
//			}
//		});
//	}
// ▲▲▲ ANK-3412-00-00 DEL END

	/**
	 * 機器提供サービス契約解約キャンセル処理
	 * 引数の機器提供サービス契約情報を元にサービスIFの呼出を行い、対象の機器提供サービス契約をキャンセルまたは解約する。
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param リクエストパラメータ
	 * @param kktkSvcKeiInfo 機器提供サービス契約情報
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param svcKeiNo サービス契約番号
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @throws Throwable 例外時にスローされます
	 */
	private void dslCancelKktkSvcKei(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> kktkSvcKeiInfo,
			String updDtmBf, String svcKeiNo, HashMap<String, Object> kkopKeiUpdMap)
	throws Throwable
	{
		// 機器提供サービス契約情報がセットされていない場合は処理終了
		if (null == kktkSvcKeiInfo || kktkSvcKeiInfo.size() == 0)
		{
			return;
		}

		// 申込明細番号
		String mskmDtlNo = (String)kkopKeiUpdMap.get(KEY_MSKM_DTL_NO);
		// サービスキャンセル理由コード
		String svcCancelRsnCd = "05";
		// 異動区分
		String idoDiv = (String)kkopKeiUpdMap.get(KEY_IDO_DIV);

		// 予約適用開始希望年月日
		String rsvTstaKiboYmd = null;
		// サービス終了年月日
		String svcEndYmd = (String)kkopKeiUpdMap.get(KEY_SVC_ENDYMD);
		if (null == svcEndYmd || "".equals(svcEndYmd))
		{
			svcEndYmd = JCCBPCommon.getOpeDate(null); 
		}
		// サービス課金終了年月日
		String svcChrgEndymd = (String)kkopKeiUpdMap.get(KEY_SVC_CHRG_ENDYMD);
		if (null == svcChrgEndymd || "".equals(svcChrgEndymd))
		{
			svcChrgEndymd = JCCBPCommon.getOpeDate(null); 
		}
		// サービス解約理由コード
		String svcDlreCd;
		if(IDO_DIV_KSI_DSL.equals(idoDiv))
		{
			// 異動区分が「強制解約」の場合のみ「強制解約」
			svcDlreCd = SVC_DLRE_CD_KSI_DSL;
		}
		else
		{
			// その他の異動区分は「通常解約」
			svcDlreCd = SVC_DLRE_CD_NORMAL;
		}
		// サービス解約理由メモ
		String svcDlreMemo = (String)kkopKeiUpdMap.get(KEY_SVC_DLRE_MEMO);
		// 残置フラグ
		String zanchiFlg = "0";
		// 宅内機器異動コード
		String taknkikiIdoCd = null;
		// 回収機器有無
		String kaishuKikiUm = "0";
		// 更新年月日時分秒
		String updDtm = "";

		// 機器提供サービス契約情報より機器提供サービス契約ステータスを取得し、ステータスに応じた処理を実行する
		String kktkSvcKeiNo = (String)kktkSvcKeiInfo.get(KEY_KKTK_SVC_KEI_NO);
		String kktkSvcKeiStat = (String)kktkSvcKeiInfo.get(KEY_KKTK_SVC_KEI_STAT);
		if(JKKSvcConst.SVC_KEI_STAT_010.equals(kktkSvcKeiStat)
				|| JKKSvcConst.SVC_KEI_STAT_020.equals(kktkSvcKeiStat))
		{
			// 機器提供サービス契約キャンセルサービスIF呼出処理を実施
			HashMap<String, Object> ekk0341c330Hash = new HashMap<String, Object>();
			callEKK0341C330SC(param, handle, kktkSvcKeiNo, mskmDtlNo, svcCancelRsnCd, idoDiv, updDtmBf, ekk0341c330Hash);
			if (null != ekk0341c330Hash && ekk0341c330Hash.size() > 0)
			{
				updDtm = (String)ekk0341c330Hash.get(EKK0341C330CBSMsg.UPD_DTM);
			}
		}
		else if(JKKSvcConst.SVC_KEI_STAT_030.compareTo(kktkSvcKeiStat) <= 0)
		{
			// 違約金発生コード
			String pnltyHasseiCd = getKikiDslPnltyHasseiCd(handle, param,
					(String)kkopKeiUpdMap.get(KEY_PNLTY_HASSEI_CD), (String)kktkSvcKeiInfo.get(KEY_KKTK_SVC_CD));

			// 機器提供サービス契約解約サービスIF呼出処理を実施
			HashMap<String, Object> ekk0341c340Hash = new HashMap<String, Object>();
			callEKK0341C340SC(param, handle, kktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndYmd, svcChrgEndymd, svcDlreCd, 
					svcDlreMemo, zanchiFlg, pnltyHasseiCd, idoDiv, taknkikiIdoCd, updDtmBf, svcKeiNo, ekk0341c340Hash);
			if (null != ekk0341c340Hash && ekk0341c340Hash.size() > 0)
			{
				updDtm = (String)ekk0341c340Hash.get(EKK0341C340CBSMsg.UPD_DTM);
			}
			// 機器提供サービス契約解約確定サービスIF呼出処理を実施
			HashMap<String, Object> ekk0341c350Hash = new HashMap<String, Object>();
			callEKK0341C350SC(param, handle, kktkSvcKeiNo, svcEndYmd, svcChrgEndymd, svcDlreCd, svcDlreMemo, zanchiFlg, 
					taknkikiIdoCd, kaishuKikiUm, updDtm, ekk0341c350Hash);
			if (null != ekk0341c350Hash && ekk0341c350Hash.size() > 0)
			{
				updDtm = (String)ekk0341c350Hash.get(EKK0341C350CBSMsg.UPD_DTM);
			}
		}
	}

	/**
	 * 機器解約時に設定する違約金発生コードを、画面で選択された違約金発生区分から判定して返します。<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param リクエストパラメータ
	 * @param selPnltyHasseiCd 画面で選択された違約金発生区分
	 * @param kktkSvcCd 機器提供サービスコード
	 * @return 違約金発生コード
	 * @throws Throwable 例外時にスローされます
	 */
	private String getKikiDslPnltyHasseiCd(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String selPnltyHasseiCd,
			String kktkSvcCd)
	throws Throwable
	{
		String pnltyHasseiCd = "";

		// 画面で選択された違約金発生区分が「有」の場合
		if (JKKStrConst.CD_DIV_UM_ARI.equals(selPnltyHasseiCd))
		{
			// マスタ設定値の違約金発生有無を取得
			String pnltyHasseiUm = "";

			// 機器提供サービス一意照会サービスIF呼出処理を実施
			HashMap<String, Object> eKK0771a010Hash = new HashMap<String, Object>();
			callEKK0771A010SC(param, handle, kktkSvcCd, eKK0771a010Hash);
			CAANMsg[] ekk0771a010List = (CAANMsg[])eKK0771a010Hash.get(EKK0771A010CBSMsg.EKK0771A010CBSMSG1LIST);
			if (null != ekk0771a010List && 0 < ekk0771a010List.length)
			{
				pnltyHasseiUm = ekk0771a010List[0].getString(EKK0771A010CBSMsg1List.PNLTY_HASSEI_UM);
			}

			// 違約金発生有無が「有」の場合は「有」
			if (JKKStrConst.CD_DIV_UM_ARI.equals(pnltyHasseiUm))
			{
				pnltyHasseiCd = JKKStrConst.CD01375_PNLTY_HASSEI;
			}
			// 上記以外は「無」
			else
			{
				pnltyHasseiCd = JKKStrConst.CD01375_PNLTY_NASHI;
			}
		}
		else
		{
			// 「無」（マスタ設定値は参照しない）
			pnltyHasseiCd = JKKStrConst.CD01375_PNLTY_NASHI;
		}

		return pnltyHasseiCd;
	}
	
// IT2-2014-0000074対応 20140121 星野 ADD START
	/**
	 * 機器オプション引継か否かを判定します。<br>
	 * <br>
	 * @param	handle
	 * @param	param
	 * @param	kkopSvcKeiNo
	 * @return	
	 * @throws	Throwable
	 */
	private boolean isKikiOpHktg(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String kkopSvcKeiNo
	) throws Throwable
	{
		// 住所変更明細一覧照会（変更前識別番号）取得
		CAANMsg[] msgEKK2101B002List = callEKK2101B002(handle, param, kkopSvcKeiNo);

		// 機器引継か？
		boolean isKikiOpHktgFlg = false;

		if (msgEKK2101B002List.length == 0)
		{
			// ****************************
			// 住所変更明細一覧　結果なし
			// ****************************
			isKikiOpHktgFlg = false;
		}
		else if (msgEKK2101B002List.length == 1)
		{
			// ****************************
			// 住所変更明細一覧　結果あり
			// ****************************
			CAANMsg msgEKK2101B002 = msgEKK2101B002List[0];
			String chafSkbtNo = msgEKK2101B002.getString(EKK2101B002CBSMsg1List.CHAF_SKBT_NO);

			if (chafSkbtNo != null && !"".equals(chafSkbtNo))
			{
				// ****************************
				// 変更後識別番号　あり
				// ****************************
				isKikiOpHktgFlg = true;
			}
			else
			{
				// ****************************
				// 変更後識別番号　なし
				// ****************************
				isKikiOpHktgFlg = false;
			}
		}

		return isKikiOpHktgFlg;
	}

// IT2-2014-0000074対応 20140121 星野 ADD END
// OM-2014-0001848対応 20140514 田中 ADD START
	/**
	 * 解約／新規のパターンチェック<br>
	 * 
	 * @param	handle
	 * @param	param
	 * @param	svcKeiNo
	 * @return	
	 * @throws	Throwable
	 */
	private boolean isKaiShinPtChk(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String svcKeiNo
	) throws Throwable
	{
		// 住所変更明細一覧照会（変更前識別番号）取得
		CAANMsg[] msgEKK2101B002List = callEKK2101B002_2(handle, param, svcKeiNo);

		// 機器引継か？
		boolean isKikiOpHktgFlg = false;

		if (msgEKK2101B002List.length == 0)
		{
			// ****************************
			// 住所変更明細一覧　結果なし
			// ****************************
			isKikiOpHktgFlg = false;
		}
		else if (msgEKK2101B002List.length == 1)
		{
			// ****************************
			// 住所変更明細一覧　結果あり
			// ****************************
			CAANMsg msgEKK2101B002 = msgEKK2101B002List[0];
			
			// 変更後サービス契約番号の取得
			String chafSkbtNo = msgEKK2101B002.getString(EKK2101B002CBSMsg1List.CHAF_SKBT_NO);

			if (chafSkbtNo != null && !"".equals(chafSkbtNo))
			{
				// ****************************
				// サービス契約番号変更　あり
				// ****************************
				
				if (!chafSkbtNo.equals(svcKeiNo)) {
					isKikiOpHktgFlg = true;
				}
				
			}
			else
			{
				// ****************************
				// サービス契約番号変更　なし
				// ****************************
				isKikiOpHktgFlg = false;
			}
		}

		return isKikiOpHktgFlg;
	}
	
// OM-2014-0001848対応 20140514 田中 ADD END
	
	/**
	 * お客様一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param sysid SYSID
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callECK0011A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String sysid,
			String geneAddDtm,
			String rsvAplyYmd, 
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgECK0011A010(param, sysid, geneAddDtm, rsvAplyYmd);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPECK0011A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * サービス契約一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svcKeiNo サービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0081A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svcKeiNo,
			String geneAddDtm,
			String rsvAplyYmd, 
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0081A010(param, svcKeiNo, geneAddDtm, rsvAplyYmd);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0081A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * EKK0081B009_同一場所サービス契約情報照会
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0081B009SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String SvcKeiNo,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0081B009(param, SvcKeiNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0081B009(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * サービス契約回線内訳一覧照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svcKeiNo サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0241B001SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svcKeiNo,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0241B001(param, svcKeiNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0241B001(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * サービス契約回線内訳一覧照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svcKeiNo サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0021B002SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svcKeiNo,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0021B002(param, svcKeiNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		
		this.mapper.editResultRPEKK0241B001(sIFResult, param, this.fixedTextGlobal);
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 課金先一覧照会（サービス契約番号）サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svcKeiNo サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0321B005SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svcKeiNo,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0321B005(param, svcKeiNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0321B005(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス契約一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo サービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String geneAddDtm,
			String rsvAplyYmd,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341A010(param, kktkSvcKeiNo, geneAddDtm, rsvAplyYmd);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス契約一覧照会（サービス契約番号）サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svcKeiNo サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341B002SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svcKeiNo,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341B002(param, svcKeiNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341B002(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス契約照査サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param kikiNinshoId 機器認証ID
	 * @param kikiNinshoIdPwd 機器認証IDパスワード
	 * @param idoDiv 異動区分
	 * @param shosaDslFinCd 照査解約完了コード
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @param ekk0341A010Info 機器提供サービス契約情報
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C030SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String kikiNinshoId,
			String kikiNinshoIdPwd,
			String idoDiv,
			String shosaDslFinCd,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C030(param, kktkSvcKeiNo, kikiNinshoId, kikiNinshoIdPwd,
				idoDiv, shosaDslFinCd, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C030(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス契約照査締結サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param kikiNinshoId 機器認証ID
	 * @param kikiNinshoIdPwd 機器認証IDパスワード
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @param ekk0341A010Info 機器提供サービス契約情報
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C050SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String kikiNinshoId,
			String kikiNinshoIdPwd,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C050(param, kktkSvcKeiNo, kikiNinshoId, kikiNinshoIdPwd,
				idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C050(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス契約停止サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param svcStpYmd サービス停止年月日
	 * @param svcStpRsnCd サービス停止理由コード
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C120SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String svcStpYmd,
			String svcStpRsnCd,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C120(param, kktkSvcKeiNo, svcStpYmd, svcStpRsnCd, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C120(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス契約停止解除サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param svcStpRlsYmd サービス停止解除年月日
	 * @param svcStpRlsRsnCd サービス停止解除理由コード
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C130SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String svcStpRlsYmd,
			String svcStpRlsRsnCd,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C130(param, kktkSvcKeiNo, svcStpRlsYmd, svcStpRlsRsnCd, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C130(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 休止中機器提供サービス契約停止解除サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param svcStpRlsYmd サービス停止解除年月日
	 * @param svcStpRlsRsnCd サービス停止解除理由コード
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C131SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String svcStpRlsYmd,
			String svcStpRlsRsnCd,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C131(param, kktkSvcKeiNo, svcStpRlsYmd, svcStpRlsRsnCd, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C131(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス契約キャンセルサービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param mskmDtlNo 申込明細番号
	 * @param svcCancelRsnCd サービスキャンセル理由コード
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C330SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String mskmDtlNo,
			String svcCancelRsnCd,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C330(param, kktkSvcKeiNo, mskmDtlNo, svcCancelRsnCd, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C330(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス契約解約サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param mskmDtlNo 申込明細番号
	 * @param rsvTstaKiboYmd 予約適用開始希望年月日
	 * @param svcEndymd サービス終了年月日
	 * @param svcChrgEndymd サービス課金終了年月日
	 * @param svcDlreCd サービス解約理由コード
	 * @param svcDlreMemo サービス解約理由メモ
	 * @param zanchiFlg 残置フラグ
	 * @param pnltyHasseiCd 違約金発生コード
	 * @param idoDiv 異動区分
	 * @param taknkikiIdoCd 宅内機器異動コード
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param svcKeiNo サービス契約番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C340SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String mskmDtlNo,
			String rsvTstaKiboYmd,
			String svcEndymd,
			String svcChrgEndymd,
			String svcDlreCd,
			String svcDlreMemo,
			String zanchiFlg,
			String pnltyHasseiCd,
			String idoDiv,
			String taknkikiIdoCd,
			String updDtmBf,
			String svcKeiNo,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C340(param, kktkSvcKeiNo, mskmDtlNo, rsvTstaKiboYmd, svcEndymd,
				svcChrgEndymd, svcDlreCd, svcDlreMemo, zanchiFlg, pnltyHasseiCd, idoDiv, taknkikiIdoCd, updDtmBf, svcKeiNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C340(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス契約解約確定サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param svcEndymd サービス終了年月日
	 * @param svcChrgEndymd サービス課金終了年月日
	 * @param svcDlreCd サービス解約理由コード
	 * @param svcDlreMemo サービス解約理由メモ
	 * @param zanchiFlg 残置フラグ
	 * @param taknkikiIdoCd 宅内機器異動コード
	 * @param kaishuKikiUm 回収機器有無
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C350SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String svcEndymd,
			String svcChrgEndymd,
			String svcDlreCd,
			String svcDlreMemo,
			String zanchiFlg,
			String taknkikiIdoCd,
			String kaishuKikiUm,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C350(param, kktkSvcKeiNo, svcEndymd, svcChrgEndymd, svcDlreCd, 
				svcDlreMemo, zanchiFlg, taknkikiIdoCd, kaishuKikiUm, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C350(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス契約回復サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param mskmDtlNo 申込明細番号
	 * @param kaihkYmd 回復年月日
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C380SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String mskmDtlNo,
			String kaihkYmd,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C380(param, kktkSvcKeiNo, mskmDtlNo, kaihkYmd, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C380(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス契約解約取消サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param mskmDtlNo 申込明細番号
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C430SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String mskmDtlNo,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C430(param, kktkSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C430(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 照査前機器提供サービス契約キャンセル取消サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param mskmDtlNo 申込明細番号
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C410SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String mskmDtlNo,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C410(param, kktkSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C410(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 照査後機器提供サービス契約キャンセル取消サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param mskmDtlNo 申込明細番号
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C420SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String mskmDtlNo,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C420(param, kktkSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C420(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 休止中機器提供サービス契約回復サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param mskmDtlNo 申込明細番号
	 * @param kaihkYmd 回復年月日
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C400SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String mskmDtlNo,
			String kaihkYmd,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C400(param, kktkSvcKeiNo, mskmDtlNo, kaihkYmd, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C400(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス契約照査締結サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param eck0011a010Info お客様情報
	 * @param ekk0241b001Info サービス契約回線内訳情報
	 * @param ekk0321b005Info 課金先一覧情報
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @param ekk0341A010Info 機器提供サービス契約情報
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341D010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			CAANMsg eck0011a010Info,
			CAANMsg ekk0241b001Info,
			CAANMsg ekk0321b005Info,
			HashMap<String, Object> kkopKeiUpdMap,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341D010(param, eck0011a010Info, ekk0241b001Info, ekk0321b005Info, kkopKeiUpdMap, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341D010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器提供サービス一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcCd 機器提供サービスコード
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0771A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcCd,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0771A010(param, kktkSvcCd);

		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0791A010(sIFResult, param, this.fixedTextGlobal);

		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}

	/**
	 * 料金コース一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param pcrsCd 料金コースコード
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0791A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String pcrsCd,
			String geneAddDtm,
			String rsvAplyYmd,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0791A010(param, pcrsCd, geneAddDtm, rsvAplyYmd);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0791A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

// IT2-2014-0000074対応 20140121 星野 ADD START
	/**
	 * 住所変更明細一覧照会（変更前識別番号）呼出
	 * 
	 * @param	handle
	 * @param	param
	 * @param	fixedText
	 * @param	kktkKikiChgNo
	 * @return
	 * @throws	Throwable
	 */
	private CAANMsg[] callEKK2101B002(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String kikiOpSvcKeiNo
	) throws Throwable
	{
		// 住所変更明細一覧照会（変更前識別番号）
		HashMap<String, Object> mapEKK2101B002 = this.mapper.editInMsgEKK2101B002(param, kikiOpSvcKeiNo);
		Map<?, ?> rsltEKK2101B002 = this.scCall.run(mapEKK2101B002, handle);
		this.mapper.editResultRPEKK2101B002(rsltEKK2101B002, param, this.fixedTextGlobal);
		errChk(rsltEKK2101B002);
		// 業務データの取得処理
		HashMap<String, Object> workEKK2101B002 = getWorkCAANMsg(rsltEKK2101B002);
		CAANMsg[] msgEKK2101B002List = (CAANMsg[])workEKK2101B002.get(EKK2101B002CBSMsg.EKK2101B002CBSMSG1LIST);

		return msgEKK2101B002List;
	}
// IT2-2014-0000074対応 20140121 星野 ADD END

// OM-2014-0001848対応 20140514 田中 ADD START
	/**
	 * 住所変更明細一覧照会（変更後サービス契約番号）呼出
	 * 
	 * @param	handle
	 * @param	param
	 * @param	fixedText
	 * @param	kktkKikiChgNo
	 * @return
	 * @throws	Throwable
	 */
	private CAANMsg[] callEKK2101B002_2(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String svcKeiNo
	) throws Throwable
	{
		// 住所変更明細一覧照会（変更前識別番号）
		HashMap<String, Object> mapEKK2101B002 = this.mapper.editInMsgEKK2101B002_2(param, svcKeiNo);
		Map<?, ?> rsltEKK2101B002 = this.scCall.run(mapEKK2101B002, handle);
		this.mapper.editResultRPEKK2101B002(rsltEKK2101B002, param, this.fixedTextGlobal);
		errChk(rsltEKK2101B002);
		// 業務データの取得処理
		HashMap<String, Object> workEKK2101B002 = getWorkCAANMsg(rsltEKK2101B002);
		CAANMsg[] msgEKK2101B002List = (CAANMsg[])workEKK2101B002.get(EKK2101B002CBSMsg.EKK2101B002CBSMSG1LIST);

		return msgEKK2101B002List;
	}
// OM-2014-0001848対応 20140514 田中 ADD END
	
	/**
	 * 機器オプションサービス契約一意照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK2811A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kkopSvcKeiNo,
			String geneAddDtm,
			String rsvAplyYmd, HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811A010(param, kkopSvcKeiNo, geneAddDtm, rsvAplyYmd);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811A010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器オプションサービス契約一覧照会（機器提供ＳＶ）サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param kkopSvcStat 機器オプションステータス
	 * @param kkopSvcCd 機器オプションコード
	 * @param mskmMeisaiNo 申込明細番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK2811B010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String kkopSvcStat,
			String kkopSvcCd,
			String mskmMeisaiNo,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811B010(param, kktkSvcKeiNo, kkopSvcStat, kkopSvcCd, mskmMeisaiNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811B010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器オプションサービス契約履歴一覧照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @return サービスIF呼出結果
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK2811B012SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kkopSvcKeiNo,
			String geneAddDtm,
			String rsvAplyYmd, HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811B012(param, kkopSvcKeiNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811B012(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		int return_cd = errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		return return_cd;
	}

	/**
	 * EKK0081B029_同一回線内訳サービス契約一覧照会
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param rsvAplyYmd 予約適用年月日
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0081B029SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String SvcKeiNo,
			String geneAddDtm,
			String rsvAplyYmd, HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0081B029(param, SvcKeiNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0081B029(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 機器オプションサービス契約停止サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param svcStpYmd サービス停止年月日
	 * @param svcStpRsnCd サービス停止理由コード
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK2811C080SC(IRequestParameterReadWrite param,
			SessionHandle handle, 
			String kkopSvcKeiNo, 
			String svcStpYmd,
			String svcStpRsnCd, 
			String idoDiv, 
			String updDtmBf,
			HashMap<String, Object> resultHash) 
	throws Throwable {

		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C080(param, kkopSvcKeiNo, svcStpYmd, svcStpRsnCd, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);
		
		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C080(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		int return_cd = errChk(sIFResult);
		
		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
		return return_cd;
	}

	/**
	 * 機器オプションサービス契約停止解除サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param svcStpRlsYmd サービス停止解除年月日
	 * @param svcStpRlsRsnCd サービス停止解除理由コード
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK2811C090SC(IRequestParameterReadWrite param,
			SessionHandle handle,
			String kkopSvcKeiNo,
			String svcStpRlsYmd,
			String svcStpRlsRsnCd,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash) throws Throwable {

		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C090(param, kkopSvcKeiNo, svcStpRlsYmd, svcStpRlsRsnCd, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);
		
		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C090(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		int return_cd = errChk(sIFResult);
		
		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
		return return_cd;
	}

	/**
	 * 休止中機器オプションサービス契約停止解除サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param svcStpRlsYmd サービス停止解除年月日
	 * @param svcStpRlsRsnCd サービス停止解除理由コード
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK2811C100SC(IRequestParameterReadWrite param,
			SessionHandle handle,
			String kkopSvcKeiNo,
			String svcStpRlsYmd,
			String svcStpRlsRsnCd,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash) throws Throwable {

		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C100(param, kkopSvcKeiNo, svcStpRlsYmd, svcStpRlsRsnCd, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);
		
		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C100(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		int return_cd = errChk(sIFResult);
		
		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
		return return_cd;
	}

	/**
	 * 機器オプションサービス契約キャンセルサービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param ekk2811a010Msg 機器オプションサービス一意照会Msg
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースの戻り値
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK2811C110SC(IRequestParameterReadWrite param,
			SessionHandle handle, String kkopSvcKeiNo, 
			HashMap<String, Object> kkopKeiUpdMap,
			// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 START
			CAANMsg ekk2811a010Msg,
			// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 END
			HashMap<String, Object> resultHash)
	throws Throwable
	{
		
		// 上り情報をマッピング
		// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 START
//		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C110(param, kkopSvcKeiNo, kkopKeiUpdMap);
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C110(param, kkopSvcKeiNo, kkopKeiUpdMap, ekk2811a010Msg);
		// OM-2014-0001556 サービス契約解約時の多機能ルーターキャンセル処理で排他エラーになる 2014/04/22 END
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);
		
		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C110(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		int return_cd = errChk(sIFResult);
		
		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
		return return_cd;
	}

	/**
	 * 照査前機器オプションサービス契約キャンセル取消IF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param ekk2811a010Msg 機器オプションサービス一意照会Msg
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースの戻り値
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK2811C120SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,  
			CAANMsg tgRirekiMap,
			HashMap<String, Object> hikitsugiMap,
			HashMap<String, Object> resultHash)
	throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C120(param, tgRirekiMap, hikitsugiMap);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);
		
		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C120(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		int return_cd = errChk(sIFResult);
		
		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
		return return_cd;
	}

	/**
	 * 照査後機器オプションサービス契約キャンセル取消IF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param ekk2811a010Msg 機器オプションサービス一意照会Msg
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースの戻り値
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK2811C130SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,  
			CAANMsg tgRirekiMap,
			HashMap<String, Object> hikitsugiMap,
			HashMap<String, Object> resultHash)
	throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C130(param, tgRirekiMap, hikitsugiMap);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);
		
		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C130(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		int return_cd = errChk(sIFResult);
		
		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
		return return_cd;
	}

	/**
	 * 機器オプションサービス契約解約サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param ekk2811a010Msg 機器オプションサービス一意照会Msg
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースの戻り値
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK2811C140SC(IRequestParameterReadWrite param,
			SessionHandle handle, String kkopSvcKeiNo, 
			HashMap<String, Object> kkopKeiUpdMap, 
			CAANMsg ekk2811a010Msg,
			HashMap<String, Object> resultHash)
	throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C140(param, kkopSvcKeiNo, kkopKeiUpdMap, ekk2811a010Msg);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);
		
		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C140(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		int reurn_cd = errChk(sIFResult);
		
		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
		return reurn_cd;
	}

	/**
	 * 機器オプションサービス契約解約確定サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param dslJiChrg 解約時課金のフラグ(0：非課金、1：課金)
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースの戻り値
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK2811C150SC(IRequestParameterReadWrite param,
			SessionHandle handle, String kkopSvcKeiNo, 
			HashMap<String, Object> kkopKeiUpdMap, 
			CAANMsg ekk2811a010Msg,
			HashMap<String, Object> resultHash,
			String upYmd,
			// ▼▼▼▼▼ OM-2015-0002509 2015/10/06 MOD START ▼▼▼▼▼
			String dslJiChrg
			// ▲▲▲▲▲ OM-2015-0002509 2015/10/06 MOD END   ▲▲▲▲▲
	)
	throws Throwable
	{
		// ▼▼▼▼▼ OM-2015-0002509 2015/10/06 MOD START ▼▼▼▼▼
		// 上り情報をマッピング
//		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C150(param, kkopSvcKeiNo, kkopKeiUpdMap, ekk2811a010Msg, upYmd);
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C150(param, kkopSvcKeiNo, kkopKeiUpdMap, ekk2811a010Msg, upYmd, dslJiChrg);
		// ▲▲▲▲▲ OM-2015-0002509 2015/10/06 MOD END   ▲▲▲▲▲
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);
		
		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C150(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		int return_cd = errChk(sIFResult);
		
		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
		return return_cd;
	}

	/**
	 * EKK2811C180_機器オプションサービス契約回復
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param ekk2811a010Msg 機器オプションサービス一意照会Msg
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースの戻り値
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK2811C180SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,  
			CAANMsg tgRirekiMap,
			HashMap<String, Object> hikitsugiMap,
			HashMap<String, Object> resultHash)
	throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C180(param, tgRirekiMap, hikitsugiMap);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);
		
		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C180(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		int return_cd = errChk(sIFResult);
		
		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
		return return_cd;
	}

	/**
	 * IF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param ekk2811a010Msg 機器オプションサービス一意照会Msg
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースの戻り値
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK2811C190SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,  
			CAANMsg tgRirekiMap,
			HashMap<String, Object> hikitsugiMap,
			HashMap<String, Object> resultHash)
	throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C190(param, tgRirekiMap, hikitsugiMap);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);
		
		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C190(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		int return_cd = errChk(sIFResult);
		
		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
		return return_cd;
	}

	/**
	 * 機器オプションサービス契約解約取消サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param mskmDtlNo 申込明細番号
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースの戻り値
	 * @throws Throwable 例外時にスローされます
	 */
	private int callEKK2811C200SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kkopSvcKeiNo,
			String mskmDtlNo,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C200(param, kkopSvcKeiNo, mskmDtlNo, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C200(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		int return_cd = errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

		return return_cd;

	}

	/**
	 * 機器オプションサービス契約登録サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcCd 機器オプションサービスコード
	 * @param pcrsCd 料金コースコード
	 * @param pplanCd 料金プランコード
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param sysid SYSID
	 * @param mskmDtlNo 申込明細番号
	 * @param ftrialKanyuYmd 試用加入年月日
	 * @param ftrialPrdEndymd 試用期間終了年月日
	 * @param honkanyuYmd 本加入年月日
	 * @param honkanyuIkoKigenYmd 本加入移行期限年月日
	 * @param svcUseStaKiboYmd サービス利用開始希望年月日
	 * @param rsvTstaKiboYmd 予約適用開始希望年月日
	 * @param idoDiv 異動区分
	 * @param kikiRntaiKeiChgechuFlg 機器連帯契約変更中フラグ
	 * @param seikyKeiNo 請求契約番号
	 * @param prcKmkCd 料金項目コード
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @param ekk0341A010Info 機器提供サービス契約情報
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK2811D010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kkopSvcCd,
			String pcrsCd,
			String pplanCd,
			String kktkSvcKeiNo,
			String sysid,
			String mskmDtlNo,
			String ftrialKanyuYmd,
			String ftrialPrdEndymd,
			String honkanyuYmd,
			String honkanyuIkoKigenYmd,
			String svcUseStaKiboYmd,
			String rsvTstaKiboYmd,
			String idoDiv,
			String kikiRntaiKeiChgechuFlg,
			String seikyKeiNo, String prcKmkCd, String updDtmBf, HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811D010(param, kkopSvcCd, pcrsCd, pplanCd, kktkSvcKeiNo,
				sysid, mskmDtlNo, ftrialKanyuYmd, ftrialPrdEndymd, honkanyuYmd, honkanyuIkoKigenYmd, svcUseStaKiboYmd,
				rsvTstaKiboYmd, idoDiv, kikiRntaiKeiChgechuFlg, seikyKeiNo, prcKmkCd, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811D010(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}

	/**
	 * 宅内機器型式一覧照会（保有ルーターコード）サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param router_sbt  ルーター種別コード
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEZM0411B030(IRequestParameterReadWrite param, SessionHandle handle, String router_sbt,
			HashMap<String, Object> resultHash) throws Throwable
	{
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEZM0411B030(param, router_sbt);

		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEZM0411B030(sIFResult, param, this.fixedTextGlobal);

		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));

	}
	// IT2-2013-00000853 2013/12/18 STRAT
	/**
	 * EKK2811C030_機器オプションサービス契約照査サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param kikiNinshoId 機器認証ID
	 * @param kikiNinshoIdPwd 機器認証IDパスワード
	 * @param idoDiv 異動区分
	 * @param shosaDslFinCd 照査解約完了コード
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @param ekk0341A010Info 機器提供サービス契約情報
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK2811C030SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kkopSvcKeiNo,
			String kikiNinshoId,
			String kikiNinshoIdPwd,
			String idoDiv,
			String shosaDslFinCd,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C030(param, kkopSvcKeiNo, kikiNinshoId, kikiNinshoIdPwd,
				idoDiv, shosaDslFinCd, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C030(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * EKK2811C050_機器オプションサービス契約照査締結
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param kikiNinshoId 機器認証ID
	 * @param kikiNinshoIdPwd 機器認証IDパスワード
	 * @param idoDiv 異動区分
	 * @param shosaDslFinCd 照査解約完了コード
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @param ekk0341A010Info 機器提供サービス契約情報
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK2811C050SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kkopSvcKeiNo,
			String kikiNinshoId,
			String kikiNinshoIdPwd,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C050(param, kkopSvcKeiNo, kikiNinshoId, kikiNinshoIdPwd,
				idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C050(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	// IT2-2013-00000853 2013/12/18 END
	
	// IT2-2013-00000858 2013/12/21 START
	/**
	 * EKK2811C250_機器オプションサービス契約照査締結
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param kikiNinshoId 機器認証ID
	 * @param kikiNinshoIdPwd 機器認証IDパスワード
	 * @param idoDiv 異動区分
	 * @param shosaDslFinCd 照査解約完了コード
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @param ekk0341A010Info 機器提供サービス契約情報
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK2811C250SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kkopSvcKeiNo,
			String idoDiv,
			String tgRsv_aply_ymd,
			String tgMskmDtlNo,
			String chgPrcsCd,
			String chgPplanCd,
			String pnltyhasseiCd,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = 
			this.mapper.
			editInMsgEKK2811C250(param,
								kkopSvcKeiNo,
								idoDiv,
								tgRsv_aply_ymd,
								tgMskmDtlNo,
								chgPrcsCd,
								chgPplanCd,
								pnltyhasseiCd,
								updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C250(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	
	/**
	 * EKK2811C260_機器オプションサービス契約照査締結
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param kikiNinshoId 機器認証ID
	 * @param kikiNinshoIdPwd 機器認証IDパスワード
	 * @param idoDiv 異動区分
	 * @param shosaDslFinCd 照査解約完了コード
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @param ekk0341A010Info 機器提供サービス契約情報
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK2811C260SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kkopSvcKeiNo,
			String idoDiv,
			String tgRsv_aply_ymd,
			String tgMskmDtlNo,
			String chgPrcsCd,
			String chgPplanCd,
			String pnltyhasseiCd,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = 
			this.mapper.
			editInMsgEKK2811C260(param,
								kkopSvcKeiNo,
								idoDiv,
								tgRsv_aply_ymd,
								tgMskmDtlNo,
								updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C260(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	// IT2-2013-00000858 2013/12/21 END
	/**
	 * ユーザ定義文字列がユーザ情報になければデータを作成します。
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param workMapKey 業務データのマップキー
	 * @return true：作成した　False：存在していたため作成不要
	 * @throws RequestParameterException 
	 */
	private boolean createUserData(IRequestParameterReadWrite param, String workMapKey) 
	throws RequestParameterException
	{
		if (param.getData(workMapKey) == null)
		{
			param.setData(workMapKey, new HashMap<String, Object>());
			return true;
		}
		
		return false;
	}
	
	//IT1-2014-0000024 20140107 START
	/**
	 * KKW00128の登録更新押下後のワーニングメッセージ出力チェック処理です。
	 * このメソッドは、機器の自動交換が行われる際に呼び出される様に改修します。
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param workMapKey 業務データのマップキー
	 * @return true：作成した　False：存在していたため作成不要
	 * @throws RequestParameterException 
	 */
	public IRequestParameterReadWrite chk_KKW00128(SessionHandle handle,
								 IRequestParameterReadWrite param,
								 String fixedText) 
	throws Throwable
	{
		
		// 初期処理を実施
		init(param, fixedText);
		
		String rsvAplyYmd = JCCBPCommon.getOpeDate(null);
		
		// リクエストパラメータの取得処理
		HashMap trgtData = (HashMap)param.getData(this.fixedTextGlobal);
		ArrayList<HashMap<String, Object>> trgtDataList = (ArrayList<HashMap<String, Object>>)trgtData.get(KEY_TRGT_DATA_LIST);
		
		// 対象データリストの件数分、処理を実行
		for (HashMap<String, Object> kkopKeiUpdMap : trgtDataList) 
		{
			
			//VA存在有無を表わすフラグ（メッセージ表示に使用）
			kkopKeiUpdMap.put("VA_FLG", "0");
			
			// サービス契約番号を取得
			String svcKeiNo = (String)kkopKeiUpdMap.get(KEY_SVC_KEI_NO);
// ▽▽▽ ANK-3412-00-00 ADD START
			
			// 交換はマッピング側で判定。自動交換以外は何もしない
			String koukanUm = (String)kkopKeiUpdMap.get(KEY_KIKI_KOKAN_UM);
			if (!JKKStrConst.CD00002_UMU_1.equals(koukanUm))
			{
				break;
			}
			
// ▲▲▲ ANK-3412-00-00 ADD END
// ▽▽▽ ANK-3412-00-00 DEL START 
//			// 機器提供サービス契約一覧照会（サービス契約番号）IF呼出処理を実施
//			HashMap<String, Object> ekk0341b002Hash = new HashMap<String, Object>();
//			callEKK0341B002SC(param, handle, svcKeiNo, ekk0341b002Hash);
//			// 機器提供サービス契約一覧情報を取り出す
//			CAANMsg[] ekk0341b002List = (CAANMsg[])ekk0341b002Hash.get(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);
//	
//			// 取得できない場合、処理終了
//			if (ekk0341b002List == null || ekk0341b002List.length == 0)
//			{
//				return param;
//			}
//	
//			// 非多機能ルータ
//			ArrayList<Map<String, String>> bbrKktkSvcKeiList = new ArrayList<Map<String, String>>();
//			// 多機能ルータ
//			ArrayList<Map<String, String>> mfrKktkSvcKeiList = new ArrayList<Map<String, String>>();
//			for (CAANMsg ekk0341b002CBSMSG : ekk0341b002List)
//			{
//				// 機器提供サービス契約ステータス
//				String kktkSvcKeiStat = (String)ekk0341b002CBSMSG.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
//				// 機器提供サービスコード
//				String kktkSvcCd = (String)ekk0341b002CBSMSG.getString(EKK0341B002CBSMsg1List.KKTK_SVC_CD);
//				//「キャンセル済」「解約済」でなく、 
//				// 機器提供サービスコードが非多機能ルータ(C014)または多機能ルータ(C024)であれば各リストに追加
//				//20131219 IT2-2013-0001718 nakashima Mod start
//				if (!JKKSvcConst.SVC_KEI_STAT_910.equals(kktkSvcKeiStat) && 
//						!JKKSvcConst.SVC_KEI_STAT_920.equals(kktkSvcKeiStat) &&
//						!JKKSvcConst.SVC_KEI_STAT_220.equals(kktkSvcKeiStat))
//				//20131219 IT2-2013-0001718 nakashima Mod end
//				{
//					if (KKTK_SVC_CD_BBR.equals(kktkSvcCd))
//					{
//						bbrKktkSvcKeiList.add(ekk0341b002CBSMSG.getHashMap());
//					}
//					else if (KKTK_SVC_CD_MFR.equals(kktkSvcCd))
//					{
//						mfrKktkSvcKeiList.add(ekk0341b002CBSMSG.getHashMap());
//					}
//				}
//			}
//	
//			// 多機能ルータなし、かつ非多機能ルータありの場合に機器交換判定を行う
//			if (mfrKktkSvcKeiList.isEmpty() && !bbrKktkSvcKeiList.isEmpty())
//			{
//				// サービス契約一意照会サービスIF呼出処理を実施
//				HashMap<String, Object> ekk0081a010Hash = new HashMap<String, Object>();
//				callEKK0081A010SC(param, handle, svcKeiNo, null, rsvAplyYmd, ekk0081a010Hash);
//				// サービス契約情報を取り出す
//				CAANMsg[] ekk0081a010List = (CAANMsg[])ekk0081a010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
//				if (ekk0081a010List != null && ekk0081a010List.length != 0)
//				{
//					// 変更前、変更後の料金コースコードを取得
//					String chbfPcrsCd = ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.PCRS_CD);
//					String chafPcrsCd = (String)kkopKeiUpdMap.get(KEY_CHAF_PCRS_CD);
//					// IT2-2013-00000853 2013/12/18 START
//					// コース変更中のサービス契約の状態を取得
//					String chSvcKeiStat = ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
//					
//					// 変更状態フラグ
//					boolean chStatFlg = false;
//					// 変更前後の料金コースが同じ場合はサービス提供中未満と判定し、変更状態フラグをオンにする
//					// そもそも同じ料金コースにコース変更することができない（サービス提供中の場合は予約状態になるため、変更前後の
//					// サービス契約の料金コースは正しく判定できるが、照査済の場合は料金コースが即時反映するため、正しく判定はできない）
//					if (chbfPcrsCd.equals(chafPcrsCd) && "100".compareTo(chSvcKeiStat) > 0) {
//						// 現在変更中のサービス契約状態がサービス提供中未満であることを示す
//						chStatFlg = true;
//					}
//					// IT2-2013-00000853 2013/12/18 END
//	
//					// 利用中ルータと判定する優先順でソートする　※多機能ルータ対応前に行っていた撤去ルーター判定の優先順で決定する
//					sortYusen(bbrKktkSvcKeiList, KEY_ROUTER_YUSEN);
//					// 利用中のルータを取得
//					Map<String, String> usingBbrKktkSvcKei = bbrKktkSvcKeiList.get(0);
//					// 機器交換判定
//					// IT2-2013-00000853 2013/12/18 STRAT
//					boolean isKokan = judgeKikiKokan(handle, param, chbfPcrsCd, chafPcrsCd, chStatFlg, usingBbrKktkSvcKei);
//					// IT2-2013-00000853 2013/12/18 END
//					// 機器交換が発生しない場合
//					if (!isKokan)
//					{
//						// 処理終了
//						return param;
//					}
//				}
// ▲▲▲ ANK-3412-00-00 DEL END 
				
				HashMap<String, Object> ekk0081b009Hash = new HashMap<String, Object>();
				// 同一場所サービス契約情報照会IF呼出処理を実施
				callEKK0081B009SC(param, handle, svcKeiNo, ekk0081b009Hash);
				
				CAANMsg[] ekk0081b009List = (CAANMsg[])ekk0081b009Hash.get(EKK0081B009CBSMsg.EKK0081B009CBSMSG1LIST);
				if (null == ekk0081b009List || ekk0081b009List.length == 0)
				{
					return param;
				}
				CAANMsg telSvcKeiInfo = new CAANMsg();
				for (CAANMsg ekk0081b009Info : ekk0081b009List)
				{
					String pairSvcCd = (String)ekk0081b009Info.getString(EKK0081B009CBSMsg1List.SVC_CD);
					String pairSvcKeiStat = (String)ekk0081b009Info.getString(EKK0081B009CBSMsg1List.SVC_KEI_STAT);
					// 「電話」かつ「解約済」「キャンセル済」以外を処理対象とする
					if (SVC_CD_TEL.equals(pairSvcCd)
							&& !JKKSvcConst.SVC_KEI_STAT_910.equals(pairSvcKeiStat)
							&& !JKKSvcConst.SVC_KEI_STAT_920.equals(pairSvcKeiStat))
					{
						telSvcKeiInfo = ekk0081b009Info;
						break;
					}
				}
				// 対象データが存在しない場合は処理を終了する
				// OM-2014-0000589 2013/02/10 MOD START 
//				if (null == telSvcKeiInfo)
				if (null == telSvcKeiInfo
						|| telSvcKeiInfo.getString(EKK0081B009CBSMsg1List.SVC_KEI_NO) == null
						|| "".equals(telSvcKeiInfo.getString(EKK0081B009CBSMsg1List.SVC_KEI_NO)) )
				// OM-2014-0000589 2013/02/10 MOD END
				{
					return param;
				}

				String pairSvcKeiNo = (String)telSvcKeiInfo.getString(EKK0081B009CBSMsg1List.SVC_KEI_NO);
				// 機器提供サービス契約一覧照会（サービス契約番号）サービスIF呼出処理を実施
				HashMap<String, Object> pairEkk0341b002Hash = new HashMap<String, Object>();
				callEKK0341B002SC(param, handle, pairSvcKeiNo, pairEkk0341b002Hash);
				CAANMsg[] pairEkk0341b002List = (CAANMsg[])pairEkk0341b002Hash.get(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);
				if (null == pairEkk0341b002List || pairEkk0341b002List.length == 0)
				{
					return param;
				}
				ArrayList<CAANMsg> vaInfoList = new ArrayList<CAANMsg>();
				for (CAANMsg pairEkk0341b002Info : pairEkk0341b002List)
				{
					String vaKktkSvcCd = (String)pairEkk0341b002Info.getString(EKK0341B002CBSMsg1List.KKTK_SVC_CD);
					String vaKktkSvcKeiStat = (String)pairEkk0341b002Info.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
					// 「ＶＡ」かつ「解約済」「キャンセル済」以外を処理対象とする
					if (KKTK_SVC_CD_VA.equals(vaKktkSvcCd)
							&& !JKKSvcConst.SVC_KEI_STAT_910.equals(vaKktkSvcKeiStat)
							&& !JKKSvcConst.SVC_KEI_STAT_920.equals(vaKktkSvcKeiStat))
					{
						vaInfoList.add(pairEkk0341b002Info);
					}
					
				}
				// ＶＡが0件の場合、処理を終了する
				if(null == vaInfoList || vaInfoList.size() == 0)
				{
					return param;
				}
				
				//VA存在有無を表わすフラグ（メッセージ表示に使用）
				kkopKeiUpdMap.put("VA_FLG", "1");
				return param;
				
// ▽▽▽ ANK-3412-00-00 DEL START 
//			}
// ▲▲▲ ANK-3412-00-00 DEL END 
			
		}
		
		return param;
	}
	//IT1-2014-0000024 20140107 END
	
// OM-2014-0000652 2014/02/15 ADD START
	/**
	 * EKK2811C290_機器オプションサービス契約情報変更
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kkopSvcKeiNo 機器オプションサービス契約番号
	 * @param kikiRntaiKeiChgechuFlg 機器連帯契約変更手続中フラグ
	 * @param idoDiv 異動区分
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK2811C290SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kkopSvcKeiNo,
			String kikiRntaiKeiChgechuFlg,
			String idoDiv,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C290(param, kkopSvcKeiNo, kikiRntaiKeiChgechuFlg, idoDiv, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C290(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
// OM-2014-0000652 2014/02/15 ADD END

	// OM-2014-0001770 2014/05/05 ADD START
	/**
	 * 機器提供サービス契約履歴一覧照会サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param svcKeiNo サービス契約番号
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param kkopSvcStat 機器オプションステータス
	 * @param kkopSvcCd 機器オプションコード
	 * @param mskmMeisaiNo 申込明細番号
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341B025SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svcKeiNo,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341B025(param, svcKeiNo);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341B025(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
		
	}
	// OM-2014-0001770 2014/05/05 ADD END

	// OM-2014-0001693 ネットのコース変更後に交換機器引渡画面で宅内S連携エラーとなる 2014/05/14 START
	/**
	 * 機器設置先場所反映サービスIF呼出処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param ekk0241b001Info サービス契約回線内訳情報
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C450SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			CAANMsg ekk0241b001Info,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		// 回線場所番号を取得
		String kaisenPlaceNo = ekk0241b001Info.getString(EKK0241B001CBSMsg1List.KAISEN_PLACE_NO);

		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C450(param, kktkSvcKeiNo, kaisenPlaceNo, updDtmBf);

		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラーマッピング処理
		this.mapper.editResultRP(sIFResult, param, this.fixedTextGlobal, new EKK0341C450CBSMsg().getContents());

		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
	// OM-2014-0001693 ネットのコース変更後に交換機器引渡画面で宅内S連携エラーとなる 2014/05/14 END
	
	// ▼▼▼▼▼ OM-2015-0002509 2015/10/06 ADD START ▼▼▼▼▼
	/**
	 * 解約時課金判定処理
	 * 
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param svc_kei_no サービス契約番号
	 * @param rsvAplyYmd 運用日
	 * @param dslJiChrg 結果
	 * @throws Throwable 例外時にスローされます
	 */
	private String chkDslJiChrg(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String kktkSvcKeiNo,
			String svc_kei_no,
			String rsvAplyYmd,
			String dslJiChrg)
			throws Throwable
	{
		// Rule0091に記載されている内容で解約時課金を判定する。
		// 機器オプションサービス契約の解約時、サービス契約が課金開始前、または機器提供サービス契約がサービス開始前の場合
		// は非課金解約とする。
	
		String kktkSvcStaYMD = "";
		String svcChrgStaYMD = "";
		
		// 機器提供サービス契約がサービス開始前か判断
		// 機器提供サービス契約一意照会を実施
		HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
		callEKK0341A010SC(param, handle, kktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
		
		// 機器提供サービス契約情報を取り出す
		CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
		if (ekk0341a010List != null && ekk0341a010List.length != 0)
		{
			// 値が取得出来ている場合、機器の開始日を取得
			kktkSvcStaYMD = (String)ekk0341a010List[0].getString(EKK0341A010CBSMsg1List.SVC_STA_YMD);
		}
		else
		{
			// 取れていない場合は空白設定
			kktkSvcStaYMD = "";
		}
	
		// 機器のサービス開始日がNULLか判断
		if("".equals(kktkSvcStaYMD) || kktkSvcStaYMD == null)
		{
			dslJiChrg = "0";
			return dslJiChrg;
		}
		
		// 運用日との比較
		if(kktkSvcStaYMD.compareTo(rsvAplyYmd) <= 0)
		{
			// 機器が開始している為、サービス契約の課金開始日と比較
	
			// サービス契約一意照会サービスIF呼出処理を実施
			HashMap<String, Object> ekk0081a010Hash = new HashMap<String, Object>();
			callEKK0081A010SC(param, handle, svc_kei_no, null, rsvAplyYmd, ekk0081a010Hash);
			
			// サービス契約情報を取り出す
			CAANMsg[] ekk0081a010List = (CAANMsg[])ekk0081a010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
			if (ekk0081a010List != null && ekk0081a010List.length != 0)
			{
				svcChrgStaYMD = (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_CHRG_STAYMD);
				// ANK-3366-00-00 ADD START
				// 呼び出し元が卸先事業者解約（撤去解約）サービスの場合
				if (JKKStrConst.SERVICE_ID_ORSJGS_DSL.equals(param.getUsecaseID()))
				{
					// サービス契約(eo光卸)解約時に設定する課金開始日を取得
					String chrgStaymdOrs = getChrgStaYmdOrsDsl(ekk0081a010List[0], rsvAplyYmd);
					// 遡及解約となる場合
					if (!JKKStringUtil.isNullBlank(chrgStaymdOrs))
					{
						svcChrgStaYMD = chrgStaymdOrs;
					}
				}
				// ANK-3366-00-00 ADD END
				
				// サービス課金開始日がNULLか判断
				if("".equals(svcChrgStaYMD) || svcChrgStaYMD == null)
				{
					dslJiChrg = "0";
					return dslJiChrg;
				}
				
				// 運用日との比較
				if(svcChrgStaYMD.compareTo(rsvAplyYmd) <= 0)
				{
					// 課金開始している為、課金解約
					dslJiChrg = "1";
				}
				else
				{
					// サービスが課金開始前の為、非課金解約とする
					dslJiChrg = "0";
				}
			}
		}
		else
		{
			// 機器がサービス開始日前の為、非課金解約とする
			dslJiChrg = "0";
		}
		return dslJiChrg;
	}

	// ▲▲▲▲▲ OM-2015-0002509 2015/10/06 ADD END ▲▲▲▲▲

	// ANK-3366-00-00 ADD START
	/**
	 * eo光卸解約時のサービス課金開始年月日を取得します。
	 * <br>
	 * @param ekk0081a010Msg サービス契約一意照会明細
	 * @param rsvAplyYmd 予約適用年月日
	 * @return eo光卸解約時のサービス課金開始年月日(遡及解約の場合のみ)
	 * @throws Throwable 例外が発生した場合
	 */
	private String getChrgStaYmdOrsDsl(CAANMsg ekk0081a010Msg, String rsvAplyYmd)
	throws Throwable
	{
		// eo光卸解約時のサービス課金開始年月日
		String svcChrgStaYmd = "";

		// サービス契約ステータスがサービス提供中、休止・中断中、停止中のいずれか場合
		if (Arrays.asList(JKKStrConst.CD00037_SVCTK_CHU, JKKStrConst.CD00037_STAT_PAUSE, JKKStrConst.CD00037_STAT_STP).contains
				(ekk0081a010Msg.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT)))
		{
			HashMap<String, Object> hiChrgJdgMap = new HashMap<String, Object>();
			// 解約種別フラグ
			hiChrgJdgMap.put("dslSbtFlg", "1");		// サービス契約解約
			// サービス契約サービス利用開始日
			hiChrgJdgMap.put("svcKeiUseStaYmd", ekk0081a010Msg.getString(EKK0081A010CBSMsg1List.SVC_STA_YMD));
			// サービス契約サービス利用終了日
			hiChrgJdgMap.put("svcKeiUseEndYmd", rsvAplyYmd);
			// サービス契約サービス課金開始日
			hiChrgJdgMap.put("svcKeiChrgStaYmd", ekk0081a010Msg.getString(EKK0081A010CBSMsg1List.SVC_CHRG_STAYMD));
			// 非課金判定処理(eo光卸用)実行
			JKKBpCommon.jdgHiChrgOrs(hiChrgJdgMap);

			svcChrgStaYmd = (String)hiChrgJdgMap.get("svcChrgStaYmd");
		}

		return svcChrgStaYmd;
	}
	// ANK-3366-00-00 ADD END
// ▽▽▽ ANK-3412-00-00 ADD START
	
	/**
	 * コース変更処理
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ekk2811b010List 機器オプションサービス契約一覧照会（機器提供サービス契約番号）明細
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @throws Throwable 例外時にスローします
	 */
	private void changeTran(SessionHandle handle,
							IRequestParameterReadWrite param,
							HashMap<String, Object> kkopKeiUpdMap) throws Throwable
	{
		// 配送リスト
		ArrayList<HashMap<String, Object>> haisoList = (ArrayList<HashMap<String, Object>>)kkopKeiUpdMap.get(KEY_HAISO_LIST);
		if (null == haisoList || haisoList.size() == 0)
		{
			haisoList = new ArrayList<HashMap<String, Object>>();
			kkopKeiUpdMap.put(KEY_HAISO_LIST, haisoList);
		}
		
		// 返品リスト
		ArrayList<HashMap<String, Object>> hempinList = (ArrayList<HashMap<String, Object>>)kkopKeiUpdMap.get(KEY_HEMPIN_LIST);
		if (null == hempinList || hempinList.size() == 0)
		{
			hempinList = new ArrayList<HashMap<String, Object>>();
			kkopKeiUpdMap.put(KEY_HEMPIN_LIST, hempinList);
		}

		// サービス契約番号を取得
		String svcKeiNo = (String)kkopKeiUpdMap.get(KEY_SVC_KEI_NO);

		// 機器提供サービス契約一覧照会（サービス契約番号）IF呼出処理を実施
		HashMap<String, Object> ekk0341b002Hash = new HashMap<String, Object>();
		callEKK0341B002SC(param, handle, svcKeiNo, ekk0341b002Hash);

		// 機器提供サービス契約一覧情報を取り出す
		CAANMsg[] ekk0341b002List = (CAANMsg[])ekk0341b002Hash.get(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);

		// 取得できない場合、処理終了
		if (ekk0341b002List == null || ekk0341b002List.length == 0)
		{
			return;
		}

		// 非多機能ルータ
		ArrayList<Map<String, String>> bbrKktkSvcKeiList = new ArrayList<Map<String, String>>();
		// 多機能ルータ
		ArrayList<Map<String, String>> mfrKktkSvcKeiList = new ArrayList<Map<String, String>>();
		for (CAANMsg ekk0341b002CBSMSG : ekk0341b002List)
		{
			// 機器提供サービス契約ステータス
			String kktkSvcKeiStat = (String)ekk0341b002CBSMSG.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
			// 機器提供サービスコード
			String kktkSvcCd = (String)ekk0341b002CBSMSG.getString(EKK0341B002CBSMsg1List.KKTK_SVC_CD);
			//「キャンセル済」「解約済」でなく、 
			// 機器提供サービスコードが非多機能ルータ(C014)または多機能ルータ(C024)であれば各リストに追加
			if (!JKKSvcConst.SVC_KEI_STAT_910.equals(kktkSvcKeiStat) && 
					!JKKSvcConst.SVC_KEI_STAT_920.equals(kktkSvcKeiStat) &&
					!JKKSvcConst.SVC_KEI_STAT_220.equals(kktkSvcKeiStat))
			{
				if (KKTK_SVC_CD_BBR.equals(kktkSvcCd))
				{
					bbrKktkSvcKeiList.add(ekk0341b002CBSMSG.getHashMap());
				}
				else if (KKTK_SVC_CD_MFR.equals(kktkSvcCd))
				{
					mfrKktkSvcKeiList.add(ekk0341b002CBSMSG.getHashMap());
				}
			}
		}

		//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		// 機器交換判定
		//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		
		// 機器交換判定結果を取得
		String kikiKokanUm = (String)kkopKeiUpdMap.get(KEY_KIKI_KOKAN_UM);
		
		// 処理分岐
		if (JKKStrConst.CD00002_UMU_1.equals(kikiKokanUm))
		{
			// ルータ交換処理
			changeTranToFatRt(handle, param, kkopKeiUpdMap, bbrKktkSvcKeiList, mfrKktkSvcKeiList);
		}
		else 
		{
			// 多機能ルータのステータス更新処理
			changeTranForKikiUpd(handle, param, kkopKeiUpdMap, bbrKktkSvcKeiList, mfrKktkSvcKeiList);
		}
	}
	
	/**
	 * コース変更処理
	 * <br>
	 * 交換の場合に呼び出されます。
	 * ここでは、多機能ルータがない場合は追加、存在する場合は機器交換を行います。
	 * 又、ＢＢＲが存在する場合、機器を解約します。
	 * <p>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ekk2811b010List 機器オプションサービス契約一覧照会（機器提供サービス契約番号）明細
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param bbrKktkSvcKeiList 機器リスト（ＢＢＲ）
	 * @param mfrKktkSvcKeiList 機器リスト（多機能ルータ）
	 * @throws Throwable 例外時にスローします
	 */
	private void changeTranToFatRt(SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> kkopKeiUpdMap, 
			ArrayList<Map<String, String>> bbrKktkSvcKeiList,
			ArrayList<Map<String, String>> mfrKktkSvcKeiList) 
			throws Throwable
	{
		// 配送リスト
		ArrayList<HashMap<String, Object>> haisoList = (ArrayList<HashMap<String, Object>>)kkopKeiUpdMap.get(KEY_HAISO_LIST);
		
		// 予約適用年月日＝運用日
		String rsvAplyYmd = JCCBPCommon.getOpeDate(null);
		
		// 返品リスト
		ArrayList<HashMap<String, Object>> hempinList = (ArrayList<HashMap<String, Object>>)kkopKeiUpdMap.get(KEY_HEMPIN_LIST);

		// サービス契約番号を取得
		String svcKeiNo = (String)kkopKeiUpdMap.get(KEY_SVC_KEI_NO);
		
		// サービス契約一意照会サービスIF呼出処理を実施
		HashMap<String, Object> ekk0081a010Hash = new HashMap<String, Object>();
		callEKK0081A010SC(param, handle, svcKeiNo, null, rsvAplyYmd, ekk0081a010Hash);
		
		// サービス契約情報を取り出す
		CAANMsg[] ekk0081a010List = (CAANMsg[])ekk0081a010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		if (ekk0081a010List == null || ekk0081a010List.length == 0)
		{
			// 対象の契約が存在しないため、処理しない。
			return ;
		}
		
		// 有効な多機能ルータが存在する場合、機種交換を行う。
		if (mfrKktkSvcKeiList.size() > 0)
		{
// ▽▽▽ ANK-3412-15-00 ADD START
			// 機器提供サービス契約ステータスが締結済の場合、多機能ルータを解約／新規する。
			if (JKKSvcConst.KKTK_SVC_KEI_STAT_030.equals(mfrKktkSvcKeiList.get(0).get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT)))
			{
				// 機器を強制的に開始する。
				executeSetupFixed(
						param,
						handle,
						kkopKeiUpdMap, 
						ekk0081a010List[0],
						mfrKktkSvcKeiList.get(0).get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO)
						);
			}
// ▲▲▲ ANK-3412-15-00 ADD END
			// +++++++++++++++++++++++++++++
			// 多機能ルータの交換
			// +++++++++++++++++++++++++++++
			
			HashMap<String, Object> ekk0341c530Hash = new HashMap<String, Object>();
			
			String fatRtKktkSvcKeiNo = mfrKktkSvcKeiList.get(0).get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
			
			// 機器契約一意照会
			HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
			callEKK0341A010SC(param, handle, fatRtKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
			CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
			CAANMsg ekk0341a010 = ekk0341a010List[0];
			
			// EKK0341C530_機器提供サービス契約機器変更手続開始
// ▽▽▽ ANK-3412-15-00 ADD START
//			String mfrUpdDtmBf = (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM);
			String mfrUpdDtmBf = (String)ekk0341a010.getString(EKK0341A010CBSMsg1List.LAST_UPD_DTM);
// ▲▲▲ ANK-3412-15-00 ADD END
			callEKK0341C530SC(param, handle, ekk0341a010, kkopKeiUpdMap, mfrUpdDtmBf, ekk0341c530Hash);

// ▽▽▽ OM-2019-0000362 ADD START
			// サービス契約情報よりSYSIDを取得
			String sysid = (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SYSID);
			// お客様一意照会を実施
			HashMap<String, Object> eck0011a010Hash = new HashMap<String, Object>();
			callECK0011A010SC(param, handle, sysid, null ,rsvAplyYmd, eck0011a010Hash);
			CAANMsg[] eck0011a010List = (CAANMsg[])eck0011a010Hash.get(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST);
			CAANMsg eck0011a010 = eck0011a010List[0];
	
			// サービス契約回線内訳一覧照会を実施
			HashMap<String, Object> ekk0241b001Hash = new HashMap<String, Object>();
			callEKK0241B001SC(param, handle, svcKeiNo, ekk0241b001Hash);
			CAANMsg[] ekk0241b001List = (CAANMsg[])ekk0241b001Hash.get(EKK0241B001CBSMsg.EKK0241B001CBSMSG1LIST);
			CAANMsg ekk0241b001 = ekk0241b001List[0];
			
// △△△ OM-2019-0000362 ADD END
// ▽▽▽ IT1-2018-0000226 ADD START
			// EKK0341C231_機器提供サービス契約情報変更（契約変更中）
			HashMap<String, Object> ekk0341c231 = new HashMap<String, Object>(); 
			mfrUpdDtmBf = (String)ekk0341c530Hash.get(EKK0341C530CBSMsg.UPD_DTM);
			String nGeneAddDtm = (String)ekk0341c530Hash.get(EKK0341C530CBSMsg.GENE_ADD_DTM);
// ▽▽▽ OM-2019-0000362 Modify START
//			callEKK0341C231SC(param, handle, ekk0341a010, kkopKeiUpdMap, nGeneAddDtm, mfrUpdDtmBf, ekk0341c231);
			callEKK0341C231SC(param, handle, ekk0341a010, eck0011a010, ekk0241b001, kkopKeiUpdMap, nGeneAddDtm, mfrUpdDtmBf, ekk0341c231);
// △△△ OM-2019-0000362 Modify END
// ▲▲▲ IT1-2018-0000226 ADD END
			
			// 配送情報
			HashMap<String, Object> haisoInfo = new HashMap<String, Object>();
			haisoInfo.put(KEY_KKTK_SVC_KEI_NO, fatRtKktkSvcKeiNo);
			haisoInfo.put(KEY_GENE_ADD_DTM, ekk0341c530Hash.get(EKK0341C530CBSMsg.GENE_ADD_DTM));
			haisoList.add(haisoInfo);
			
			// 返品リストに追加
			HashMap<String, Object> hempinInfo = new HashMap<String, Object>();
			hempinInfo.put(KEY_KKTK_SVC_KEI_NO, fatRtKktkSvcKeiNo);
			hempinList.add(hempinInfo);
		}
		else
		{
			// +++++++++++++++++++++++++++++
			// 多機能ルータの追加
			// +++++++++++++++++++++++++++++

			// 取得したサービス契約回線内訳情報を元に多機能ルータの登録を行う
			HashMap<String, Object> ekk0341d010Hash = new HashMap<String, Object>();
	
			// サービス契約情報よりSYSIDを取得
			String sysid = (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SYSID);
			// お客様一意照会を実施
			HashMap<String, Object> eck0011a010Hash = new HashMap<String, Object>();
			callECK0011A010SC(param, handle, sysid, null ,rsvAplyYmd, eck0011a010Hash);
			CAANMsg[] eck0011a010List = (CAANMsg[])eck0011a010Hash.get(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST);
	
			// サービス契約回線内訳一覧照会を実施
			HashMap<String, Object> ekk0241b001Hash = new HashMap<String, Object>();
			callEKK0241B001SC(param, handle, svcKeiNo, ekk0241b001Hash);
			CAANMsg[] ekk0241b001List = (CAANMsg[])ekk0241b001Hash.get(EKK0241B001CBSMsg.EKK0241B001CBSMSG1LIST);
	
			// 課金先一覧照会を実施
			HashMap<String, Object> ekk0321b005Hash = new HashMap<String, Object>();
			callEKK0321B005SC(param, handle, svcKeiNo, ekk0321b005Hash);
			CAANMsg[] ekk0321b005List = (CAANMsg[])ekk0321b005Hash.get(EKK0321B005CBSMsg.EKK0321B005CBSMSG1LIST);
	
			// 機器提供サービス契約登録IF呼出処理を実施
			// サービス契約の最終更新年月日時分秒を更新年月日時分秒(更新前)として保持
			String mfrUpdDtmBf = (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM);
			callEKK0341D010SC(param, handle, eck0011a010List[0], ekk0241b001List[0], 
					ekk0321b005List[0], kkopKeiUpdMap, mfrUpdDtmBf, ekk0341d010Hash);
			if (null == ekk0341d010Hash || ekk0341d010Hash.size() == 0)
			{
				return;
			}

			// +++++++++++++++++++++++++++++
			// 機器のステータスを更新
			// +++++++++++++++++++++++++++++
			
			// 照査・照査締結に必要な情報を取得
			String svcKeiStat = (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
	
			// 電話のステータスを加味する。
			String lastUpKktkSvcStat = svcKeiStat;
	
			String idoDiv = (String)kkopKeiUpdMap.get(KEY_IDO_DIV);
	
			// 多機能ルータの機器提供サービス契約番号
			String mfrKktkSvcKeiNo = (String)ekk0341d010Hash.get(EKK0341D010CBSMsg.KKTK_SVC_KEI_NO);

			// 機器提供サービス契約登録の更新年月日時分秒を更新年月日時分秒(更新前)として保持
			mfrUpdDtmBf = (String)ekk0341d010Hash.get(EKK0341D010CBSMsg.UPD_DTM);
			
			// 同一回線上のサービス契約情報を取得して機器の最終更新時間を取得する処理
			// 同一回線上の対となるサービス(ネットに対する電話、電話に対するネット)の照会
			HashMap<String, Object> ekk0081b009Hash = new HashMap<String, Object>();

			// 同一場所サービス契約情報照会IF呼出処理を実施
			callEKK0081B009SC(param, handle, svcKeiNo, ekk0081b009Hash);
			CAANMsg[] ekk0081b009statList = (CAANMsg[])ekk0081b009Hash.get(EKK0081B009CBSMsg.EKK0081B009CBSMSG1LIST);
			if (null == ekk0081b009statList || ekk0081b009statList.length == 0)
			{
				for (CAANMsg ekk0081b009statInfo : ekk0081b009statList)
				{
					String pairSvcCd = (String)ekk0081b009statInfo.getString(EKK0081B009CBSMsg1List.SVC_CD);
					String pairSvcKeiStat = (String)ekk0081b009statInfo.getString(EKK0081B009CBSMsg1List.SVC_KEI_STAT);
					// 電話かつそのステータスがサービス提供中以下の場合のみ機器の最終判断を行う
					if (SVC_CD_TEL.equals(pairSvcCd)
							&& JKKSvcConst.SVC_KEI_STAT_100.compareTo(pairSvcKeiStat) >= 0)
					{
						// 対の電話のステータスが処理中のネットより大きい場合のみ最終更新ステータスの入れ替えを行う
						if (pairSvcKeiStat.compareTo(svcKeiStat) > 0) {
							// ステータスの入れ替えを実施する
							lastUpKktkSvcStat = pairSvcKeiStat;
						}
					}
				}
			}
		
			if (JKKSvcConst.SVC_KEI_STAT_020.equals(lastUpKktkSvcStat))
			{
				// 登録した多機能ルータの照査を行う
				HashMap<String, Object> ekk0341c030Hash = new HashMap<String, Object>();
				// 機器提供サービス契約照査IF呼出処理を実施
				callEKK0341C030SC(param, handle, mfrKktkSvcKeiNo, null, null, idoDiv, SHOSA_DSL_FIN_CD_SHOSA_OK, mfrUpdDtmBf, ekk0341c030Hash);
				// 配送情報
				HashMap<String, Object> haisoInfo = new HashMap<String, Object>();
				haisoInfo.put(KEY_KKTK_SVC_KEI_NO, (String)ekk0341c030Hash.get(EKK0341C030CBSMsg.KKTK_SVC_KEI_NO));
				haisoList.add(haisoInfo);
				// 機器提供サービス契約照査の更新年月日時分秒を更新年月日時分秒(更新前)として保持
				mfrUpdDtmBf = (String)ekk0341c030Hash.get(EKK0341C030CBSMsg.UPD_DTM);
			}
			else if(JKKSvcConst.SVC_KEI_STAT_030.compareTo(lastUpKktkSvcStat) <= 0)
			{
				// 登録した多機能ルータの照査締結を行う
				HashMap<String, Object> ekk0341c050Hash = new HashMap<String, Object>();
				// 機器提供サービス契約照査締結IF呼出処理を実施
				callEKK0341C050SC(param, handle, mfrKktkSvcKeiNo, null, null, idoDiv, mfrUpdDtmBf, ekk0341c050Hash);
				// 配送情報
				HashMap<String, Object> haisoInfo = new HashMap<String, Object>();
				haisoInfo.put(KEY_KKTK_SVC_KEI_NO, (String)ekk0341c050Hash.get(EKK0341C050CBSMsg.KKTK_SVC_KEI_NO));
				haisoList.add(haisoInfo);
				// 機器提供サービス契約照査締結の更新年月日時分秒を更新年月日時分秒(更新前)として保持
				mfrUpdDtmBf = (String)ekk0341c050Hash.get(EKK0341C050CBSMsg.UPD_DTM);
			}

			// 機器ＯＰの種類を確認
			// ネットのコース変更後に交換機器引渡画面で宅内S連携エラーとなる(OM-2014-0001693)
			// ※機器提供サービス契約登録を行う場合は、機器設置先場所反映サービスIFの呼び出しは不要（登録時に回線場所番号を設定済み）

			// 登録した多機能ルータの機器オプションサービス契約登録を行う
			HashMap<String, Object> ekk2811d010Hash = new HashMap<String, Object>();
			
			// 機器ＯＰのデフォルトは有線
			String pcrsCd = JKKStrConst.CD00134_KKOP_YUSEN;

			// 有効なＢＢＲが存在する場合、解約を行う。
			if (bbrKktkSvcKeiList.size() > 0)
			{
				// 利用中のルータの料金コースより機器オプションの料金コースを決定
				String oldPcrsCd = (String)bbrKktkSvcKeiList.get(0).get(EKK0341B002CBSMsg1List.PCRS_CD);
				// 有線ルータ（ｅｏ光ベーシックルーター（１００Ｍ））の場合
				if (JKKStrConst.CD00134_BASIC_100M_RENT.equals(oldPcrsCd))
				{
					pcrsCd = JKKStrConst.CD00134_KKOP_YUSEN;
				}
				// 無線ルータ
				else
				{
					pcrsCd = JKKStrConst.CD00134_KKOP_MUSEN;
				}
			}
// ▽▽▽ ANK-3412-04-00 ADD START
			// 自動交換判定ＣＣから値が設定されている場合、そちらを優先する
			if (kkopKeiUpdMap.containsKey(KEY_KOKAN_KKOP_PCRS_CD) && !JKKBpCommon.isNull(kkopKeiUpdMap.get(KEY_KOKAN_KKOP_PCRS_CD)))
			{
				pcrsCd = (String)kkopKeiUpdMap.get(KEY_KOKAN_KKOP_PCRS_CD);
			}
// ▲▲▲ ANK-3412-04-00 ADD END
			
			// 料金コースより料金プランコードを生成
			String pplanCd = "P" + pcrsCd + "01";
			// 申込明細番号を取得
			String mskmDtlNo = (String)kkopKeiUpdMap.get(KEY_MSKM_DTL_NO);
			// 請求契約番号を取得
			String seikyKeiNo = (String)ekk0321b005List[0].getString(EKK0321B005CBSMsg1List.SEIKY_KEI_NO);
			// 機器オプションサービス契約登録IF呼出処理を実施
			callEKK2811D010SC(param, handle, KKOP_SVC_CD_RT, pcrsCd, pplanCd, mfrKktkSvcKeiNo, sysid, mskmDtlNo, 
					null, null, null, null, null, null, idoDiv,
					KIKI_RNTAI_KEI_CHGECHU_FLG_NOT_CHGECHU, seikyKeiNo, null, mfrUpdDtmBf, ekk2811d010Hash);
			
			// 機器オプションサービス契約登録IF呼出処理の更新年月日時分秒を更新年月日時分秒(更新前)として保持
			mfrUpdDtmBf = (String)ekk2811d010Hash.get(EKK2811D010CBSMsg.UPD_DTM);

			// 機器オプションは旧ステータスに合わせて照査締結の更新処理を行う
			// 多機能ルータの機器提供サービス契約番号
			String kkopSvcKeiNo = (String)ekk2811d010Hash.get(EKK2811D010CBSMsg.KKOP_SVC_KEI_NO);
			
			if (JKKSvcConst.SVC_KEI_STAT_020.equals(svcKeiStat))
			{
				// 登録した多機能ルータの機器オプションの照査を行う
				HashMap<String, Object> EKK2811C030Hash = new HashMap<String, Object>();
				// 機器オプションサービス契約照査IF呼出処理を実施
				callEKK2811C030SC(param, handle, kkopSvcKeiNo, null, null, idoDiv, SHOSA_DSL_FIN_CD_SHOSA_OK, mfrUpdDtmBf, EKK2811C030Hash);
				// 機器提供オプションサービス契約照査の更新年月日時分秒を更新年月日時分秒(更新前)として保持
				mfrUpdDtmBf = (String)EKK2811C030Hash.get(EKK2811C030CBSMsg.UPD_DTM);
			}
			else if(JKKSvcConst.SVC_KEI_STAT_030.compareTo(svcKeiStat) <= 0)
			{
				// 登録した多機能ルータの機器オプションの照査・締結を行う
				HashMap<String, Object> EKK2811C050Hash = new HashMap<String, Object>();
				// 機器オプションサービス契約照査IF呼出処理を実施
				callEKK2811C050SC(param, handle, kkopSvcKeiNo, null, null, idoDiv, mfrUpdDtmBf, EKK2811C050Hash);
				// 機器提供オプションサービス契約照査の更新年月日時分秒を更新年月日時分秒(更新前)として保持
				mfrUpdDtmBf = (String)EKK2811C050Hash.get(EKK2811C050CBSMsg.UPD_DTM);
			} 

			// 配送対象が0件である(=多機能ルータの配送が無い)場合、ここで処理を終了する
			if (haisoList.size() == 0)
			{
				return;
			}

			// 非多機能ルータの解約・キャンセル
			for (Map<String, String> bbrKktkSvcKei : bbrKktkSvcKeiList)
			{
				// 機器提供サービス契約番号
				String bbrKktkSvcKeiNo = bbrKktkSvcKei.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
				// 機器提供サービス契約一意照会を実施
				HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
				callEKK0341A010SC(param, handle, bbrKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
				CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
				CAANMsg ekk0341a010 = ekk0341a010List[0];
	
				// 旧機器の機器提供サービス契約情報をセット
				HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
				kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO, ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
				kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_STAT, ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT));
				kktkSvcKeiInfo.put(KEY_KKTK_SVC_CD, ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
				String updDtmBf = ekk0341a010List[0].getString(EKK0341A010CBSMsg1List.LAST_UPD_DTM);
				// 機器提供サービス契約ステータスに応じて解約・キャンセル処理を実行
				dslCancelKktkSvcKei(handle, param, kktkSvcKeiInfo, updDtmBf, svcKeiNo, kkopKeiUpdMap);
	
				// 返品リストに追加
				HashMap<String, Object> hempinInfo = new HashMap<String, Object>();
				hempinInfo.put(KEY_KKTK_SVC_KEI_NO, (String)kktkSvcKeiInfo.get(KEY_KKTK_SVC_KEI_NO));
				hempinList.add(hempinInfo);
			}
			
			// 回線にサービスが存在しない場合は処理終了
			CAANMsg[] ekk0081b009List = (CAANMsg[])ekk0081b009Hash.get(EKK0081B009CBSMsg.EKK0081B009CBSMSG1LIST);
			if (null == ekk0081b009List || ekk0081b009List.length == 0)
			{
				return;
			}
			// 電話サービスを特定する。
			CAANMsg telSvcKeiInfo = new CAANMsg();
			for (CAANMsg ekk0081b009Info : ekk0081b009List)
			{
				String pairSvcCd = (String)ekk0081b009Info.getString(EKK0081B009CBSMsg1List.SVC_CD);
				String pairSvcKeiStat = (String)ekk0081b009Info.getString(EKK0081B009CBSMsg1List.SVC_KEI_STAT);
				// 「電話」かつ「解約済」「キャンセル済」以外を処理対象とする
				if (SVC_CD_TEL.equals(pairSvcCd)
						&& !JKKSvcConst.SVC_KEI_STAT_910.equals(pairSvcKeiStat)
						&& !JKKSvcConst.SVC_KEI_STAT_920.equals(pairSvcKeiStat))
				{
					telSvcKeiInfo = ekk0081b009Info;
					break;
				}
			}
			
			// 対象データが存在しない場合は処理を終了する
			if (null == telSvcKeiInfo
					|| telSvcKeiInfo.getString(EKK0081B009CBSMsg1List.SVC_KEI_NO) == null
					|| "".equals(telSvcKeiInfo.getString(EKK0081B009CBSMsg1List.SVC_KEI_NO)) )
			{
				return;
			}

			// 電話の機器対応
			String pairSvcKeiNo = (String)telSvcKeiInfo.getString(EKK0081B009CBSMsg1List.SVC_KEI_NO);
			// 機器提供サービス契約一覧照会（サービス契約番号）サービスIF呼出処理を実施
			HashMap<String, Object> pairEkk0341b002Hash = new HashMap<String, Object>();
			callEKK0341B002SC(param, handle, pairSvcKeiNo, pairEkk0341b002Hash);
			CAANMsg[] pairEkk0341b002List = (CAANMsg[])pairEkk0341b002Hash.get(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);
			if (null == pairEkk0341b002List || pairEkk0341b002List.length == 0)
			{
				return;
			}
			ArrayList<CAANMsg> vaInfoList = new ArrayList<CAANMsg>();
			for (CAANMsg pairEkk0341b002Info : pairEkk0341b002List)
			{
				String vaKktkSvcCd = (String)pairEkk0341b002Info.getString(EKK0341B002CBSMsg1List.KKTK_SVC_CD);
				String vaKktkSvcKeiStat = (String)pairEkk0341b002Info.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
				// 「ＶＡ」かつ「解約済」「キャンセル済」以外を処理対象とする
				if (KKTK_SVC_CD_VA.equals(vaKktkSvcCd)
						&& !JKKSvcConst.SVC_KEI_STAT_910.equals(vaKktkSvcKeiStat)
						&& !JKKSvcConst.SVC_KEI_STAT_920.equals(vaKktkSvcKeiStat))
				{
					vaInfoList.add(pairEkk0341b002Info);
				}
				
			}
			
			// ＶＡが0件の場合、処理を終了する
			if(null == vaInfoList || vaInfoList.size() == 0)
			{
				return;
			}

			String vaKktkSvcKeiStat = "";
			// VAの解約・キャンセル
			for (CAANMsg vaInfo : vaInfoList)
			{
	
				// 機器提供サービス契約番号
				String vaKktkSvcKeiNo = vaInfo.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
				// 機器提供サービス契約一意照会を実施
				HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
				callEKK0341A010SC(param, handle, vaKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
				CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
				CAANMsg ekk0341a010 = ekk0341a010List[0];
				// 機器の一意照会の最終更新年月日を取得する
				String vaUpdDtmBf = ekk0341a010.getString(EKK0341B002CBSMsg1List.LAST_UPD_DTM);
				vaKktkSvcKeiStat = vaInfo.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
				// 電話のサービス契約ステータスが「受付済」の場合のみキャンセルする（受付済以外は、多機能ルーターの出荷完了で解約・キャンセルするため） 
				// 電話のサービス契約ステータスが「照査済」「締結済」の場合のみ解約・キャンセル
				if (JKKSvcConst.SVC_KEI_STAT_010.equals(vaKktkSvcKeiStat))
				{
					HashMap<String, Object> vaKktkSvcKeiInfo = new HashMap<String, Object>();
					vaKktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO, vaInfo.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO));
					vaKktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_STAT, vaKktkSvcKeiStat);
					vaKktkSvcKeiInfo.put(KEY_KKTK_SVC_CD, vaInfo.getString(EKK0341B002CBSMsg1List.KKTK_SVC_CD));
					// 機器提供サービス契約ステータスに応じて解約・キャンセル処理を実行
					dslCancelKktkSvcKei(handle, param, vaKktkSvcKeiInfo, vaUpdDtmBf, pairSvcKeiNo, kkopKeiUpdMap);
					// 返品は作成しない（多機能ルーターの出荷完了で返品登録するするため） DEL START
				}
				else
				{
					// OPMSに連携するため、返品リストには登録する。
					HashMap<String, Object> hempinInfo = new HashMap<String, Object>();
					hempinInfo.put(KEY_KKTK_SVC_KEI_NO, ekk0341a010.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO));
					hempinInfo.put(CTRL_SKIP_HENPIN, "1");
					hempinList.add(hempinInfo);
				}
			}

			// 機器連帯契約変更手続中フラグ"1"で機器オプションサービス契約の登録
			HashMap<String, Object> pairEkk2811d010Hash = new HashMap<String, Object>();
			
			// 既存の料金コースより機器オプションの料金コースを決定
			String oldPairPcrsCd = (String)telSvcKeiInfo.getString(EKK0081B009CBSMsg1List.PCRS_CD);
			String pairPcrsCd = "";
			if (JKKSvcConst.PCRS_CD_TEL_1BAN.equals(oldPairPcrsCd))
			{
				pairPcrsCd = JKKStrConst.CD00134_KKOP_TEL_1;
			}
			else if (JKKSvcConst.PCRS_CD_TEL_2BAN.equals(oldPairPcrsCd))
			{
				pairPcrsCd = JKKStrConst.CD00134_KKOP_TEL_2;
			}
		
			// 料金コースより料金プランコードを生成
			String pairPplanCd = "P" + pairPcrsCd + "01";
			// 申込明細番号を取得
			String pairMskmDtlNo = (String)kkopKeiUpdMap.get(KEY_MSKM_DTL_NO);
			// 機器オプションサービス契約登録IF呼出処理を実施
			callEKK2811D010SC(param, handle, KKOP_SVC_CD_VA, pairPcrsCd, pairPplanCd, mfrKktkSvcKeiNo, sysid, pairMskmDtlNo, 
					null, null, null, null, null, null, idoDiv,
					KIKI_RNTAI_KEI_CHGECHU_FLG_CHGECHU, seikyKeiNo, null, mfrUpdDtmBf, pairEkk2811d010Hash);
			
			// 機器オプションサービス契約登録IF呼出処理の更新年月日時分秒を更新年月日時分秒(更新前)として保持
			mfrUpdDtmBf = (String)pairEkk2811d010Hash.get(EKK2811D010CBSMsg.UPD_DTM);
			
			// 機器オプションは旧ステータスに合わせて照査締結の更新処理を行う
			// 多機能ルータの機器提供サービス契約番号
			String pairkkopSvcKeiNo = (String)pairEkk2811d010Hash.get(EKK2811D010CBSMsg.KKOP_SVC_KEI_NO);
			
			//VAの状態を確認
			vaKktkSvcKeiStat = vaInfoList.get(0).getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT);
			
			if (JKKSvcConst.SVC_KEI_STAT_020.equals(vaKktkSvcKeiStat))
			{
				// 登録した多機能ルータの機器オプションの照査を行う
				HashMap<String, Object> EKK2811C030Hash = new HashMap<String, Object>();
				// 機器オプションサービス契約照査IF呼出処理を実施
				callEKK2811C030SC(param, handle, pairkkopSvcKeiNo, null, null, idoDiv, SHOSA_DSL_FIN_CD_SHOSA_OK, mfrUpdDtmBf, EKK2811C030Hash);
			}
			else if (JKKSvcConst.SVC_KEI_STAT_030.compareTo(vaKktkSvcKeiStat) <= 0)
			{
				// 登録した多機能ルータの機器オプションの照査・締結を行う
				HashMap<String, Object> EKK2811C050Hash = new HashMap<String, Object>();
				// 機器オプションサービス契約照査IF呼出処理を実施
				callEKK2811C050SC(param, handle, pairkkopSvcKeiNo, null, null, idoDiv, mfrUpdDtmBf, EKK2811C050Hash);
			}
		}
	}
	
	/**
	 * コース変更処理
	 * <br>
	 * 交換不要の場合に呼び出されます。
	 * ここでは、「受付済」の多機能ルータが存在する場合に機器ＯＰステータスを更新します。
	 * 又、ＢＢＲが存在する場合、機器を解約します。
	 * <p>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param bbrKktkSvcKeiList 機器リスト（ＢＢＲ）
	 * @param mfrKktkSvcKeiList 機器リスト（多機能ルータ）
	 * @throws Throwable 例外時にスローします
	 */
	private void changeTranForKikiUpd(SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> kkopKeiUpdMap, 
			ArrayList<Map<String, String>> bbrKktkSvcKeiList,
			ArrayList<Map<String, String>> mfrKktkSvcKeiList) 
			throws Throwable
	{
		// 配送リスト
		ArrayList<HashMap<String, Object>> haisoList = (ArrayList<HashMap<String, Object>>)kkopKeiUpdMap.get(KEY_HAISO_LIST);
		
		// 予約適用年月日＝運用日
		String rsvAplyYmd = JCCBPCommon.getOpeDate(null);
		
		// 返品リスト
		ArrayList<HashMap<String, Object>> hempinList = (ArrayList<HashMap<String, Object>>)kkopKeiUpdMap.get(KEY_HEMPIN_LIST);

		// サービス契約番号を取得
		String svcKeiNo = (String)kkopKeiUpdMap.get(KEY_SVC_KEI_NO);

		// サービス契約一意照会サービスIF呼出処理を実施
		String svcKeiStat = "";
		
		HashMap<String, Object> ekk0081a010Hash = new HashMap<String, Object>();
		callEKK0081A010SC(param, handle, svcKeiNo, null, rsvAplyYmd, ekk0081a010Hash);

		// サービス契約情報を取り出す
		CAANMsg[] ekk0081a010List = (CAANMsg[])ekk0081a010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		if (ekk0081a010List != null && ekk0081a010List.length != 0)
		{
			// 対象ネットサービスのサービス契約ステータスを取得
			svcKeiStat =  (String)ekk0081a010List[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
			
		}
		String kktkSvcKeiStat = "";
		
		// 多機能ルータの機器提供サービス契約ステータスを確認
		for (Map<String, String> mfrKktkSvcKei : mfrKktkSvcKeiList)
		{
			// 機器提供サービス契約番号
			String mfrKktkSvcKeiNo = mfrKktkSvcKei.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
			// 機器提供サービス契約一意照会を実施
			HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
			callEKK0341A010SC(param, handle, mfrKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
			CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
			CAANMsg ekk0341a010 = ekk0341a010List[0];
			
			// 機器提供サービス契約ステータスを確認
			kktkSvcKeiStat =  (String)ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT);
			
		}
		
		// 多機能がある場合、機器提供サービス契約を確認
		// 受付済の場合 ※ネットサービスの契約ステータスが100（サービス提供中）のコース変のみ後続
		if (!mfrKktkSvcKeiList.isEmpty() && "100".equals(svcKeiStat) && "010".equals(kktkSvcKeiStat))
		{
			// 最終更新年月日（引回用）
			String mfrUpdDtmBf = "";
			// 異動区分の取得
			String idoDiv = (String)kkopKeiUpdMap.get(KEY_IDO_DIV);

			// OM-2014-0001693 ネットのコース変更後に交換機器引渡画面で宅内S連携エラーとなる
			// サービス契約回線内訳一覧照会を実施
			HashMap<String, Object> ekk0241b001Hash = new HashMap<String, Object>();
			callEKK0241B001SC(param, handle, svcKeiNo, ekk0241b001Hash);
			CAANMsg[] ekk0241b001List = (CAANMsg[])ekk0241b001Hash.get(EKK0241B001CBSMsg.EKK0241B001CBSMSG1LIST);
			// OM-2014-0001693 ネットのコース変更後に交換機器引渡画面で宅内S連携エラーとなる 2014/05/14 END

			// 非多機能ルータの解約・キャンセル
			for (Map<String, String> bbrKktkSvcKei : bbrKktkSvcKeiList)
			{
				// 機器提供サービス契約番号
				String bbrKktkSvcKeiNo = bbrKktkSvcKei.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
				// 機器提供サービス契約一意照会を実施
				HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
				callEKK0341A010SC(param, handle, bbrKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
				CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
				CAANMsg ekk0341a010 = ekk0341a010List[0];

				// 旧機器の機器提供サービス契約情報をセット
				HashMap<String, Object> kktkSvcKeiInfo = new HashMap<String, Object>();
				kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_NO, ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
				kktkSvcKeiInfo.put(KEY_KKTK_SVC_KEI_STAT, ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT));
				kktkSvcKeiInfo.put(KEY_KKTK_SVC_CD, ekk0341a010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_CD));
				String updDtmBf = ekk0341a010List[0].getString(EKK0341A010CBSMsg1List.LAST_UPD_DTM);
				// 機器提供サービス契約ステータスに応じて解約・キャンセル処理を実行
				dslCancelKktkSvcKei(handle, param, kktkSvcKeiInfo, updDtmBf, svcKeiNo, kkopKeiUpdMap);

				// 返品リストに追加
				HashMap<String, Object> hempinInfo = new HashMap<String, Object>();
				hempinInfo.put(KEY_KKTK_SVC_KEI_NO, (String)kktkSvcKeiInfo.get(KEY_KKTK_SVC_KEI_NO));
				hempinList.add(hempinInfo);
			}
			
			// 多機能ルーターの機器提供サービス契約を締結済まで更新
			for (Map<String, String> mfrKktkSvcKei : mfrKktkSvcKeiList)
			{
				// 機器提供サービス契約番号
				String mfrKktkSvcKeiNo = mfrKktkSvcKei.get(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
				// 機器提供サービス契約一意照会を実施
				HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
				callEKK0341A010SC(param, handle, mfrKktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
				CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
				CAANMsg ekk0341a010 = ekk0341a010List[0];
				
				// 機器提供サービス契約照査締結の前に、機器オプションを確認して処理が必要か確認
				// 機器オプションの一覧照会を取得
				// 機器オプションサービス契約一覧照会IF呼出処理を実施
				String updKkopSvcCd = KKOP_SVC_CD_RT; //機器オプションサービスコード（ｅｏ光多機能ルーター　ルーター機能） 
				HashMap<String, Object> ekk2811b010HashUpd = new HashMap<String, Object>();
				callEKK2811B010SC(param, handle, mfrKktkSvcKeiNo, null, updKkopSvcCd, null, ekk2811b010HashUpd);
				// 機器オプションサービス契約情報を取り出す
				CAANMsg[] ekk2811B010ListUpd = (CAANMsg[])ekk2811b010HashUpd.get(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST);
				
				boolean kktkUpdFlg = false;
				if (ekk2811B010ListUpd != null && !"".equals(ekk2811B010ListUpd) && ekk2811B010ListUpd.length > 0) {
					for (int i = 0 ; i < ekk2811B010ListUpd.length ; i++ ) {
						CAANMsg ekk2811B010Msg = ekk2811B010ListUpd[i];
						
						// 有効なルータ機能が存在することを確認
						String kkopSvcKeiStat = ekk2811B010Msg.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT);
						
						// ルータ機能が受付済の場合（かつ「ｅｏ光多機能ルーター　ルーター機能」）のみ締結までステータスを更新
						if ("010".equals(kkopSvcKeiStat)) {
							kktkUpdFlg = true;
						}
					}
				}
				
				if(!kktkUpdFlg){
					//受付済かつ「ｅｏ光多機能ルーター　ルーター機能」の機器オプションがないので
					//機器提供サービス契約と機器オプションサービス契約の締結処理は不要
					continue;
				}
				
				mfrUpdDtmBf = (String)ekk0341a010List[0].getString(EKK0341A010CBSMsg1List.LAST_UPD_DTM);
				
				// 登録した多機能ルータの照査締結を行う
				HashMap<String, Object> ekk0341c050Hash = new HashMap<String, Object>();
				// 機器提供サービス契約照査締結IF呼出処理を実施
				callEKK0341C050SC(param, handle, mfrKktkSvcKeiNo, null, null, idoDiv, mfrUpdDtmBf, ekk0341c050Hash);
				// 配送情報
				HashMap<String, Object> haisoInfo = new HashMap<String, Object>();
				haisoInfo.put(KEY_KKTK_SVC_KEI_NO, (String)ekk0341c050Hash.get(EKK0341C050CBSMsg.KKTK_SVC_KEI_NO));
				haisoList.add(haisoInfo);
				// 機器提供サービス契約照査締結の更新年月日時分秒を更新年月日時分秒(更新前)として保持
				mfrUpdDtmBf = (String)ekk0341c050Hash.get(EKK0341C050CBSMsg.UPD_DTM);

				// 機器設置先場所反映
				HashMap<String, Object> ekk0341c450Hash = new HashMap<String, Object>();
				callEKK0341C450SC(param, handle, mfrKktkSvcKeiNo, ekk0241b001List[0], mfrUpdDtmBf, ekk0341c450Hash);
				// 機器設置先場所反映の更新年月日時分秒を更新年月日時分秒(更新前)として保持
				mfrUpdDtmBf = (String)ekk0341c450Hash.get(EKK0341C450CBSMsg.UPD_DTM);
				
				if (ekk2811B010ListUpd != null && !"".equals(ekk2811B010ListUpd) && ekk2811B010ListUpd.length > 0) {
					for (int i = 0 ; i < ekk2811B010ListUpd.length ; i++ ) {
						CAANMsg ekk2811B010Msg = ekk2811B010ListUpd[i];
						
						// 有効なルータ機能が存在することを確認
						String kkopSvcKeiStat = ekk2811B010Msg.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_STAT);
						
						// ルータ機能が受付済の場合のみ締結までステータスを更新
						if ("010".equals(kkopSvcKeiStat)) {
							// ルーター機能を締結済まで更新
							// 機器オプションサービス契約番号を取得
							String kkopSvcKeiNo = ekk2811B010Msg.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO);
							
							// 登録した多機能ルータの機器オプションの照査・締結を行う
							HashMap<String, Object> EKK2811C050Hash = new HashMap<String, Object>();
							// 機器オプションサービス契約照査IF呼出処理を実施
							callEKK2811C050SC(param, handle, kkopSvcKeiNo, null, null, idoDiv, mfrUpdDtmBf, EKK2811C050Hash);
							// 機器提供オプションサービス契約照査の更新年月日時分秒を更新年月日時分秒(更新前)として保持
							mfrUpdDtmBf = (String)EKK2811C050Hash.get(EKK2811C050CBSMsg.UPD_DTM);
							
							// ルーター機能の連帯フラグを０に変更
							// EKK2811C290_機器オプションサービス契約情報変更
							HashMap<String, Object> EKK2811C290Hash = new HashMap<String, Object>();
							
							String kikiRntaiKeiChgechuFlg = "0";
							
							// 機器オプションサービス契約照査IF呼出処理を実施
							callEKK2811C290SC(param, handle, kkopSvcKeiNo, kikiRntaiKeiChgechuFlg, idoDiv, mfrUpdDtmBf, EKK2811C290Hash);
							
						}
						
					}
				}
			}
		}
	}
	
	/**
	 * 機器提供サービス契約機器変更手続開始サービスIF呼出処理
	 * <p>
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param ekk0341a010Info 機器提供サービス契約情報
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C530SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			CAANMsg ekk0341a010Info,
			HashMap<String, Object> kkopKeiUpdMap,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C530(param, ekk0341a010Info, kkopKeiUpdMap, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
// ▽▽▽ IT1-2018-0000226 ADD START
//		this.mapper.editResultRPEKK0341D010(sIFResult, param, this.fixedTextGlobal);
		this.mapper.editResultRPEKK0341C530(sIFResult, param, this.fixedTextGlobal);
// ▲▲▲ IT1-2018-0000226 ADD END
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
// ▲▲▲ ANK-3412-00-00 ADD END
// ▽▽▽ IT1-2018-0000226 ADD START
	/**
	 * 機器提供サービス契約機器変更手続開始サービスIF呼出処理
	 * <p>
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param ekk0341a010Info 機器提供サービス契約情報
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @param geneAddDtm 予約適用年月日
	 * @param updDtmBf 更新年月日時分秒(更新前)
	 * @param resultHash 結果のハッシュ
	 * @throws Throwable 例外時にスローされます
	 */
	private void callEKK0341C231SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			CAANMsg ekk0341a010Info,
// OM-2019-0000362 ADD START
			CAANMsg eck0011a010Info,
			CAANMsg ekk0241b001Info,
// OM-2019-0000362 ADD END
			HashMap<String, Object> kkopKeiUpdMap,
			String geneAddDtm,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		// 上り情報をマッピング
// OM-2019-0000362 Modify START
//		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C231(param, ekk0341a010Info, kkopKeiUpdMap, geneAddDtm, updDtmBf);
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C231(param, 
																			  ekk0341a010Info, eck0011a010Info,ekk0241b001Info,
																			  kkopKeiUpdMap, geneAddDtm, updDtmBf);
// OM-2019-0000362 Modify END
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C231(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
// ▲▲▲ IT1-2018-0000226 ADD END
// ▽▽▽ ANK-3412-15-00 ADD START
	/**
	 * 多機能ルータ開始処理
	 * <a>
	 * @param param				パラメータ
	 * @param handle			ハンドル
	 * @param kkopKeiUpdMap		機器ＯＰマップ
	 * @param kktkSvcKeiNo		機器契約番号
	 * @throws Throwable
	 */
	private void executeSetupFixed(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> kkopKeiUpdMap, 
			CAANMsg ekk0081a010,
			String kktkSvcKeiNo
			) 
			throws Throwable
	{

		// 予約適用年月日＝運用日
		String rsvAplyYmd = JCCBPCommon.getOpeDate(null);

		//+++++++++++++++++++++++++++++++
		// 多機能ルータの設置完了
		//+++++++++++++++++++++++++++++++

		// 機器提供サービス契約一意照会呼び出し
		HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
		callEKK0341A010SC(param, handle, kktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
		CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
		CAANMsg ekk0341a010 = ekk0341a010List[0];
		
		// EKK0341C110_機器提供サービス契約機器設置完了呼び出し
		HashMap<String, Object> ekk0341c110Hash = new HashMap<String, Object>();
		String mfrUpdDtmBf = (String)ekk0341a010.getString(EKK0341A010CBSMsg1List.LAST_UPD_DTM);
		callEKK0341C110SC(param, handle, ekk0341a010, kkopKeiUpdMap, rsvAplyYmd, mfrUpdDtmBf, ekk0341c110Hash);

		// 同一回線上のネットと電話のステータスを取得する。
		String netKeiStat = ekk0081a010.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
		String telKeiStat = "";
		HashMap<String, Object> ekk0081b009Hash = new HashMap<String, Object>();

		// 同一場所サービス契約情報照会IF呼出処理を実施
		callEKK0081B009SC(param, handle, ekk0081a010.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO), ekk0081b009Hash);
		CAANMsg[] ekk0081b009statList = (CAANMsg[])ekk0081b009Hash.get(EKK0081B009CBSMsg.EKK0081B009CBSMSG1LIST);
		if (null != ekk0081b009statList)
		{
			for (CAANMsg ekk0081b009statInfo : ekk0081b009statList)
			{
				String pairSvcCd = (String)ekk0081b009statInfo.getString(EKK0081B009CBSMsg1List.SVC_CD);
				String pairSvcKeiStat = (String)ekk0081b009statInfo.getString(EKK0081B009CBSMsg1List.SVC_KEI_STAT);
//				JSYejbLog.println(JSYejbLog.EXECUTION, this.getClass(), "機器OPSV更新CC(同一場所ST）：" + pairSvcCd + "/" + pairSvcKeiStat);

				// 電話かつそのステータスがサービス提供中以下の場合のみ機器の最終判断を行う
				if (SVC_CD_TEL.equals(pairSvcCd)
						&& JKKSvcConst.SVC_KEI_STAT_100.compareTo(pairSvcKeiStat) >= 0)
				{
					telKeiStat = pairSvcKeiStat;
				}
			}
		}
//		JSYejbLog.println(JSYejbLog.EXECUTION, this.getClass(), "機器OPSV更新CC(契約状態）：" + netKeiStat + "/" + telKeiStat);
		
		// 有効な機器ＯＰ一覧を検索
		HashMap<String, Object> ekk2811b010Hash = new HashMap<String, Object>();
		callEKK2811B010SC(param, handle, kktkSvcKeiNo, ACTIVE_KKOP_STAT_LIST, null, null, ekk2811b010Hash);
		CAANMsg[] ekk2811b010List = (CAANMsg[])ekk2811b010Hash.get(EKK2811B010CBSMsg.EKK2811B010CBSMSG1LIST);
		
// ▽▽▽ OM-2019-0000605 DEL START
//		// ネットがサービス提供中の場合、ステータスを更新する
//		if (JKKSvcConst.SVC_KEI_STAT_100.equals(netKeiStat))
//		{
//			updateKikiOpStat(param, handle, kkopKeiUpdMap, ekk2811b010List, rsvAplyYmd, KKOP_SVC_CD_RT);
//		}
//
//		// 電話がサービス提供中の場合、ステータスを更新する
//		if (JKKSvcConst.SVC_KEI_STAT_100.equals(telKeiStat))
//		{
//			updateKikiOpStat(param, handle, kkopKeiUpdMap, ekk2811b010List, rsvAplyYmd, KKOP_SVC_CD_VA);
//		}
// △△△ OM-2019-0000605 DEL END

	}
	
	/**
	 * 機器ＯＰのステータスをサービス提供中に更新する。
	 * <p>
	 * @param param パラメータ
	 * @param handle ハンドル
	 * @param kkopKeiUpdMap 機器ＯＰマップ
	 * @param ekk2811b010List 
	 * @param rsvAplyYmd
	 * @param kkopSvcCd
	 * @throws Throwable
	 */
	private void updateKikiOpStat(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> kkopKeiUpdMap, 
			CAANMsg[] ekk2811b010List,
			String rsvAplyYmd,
			String kkopSvcCd
			)
	throws Throwable
	{
		// 機器ＯＰを開始状態にする
		for (CAANMsg ekk2811b010 : ekk2811b010List)
		{
			// 対象の機器ＯＰサービスコードと同一のものを処理する
			if (!kkopSvcCd.equals(ekk2811b010.getString(EKK2811B010CBSMsg1List.KKOP_SVC_CD)))
			{
				continue;
			}
			// EKK2811A010_機器オプションサービス契約一意照会
			HashMap<String, Object> ekk2811a010Hash = new HashMap<String, Object>();
			String kkopSvcKei = ekk2811b010.getString(EKK2811B010CBSMsg1List.KKOP_SVC_KEI_NO);
			//
			callEKK2811A010SC(param, handle, kkopSvcKei, null, rsvAplyYmd, ekk2811a010Hash);
			CAANMsg[] ekk2811a010List = (CAANMsg[])ekk2811a010Hash.get(EKK2811A010CBSMsg.EKK2811A010CBSMSG1LIST);
			CAANMsg ekk2811a010 = ekk2811a010List[0];
			
			String mfrUpdDtmBf = ekk2811a010.getString(EKK2811A010CBSMsg1List.LAST_UPD_DTM);
			if (JKKSvcConst.SVC_KEI_STAT_020.equals(ekk2811a010.getString(EKK2811A010CBSMsg1List.KKOP_SVC_KEI_STAT)))
			{
				HashMap<String, Object> ekk2811c040Hash = new HashMap<String, Object>();
				// EKK2811C040_機器オプションサービス契約締結
				callEKK2811C040SC(param, handle, ekk2811a010, kkopKeiUpdMap, mfrUpdDtmBf, ekk2811c040Hash);
				
				// 更新時間を取得
				mfrUpdDtmBf = (String)ekk2811c040Hash.get(EKK2811C040CBSMsg.UPD_DTM);
			}
			
			HashMap<String, Object> ekk2811C070Hash = new HashMap<String, Object>();
			
			// EKK2811C070_機器オプションサービス契約開始
			callEKK2811C070SC(param, handle, ekk2811a010, kkopKeiUpdMap, mfrUpdDtmBf, ekk2811C070Hash);
		}
	}
	
	/**
	 * 機器提供サービス契約機器設置完了サービスIF呼出処理
	 * <p>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ekk2811B010List 機器オプションサービス契約一覧照会（機器提供サービス契約番号）明細
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @return 機器提供サービス契約更新用リスト
	 * @throws Throwable 例外時にスローします
	 */
	private void callEKK0341C110SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			CAANMsg ekk0341a010Info,
			HashMap<String, Object> kkopKeiUpdMap,
			String svcStaYmd,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK0341C110(param, ekk0341a010Info, kkopKeiUpdMap, svcStaYmd, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK0341C110(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
	
	/**
	 * 機器オプションサービス契約締結サービスIF呼出処理
	 * <p>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ekk2811B010List 機器オプションサービス契約一覧照会（機器提供サービス契約番号）明細
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @return 機器提供サービス契約更新用リスト
	 * @throws Throwable 例外時にスローします
	 */
	private void callEKK2811C040SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			CAANMsg ekk2811a010Info,
			HashMap<String, Object> kkopKeiUpdMap,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C040(param, ekk2811a010Info, kkopKeiUpdMap, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C040(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}

	/**
	 * 機器オプションサービス契約開始サービスIF呼出処理
	 * <p>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param ekk2811B010List 機器オプションサービス契約一覧照会（機器提供サービス契約番号）明細
	 * @param kkopKeiUpdMap 機器オプションサービス契約更新マップ
	 * @return 機器提供サービス契約更新用リスト
	 * @throws Throwable 例外時にスローします
	 */
	private void callEKK2811C070SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			CAANMsg ekk2811a010Info,
			HashMap<String, Object> kkopKeiUpdMap,
			String updDtmBf,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		 
		// 上り情報をマッピング
		HashMap<String, Object> sIFRequest = this.mapper.editInMsgEKK2811C070(param, ekk2811a010Info, kkopKeiUpdMap, updDtmBf);
		
		// SIFの呼び出し
		Map<?, ?> sIFResult = this.scCall.run(sIFRequest, handle);

		// エラー情報のマッピング
		this.mapper.editResultRPEKK2811C070(sIFResult, param, this.fixedTextGlobal);
		
		// エラーチェック処理
		errChk(sIFResult);

		// SIFの実行結果を設定
		resultHash.putAll(getWorkCAANMsg(sIFResult));
	}
	/**
	 * 多機能ルータを開始状態に変更する。
	 * <p>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @return 0:正常終了 -1:対象外
	 * @throws Throwable 例外時にスローします
	 */
	public int updateKikiStatTkChu(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText)
			throws Throwable
	{

		// 初期処理を実施
		init(param, fixedText);
		
		String rsvAplyYmd = JCCBPCommon.getOpeDate(null);

		HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);

		// 機器提供サービス契約番号を取得
		String kktkSvcKeiNo = (String)paramMap.get(KEY_KKTK_SVC_KEI_NO);
		// サービス契約番号を取得
		String svcKeiNo = (String)paramMap.get(KEY_SVC_KEI_NO);
		
		// 機器契約一意照会
		HashMap<String, Object> ekk0341a010Hash = new HashMap<String, Object>();
		callEKK0341A010SC(param, handle, kktkSvcKeiNo, null, rsvAplyYmd, ekk0341a010Hash);
		CAANMsg[] ekk0341a010List = (CAANMsg[])ekk0341a010Hash.get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
		
		if (ekk0341a010List == null || ekk0341a010List.length == 0)
		{
			// 対象の契約が存在しないため、処理しない。
			return -1;
		}
		
		CAANMsg ekk0341a010 = ekk0341a010List[0];

		// サービス契約一意照会サービスIF呼出処理を実施
		HashMap<String, Object> ekk0081a010Hash = new HashMap<String, Object>();
		callEKK0081A010SC(param, handle, svcKeiNo, null, rsvAplyYmd, ekk0081a010Hash);
		
		// サービス契約情報を取り出す
		CAANMsg[] ekk0081a010List = (CAANMsg[])ekk0081a010Hash.get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		if (ekk0081a010List == null || ekk0081a010List.length == 0)
		{
			// 対象の契約が存在しないため、処理しない。
			return -1;
		}

		// 機器提供サービス契約ステータスが締結済の場合、多機能ルータを解約／新規する。
		if (JKKSvcConst.KKTK_SVC_KEI_STAT_030.equals(ekk0341a010.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_STAT)))
		{
			// 機器を強制的に開始する。
			executeSetupFixed(
					param,
					handle,
					paramMap, 
					ekk0081a010List[0],
					kktkSvcKeiNo
					);
			return 0;
		}
		else 
		{
			return -1;
		}
	}
// ▲▲▲ ANK-3412-15-00 ADD END
}
	