/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKUepcadOpsShokaiCC
*	ソースファイル名：JKKUepcadOpsShokaiCC.java
*	作成者			：FJ)中原
*	日付			：2019年04月01日
*＜機能概要＞
*	利用場所住所情報照会（オペレータ支援）の共通コンポーネントクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v42.00.00	2019/04/01	FJ)中原		【ANK-3593-00-00】オペレータ支援対応に伴うeo顧客機能改修（お客さまカルテ）
*^  v42.01.00	2019/07/03	FJ)西窪		【ANK-3593-02-00】利用場所住所情報照会に料金プランコースと名称を追加
*	v45.00.00	2019/10/03	FJ)中原		【ANK-3758-00-00】オペレータ支援システムの表示改善対応（2019年10月リリース分)
*	v45.00.00	2019/11/06	FJ)後藤		【ANK-3766-00-00】営業チャネルでの既契約者対応
*	v45.00.01	2019/11/15	FJ)中原		【OM-2019-0001305】同一電気契約の複数件返却障害
*	v47.00.00	2019/12/25	FJ)後藤		【ANK-3798-00-00】オペレータ支援システム表示対応
*	v49.00.00	2020/06/14	FJ)星野		【ANK-3840-00-00】テレビリースサービス新規申込対応
*	v50.00.00	2020/06/10	FJ)大島		【ANK-3862-03-00】【WEB電話オプション外出し対応】エラーチェック機能追加
*   v51.00.00	2020/10/29	 FJ)星野	【ANK-3946-00-00】eフロント向け追加申込API対応
*   v53.00.00	2021/04/06	FJ)上村 	【ANK-3989-00-00】マンション光コンセント方式への5G・10Gコース追加
*   v54.00.00	2021/07/06	GDC)j.toleco 【ANK-4049-00-00】eフロントへの事務手数料有無判断項目連携
*   v56.00.00	2021/09/30	FJ)吉村		【ANK-4038-00-00】【eo定期】光ローゼット化対応
*   v56.00.01	2021/12/13	FJ)平野		【ANK-4038-06-00】【eo定期】光ローゼット化対応(オペ支援APIの返却値変更対応)
*   v56.00.02	2021/12/24	FJ)平野		【IT1-2021-0000103】光配線以外のマンション契約で工事スキップ対象が非対象で返却される。 
*   v59.00.00	2022/04/14	FJ)北川		【ANK-4235-00-00】オペレータ支援向けAPI変更対応（2022年6月）
*   v60.00.00	2022/07/08	FJ)吉村		【ANK-4244-00-00】【eo定期】MT既設賃貸対応
*   v67.00.00	2023/08/02	FJ)大路		【ANK-4465-00-00】オペレータ支援向けAPI変更対応（LINE連携状況連携他）
*   v72.00.00	2024/09/02	FJ)久山		【ANK-4577-00-00】eo光ネット「シンプルプラン」追加対応(Step2)
*   v72.00.08	2024/10/11	FJ)森下		【ANK-4577-08-00】eo光ネット「シンプルプラン」追加対応(Step2) 仕変8
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;
import com.fujitsu.futurity.model.common.check.HalfCharCheck;
import com.fujitsu.futurity.model.common.check.LengthCheck;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JACCommonUtil;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EKK0081B551CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B551CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0251B507CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0251B507CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081B550CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081B550CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0451B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161B515CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161B515CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2101B501CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2101B501CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0011B100CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0011B100CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0861B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0861B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0281A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKU0281A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0321B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321B010CBSMsg1List;

/**
 * 利用場所住所情報照会（オペレータ支援）の共通コンポーネントクラスです。
 * <BR>
 */
public class JKKUepcadOpsShokaiCC extends AbstractCommonComponent
{
	// ----------
	// TemplateID
	// ----------
	/** TamplateID：EKK0081B550_サービス契約一覧照会（電気＿オペレータ支援） */
	private static final String TEMPLATE_ID_EKK0081B550 = "EKK0081B550";
	/** TamplateID：EKK0081B551_サービス契約件数取得照会 */
	private static final String TEMPLATE_ID_EKK0081B551 = "EKK0081B551";
	/** TamplateID：EKK0161B515_サービス契約内訳一覧照会（サービス契約番号（テレビ）＿オペレータ支援） */
	private static final String TEMPLATE_ID_EKK0161B515 = "EKK0161B515";
	/** TamplateID：EKK0251B507_サービス契約回線内訳一覧照会（SYSID＿オペレータ支援） */
	private static final String TEMPLATE_ID_EKK0251B507 = "EKK0251B507";
	/** TamplateID：EKK0451B002_割引サービス契約一覧照会（サービス契約番号） */
	private static final String TEMPLATE_ID_EKK0451B002 = "EKK0451B002";
	/** TamplateID：EKK0861B002_マンション情報一覧照会（サービス契約番号） */
	private static final String TEMPLATE_ID_EKK0861B002 = "EKK0861B002";
	/** TamplateID：EKU0011B100_工事案件一覧照会（サービス契約番号＿オペレータ支援） */
	private static final String TEMPLATE_ID_EKU0011B100 = "EKU0011B100";
// ANK-3840-00-00対応 20200614 星野 ADD START
	/** TamplateID：EKK2101B501_住所変更中住所変更明細一覧照会２ */
	private static final String TEMPLATE_ID_EKK2101B501 = "EKK2101B501";
	/** TamplateID：EKK1681B001_異動予約一覧照会 */
	private static final String TEMPLATE_ID_EKK1681B001 = "EKK1681B001";
// ANK-3840-00-00対応 20200614 星野 ADD END
// ANK-3989-00-00 ADD START
	/**  TamplateID：EZM0321A010_業務パラメータ管理一意照会 */
	private static final String TEMPLATE_ID_EZM0321A010 = "EZM0321A010";	
// ANK-3989-00-00 ADD END	
// ANK-4038-00-00 ADD START
	/**  TamplateID：EKU0281A010_申込収容位置空き情報一意照会 */
	private static final String TEMPLATE_ID_EKU0281A010 = "EKU0281A010";	
// ANK-4038-00-00 ADD END
// ANK-4577-08-00 ADD START
	/**  TamplateID：EZM0321B010_業務パラメータ管理一覧照会 */
	private static final String TEMPLATE_ID_EZM0321B010 = "EZM0321B010";	
// ANK-4577-08-00 ADD END
	
	// ------------------------
	// CCパラメータ
	// ------------------------
	/** CCパラメータ：ボディ情報 */
	private static final String BODY_INFO = "BODY_INFO";
	/** CCパラメータ：エラー情報 */
	private static final String ERROR_INFO = "ERROR_INFO";
	
	// ------------------------
	// リクエストパラメータ定数
	// ------------------------
	/** リクエストパラメータ：SYSID */
	private static final String REQ_PARAM_SYSID = "sysid";
	
	// ANK-4049-00-00 ADD START	
	/** リクエストパラメータ： 詳細情報要求 */
	private static final String REQ_PARAM_DTAIL_INFO_YOKYU = "Dtail_info_yokyu";
	// ANK-4049-00-00 ADD END
	// ANK-4038-00-00 ADD START
	/** リクエストパラメータ：サービス契約回線内訳番号 */
	private static final String REQ_PARAM_SVC_KEI_KAISEN_UCWK_NO = "svc_kei_kaisen_ucwk_no";
	// ANK-4038-00-00 ADD END
	// ANK-4577-08-00 ADD START
	/** リクエストパラメータ：シンプルプラン時の化かし用 */
	private static final String REQ_PARAM_KK_SIMPL_C = "KK_SIMPL_C";
	// ANK-4577-08-00 ADD END
	
	// ------------------------
	// レスポンスパラメータ定数
	// ------------------------
	/** レスポンスパラメータ：SYSID */
	private static final String RES_PARAM_SYSID = "sysid";
	/** レスポンスパラメータ：mineo契約件数 */
	private static final String RES_PARAM_MINEO_KEI_CNT = "mineo_kei_cnt";
	/** レスポンスパラメータ：回線単位契約情報リスト */
	private static final String RES_PARAM_KISN_TANI_KEI_IF_LIST = "kisn_tani_kei_if_list";
	/** レスポンスパラメータ：サービス契約回線内訳番号 */
	private static final String RES_PARAM_SVC_KEI_KAISEN_UCWK_NO = "svc_kei_kaisen_ucwk_no";
	/** レスポンスパラメータ：利用場所郵便番号 */
	private static final String RES_PARAM_KAISEN_PLACE_PCD = "kaisen_place_pcd";
	/** レスポンスパラメータ：利用場所住所 */
	private static final String RES_PARAM_UEPCAD = "uepcad";
	/** レスポンスパラメータ：回線内サービス契約番号リスト */
	private static final String RES_PARAM_KISN_NAI_SVC_KEI_NO_LIST = "kisn_nai_svc_kei_no_list";
	/** レスポンスパラメータ：サービス契約番号 */
	private static final String RES_PARAM_SVC_KEI_NO = "svc_kei_no";
	/** レスポンスパラメータ：サービス契約ステータス */
	private static final String RES_PARAM_SVC_KEI_STAT = "svc_kei_stat";
	/** レスポンスパラメータ：サービスコード */
	private static final String RES_PARAM_SVC_CD = "svc_cd";
	/** レスポンスパラメータ：サービス名 */
	private static final String RES_PARAM_SVC_NM = "svc_nm";
	/** レスポンスパラメータ：整理番号 */
	private static final String RES_PARAM_SEIRI_NO = "seiri_no";
	/** レスポンスパラメータ：料金グループコード */
	private static final String RES_PARAM_PRC_GRP_CD = "prc_grp_cd";
	/** レスポンスパラメータ：料金グループ名 */
	private static final String RES_PARAM_PRC_GRP_NM = "prc_grp_nm";
	/** レスポンスパラメータ：料金コースコード */
	private static final String RES_PARAM_PCRS_CD = "pcrs_cd";
	/** レスポンスパラメータ：料金コース名 */
	private static final String RES_PARAM_PCRS_NM = "pcrs_nm";
	// ANK-3593-02-00 2019/07/03 ADD START
	/** レスポンスパラメータ：料金プランコード */
	private static final String RES_PARAM_PPLAN_CD = "pplan_cd";
	/** レスポンスパラメータ：料金プラン名 */
	private static final String RES_PARAM_PPLAN_NM = "pplan_nm";
	// ANK-3593-02-00 2019/07/03 ADD END
	/** レスポンスパラメータ：サービス開始年月日 */
	private static final String RES_PARAM_SVC_STA_YMD = "svc_sta_ymd";
	/** レスポンスパラメータ：サービス終了年月日 */
	private static final String RES_PARAM_SVC_END_YMD = "svc_end_ymd";
	// ANK-3758-00-00 ADD START
	/** レスポンスパラメータ：サービス解約起算年月日 */
	private static final String RES_PARAM_SVC_DSL_KISAN_YMD = "svc_dsl_kisan_ymd";
	/** レスポンスパラメータ：サービス解約年月日 */
	private static final String RES_PARAM_SVC_DSL_YMD = "svc_dsl_ymd";
	/** レスポンスパラメータ：サービス解約理由コード */
	private static final String RES_PARAM_SVC_DLRE_CD = "svc_dlre_cd";
	// ANK-3758-00-00 ADD END
	/** レスポンスパラメータ：工事案件番号 */
	private static final String RES_PARAM_KOJIAK_NO = "kojiak_no";
	/** レスポンスパラメータ：工事案件種別コード */
	private static final String RES_PARAM_KOJIAK_SBT_CD = "kojiak_sbt_cd";
	/** レスポンスパラメータ：マンション物件コード */
	private static final String RES_PARAM_MANSION_BUKKEN_CD = "mansion_bukken_cd";
	/** レスポンスパラメータ：マンションID */
	private static final String RES_PARAM_MANSION_ID = "mansion_id";
	/** レスポンスパラメータ：CAT-ID */
	private static final String RES_PARAM_CATID = "catid";
	/** レスポンスパラメータ：請求契約番号 */
	private static final String RES_PARAM_SEIKY_KEI_NO = "seiky_kei_no";
	// ANK-3766-00-00 ADD START
	/** レスポンスパラメータ：コース変更後料金コースコード */
	private static final String HENKOUGO_PCRS_CD = "henkougo_pcrs_cd";
	/** レスポンスパラメータ：コース変更後料金コース名 */
	private static final String HENKOUGO_PCRS_NM = "henkougo_pcrs_nm";
	// ANK-3766-00-00 ADD END
	// ANK-3798-00-00 ADD START
	/** レスポンスパラメータ：住所コード */
	private static final String RES_AD_CD = "ad_cd";
	/** レスポンスパラメータ：利用場所電話番号 */
	private static final String RES_HENKOUGO_PCRS_NM = "kaisen_place_telno";
	// ANK-3798-00-00 ADD END
	// ANK-3862-03-00 ADD START
	/** レスポンスパラメータ：WEBオプション追加不可フラグ */
	private static final String WEB_OP_ADD_FAIL_FLG = "web_op_add_fail_flg";
	// ANK-3862-03-00 ADD END
// ANK-3946-00-00対応 20201029 星野 ADD START
	/** レスポンスパラメータ：プラン開始年月日 */
	private static final String PLAN_STAYMD = "plan_staymd";
// ANK-3946-00-00対応 20201029 星野 ADD END
// ANK-3840-00-00対応 20200614 星野 ADD START
	/** レスポンスパラメータ：住所変更中フラグ */
	private static final String ADCHG_FLG = "adchg_flg";
	/** レスポンスパラメータ：コース変更後料金コースコード（ネット以外） */
	private static final String HENKOUGO_PCRS_NONET_CD = "henkougo_pcrs_nonet_cd";
	/** レスポンスパラメータ：コース変更後料金コース名（ネット以外） */
	private static final String HENKOUGO_PCRS_NONET_NM = "henkougo_pcrs_nonet_nm";
	/** レスポンスパラメータ：新サービス契約番号（移転先） */
	private static final String NEW_SVC_KEI_NO = "new_svc_kei_no";
	/** レスポンスパラメータ：サービス解約予約フラグ */
	private static final String SVC_DSL_FLG = "svc_dsl_flg";
// ANK-3840-00-00対応 20200614 星野 ADD END
	// ANK-4049-00-00 ADD START
	/** レスポンスパラメータ：住所変更年月日 */
	private static final String RES_ADCHG_YMD = "adchg_ymd";
	// ANK-4049-00-00 ADD END
	// ANK-4038-00-00 ADD START
	/** レスポンスパラメータ：ローゼット設置状態コード */
	private static final String RES_RZ_STC_STAT_CD = "rz_stc_stat_cd";
	/** レスポンスパラメータ：コンセント設置内容コード */
	private static final String RES_CONSNT_STC_NYO_CD = "consnt_stc_nyo_cd";
	/** レスポンスパラメータ：親機種別コード */
	private static final String RES_OYA_KIKI_SBT_CD = "oya_kiki_sbt_cd";
	/** レスポンスパラメータ：CT空き有無 */
	private static final String RES_CT_AKI_UM = "ct_aki_um";
	/** レスポンスパラメータ：CT番号 */
	private static final String RES_CT_NO = "ct_no";
	/** レスポンスパラメータ：工事スキップ対象 */
	private static final String KJ_SKP_TG = "kj_skp_tg";
	// ANK-4038-00-00 ADD END
	// ANK-4235-00-00 ADD START
	private static final String RSV_JOKYO = "rsv_jokyo";
	// ANK-4235-00-00 ADD END
	// ANK-4465-00-00 ADD START
	/** レスポンスパラメータ：緯度 */
	private static final String LTTD = "lttd";
	/** レスポンスパラメータ：経度 */
	private static final String LGTD = "lgtd";
	// ANK-4465-00-00 ADD END
	// ANK-4577-00-00 ADD START
	/** レスポンスパラメータ：乗換元サービス契約番号 */
	private static final String NRKEMT_SVKEI_NO = "nrkemt_svkei_no";
	// ANK-4577-00-00 ADD END
	
	// ----------
	// エラー定数
	// ----------
	/** エラーコード */
	public static final String ERROR_CODE = "errCode";
	/** エラーメッセージ */
	public static final String ERROR_MESSAGE = "errMessage";
	/** リターンメッセージ取得キー */
	private static final String RETURN_MESSAGE_STRING = "RETURN_MESSAGE_";
	/** リターンメッセージの書式指定文字列 */
	private static final String RETURN_MESSAGE_FORMAT = "%1$04d";
	/** エラー項目接尾辞 */
	private static final String ERRITEM_SUFFIX = "_err";
	
	// ------------
	// クラス用定数
	// ------------
	/** サービス契約件数取得照会用のサービス契約ステータス(受付済、照査済、締結済、サービス提供中) */
	private static final String EKK0081B551_SVC_KEI_STAT = "'010','020','030','100'";
	/** 料金コース名称（地デジ・BS スターチャンネル） */
	private static final String PCRS_NM_BS_STA_TYAN = "地デジ・ＢＳコース　スターチャンネルセット";
	/** 作業用マップのキー：運用日 */
	private static final String WORK_KEY_OPEDATE = "opeDate";
	
// ANK-3840-00-00対応 20200614 星野 ADD START
	/** 予約フラグ：予約中 */
	private static final String FLG_RSV = "1";
	/** 予約フラグ：キャンセル済 */
	private static final String FLG_CANCELED = "9";
	/** 予約フラグ：確定済 */
	private static final String FLG_FIXED = "0";

	/** 異動予約詳細コード：コース変更 */
	private static final String IDO_RSV_DTL_CD_CRS_CHG = "003";
	/** 異動予約詳細コード：サービス解約 */
	private static final String IDO_RSV_DTL_CD_DSL = "007";
// ANK-3840-00-00対応 20200614 星野 ADD END
	// ANK-4049-00-00 ADD START
	/**詳細情報要求: 詳細情報返却要 */
	private static final String DTAIL_INFO_RTN = "1";
	// ANK-4049-00-00 ADD END

// ANK-3989-00-00 ADD START
	/** ダミー業務パラメータ（光コンセント料金コースコード（1G））*/
	private static final String KK_MANS_C_PCRSCD_01 = "KK_MANS_C_PCRSCD_01";
	/** ダミー業務パラメータ（光コンセント料金コースコード（5G））*/
	private static final String KK_MANS_C_PCRSCD_02 = "KK_MANS_C_PCRSCD_02";
	/** ダミー業務パラメータ（光コンセント料金コースコード（10G））*/
	private static final String KK_MANS_C_PCRSCD_03 = "KK_MANS_C_PCRSCD_03";
	/** ダミー業務パラメータ（光コンセント料金コース名（1G））*/
	private static final String KK_MANS_C_PCRSNM_01 = "KK_MANS_C_PCRSNM_01";
	/** ダミー業務パラメータ（光コンセント料金コース名（5G））*/
	private static final String KK_MANS_C_PCRSNM_02 = "KK_MANS_C_PCRSNM_02";
	/** ダミー業務パラメータ（光コンセント料金コース名（10G））*/
	private static final String KK_MANS_C_PCRSNM_03 = "KK_MANS_C_PCRSNM_03";
	/** ダミー業務パラメータ（光コンセント料金プランコード（1G））*/
	private static final String KK_MANS_C_PPLANCD_01 = "KK_MANS_C_PPLANCD_01";
	/** ダミー業務パラメータ（光コンセント料金プランコード（5G））*/
	private static final String KK_MANS_C_PPLANCD_02 = "KK_MANS_C_PPLANCD_02";
	/** ダミー業務パラメータ（光コンセント料金プランコード（10G））*/
	private static final String KK_MANS_C_PPLANCD_03 = "KK_MANS_C_PPLANCD_03";
	/** ダミー業務パラメータ（光コンセント料金プラン名（1G））*/
	private static final String KK_MANS_C_PPLANNM_01 = "KK_MANS_C_PPLANNM_01";
	/** ダミー業務パラメータ（光コンセント料金プラン名（5G））*/
	private static final String KK_MANS_C_PPLANNM_02 = "KK_MANS_C_PPLANNM_02";
	/** ダミー業務パラメータ（光コンセント料金プラン名（10G））*/
	private static final String KK_MANS_C_PPLANNM_03 = "KK_MANS_C_PPLANNM_03";
	// ANK-4244-00-00 ADD START
	/** ダミー業務パラメータ（光配線料金コースコード（1G））*/
	private static final String KK_MANS_PCRSCD_01 = "KK_MANS_PCRSCD_01";
	/** ダミー業務パラメータ（光配線料金コースコード（5G））*/
	private static final String KK_MANS_PCRSCD_02 = "KK_MANS_PCRSCD_02";
	/** ダミー業務パラメータ（光配線料金コースコード（10G））*/
	private static final String KK_MANS_PCRSCD_03 = "KK_MANS_PCRSCD_03";
	/** ダミー業務パラメータ（光配線料金コース名（1G））*/
	private static final String KK_MANS_PCRSNM_01 = "KK_MANS_PCRSNM_01";
	/** ダミー業務パラメータ（光配線料金コース名（5G））*/
	private static final String KK_MANS_PCRSNM_02 = "KK_MANS_PCRSNM_02";
	/** ダミー業務パラメータ（光配線料金コース名（10G））*/
	private static final String KK_MANS_PCRSNM_03 = "KK_MANS_PCRSNM_03";
	/** ダミー業務パラメータ（光配線料金プランコード（1G））*/
	private static final String KK_MANS_PPLANCD_01 = "KK_MANS_PPLANCD_01";
	/** ダミー業務パラメータ（光配線料金プランコード（5G））*/
	private static final String KK_MANS_PPLANCD_02 = "KK_MANS_PPLANCD_02";
	/** ダミー業務パラメータ（光配線料金プランコード（10G））*/
	private static final String KK_MANS_PPLANCD_03 = "KK_MANS_PPLANCD_03";
	/** ダミー業務パラメータ（光配線料金プラン名（1G））*/
	private static final String KK_MANS_PPLANNM_01 = "KK_MANS_PPLANNM_01";
	/** ダミー業務パラメータ（光配線料金プラン名（5G））*/
	private static final String KK_MANS_PPLANNM_02 = "KK_MANS_PPLANNM_02";
	/** ダミー業務パラメータ（光配線料金プラン名（10G））*/
	private static final String KK_MANS_PPLANNM_03 = "KK_MANS_PPLANNM_03";
	// ANK-4244-00-00 ADD END
	// ANK-4577-08-00 ADD START
	/** ダミー業務パラメータ（料金グループ名称（eo光シンプルプラン））*/
	private static final String KK_SIMPL_C_GRPNM_01 = "KK_SIMPL_C_GRPNM_01";
	/** ダミー業務パラメータ（料金コース(プラン)名称（１０ギガコース））*/
	private static final String KK_SIMPL_C_PCRSNM_02 = "KK_SIMPL_C_PCRSNM_02";
	/** ダミー業務パラメータ（料金コース(プラン)名称（１０ギガコース　Netflixパック））*/
	private static final String KK_SIMPL_C_PCRSNM_03 = "KK_SIMPL_C_PCRSNM_03";
	// ANK-4577-08-00 ADD END
	
	/** 棟内速度判定結果コード 光コンセント1G */
	public static final String TONAI_SPEED_JUDGE_RET_1G = "0";
	/** 棟内速度判定結果コード 光コンセント5G */
	public static final String TONAI_SPEED_JUDGE_RET_5G = "1";
	/** 棟内速度判定結果コード 光コンセント10G */
	public static final String TONAI_SPEED_JUDGE_RET_10G = "2";
	// ANK-4244-00-00 ADD START
	/** 棟内速度判定結果コード 光配線1G */
	public static final String TONAI_SPEED_JUDGE_RET_HHS_1G = "3";
	/** 棟内速度判定結果コード 光配線5G */
	public static final String TONAI_SPEED_JUDGE_RET_HHS_5G = "4";
	/** 棟内速度判定結果コード 光配線10G */
	public static final String TONAI_SPEED_JUDGE_RET_HHS_10G = "5";
	// ANK-4244-00-00 ADD END
	
	/** 業務パラメータ検索KEY 料金コースコード */
	private static final String KEY_PCRS_CD = "KEY_PCRS_CD";
	/** 業務パラメータ検索KEY 料金コース名 */
	private static final String KEY_PCRS_NM = "KEY_PCRS_NM";
	/** 業務パラメータ検索KEY 料金プランコード */
	private static final String KEY_PPLAN_CD = "KEY_PPLAN_CD";
	/** 業務パラメータ検索KEY 料金プラン名 */
	private static final String KEY_PPLAN_NM = "KEY_PPLAN_NM";
	
// ANK-3989-00-00 ADD END
	
	// ANK-4038-00-00 ADD START
	/**異動区分: コース変更 */
	private static final String IDO_DIV_CRS_CHG = "00009";
	/**ローゼット化設置済案件チェック結果: 工事スキップ可 */
	private static final String RZ_KJ_SKP_PSB = "1";
	/**ローゼット化設置済案件チェック結果: 工事スキップ対象 */
	private static final String RZ_KJ_SKP_OK = "1";
	/**ローゼット化設置済案件チェック結果: 工事スキップ非対象 */
	private static final String RZ_KJ_SKP_NG = "0";
	// ANK-4038-00-00 ADD END
	// ANK-4038-06-00 ADD START
	/**ローゼット化設置済案件チェック結果: 工事スキップ不可 */
	private static final String RZ_KJ_SKP_IMPSB = "2";
	/** ローゼット化設置済案件チェックCC実行可能リスト　*/
	private static final String[] RZKZMCC_ACT_PSB_LIST = {JKKStrConst.CD00133_02,JKKStrConst.CD00133_03,JKKStrConst.CD00133_04,JKKStrConst.CD00133_10};
	// ANK-4038-06-00 ADD END
	/**
	 * 利用場所住所情報照会（オペレータ支援）を行う。
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return IRequestParameterReadWrite
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite searchUepcadOps(SessionHandle handle,
			IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// 利用場所住所情報照会（オペレータ支援）CCマップ
		Map<String, Object> ccMsg = (Map<String, Object>)param.getData(fixedText);
		// 作業用マップ
		Map<String, Object> work = new HashMap<String, Object>();

		try
		{
			// 運用日
			work.put(WORK_KEY_OPEDATE, JPCBPCommon.getOpeDate(null));
			// 単項目チェック
			if (!checkUnitParam(handle, param, fixedText, ccMsg, work))
			{
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
				return param;
			}

			// 利用場所住所情報検索処理
			if (!searchUepcadInfo(handle, param, fixedText, ccMsg, work) )
			{
				param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_5000);
				return param;
			}

			// 正常終了
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, JKKStrConst.RETURN_CD_0000);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, null);
		}
		catch (Throwable throwable)
		{
			setResponse(param, ccMsg, JKKStrConst.RETURN_CD_9000, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR);
			throw throwable;
		}

		return param;
	}

	/**
	 * 単項目チェック
	 * @param param
	 * @param ccMsg
	 * @param ekk0081b043Msg
	 * @return チェックの判定
	 * @throws Exception
	 */
	private boolean checkUnitParam(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			Map<String, Object> ccMsg, Map<String, Object> work)
	throws Exception
	{
		// エラーリスト
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();

		Map<String, Object> bodyMap = new HashMap<String, Object>();
		String itemName = null;
		String itemValue = null;

		// SYSID
		itemName = REQ_PARAM_SYSID;
		itemValue = (String)ccMsg.get(itemName);
		// 必須チェック
		if ( itemValue == null || "".equals(itemValue) )
		{
			// 必須チェックエラー
			errList.add(getReqErrInfMap());
		}
		else if (!HalfCharCheck.isEnNumber1Check(itemValue))
		{
			// 属性チェックエラー
			errList.add(getFormErrInfMap());
		}
		else if (!LengthCheck.isLength1Check(itemValue, 10))
		{
			// 桁数チェックエラー
			errList.add(getLenErrInfMap());
		}


		// エラーが存在する場合
		if (errList.size() > 0)
		{
			// SYSID
			bodyMap.put(REQ_PARAM_SYSID, JKKStringUtil.nullToBlank((String)ccMsg.get(REQ_PARAM_SYSID)));
			ccMsg.put(BODY_INFO, bodyMap);

			ccMsg.put(ERROR_INFO, errList);
			return false;
		}
		
		return true;

	}

	/**
	 * 利用場所住所情報検索処理を行います。<br>
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @param ccMsg 利用場所住所情報照会（オペレータ支援）CCマップ
	 * @param work 作業用マップ
	 * @throws Throwable 例外が発生した場合
	 */
	private boolean searchUepcadInfo(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			Map<String, Object> ccMsg, Map<String, Object> work)
	throws Throwable
	{
		// SC呼び出し部品のインスタンス生成
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		// 回線単位契約情報リスト
		List<Map<String, Object>> kaisenKeiList = new ArrayList<Map<String, Object>>();
		// 回線内サービス契約番号リスト
		List<Map<String, Object>> kaisenSvcKeiList = new ArrayList<Map<String, Object>>();
// ANK-3840-00-00対応 20200614 星野 ADD START
		// 住所変更情報（回線単位）
		CAANMsg juhenInfoKaisen = null;
// ANK-3840-00-00対応 20200614 星野 ADD END
		// ANK-4038-00-00 ADD START
		// ローゼット化設置済案件チェック結果
		Map chkResultMap = null;
		// ANK-4038-00-00 ADD END


		// エラーリスト
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();
		// 利用場所住所データリスト
		Map<String, Object> bodyMap = new HashMap<String, Object>();
		Map<String, String> errMap = new HashMap<String, String>();
		// OM-2019-0001305 ADD START
		Map<String, String> eleMap  =  new HashMap<String, String>();
		// OM-2019-0001305 ADD END
		
		// サービス契約件数取得照会
		CAANMsg[] ekk0081b551MsgList = null;
		// サービス契約一覧照会（電気＿オペレータ支援）明細
		CAANMsg[] ekk0081b550MsgList = null;
		// サービス契約回線内訳一覧照会（SYSID＿オペレータ支援）
		CAANMsg[] ekk0251b507MsgList = null;
		// サービス契約内訳一覧照会（サービス契約番号（テレビ）＿オペレータ支援）
		CAANMsg[] ekk0161b515MsgList = null;
		// ANK-4577-08-00 ADD START
		// 業務パラメータ一覧照会
		CAANMsg[] ezm0321b010MsgList = null;
		// ANK-4577-08-00 ADD END
		// 割引サービス契約一覧照会（サービス契約番号）
		CAANMsg[] ekk0451b002MsgList = null;
		// 工事案件一覧照会（サービス契約番号＿オペレータ支援）
		CAANMsg[] eku0011b100MsgList = null;
		// マンション情報一覧照会（サービス契約番号）
		CAANMsg[] ekk0861b002MsgList = null;
		// ANK-4038-00-00 ADD START
		// 申込収容位置空き情報一意照会
		CAANMsg[] eku0281a010MsgList = null;
		// ANK-4038-00-00 ADD END

		// mineoサービス契約件数取得判定
		String mineoNum = "0";
		// 運用日
		String opeDate = (String)work.get(WORK_KEY_OPEDATE);

		// サービス契約件数取得照会
		Object[][] ekk0081b551In =
		{
			{EKK0081B551CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081B551}
			// 機能コード
			, {EKK0081B551CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿ＳＹＳＩＤ
			, {EKK0081B551CBSMsg.KEY_SYSID, (String)ccMsg.get(REQ_PARAM_SYSID)}
			// ＫＥＹ＿ＳＶＣ＿ＣＤ(ＭＶＮＯサービス)
			, {EKK0081B551CBSMsg.KEY_SVC_CD, JKKStrConst.CD00130_51}
			// ＫＥＹ_ＳＶＣ_ＫＥＩ_ＳＴＡＴ
			, {EKK0081B551CBSMsg.KEY_SVC_KEI_STAT, EKK0081B551_SVC_KEI_STAT}
		};
		// サービスIF実行
		ekk0081b551MsgList = callSC(handle, scCall, param, fixedText, ekk0081b551In)
				.getCAANMsgList(EKK0081B551CBSMsg.EKK0081B551CBSMSG1LIST);

		// サービス契約件数取得のレコードが取得出来た場合
		if(ekk0081b551MsgList != null && ekk0081b551MsgList.length > 0)
		{
			//mineoのサービス契約件数
			mineoNum = ekk0081b551MsgList[0].getString(EKK0081B551CBSMsg1List.KEN_NUM);
		}
		
		// 利用場所住所情報の取得
		// サービス契約回線内訳一覧照会（SYSID＿オペレータ支援）
		Object[][] ekk0251b507In =
		{
			{EKK0251B507CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0251B507}
			// 機能コード
			, {EKK0251B507CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿ＳＹＳＩＤ
			, {EKK0251B507CBSMsg.KEY_SYSID, (String)ccMsg.get(REQ_PARAM_SYSID)}
		};
		// サービスIF実行
		ekk0251b507MsgList = callSC(handle, scCall, param, fixedText, ekk0251b507In)
				.getCAANMsgList(EKK0251B507CBSMsg.EKK0251B507CBSMSG1LIST);

		// 件数結果チェック
		// mineoの取得件数とサービス契約回線の取得件数が共に0件であった場合、
		if ( ekk0251b507MsgList != null && ekk0251b507MsgList.length == 0 && "0".equals(mineoNum) )
		{
			// 件数結果チェックエラー
			setResponse(param, ccMsg, JKKStrConst.RETURN_CD_2001, "");
			return false;
		}

		// サービス契約一覧照会（電気＿オペレータ支援）
		Object[][] ekk0081b550In =
		{
			{EKK0081B550CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081B550}
			// 機能コード
			, {EKK0081B550CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿ＳＹＳＩＤ
			, {EKK0081B550CBSMsg.KEY_SYSID, (String)ccMsg.get(REQ_PARAM_SYSID)}
		};
		// サービスIF実行
		ekk0081b550MsgList = callSC(handle, scCall, param, fixedText, ekk0081b550In)
				.getCAANMsgList(EKK0081B550CBSMsg.EKK0081B550CBSMSG1LIST);

		// 利用場所住所情報の編集処理
		if(ekk0251b507MsgList != null && ekk0251b507MsgList.length > 0)
		{
			// ワーク.サービス契約回線内訳番号
			String workSvcKeiKaisenUcwkNo = ekk0251b507MsgList[0].getString(EKK0251B507CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO);
			// 繰り返し最終フラグ
			boolean lastFlag = false;
			// 同一サービス契約回線リスト数
			int kaisenSvcCnt = 0;
			for(int i = 0; i < ekk0251b507MsgList.length; i++)
			{
				// 料金コース名、料金プラン名の編集処理
				//ワーク.料金コース
				String workPcrsCd = ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.PCRS_CD);
				//ワーク.料金コース名
				String workPcrsNm = ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.PCRS_NM);
// ANK-3989-00-00 ADD START
				//ワーク.料金プランコード
				String workPplanCd = ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.PPLAN_CD);
// ANK-3989-00-00 ADD END
				// ANK-3593-02-00 2019/07/03 ADD START
				//ワーク.料金プラン名
				String workPplanNm = ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.PPLAN_NM);
				// ANK-3593-02-00 2019/07/03 ADD END
				//ワーク.サービス契約番号
				String workSvcKeiNo = ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.SVC_KEI_NO);
				// 料金コースが地デジ・ＢＳコースの場合
				if ( JKKStrConst.CD00134_A37.equals(workPcrsCd) )
				{
					// 割引サービス契約一覧照会（サービス契約番号）
					Object[][] ekk0451b002In =
					{
						{EKK0451B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0451B002}
						// 機能コード
						, {EKK0451B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
						// ＫＥＹ＿サービス契約番号
						, {EKK0451B002CBSMsg.KEY_SVC_KEI_NO, workSvcKeiNo}
					};
					// サービスIF実行
					ekk0451b002MsgList = callSC(handle, scCall, param, fixedText, ekk0451b002In)
							.getCAANMsgList(EKK0451B002CBSMsg.EKK0451B002CBSMSG1LIST);

					// 割引サービス契約一覧照会（サービス契約番号）の取得処理
					if(ekk0451b002MsgList != null && ekk0451b002MsgList.length > 0)
					{
						for(int j = 0; j < ekk0451b002MsgList.length; j++)
						{
							//ワーク.割引サービスコード
							String wribSvcCd = ekk0451b002MsgList[j].getString(EKK0451B002CBSMsg1List.WRIB_SVC_CD);
							//ワーク.割引サービス契約ステータス
							String wribSvcStat = ekk0451b002MsgList[j].getString(EKK0451B002CBSMsg1List.WRIB_SVC_KEI_STAT);
							// 割引サービスコードがスターチャンネルかつ割引サービス契約ステータスが受付済、サービス提供中
							if ( JKKStrConst.WRIB_SVC_BS_STAR_CHANNEL_SET.equals(wribSvcCd) &&
								(JKKStrConst.CD00055_UKZM.equals(wribSvcStat) || JKKStrConst.CD00055_SVCTK_CHU.equals(wribSvcStat) ) )
							{
								// 地デジ・ＢＳコース　スターチャンネルセットを設定
								workPcrsNm = PCRS_NM_BS_STA_TYAN;
								// ANK-3593-02-00 2019/07/03 ADD START
								// 料金コース名と同名称を料金プラン名に設定
								workPplanNm = PCRS_NM_BS_STA_TYAN;
								// ANK-3593-02-00 2019/07/03 ADD END
							}
						}
					}
				}
				// 料金コースがテレビ(ＨＤ、ＳＤ、再送信(多チャンネル)ＳＤ、再送信(多チャンネル)ＨＤ)の場合
				if ( JKKStrConst.CD00134_TV_HD.equals(workPcrsCd) || JKKStrConst.CD00134_A38.equals(workPcrsCd) || 
						JKKStrConst.CD00134_A24.equals(workPcrsCd) || JKKStrConst.CD00134_TV_RESEND_MULTI_CH_HD.equals(workPcrsCd) )
				{
					// サービス契約内訳一覧照会（サービス契約番号（テレビ）＿オペレータ支援）
					Object[][] ekk0161b515In =
					{
						{EKK0161B515CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0161B515}
						// 機能コード
						, {EKK0161B515CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
						// ＫＥＹ＿サービス契約番号
						, {EKK0161B515CBSMsg.KEY_SVC_KEI_NO, workSvcKeiNo}
					};
					// サービスIF実行
					ekk0161b515MsgList = callSC(handle, scCall, param, fixedText, ekk0161b515In)
							.getCAANMsgList(EKK0161B515CBSMsg.EKK0161B515CBSMSG1LIST);

					// サービス契約内訳一覧照会（サービス契約番号（テレビ）＿オペレータ支援）の取得処理
					if(ekk0161b515MsgList != null && ekk0161b515MsgList.length > 0)
					{
						// EKK0161B515.料金コース名
						String ekk0161b515PcrsNm = ekk0161b515MsgList[0].getString(EKK0161B515CBSMsg1List.PCRS_NM);
						{
							// サービス契約料金コース名とサービス契約内訳料金コース名を結合
							workPcrsNm = workPcrsNm + "　" + ekk0161b515PcrsNm;
							// ANK-3593-02-00 2019/07/03 ADD START
							// 料金コース名と同名称を料金プラン名に設定
							workPplanNm = workPcrsNm;
							// ANK-3593-02-00 2019/07/03 ADD END
						}
					}
				}
				// ANK-4577-08-00 ADD START
				// 料金グループ名、料金プラン名の化かし対応
				//ワーク.料金グループ名
				String workPrcGrpNm = ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.PRC_GRP_NM);
				
				// 料金コースがシンプルプランの場合
				if ( JKKStrConst.CD00134_A97.equals(workPcrsCd) || JKKStrConst.CD00134_A99.equals(workPcrsCd) )
				{
					// ダミーの料金グループ名、料金プラン名を取得
					String simpleGrpNm = getEZM0321A010(handle, param, scCall, fixedText, KK_SIMPL_C_GRPNM_01);
					String simplePcrsNm = getEZM0321A010(handle, param, scCall, fixedText, KK_SIMPL_C_PCRSNM_02);
					String simpleNfxPcrsNm = getEZM0321A010(handle, param, scCall, fixedText, KK_SIMPL_C_PCRSNM_03);
					
					if (JKKStrConst.CD00134_A97.equals(workPcrsCd))
					{
						// 料金グループ名、プラン名をシンプル10G用に化かす
						workPrcGrpNm = simpleGrpNm;
						workPplanNm = simplePcrsNm;
					}
					else if (JKKStrConst.CD00134_A99.equals(workPcrsCd))
					{
						// 料金グループ名、プラン名をシンプル10GNetflix用に化かす
						workPrcGrpNm = simpleGrpNm;
						workPplanNm = simpleNfxPcrsNm;
					}
				}
				// ANK-4577-08-00 ADD END
				
				// ワーク.工事案件番号
				String workKojiakNo = "";
				// ワーク.工事案件種別コード
				String workKojiakSbtCd = "";
				//ワーク.サービスコード
				String workSvcCd = ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.SVC_CD);
				// ANK-4049-00-00 ADD START
				//ワーク.住所変更年月日
				String workAdchgYmd = null;
				String param_dtail_info_yokyu = (String)ccMsg.get(REQ_PARAM_DTAIL_INFO_YOKYU);
				// ANK-4049-00-00 ADD END

				// サービスコードがネット、電話、テレビの場合
				if ( JKKStrConst.CD00130_01.equals(workSvcCd) || JKKStrConst.CD00130_02.equals(workSvcCd) || JKKStrConst.CD00130_03.equals(workSvcCd)  )
				{
					// 工事案件一覧照会（サービス契約番号＿オペレータ支援）
					Object[][] eku0011b100In =
					{
						{EKU0011B100CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0011B100}
						// 機能コード
						, {EKU0011B100CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
						// KEY_サービス契約番号
						, {EKU0011B100CBSMsg.KEY_SVC_KEI_NO, workSvcKeiNo}
					};
					// サービスIF実行
					eku0011b100MsgList = callSC(handle, scCall, param, fixedText, eku0011b100In)
							.getCAANMsgList(EKU0011B100CBSMsg.EKU0011B100CBSMSG1LIST);

					// 工事案件一覧照会（サービス契約番号＿オペレータ支援）の取得処理
					if(eku0011b100MsgList != null && eku0011b100MsgList.length > 0)
					{
						//ワーク.工事案件番号
						workKojiakNo = eku0011b100MsgList[0].getString(EKU0011B100CBSMsg1List.KOJIAK_NO);
						//ワーク.工事案件種別コード
						workKojiakSbtCd = eku0011b100MsgList[0].getString(EKU0011B100CBSMsg1List.KOJIAK_SBT_CD);
					}
					// ANK-4049-00-00 ADD START
					
					//入力パラメータ.詳細情報要求 に"1"(詳細情報返却要) が設定されている場合、下記の処理を行う。
					if (DTAIL_INFO_RTN.equals(param_dtail_info_yokyu))
					{
						if (eku0011b100MsgList != null && eku0011b100MsgList.length > 0)
						{
							//サービスIFの返却結果を繰り返し処理し、下記条件に該当する最初の1件を使用する。
							for (int j = 0; j < eku0011b100MsgList.length; j++)
							{
								String getAdchgYmdkojiUkOptntyIdoDiv = eku0011b100MsgList[j].getString(EKU0011B100CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV);
								String getAdchgYmdKojiakSbtCd = eku0011b100MsgList[j].getString(EKU0011B100CBSMsg1List.KOJIAK_SBT_CD);
								
								/*
								 *・「工事受付契機異動区分」＝"00019"（住所変更・登録）
								 *　かつ　「工事案件種別コード」 ＝ "001"(新設) または"003"(住所変更(新設))
								 */
								if (JKKStrConst.CD00576_ADCHG_ADD.equals(getAdchgYmdkojiUkOptntyIdoDiv) 
									&& ( JKKStrConst.CD00577_NEWESTA.equals(getAdchgYmdKojiakSbtCd) || JKKStrConst.CD00577_ADCHG_NEWESTA .equals(getAdchgYmdKojiakSbtCd)))	
								{
									//条件に該当するレコードが存在した場合： 住所変更年月日　に、該当レコードの「工事案件実施年月日」を設定する。
									workAdchgYmd = eku0011b100MsgList[j].getString(EKU0011B100CBSMsg1List.KOJIAK_JSSI_YMD);
									break;
								}	
							}
						}
					}
					// ANK-4049-00-00 ADD END
				}

				//ワーク.マンション物件コード
				String workManBukkenCd = "";
				//ワーク.マンションＩＤ
				String workManId = "";
				//ワーク.CAT_ID
				String workCatId = "";
				//ワーク.提供方式契約番号
				String workTkHoshikiKeiNo = ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.TK_HOSHIKI_KEI_NO);
				// 提供方式契約番号が設定されている場合
				if ( workTkHoshikiKeiNo != null && !"".equals(workTkHoshikiKeiNo) )
				{
					// マンション情報一覧照会（サービス契約番号）
					Object[][] ekk0861b002In =
					{
						{EKK0861B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0861B002}
						// 機能コード
						, {EKK0861B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
						// KEY_サービス契約番号
						, {EKK0861B002CBSMsg.KEY_SVC_KEI_NO, workSvcKeiNo}
						// ＫＥＹ＿予約適用年月日
						, {EKK0861B002CBSMsg.KEY_RSV_APLY_YMD, opeDate}
					};
					// サービスIF実行
					ekk0861b002MsgList = callSC(handle, scCall, param, fixedText, ekk0861b002In)
							.getCAANMsgList(EKK0861B002CBSMsg.EKK0861B002CBSMSG1LIST);

					// マンション情報一覧照会（サービス契約番号）の取得処理
					if(ekk0861b002MsgList != null && ekk0861b002MsgList.length > 0)
					{
						//ワーク.マンション物件コード
						workManBukkenCd = ekk0861b002MsgList[0].getString(EKK0861B002CBSMsg1List.MANSION_BUKKEN_CD);
						// マンションＩＤ、ＣＡＴＩＤはマンションの場合のみ設定
						if ( JKKStrConst.MANSION_BUKKEN_CD_MANSION.equals(workManBukkenCd) )
						{
							//ワーク.マンションＩＤ
							workManId = ekk0861b002MsgList[0].getString(EKK0861B002CBSMsg1List.MANSION_ID);
							//ワーク.CAT_ID
							workCatId = ekk0861b002MsgList[0].getString(EKK0861B002CBSMsg1List.CATID);
						}
						
// ANK-3989-00-00 ADD START
						// ネットマンション光コンセント方式判定用に、提供方式コード、提供方式パターンコード、棟内速度コードを取得
						String tk_hoshiki_cd = ekk0861b002MsgList[0].getString(EKK0861B002CBSMsg1List.TK_HOSHIKI_CD);
						String tk_hoshiki_pattern_cd = ekk0861b002MsgList[0].getString(EKK0861B002CBSMsg1List.TK_HOSHIKI_PATTERN_CD);
						String tonai_speed_cd = ekk0861b002MsgList[0].getString(EKK0861B002CBSMsg1List.TONAI_SPEED_CD);
						// ANK-4244-00-00 ADD START
						String hhs_1gonly_flg = ekk0861b002MsgList[0].getString(EKK0861B002CBSMsg1List.HHS_1GONLY_FLG);
						// ANK-4244-00-00 ADD END
						
						//サービスコードがネットかつ提供方式コード、提供方式パターンコード、棟内速度コードに値が設定されている場合、
						if (JKKStrConst.CD00130_01.equals(workSvcCd) &&
								(tk_hoshiki_cd != null && !"".equals(tk_hoshiki_cd)) &&
								(tk_hoshiki_pattern_cd != null && !"".equals(tk_hoshiki_pattern_cd)) &&
								(tonai_speed_cd != null && !"".equals(tonai_speed_cd)))
						{
							//提供方式コードが"008：光配線"かつ提供方式パターンコードが"51：光コンセント"の場合、
							// ダミーの料金コース、料金コース名、料金プランコード、料金プラン名を設定
							if (JKKStrConst.CD00590_OPTICAL.equals(tk_hoshiki_cd) &&
									(JKKStrConst.TK_HOSHIKI_PATTERN_CD_51.equals(tk_hoshiki_pattern_cd)))
							{
								// 棟内速度判定結果
								String tonai_speed_judge_ret = "";
								
								if (JFUStrConst.CD01214_008.equals(tonai_speed_cd))
								{
									// 棟内速度コードが5Gの場合、5G用の棟内速度判定結果を設定
									tonai_speed_judge_ret = TONAI_SPEED_JUDGE_RET_5G;
								}
								else if (JFUStrConst.CD01214_009.equals(tonai_speed_cd))
								{
									// 棟内速度コードが10Gの場合、10G用の棟内速度判定結果を設定
									tonai_speed_judge_ret = TONAI_SPEED_JUDGE_RET_10G;
								}
								else
								{
									// 棟内速度コードが5Gおよび10Gでない場合、1G用の棟内速度判定結果を設定
									tonai_speed_judge_ret = TONAI_SPEED_JUDGE_RET_1G;
								}
								
								// 棟内速度判定結果より業務パラメータ一意照会の検索パラメータを取得する。
								Map<String, Object> searchWorkId = getWorkParamId(tonai_speed_judge_ret);
								
								// 検索パラメータよりダミーの料金コース、料金コース名、料金プランコード、料金プラン名を設定
								workPcrsCd = getEZM0321A010(handle, param, scCall, fixedText, (String)searchWorkId.get(KEY_PCRS_CD));
								workPcrsNm = getEZM0321A010(handle, param, scCall, fixedText, (String)searchWorkId.get(KEY_PCRS_NM));
								workPplanCd = getEZM0321A010(handle, param, scCall, fixedText, (String)searchWorkId.get(KEY_PPLAN_CD));
								workPplanNm = getEZM0321A010(handle, param, scCall, fixedText, (String)searchWorkId.get(KEY_PPLAN_NM));
							}
							// ANK-4244-00-00 ADD START
							else if (hhs_1gonly_flg != null && !"".equals(hhs_1gonly_flg))
							{
								//提供方式コードが"008：光配線"かつ提供方式パターンコードが"50：ONU"かつ
								//光配線１Ｇのみフラグが"1：対象"の場合、ダミーの料金プランコードを設定
								if (JKKStrConst.CD00590_OPTICAL.equals(tk_hoshiki_cd) &&
										(JKKStrConst.TK_HOSHIKI_PATTERN_CD_50.equals(tk_hoshiki_pattern_cd)) &&
										(JKKStrConst.HHS_1GONLY_FLG_1.equals(hhs_1gonly_flg)))
								{
									// 棟内速度判定結果
									String tonai_speed_judge_ret = "";
									
									if (JFUStrConst.CD01214_008.equals(tonai_speed_cd))
									{
										// 棟内速度コードが5Gの場合、5G用の棟内速度判定結果を設定
										tonai_speed_judge_ret = TONAI_SPEED_JUDGE_RET_HHS_5G;
									}
									else if (JFUStrConst.CD01214_009.equals(tonai_speed_cd))
									{
										// 棟内速度コードが10Gの場合、10G用の棟内速度判定結果を設定
										tonai_speed_judge_ret = TONAI_SPEED_JUDGE_RET_HHS_10G;
									}
									else
									{
										// 棟内速度コードが5Gおよび10Gでない場合、1G用の棟内速度判定結果を設定
										tonai_speed_judge_ret = TONAI_SPEED_JUDGE_RET_HHS_1G;
									}
									
									// 棟内速度判定結果より業務パラメータ一意照会の検索パラメータを取得する。
									Map<String, Object> searchWorkId = getWorkParamId(tonai_speed_judge_ret);
									
									// 検索パラメータよりダミーの料金コース、料金コース名、料金プランコード、料金プラン名を設定
									workPcrsCd = getEZM0321A010(handle, param, scCall, fixedText, (String)searchWorkId.get(KEY_PCRS_CD));
									workPcrsNm = getEZM0321A010(handle, param, scCall, fixedText, (String)searchWorkId.get(KEY_PCRS_NM));
									workPplanCd = getEZM0321A010(handle, param, scCall, fixedText, (String)searchWorkId.get(KEY_PPLAN_CD));
									workPplanNm = getEZM0321A010(handle, param, scCall, fixedText, (String)searchWorkId.get(KEY_PPLAN_NM));
								}
							}
							// ANK-4244-00-00 ADD END
						}
// ANK-3989-00-00 ADD END
					}
				}
				// 電気サービスを回線内サービス契約番号リストの先頭に設定する場合
				//ワーク.サービス契約ステータス
				String workSvcKeiStat = ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.SVC_KEI_STAT);
				// OM-2019-0001305 DEL START
				////ワーク.サービス契約番号（電気)
				//String wrokSvcKeiNoEle = "";
				// OM-2019-0001305 DEL END
				if ( kaisenSvcCnt == 0 && !JKKStrConst.CD01616_STAT_SVCTK_CHU.equals(workSvcKeiStat) ) 
				{
					for(int k = 0; k < ekk0081b550MsgList.length; k++)
					{
						//ワーク.サービス契約グループ識別番号
						String workSvkeiGrpSkbtNo = ekk0081b550MsgList[k].getString(EKK0081B550CBSMsg1List.SVKEI_GRP_SKBT_NO);
						//ワーク.サービス契約ステータス電気
						String workSvcKeiStatEle = ekk0081b550MsgList[k].getString(EKK0081B550CBSMsg1List.SVC_KEI_STAT);
						// サービス契約回線内訳番号が一致し、電気がサービス提供中の場合
						if ( workSvcKeiKaisenUcwkNo.equals(workSvkeiGrpSkbtNo ) && JKKStrConst.CD01616_STAT_SVCTK_CHU.equals(workSvcKeiStatEle) )
						{
							// 回線内サービス契約番号リスト(電気)マッピング
							kaisenSvcKeiList.add(setKaisenServiceEleMap( ekk0081b550MsgList[k] ));
							// OM-2019-0001305 MOD START
							//wrokSvcKeiNoEle = ekk0081b550MsgList[k].getString(EKK0081B550CBSMsg1List.SVC_KEI_NO);
							eleMap.put(RES_PARAM_SVC_KEI_NO, ekk0081b550MsgList[k].getString(EKK0081B550CBSMsg1List.SVC_KEI_NO));
							// OM-2019-0001305 MOD END
						}
					}
					
				}
				
// ANK-3840-00-00対応 20200614 星野 ADD START
				// 住所変更情報（サービス契約単位）
				CAANMsg juhenInfoSvcKei;
				// 住所変更情報取得（住所変更中を取得）
				juhenInfoSvcKei = getAdchgInfo(handle, param,fixedText, scCall, workSvcKeiNo, true);
				if(juhenInfoSvcKei == null)
				{
					// 取得できなかった場合、再チャレンジ
					// 住所変更情報取得（確定・キャンセル済も取得）
					juhenInfoSvcKei = getAdchgInfo(handle, param,fixedText, scCall, workSvcKeiNo, false);
				}
				
				// コース変更予約情報（ネット以外）
				// 現状仕様では、確定・キャンセル済は不要
				CAANMsg crsChgNoNetInfo = null;
				// ネット・電話以外の場合取得
				if( !JKKStrConst.CD00130_01.equals(workSvcCd) && !JKKStrConst.CD00130_02.equals(workSvcCd) )
				{
					crsChgNoNetInfo = getIdoRsvInfo(handle, param, fixedText, scCall, workSvcKeiNo, IDO_RSV_DTL_CD_CRS_CHG, JKKStrConst.CD01168_IDO_RSV_STAT_CD_00 + "," + JKKStrConst.CD01168_IDO_RSV_STAT_CD_03);
				}
				
				// 解約予約情報
				CAANMsg dslRsvInfo;
				// 異動予約情報取得（予約中）
				dslRsvInfo = getIdoRsvInfo(handle, param, fixedText, scCall, workSvcKeiNo, IDO_RSV_DTL_CD_DSL, JKKStrConst.CD01168_IDO_RSV_STAT_CD_00 + "," + JKKStrConst.CD01168_IDO_RSV_STAT_CD_03);
				if(dslRsvInfo==null)
				{
					// 取得できなかった場合、確定・キャンセル済を対象に再取得
					dslRsvInfo = getIdoRsvInfo(handle, param, fixedText, scCall, workSvcKeiNo, IDO_RSV_DTL_CD_DSL, JKKStrConst.CD01168_IDO_RSV_STAT_CD_01 + "," + JKKStrConst.CD01168_IDO_RSV_STAT_CD_02);
				}
				
				// 住所変更情報を回線単位で集約する
				juhenInfoKaisen = selectJuhenInfoKaisen(juhenInfoKaisen, juhenInfoSvcKei);
// ANK-3840-00-00対応 20200614 星野 ADD END
				
				// 回線内サービス契約番号リストマッピング
// ANK-3840-00-00対応 20200614 星野 MOD START
//				// ANK-3593-02-00 2019/07/03 MOD START
//				//kaisenSvcKeiList.add(setKaisenServiceMap( ekk0251b507MsgList[i], workPcrsNm, workKojiakNo, workKojiakSbtCd, workManBukkenCd, workManId, workCatId));
//				kaisenSvcKeiList.add(setKaisenServiceMap( ekk0251b507MsgList[i], workPcrsNm, workPplanNm, workKojiakNo, workKojiakSbtCd, workManBukkenCd, workManId, workCatId));
//				// ANK-3593-02-00 2019/07/03 MOD END
// ANK-3989-00-00 MOD START
//				kaisenSvcKeiList.add(setKaisenServiceMap( ekk0251b507MsgList[i], workPcrsNm, workPplanNm, workKojiakNo, workKojiakSbtCd, workManBukkenCd, workManId, workCatId, juhenInfoSvcKei, crsChgNoNetInfo, dslRsvInfo));
// ANK-4049-00-00 MOD START
//				kaisenSvcKeiList.add(setKaisenServiceMap( ekk0251b507MsgList[i], workPcrsCd, workPcrsNm, workPplanCd, workPplanNm, workKojiakNo, workKojiakSbtCd, workManBukkenCd, workManId, workCatId, juhenInfoSvcKei, crsChgNoNetInfo, dslRsvInfo));
				// ANK-4577-08-00 MOD START
//				kaisenSvcKeiList.add(setKaisenServiceMap( ekk0251b507MsgList[i], workPcrsCd, workPcrsNm, workPplanCd, workPplanNm, workKojiakNo, workKojiakSbtCd, workManBukkenCd, workManId, workCatId, juhenInfoSvcKei, crsChgNoNetInfo, dslRsvInfo, workAdchgYmd, param_dtail_info_yokyu));
				kaisenSvcKeiList.add(setKaisenServiceMap( ekk0251b507MsgList[i], workPcrsCd, workPcrsNm, workPplanCd, workPplanNm, workKojiakNo, workKojiakSbtCd, workManBukkenCd, workManId, workCatId, juhenInfoSvcKei, crsChgNoNetInfo, dslRsvInfo, workAdchgYmd, param_dtail_info_yokyu, workPrcGrpNm));
				// ANK-4577-08-00 MOD END
				// ANK-4049-00-00 MOD END
// ANK-3989-00-00 MOD END
// ANK-3840-00-00対応 20200614 星野 MOD END
				String nextSvcKeiKaisenUcwkNo = "";
				// 繰り返しの最後までチェック
				if ( i + 1 < ekk0251b507MsgList.length )
				{
					// 次のサービス契約回線内訳番号
					nextSvcKeiKaisenUcwkNo = ekk0251b507MsgList[i+1].getString(EKK0251B507CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO);
				}
				// 繰り返しの最後
				if ( i == ekk0251b507MsgList.length )
				{
					// 繰り返し最終回
					lastFlag = true;
				}
				// 回線単位契約情報リストマッピング
				// サービス契約回線内訳番号リストの追加チェック(前回のサービス契約回線内訳番号と変更があるか)
				if ( !workSvcKeiKaisenUcwkNo.equals(nextSvcKeiKaisenUcwkNo ) || lastFlag == true )
				{
					Map<String, Object> kaisenMap = new HashMap<String, Object>();
					// 電気サービスを回線内サービス契約番号リストの最後に設定する場合
					for(int l = 0; l < ekk0081b550MsgList.length; l++)
					{
						//ワーク.サービス契約グループ識別番号
						String workSvkeiGrpSkbtNo = ekk0081b550MsgList[l].getString(EKK0081B550CBSMsg1List.SVKEI_GRP_SKBT_NO);
						//ワーク.サービス契約番号(電気)
						String workSvcKeiNoEle2 = ekk0081b550MsgList[l].getString(EKK0081B550CBSMsg1List.SVC_KEI_NO);
						// サービス契約回線内訳番号が一致した場合かつ、既に電気のマッピングをおこなっていないもの
						// OM-2019-0001305 MOD START
						//if ( workSvcKeiKaisenUcwkNo.equals(workSvkeiGrpSkbtNo) && !workSvcKeiNoEle2.equals(wrokSvcKeiNoEle) )
						if ( workSvcKeiKaisenUcwkNo.equals(workSvkeiGrpSkbtNo) && !eleMap.containsValue(workSvcKeiNoEle2 ) )
						// OM-2019-0001305 MOD END
						{
							// 回線内サービス契約番号リスト(電気)マッピング
							kaisenSvcKeiList.add(setKaisenServiceEleMap( ekk0081b550MsgList[l] ));
							// OM-2019-0001305 ADD START
							eleMap.put(RES_PARAM_SVC_KEI_NO, ekk0081b550MsgList[l].getString(EKK0081B550CBSMsg1List.SVC_KEI_NO));
							// OM-2019-0001305 ADD END
						}
					}
					kaisenMap.put(RES_PARAM_SVC_KEI_KAISEN_UCWK_NO, workSvcKeiKaisenUcwkNo);
					kaisenMap.put(RES_PARAM_KAISEN_PLACE_PCD, JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.KAISEN_PLACE_PCD)));
					kaisenMap.put(RES_PARAM_UEPCAD, 
						JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.KAISEN_PLACE_STATE_NM)) +
						JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.KAISEN_PLACE_CITY_NM)) +
						JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.KAISEN_PLACE_OAZTSU_NM)) +
						JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.KAISEN_PLACE_AZCHO_NM)) +
						JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.KAISEN_PLACE_BNCHIGO)) +
						JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.KAISEN_PLACE_ADRTTM)) +
						JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.KAISEN_PLACE_ADRRM)) ); 
					// ANK-3798-00-00 ADD START
					kaisenMap.put(RES_AD_CD, JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.KAISEN_PLACE_AD_CD)));
					kaisenMap.put(RES_HENKOUGO_PCRS_NM, JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.KAISEN_PLACE_TELNO)));
					// ANK-3798-00-00 ADD END
					// ANK-4038-00-00 ADD START
					kaisenMap.put(RES_RZ_STC_STAT_CD, JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.RZ_STC_STAT_CD)));
					kaisenMap.put(RES_CONSNT_STC_NYO_CD, JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.CONSNT_STC_NYO_CD)));
					// ANK-4038-00-00 ADD END
// ANK-3840-00-00対応 20200614 星野 ADD START
					kaisenMap.put(ADCHG_FLG, "");
					if(juhenInfoKaisen!=null)
					{
						if(isJuhenChu(juhenInfoKaisen))
						{
							// 住所変更中（住所変更予約〜住所変更確定以前）の場合、"1（住所変更中）"
							kaisenMap.put(ADCHG_FLG, FLG_RSV);
						}
						else if( isJuhenCanceled(juhenInfoKaisen) ) 
						{
							// 住所変更キャンセルの場合、"9（住所変更キャンセル）"
							kaisenMap.put(ADCHG_FLG, FLG_CANCELED);
						}
						else if(isJuhenKakutei(juhenInfoKaisen)){
							// 住所変更確定の場合、"0（住所変更完了）"
							kaisenMap.put(ADCHG_FLG, FLG_FIXED);
						}
					}
// ANK-3840-00-00対応 20200614 星野 ADD END
					// ANK-4038-00-00 ADD START
					// 親機種別コード
					String resOyaKikiSbtCd = "";
					// CT空き有無
					String resCtAkiUm = "";
					// CT番号
					String resCtNo = "";
					
					// 申込収容位置空き情報一意照会の取得
					Object[][] eku0281a010In =
					{
						{EKU0281A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKU0281A010}
						// 機能コード
						, {EKU0281A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
						// ＫＥＹ＿サービス契約回線内訳番号
						, {EKU0281A010CBSMsg.KEY_SVC_KEI_KAISEN_UCWK_NO, workSvcKeiKaisenUcwkNo}
					};
					// サービスIF実行
					eku0281a010MsgList = callSC(handle, scCall, param, fixedText, eku0281a010In)
							.getCAANMsgList(EKU0281A010CBSMsg.EKU0281A010CBSMSG1LIST);
					
					// データが存在する場合
					if(eku0281a010MsgList != null && eku0281a010MsgList.length > 0)
					{
						resOyaKikiSbtCd = eku0281a010MsgList[0].getString(EKU0281A010CBSMsg1List.OYA_KIKI_SBT_CD);
						resCtAkiUm = eku0281a010MsgList[0].getString(EKU0281A010CBSMsg1List.CT_AKI_UM);
						resCtNo = eku0281a010MsgList[0].getString(EKU0281A010CBSMsg1List.CT_NO);
					}
					// 親機種別コード
					kaisenMap.put(RES_OYA_KIKI_SBT_CD, JKKStringUtil.nullToBlank(resOyaKikiSbtCd));
					// CT空き有無
					kaisenMap.put(RES_CT_AKI_UM, JKKStringUtil.nullToBlank(resCtAkiUm));
					// CT番号
					kaisenMap.put(RES_CT_NO, JKKStringUtil.nullToBlank(resCtNo));
					
					kaisenMap.put(KJ_SKP_TG,"");
					// ANK-4038-06-00-00 DEL START
//					boolean rzTgFlg = false;
					// ANK-4038-06-00-00 DEL END
					//ローゼット化設置済案件チェックの対象サービス契約を設定するため繰り返し処理を実行
					for(int j = 0; j < ekk0251b507MsgList.length; j++)
					{
						// ANK-4038-06-00 DEL START
//						//チェック対象サービスコード
//						String ckTgSvcCd = ekk0251b507MsgList[j].getString(EKK0251B507CBSMsg1List.SVC_CD);
//						//チェック対象サービス契約ステータス
//						String ckTgSvcKeiStat = ekk0251b507MsgList[j].getString(EKK0251B507CBSMsg1List.SVC_KEI_STAT);
						// ANK-4038-06-00 DEL END
						//チェック対象サービス契約番号
						String ckTgSvcKeiNo = ekk0251b507MsgList[j].getString(EKK0251B507CBSMsg1List.SVC_KEI_NO);
						// ANK-4038-06-00 ADD START
						//チェック対象料金グループコード
						String chkTgPrcGrpCd = ekk0251b507MsgList[j].getString(EKK0251B507CBSMsg1List.PRC_GRP_CD);
						// ANK-4038-06-00 ADD END
						// IT1-2021-0000103 ADD START
						//チェック対象サービス契約回線内訳番号
						String ckTgSvcKeiKaisenUcwkNo = ekk0251b507MsgList[j].getString(EKK0251B507CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO);
						// サービス契約回線内訳番号が一致した場合
						if(ckTgSvcKeiKaisenUcwkNo.equals(workSvcKeiKaisenUcwkNo))
						{
						// IT1-2021-0000103 ADD END
							// ANK-4038-06-00 MOD START
//							if((JKKStrConst.CD00130_01.equals(ckTgSvcCd) || JKKStrConst.CD00130_02.equals(ckTgSvcCd)) 
//								&& (JKKStrConst.CD01616_STAT_SHOSAZUMI.equals(ckTgSvcKeiStat) || JKKStrConst.CD01616_STAT_TEIKETSUZUMI.equals(ckTgSvcKeiStat)
//										|| JKKStrConst.CD01616_STAT_SVCTK_CHU.equals(ckTgSvcKeiStat) || JKKStrConst.CD01616_STAT_PAUSE.equals(ckTgSvcKeiStat)
//										|| JKKStrConst.CD01616_STAT_STP.equals(ckTgSvcKeiStat)))
//							{
							// 実施可能リストに存在する料金グループコードの場合だけチェックCCを実行	
							// 対象料金グループコード：02（ネットホーム）、03（ネットメゾン）、04（ネットマンション）、10（光電話）
							if((Arrays.asList(RZKZMCC_ACT_PSB_LIST).contains(chkTgPrcGrpCd)))
							{
								// ANK-4038-06-00 MOD END
								// 「ローゼット化設置済案件チェック共通部品」を呼び出し、返却された工事スキップ可否を返却する。
								JKKRzkzmAnkenChkCC rzkzmAnkenChkCC = new JKKRzkzmAnkenChkCC();
								HashMap<String, Object> rzkzmAnkenChkMap = new HashMap<String, Object>();
								//サービス契約番号を設定する。
								rzkzmAnkenChkMap.put("svc_kei_no", ckTgSvcKeiNo);
								//サービス契約回線内訳番号を設定する。
								rzkzmAnkenChkMap.put("svc_kei_kaisen_ucwk_no", workSvcKeiKaisenUcwkNo);
								//共通部品の入力パラメータの「異動区分」は[コース変更]を設定する。
								rzkzmAnkenChkMap.put("ido_div", IDO_DIV_CRS_CHG);
								param.setData("rzkzm_anken_check_map", rzkzmAnkenChkMap);
								rzkzmAnkenChkCC.jdgeRzkzmAnken(handle, param, "rzkzm_anken_check_map");
							
								//ローゼット化設置済案件チェック結果を取得する
								chkResultMap = (Map) param.getData("rzkzm_anken_check_map");
								String chkResult = (String) chkResultMap.get("chk_result");
								// チェック結果が"1"(工事スキップ可）であれば
								if(RZ_KJ_SKP_PSB.equals(chkResult))
								{
									// 工事スキップ対象は"1"（工事スキップ対象）を返却
									kaisenMap.put(KJ_SKP_TG, RZ_KJ_SKP_OK);
									// ANK-4038-06-00 DEL START
//									rzTgFlg = true;
									// ANK-4038-06-00 DEL END
									// ANK-4038-06-00 ADD START
									break;
									// ANK-4038-06-00 ADD END
								}
								// ANK-4038-06-00 ADD START
								// チェック結果が"2"(工事スキップ不可）であれば
								else if(RZ_KJ_SKP_IMPSB.equals(chkResult))
								{
									kaisenMap.put(KJ_SKP_TG, RZ_KJ_SKP_NG);
									break;
								}
								// "1","2"以外は全て未設定
								else 
								{
									break;
								}
								// ANK-4038-06-00 ADD END
								// ANK-4038-06-00 DEL START
//							break;
								// ANK-4038-06-00 DEL END
							}
					// IT1-2021-0000103 ADD START
						}
					// IT1-2021-0000103 ADD END
					}
					// ANK-4038-06-00 DEL START
//					if (!rzTgFlg)
//					{
//						kaisenMap.put(KJ_SKP_TG, RZ_KJ_SKP_NG);
//					}
					// ANK-4038-06-00 DEL END
					// ANK-4038-00-00 ADD END
					//ANK-4465-00-00 ADD START
					kaisenMap.put(LTTD, JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.LTTD)));
					kaisenMap.put(LGTD, JKKStringUtil.nullToBlank(ekk0251b507MsgList[i].getString(EKK0251B507CBSMsg1List.LGTD)));
					//ANK-4465-00-00 ADD END
					kaisenMap.put(RES_PARAM_KISN_NAI_SVC_KEI_NO_LIST, kaisenSvcKeiList);
					kaisenKeiList.add(kaisenMap);
					// サービス契約回線内訳番号に変更があったため、ワークを更新
					workSvcKeiKaisenUcwkNo = nextSvcKeiKaisenUcwkNo;
					kaisenSvcKeiList = new ArrayList<Map<String, Object>>();
// ANK-3840-00-00対応 20200614 星野 ADD START
					juhenInfoKaisen = null;
// ANK-3840-00-00対応 20200614 星野 ADD END
				}
				else
				{
					kaisenSvcCnt++;
				}
			}
		}

		// ボディ部の設定
		bodyMap.put(RES_PARAM_KISN_TANI_KEI_IF_LIST, kaisenKeiList);
		bodyMap.put(RES_PARAM_MINEO_KEI_CNT, mineoNum);
		bodyMap.put(RES_PARAM_SYSID, (String)ccMsg.get(REQ_PARAM_SYSID));
		ccMsg.put(BODY_INFO, bodyMap);
		// エラーコード
		errMap.put(ERROR_CODE, "");
		// エラーメッセージ
		errMap.put(ERROR_MESSAGE, "");
		errList.add(errMap);
		ccMsg.put(ERROR_INFO, errList);

		return true;
	}

// ANK-3840-00-00対応 20200614 星野 ADD START
	/**
	 * 住所変更情報を取得します。
	 * @mustJuhenChu true:住所変更中を取得、false：確定・キャンセル済も含めて取得
	 */
	private CAANMsg getAdchgInfo(
		SessionHandle handle, 
		IRequestParameterReadWrite param, 
		String fixedText,
		ServiceComponentRequestInvoker scCall, 
		String workSvcKeiNo, 
		boolean mustJuhenChu
	)
	throws Throwable 
	{
		// 住所変更情報（サービス契約番号単位）
		CAANMsg juhenInfoSvcKei = null;
		// 住所変更中住所変更明細一覧照会２
		Object[][] ekk2101b501In =
		{
			{EKK2101B501CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2101B501}
			// 機能コード
			, {EKK2101B501CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2}
			// KEY_サービス契約番号
			, {EKK2101B501CBSMsg.KEY_SVC_KEI_NO, workSvcKeiNo}
		};
		// サービスIF実行
		CAANMsg[] ekk2101b501MsgList = callSC(handle, scCall, param, fixedText, ekk2101b501In)
				.getCAANMsgList(EKK2101B501CBSMsg.EKK2101B501CBSMSG1LIST);
		
		if(ekk2101b501MsgList==null){
			return null;
		}
		
		for(CAANMsg ekk2101b501Msg : ekk2101b501MsgList){
			// 住所変更中を取得する場合はそれ以外を除外
			if( mustJuhenChu && !isJuhenChu(ekk2101b501Msg) )
			{
				continue;
			}
			
			// 住所変更明細種別コード：01（サービス契約） を対象とする
			String adchgDtlSbtCd = ekk2101b501Msg.getString(EKK2101B501CBSMsg1List.ADCHG_DTL_SBT_CD);
			if( JKKStrConst.CD01241_SVC_KEI_NO.equals(adchgDtlSbtCd) ){
				String chbfSkbtNo = ekk2101b501Msg.getString(EKK2101B501CBSMsg1List.CHBF_SKBT_NO);
				String chafSkbtNo = ekk2101b501Msg.getString(EKK2101B501CBSMsg1List.CHAF_SKBT_NO);
				// 変更前識別番号・変更後識別番号のいずれかがサービス契約番号と一致するものが対象
				if(workSvcKeiNo.equals(chbfSkbtNo) || workSvcKeiNo.equals(chafSkbtNo)){
					juhenInfoSvcKei = ekk2101b501Msg;
					// 見つけたらbreak
					break;
				}
			}
		}

		return juhenInfoSvcKei;
	}
	
	/**
	 * 異動予約を取得します。
	 * @idoRsvStatCds 異動予約状態コード カンマ区切りで複数指定可
	 */
	private CAANMsg getIdoRsvInfo(
		SessionHandle handle, 
		IRequestParameterReadWrite param, 
		String fixedText,
		ServiceComponentRequestInvoker scCall, 
		String workSvcKeiNo, 
		String idoRsvDtlCd, 
		String idoRsvStatCds
	)
	throws Throwable 
	{
		// 異動予約情報
		CAANMsg idoRsvInfo = null;
		// 住所変更中住所変更明細一覧照会２
		Object[][] ekk1681b001In =
		{
			{EKK1681B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1681B001}
			// 機能コード：1
			, {EKK1681B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
			// ＫＥＹ＿異動予約詳細コード
			, {EKK1681B001CBSMsg.KEY_IDO_RSV_DTL_CD, idoRsvDtlCd}
			// ＫＥＹ＿異動予約状態コード
			, {EKK1681B001CBSMsg.KEY_IDO_RSV_STAT_CD, idoRsvStatCds}
			// KEY_サービス契約番号
			, {EKK1681B001CBSMsg.KEY_SVC_KEI_NO, workSvcKeiNo}
			// ＫＥＹ＿ソート項目Ｎｏ：32（更新年月日時分秒）
			, {EKK1681B001CBSMsg.KEY_SORT_ITEM_NO, "32"}
			// ＫＥＹ＿ソート区分：2（降順）
			, {EKK1681B001CBSMsg.KEY_SORT_KBN, "2"}
		};
		// サービスIF実行
		CAANMsg[] ekk1681b001MsgList = callSC(handle, scCall, param, fixedText, ekk1681b001In)
				.getCAANMsgList(EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
		
		if(ekk1681b001MsgList==null){
			return null;
		}
		
		for(CAANMsg ekk1681b001Msg : ekk1681b001MsgList){
			// コース変更（STB）を除外するため、サービス契約内訳番号が未設定であることを確認
			if(StringUtils.isEmpty(ekk1681b001Msg.getString(EKK1681B001CBSMsg1List.SVC_KEI_UCWK_NO))){
				idoRsvInfo = ekk1681b001Msg;
				// 見つけたらbreak
				break;
			}
		}
		
		return idoRsvInfo;
	}

	private CAANMsg selectJuhenInfoKaisen(CAANMsg juhenInfoKaisen, CAANMsg juhenInfoSvcKei) 
	{
		// 住所変更情報（回線単位）の設定
		if(juhenInfoKaisen==null)
		{
			// 回線単位が未設定だったら、サービス契約単位を設定
			return juhenInfoSvcKei;
		}
		else
		{
			// サービス契約単位が未設定だったら、何もしない
			if(juhenInfoSvcKei==null)
			{
				// 今の回線単位をそのまま返却
				return juhenInfoKaisen;
			}
			
			// 回線単位・サービス契約単位が双方設定されている場合は、優先順位を判定
			else 
			{
				if( isJuhenChu(juhenInfoKaisen) )
				{
					// 回線単位が住所変更中なら上書き不要なので何もしない
					// 今の回線単位をそのまま返却
					return juhenInfoKaisen;
					
				}
				else if( isJuhenChu(juhenInfoSvcKei) )
				{
					// サービス契約単位が住所変更中だったら上書きする
					return juhenInfoSvcKei;
				}
				else
				{
					// 住所変更中以外は、直近のものを優先
					String updUnyoYmdKaisen = JKKStringUtil.nullToBlank( juhenInfoKaisen.getString(EKK2101B501CBSMsg1List.UPD_UNYO_YMD) );
					String updUnyoYmdSvcKei = JKKStringUtil.nullToBlank( juhenInfoSvcKei.getString(EKK2101B501CBSMsg1List.UPD_UNYO_YMD) );
					if(updUnyoYmdKaisen.compareTo(updUnyoYmdSvcKei) < 0){
						// サービス契約単位のほうが直近だったら上書きする
						return juhenInfoSvcKei;
					}
					else
					{
						return juhenInfoKaisen;
					}
				}
			}
		}
	}

	/**
	 * 住所変更中かどうか判定します
	 * @param juhenInfo
	 * @return 住所変更中の場合、true。以外はfalse。
	 */
	private boolean isJuhenChu(CAANMsg juhenInfo)
	{
		return 
			JKKStrConst.CD01240_ADD_ZUMI.equals( juhenInfo.getString(EKK2101B501CBSMsg1List.ADCHG_STAT) )
			&& JKKStrConst.CD00016_0.equals( juhenInfo.getString(EKK2101B501CBSMsg1List.MK_FLG) )
			;
	}

	/**
	 * 住所変更キャンセルかどうか判定します
	 * @param juhenInfo
	 * @return 住所変更キャンセルの場合、true。以外はfalse。
	 */
	private boolean isJuhenCanceled(CAANMsg juhenInfoKaisen)
	{
		return 
			!JKKStrConst.CD00016_0.equals( juhenInfoKaisen.getString(EKK2101B501CBSMsg1List.MK_FLG) )
		;
	}

	/**
	 * 住所変更確定かどうか判定します
	 * @param juhenInfo
	 * @return 住所変更確定の場合、true。以外はfalse。
	 */
	private boolean isJuhenKakutei(CAANMsg juhenInfo)
	{
		return 
			"003".equals( juhenInfo.getString(EKK2101B501CBSMsg1List.ADCHG_STAT) )
			&& JKKStrConst.CD00016_0.equals( juhenInfo.getString(EKK2101B501CBSMsg1List.MK_FLG) )
			;
	}
// ANK-3840-00-00対応 20200614 星野 ADD END

	/**
	 * レスポンス項目を設定します。
	 * <br>
	 * @param ccMsg 利用場所住所情報照会（オペレータ支援）CCマップ
	 * @param returnCode リターンコード
	 * @param returnMessage リターンメッセージ
	 */
	private void setResponse(IRequestParameterReadWrite param,  Map<String, Object> ccMsg, String errCode, String errMessage)
	throws Exception
	{
		// エラーリスト
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();

		Map<String, Object> bodyMap = new HashMap<String, Object>();
		Map<String, String> errMap = new HashMap<String, String>();

		// ＳＹＳＩＤ
		bodyMap.put(RES_PARAM_SYSID, (String)ccMsg.get(REQ_PARAM_SYSID));

		// ボディ部の設定
		ccMsg.put(BODY_INFO, bodyMap);

		// エラーコード
		errMap.put(ERROR_CODE, errCode);
		// エラーメッセージ
		errMap.put(ERROR_MESSAGE, errMessage);
		errList.add(errMap);
		ccMsg.put(ERROR_INFO, errList);
		

	}
	
	/**
	 * 回線内サービス契約番号リストをマッピング
	 * 
	 * @param workPcrsNm 料金コース
	 * @param workPplanNm 料金プラン
	 * @param workKojiakNo 工事案件番号
	 * @param workKojiakSbtCd 工事案件種別コード
	 * @param workManBukkenCd マンション物件コード
	 * @param workManId マンションＩＤ
	 * @param workCatId ＣＡＴ＿ＩＤ
	 * @param juhenInfoSvcKei 住所変更情報
	 * @param crsChgNoNetInfo コース変更予約情報（ネット以外）
	 * @param dslRsvInfo 解約予約情報
	 * @param workAdchgYmd 住所変更年月日
	 * @param param_dtail_info_yokyu 詳細情報返却要
	 * @return kaisenServiceMap
	 */
// ANK-3840-00-00対応 20200614 星野 MOD START
//	// ANK-3593-02-00 2019/07/03 MOD START
//	//public static Map<String, Object> setKaisenServiceMap(CAANMsg ekk0251b507MsgList, String workPcrsNm, String workKojiakNo, String workKojiakSbtCd, String workManBukkenCd, String workManId, String workCatId)
//	public static Map<String, Object> setKaisenServiceMap(CAANMsg ekk0251b507MsgList, String workPcrsNm, String workPplanNm, String workKojiakNo, String workKojiakSbtCd, String workManBukkenCd, String workManId, String workCatId)
//	// ANK-3593-02-00 2019/07/03 MOD END
// ANK-3989-00-00 MOD START
//	public Map<String, Object> setKaisenServiceMap(
//		CAANMsg ekk0251b507MsgList, 
//		String workPcrsNm, 
//		String workPplanNm, 
//		String workKojiakNo, 
//		String workKojiakSbtCd, 
//		String workManBukkenCd, 
//		String workManId, 
//		String workCatId, 
//		CAANMsg juhenInfoSvcKei, 
//		CAANMsg crsChgNoNetInfo, 
//		CAANMsg dslRsvInfo
//	)
	public Map<String, Object> setKaisenServiceMap(
			CAANMsg ekk0251b507MsgList, 
			String workPcrsCd, 
			String workPcrsNm, 
			String workPplanCd, 
			String workPplanNm, 
			String workKojiakNo, 
			String workKojiakSbtCd, 
			String workManBukkenCd, 
			String workManId, 
			String workCatId, 
			CAANMsg juhenInfoSvcKei, 
			CAANMsg crsChgNoNetInfo, 
// ANK-4049-00-00 MOD START
//			CAANMsg dslRsvInfo
			CAANMsg dslRsvInfo,
			String workAdchgYmd,
			String param_dtail_info_yokyu
//ANK-4049-00-00 MOD END
			// ANK-4577-08-00 ADD START
			,String workPrcGrpNm
			// ANK-4577-08-00 ADD END
		)
// ANK-3989-00-00 MOD END
// ANK-3840-00-00対応 20200614 星野 MOD END
	{
		Map<String, Object> kaisenServiceMap =  new HashMap<String, Object>();
		
		// 回線内サービス契約番号リスト
		kaisenServiceMap.put(RES_PARAM_SVC_KEI_NO, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.SVC_KEI_NO)));
		kaisenServiceMap.put(RES_PARAM_SVC_KEI_STAT, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.SVC_KEI_STAT)));
		kaisenServiceMap.put(RES_PARAM_SVC_CD, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.SVC_CD)));
		kaisenServiceMap.put(RES_PARAM_SVC_NM, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.SVC_NM)));
		kaisenServiceMap.put(RES_PARAM_SEIRI_NO, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.SEIRI_NO)));
		kaisenServiceMap.put(RES_PARAM_PRC_GRP_CD, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.PRC_GRP_CD)));
		// ANK-4577-08-00 MOD START
//		kaisenServiceMap.put(RES_PARAM_PRC_GRP_NM, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.PRC_GRP_NM)));
		kaisenServiceMap.put(RES_PARAM_PRC_GRP_NM, JKKStringUtil.nullToBlank(workPrcGrpNm));
		// ANK-4577-08-00 MOD END
// ANK-3989-00-00 MOD START
//		kaisenServiceMap.put(RES_PARAM_PCRS_CD, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.PCRS_CD)));
		kaisenServiceMap.put(RES_PARAM_PCRS_CD, JKKStringUtil.nullToBlank(workPcrsCd));
// ANK-3989-00-00 MOD END
		kaisenServiceMap.put(RES_PARAM_PCRS_NM, JKKStringUtil.nullToBlank(workPcrsNm));
		// ANK-3593-02-00 2019/07/03 ADD START
// ANK-3989-00-00 MOD START
//		kaisenServiceMap.put(RES_PARAM_PPLAN_CD, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.PPLAN_CD)));
		kaisenServiceMap.put(RES_PARAM_PPLAN_CD, JKKStringUtil.nullToBlank(workPplanCd));
// ANK-3989-00-00 MOD END
		kaisenServiceMap.put(RES_PARAM_PPLAN_NM, JKKStringUtil.nullToBlank(workPplanNm));
		// ANK-3593-02-00 2019/07/03 ADD END
		kaisenServiceMap.put(RES_PARAM_SVC_STA_YMD, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.SVC_STA_YMD)));
		kaisenServiceMap.put(RES_PARAM_SVC_END_YMD, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.SVC_END_YMD)));
		// ANK-3758-00-00 ADD START
		kaisenServiceMap.put(RES_PARAM_SVC_DSL_KISAN_YMD, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.SVC_DSL_KISAN_YMD)));
		kaisenServiceMap.put(RES_PARAM_SVC_DSL_YMD, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.SVC_DSL_YMD)));
		kaisenServiceMap.put(RES_PARAM_SVC_DLRE_CD, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.SVC_DLRE_CD)));
		// ANK-3758-00-00 ADD END
		kaisenServiceMap.put(RES_PARAM_KOJIAK_NO, JKKStringUtil.nullToBlank(workKojiakNo));
		kaisenServiceMap.put(RES_PARAM_KOJIAK_SBT_CD, JKKStringUtil.nullToBlank(workKojiakSbtCd));
		kaisenServiceMap.put(RES_PARAM_MANSION_BUKKEN_CD, JKKStringUtil.nullToBlank(workManBukkenCd));
		kaisenServiceMap.put(RES_PARAM_MANSION_ID, JKKStringUtil.nullToBlank(workManId));
		kaisenServiceMap.put(RES_PARAM_CATID, JKKStringUtil.nullToBlank(workCatId));
		kaisenServiceMap.put(RES_PARAM_SEIKY_KEI_NO, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.SEIKY_KEI_NO)));
		// ANK-3766-00-00 ADD START
		kaisenServiceMap.put(HENKOUGO_PCRS_CD, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.NEW_PCRS_CD)));
		kaisenServiceMap.put(HENKOUGO_PCRS_NM, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.NEW_PCRS_NM)));
		// ANK-3766-00-00 ADD END
		// ANK-3862-03-00 ADD START
		kaisenServiceMap.put(WEB_OP_ADD_FAIL_FLG, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.WEB_OP_ADD_FAIL_FLG)));
		// ANK-3862-03-00 ADD END
// ANK-3946-00-00対応 20201029 星野 ADD START
		kaisenServiceMap.put(PLAN_STAYMD, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.PLAN_STAYMD)));
// ANK-3946-00-00対応 20201029 星野 ADD END
		// ANK-4049-00-00 ADD START
		if (DTAIL_INFO_RTN.equals(param_dtail_info_yokyu))
		{
			kaisenServiceMap.put(RES_ADCHG_YMD, JKKStringUtil.nullToBlank(workAdchgYmd));
		}
		// ANK-4049-00-00 ADD END
// ANK-3840-00-00対応 20200614 星野 ADD START
		kaisenServiceMap.put(HENKOUGO_PCRS_NONET_CD, "");
		kaisenServiceMap.put(HENKOUGO_PCRS_NONET_NM, "");
		if(crsChgNoNetInfo!=null)
		{
			kaisenServiceMap.put(HENKOUGO_PCRS_NONET_CD, JKKStringUtil.nullToBlank(crsChgNoNetInfo.getString(EKK1681B001CBSMsg1List.NEW_PCRS_CD)));
			kaisenServiceMap.put(HENKOUGO_PCRS_NONET_NM, JKKStringUtil.nullToBlank(crsChgNoNetInfo.getString(EKK1681B001CBSMsg1List.NEW_PCRS_CD_NM)));
		}
		
		kaisenServiceMap.put(NEW_SVC_KEI_NO, "");
		if(juhenInfoSvcKei!=null)
		{
			String svcKeiNo = JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.SVC_KEI_NO));
			String chbfSkbtNo = JKKStringUtil.nullToBlank(juhenInfoSvcKei.getString(EKK2101B501CBSMsg1List.CHBF_SKBT_NO));
			String chafSkbtNo = JKKStringUtil.nullToBlank(juhenInfoSvcKei.getString(EKK2101B501CBSMsg1List.CHAF_SKBT_NO));
			// 住所変更がキャンセルされていない（住変中or確定済である）ことを確認
			if( !isJuhenCanceled(juhenInfoSvcKei) )
			{
				// 解約新規の旧側とサービス契約番号が一致することを確認
				if(!StringUtils.isEmpty(chbfSkbtNo) && !StringUtils.isEmpty(chafSkbtNo) && !chbfSkbtNo.equals(chafSkbtNo) && svcKeiNo.equals(chbfSkbtNo) )
				{
					kaisenServiceMap.put(NEW_SVC_KEI_NO, chafSkbtNo);
				}
			}
		}
		
		kaisenServiceMap.put(SVC_DSL_FLG, "");
		if(dslRsvInfo!=null)
		{
			String idoRsvStatCd = dslRsvInfo.getString(EKK1681B001CBSMsg1List.IDO_RSV_STAT_CD);
			if( JKKStrConst.CD01168_IDO_RSV_STAT_CD_00.equals(idoRsvStatCd) || JKKStrConst.CD01168_IDO_RSV_STAT_CD_03.equals(idoRsvStatCd) )
			{
				// 解約予約中の場合、"1（解約予約中）"
				kaisenServiceMap.put(SVC_DSL_FLG, FLG_RSV);
				
			} 
			else if( JKKStrConst.CD01168_IDO_RSV_STAT_CD_02.equals(idoRsvStatCd) )
			{
				// 解約予約キャンセルの場合、"9（解約キャンセル）"
				kaisenServiceMap.put(SVC_DSL_FLG, FLG_CANCELED);
				
			}
			else if( JKKStrConst.CD01168_IDO_RSV_STAT_CD_01.equals(idoRsvStatCd) )
			{
				// 解約確定の場合、"0（解約完了）"
				kaisenServiceMap.put(SVC_DSL_FLG, FLG_FIXED);
			}
		}
// ANK-3840-00-00対応 20200614 星野 ADD END
		//ANK4235-00-00 ADD START
		kaisenServiceMap.put(RSV_JOKYO, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.RSV_JYOKYO)));
		//ANK4235-00-00 ADD END
		// ANK-4577-00-00 ADD START
		kaisenServiceMap.put(NRKEMT_SVKEI_NO, JKKStringUtil.nullToBlank(ekk0251b507MsgList.getString(EKK0251B507CBSMsg1List.NRKEMT_SVKEI_NO)));
		// ANK-4577-00-00 ADD END
		return kaisenServiceMap;
	}

	/**
	 * 回線内サービス契約番号リスト（電気用）をマッピング
	 * 
	 * @param ekk0081b550MsgList サービス契約一覧照会（電気＿オペレータ支援）リスト
	 * @return kaisenServiceMap
	 */
	public static Map<String, Object> setKaisenServiceEleMap(CAANMsg ekk0081b550MsgList)
	{
		Map<String, Object> kaisenServiceMap =  new HashMap<String, Object>();
		
		// 回線内サービス契約番号リスト
		kaisenServiceMap.put(RES_PARAM_SVC_KEI_NO, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.SVC_KEI_NO)));
		kaisenServiceMap.put(RES_PARAM_SVC_KEI_STAT, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.SVC_KEI_STAT)));
		kaisenServiceMap.put(RES_PARAM_SVC_CD, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.SVC_CD)));
		kaisenServiceMap.put(RES_PARAM_SVC_NM, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.SVC_NM)));
		kaisenServiceMap.put(RES_PARAM_SEIRI_NO, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.SEIRI_NO)));
		kaisenServiceMap.put(RES_PARAM_PRC_GRP_CD, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.PRC_GRP_CD)));
		kaisenServiceMap.put(RES_PARAM_PRC_GRP_NM, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.PRC_GRP_NM)));
		kaisenServiceMap.put(RES_PARAM_PCRS_CD, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.PCRS_CD)));
		kaisenServiceMap.put(RES_PARAM_PCRS_NM, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.PCRS_NM)));
		kaisenServiceMap.put(RES_PARAM_SVC_STA_YMD, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.SVC_STA_YMD)));
		kaisenServiceMap.put(RES_PARAM_SVC_END_YMD, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.SVC_END_YMD)));
		// ANK-3758-00-00 ADD START
		kaisenServiceMap.put(RES_PARAM_SVC_DSL_KISAN_YMD, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.SVC_DSL_KISAN_YMD)));
		kaisenServiceMap.put(RES_PARAM_SVC_DSL_YMD, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.SVC_DSL_YMD)));
		kaisenServiceMap.put(RES_PARAM_SVC_DLRE_CD, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.SVC_DLRE_CD)));
		// ANK-3758-00-00 ADD END
		kaisenServiceMap.put(RES_PARAM_KOJIAK_NO, "");
		kaisenServiceMap.put(RES_PARAM_KOJIAK_SBT_CD, "");
		kaisenServiceMap.put(RES_PARAM_MANSION_BUKKEN_CD, "");
		kaisenServiceMap.put(RES_PARAM_MANSION_ID, "");
		kaisenServiceMap.put(RES_PARAM_CATID, "");
		kaisenServiceMap.put(RES_PARAM_SEIKY_KEI_NO, JKKStringUtil.nullToBlank(ekk0081b550MsgList.getString(EKK0251B507CBSMsg1List.SEIKY_KEI_NO)));

		return kaisenServiceMap;
	}


	/**
	 * SC(サービスインターフェイス）を呼び出します。
	 * @param handle セッションハンドル
	 * @param scCall SC呼び出し部品
	 * @param param リクエストパラメータ
	 * @param dataMapKey パラメータキー
	 * @param mappingData マッピングデータ
	 * @return サービスインターフェイス実行結果
	 * @throws Throwable 例外が発生した場合
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle, 
							ServiceComponentRequestInvoker scCall, 
							IRequestParameterReadWrite param, 
							String dataMapKey,
							Object[][] mappingData) throws Throwable
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);

		Map<?, ?> result = scCall.run(paramMap, handle);

		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);

		CAANMsg msg = templates[0];

		// リターンコード取得
		Object RETURN_CODE = result.get(JCMConstants.RET_CD_INT_KEY);

		int status = msg.getInt(JCMConstants.STATUS_INT_KEY);

		editErrorInfoCom(param, templates, (Integer)RETURN_CODE, dataMapKey);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);

		if (null == errList)
		{
			errList = new ArrayList<Object>();
		}

		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(RETURN_CODE.toString()) && 0 == status))
		{
			throw new SCCallException("戻り値不正", RETURN_CODE.toString(), status);
		}

		return msg;
	}

	/**
	 * 共通項目のメッセージを作成します。
	 * @param param リクエストパラメータ
	 * @param mappingData マッピングデータ
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
												Object[][] mappingData) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());

		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());

		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());

		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));

		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));

		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));

		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		String svcIf = (String)mappingData[0][1];

		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));

		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));

		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if (mappingData[i][1] instanceof CAANMsg[])
			{
				template.set((String)mappingData[i][0], (CAANMsg[])mappingData[i][1]);
			}
			else
			{
				if ("".equals(mappingData[i][1]))
				{
					template.setNull((String)mappingData[i][0]);
				}
				else
				{
					template.set((String)mappingData[i][0], mappingData[i][1]);
				}
			}
		}

		CAANMsg[] templates = new CAANMsg[1];

		templates[0] = template;

		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);

		return paramMap;
	}

	/**
	 * エラー情報を取得します。
	 * @param param リクエストパラメータ
	 * @param templates CAANMsgクラス
	 * @param errorCode リターンコード
	 * @param dataMapKey パラメータキー
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException リクエストパラメータの操作でエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param,
														CAANMsg[] templates, 
														int errorCode,
														String dataMapKey) throws RequestParameterException
	{
		CAANMsg template = templates[0];

		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (0 != errorCode)
		{
			templateStatus = 9000;
		}

		if (null == JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + String.format(RETURN_MESSAGE_FORMAT, templateStatus)))
		{
			templateStatus = 0;
		}

		int bpStatus = 0;

		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		if (null == obj)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format(RETURN_MESSAGE_FORMAT, templateStatus);
			
			String message = JCMAPLConstMgr.getString(RETURN_MESSAGE_STRING + formatStatus);
			
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		// ユーザデータ情報
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(dataMapKey);

		HashMap map = template.getHashMap();
		Iterator it = map.keySet().iterator();
		while (it.hasNext())
		{
			String key = (String)it.next();
			Object value = map.get(key);
			if (value instanceof HashMap[])
			{
				HashMap[] childMapList = (HashMap[])value;
				for (HashMap childMap : childMapList)
				{
					Iterator childIt = childMap.keySet().iterator();
					while (childIt.hasNext())
					{
						String childKey = (String)childIt.next();
						if (childKey.endsWith(ERRITEM_SUFFIX))
						{
							int keyIdx = childKey.lastIndexOf(ERRITEM_SUFFIX);
							if (inMap.containsKey(childKey.substring(0, keyIdx)))
							{
								inMap.put(childKey, childMap.get(childKey));
							}
						}
					}
				}
			}
			else
			{
				if (key.endsWith(ERRITEM_SUFFIX))
				{
					int keyIdx = key.lastIndexOf(ERRITEM_SUFFIX);
					if (inMap.containsKey(key.substring(0, keyIdx)))
					{
						inMap.put(key, map.get(key));
					}
				}
			}
		}

		return param;
	}

	/**
	 * 単項目チェックの必須エラーマップ作成メソッドです。
	 * 
	 * @return returnMap
	 */
	public static Map<String, String> getReqErrInfMap()
	{
		Map<String, String> returnMap = new HashMap<String, String>();
		
		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1001);
		returnMap.put(ERROR_MESSAGE, "");
		
		return returnMap;
	}
	
	/**
	 * 単項目チェックの属性エラーマップ作成メソッドです。
	 * 
	 * @return returnMap
	 */
	public static Map<String, String> getFormErrInfMap()
	{
		Map<String, String> returnMap = new HashMap<String, String>();
		
		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1002);
		returnMap.put(ERROR_MESSAGE, "");
		
		return returnMap;
	}
	
	/**
	 * 単項目チェックの桁数エラーマップ作成メソッドです。
	 * 
	 * @return returnMap
	 */
	public static Map<String, String> getLenErrInfMap()
	{
		Map<String, String> returnMap = new HashMap<String, String>();
		
		returnMap.put(ERROR_CODE, JKKStrConst.RETURN_CD_1003);
		returnMap.put(ERROR_MESSAGE, "");
		
		return returnMap;
	}

// ANK-3989-00-00 ADD START
	/**
	 * 業務パラメータ一意照会検索
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param scCall SC呼出部品のインスタンス
	 * @param key_work_param_id 業務パラメータ検索対象ID
	 * @return workParamSetteValue 業務パラメータ設定値
	 * @throws Throwable SC実行時の例外
	 */
	private String getEZM0321A010(SessionHandle handle, 
			IRequestParameterReadWrite param, 
			ServiceComponentRequestInvoker scCall,
			String fixedText,
			String key_work_param_id
			) 
	throws Throwable
	{
		CAANMsg template = null;

		//業務パラメータ設定値
		String workParamSetteValue = "";

		// 業務パラメータ一意照会の検索パラメータを設定
		Object[][] ezm0321a010IN = {
				{EZM0321A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EZM0321A010}
				// 機能コード
				, {EZM0321A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1}
				// 検索業務パラメータID
				,{EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, key_work_param_id}
			};

		// ◇ SC呼出実行
		CAANMsg[] ezm0321a010MsgList = callSC(handle, scCall, param, fixedText, ezm0321a010IN).getCAANMsgList(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);

		if (ezm0321a010MsgList != null && 0 < ezm0321a010MsgList.length)
		{
			template = ezm0321a010MsgList[0];
			// 業務パラメータ設定値取得
			workParamSetteValue = template.getString(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
		}
		return workParamSetteValue;
	}
	
	/**
	 * 業務パラメータ一意照会検索パラメータ取得
	 * 
	 * @param tonai_speed_judge_ret 棟内速度判定結果
	 * @return workParamSetteValue 業務パラメータ検索値
	 */
	private Map<String, Object> getWorkParamId(String tonai_speed_judge_ret) 
	{
		Map<String, Object> searchWorkId = new HashMap<String, Object>();
		// 棟内速度判定結果より業務パラメータ検索値を取得する。
		if (TONAI_SPEED_JUDGE_RET_1G.equals(tonai_speed_judge_ret)) 
		{
			searchWorkId.put(KEY_PCRS_CD, KK_MANS_C_PCRSCD_01);
			searchWorkId.put(KEY_PCRS_NM, KK_MANS_C_PCRSNM_01);
			searchWorkId.put(KEY_PPLAN_CD, KK_MANS_C_PPLANCD_01);
			searchWorkId.put(KEY_PPLAN_NM, KK_MANS_C_PPLANNM_01);
		}
		else if(TONAI_SPEED_JUDGE_RET_5G.equals(tonai_speed_judge_ret))
		{
			searchWorkId.put(KEY_PCRS_CD, KK_MANS_C_PCRSCD_02);
			searchWorkId.put(KEY_PCRS_NM, KK_MANS_C_PCRSNM_02);
			searchWorkId.put(KEY_PPLAN_CD, KK_MANS_C_PPLANCD_02);
			searchWorkId.put(KEY_PPLAN_NM, KK_MANS_C_PPLANNM_02);
		}
		else if(TONAI_SPEED_JUDGE_RET_10G.equals(tonai_speed_judge_ret))
		{
			searchWorkId.put(KEY_PCRS_CD, KK_MANS_C_PCRSCD_03);
			searchWorkId.put(KEY_PCRS_NM, KK_MANS_C_PCRSNM_03);
			searchWorkId.put(KEY_PPLAN_CD, KK_MANS_C_PPLANCD_03);
			searchWorkId.put(KEY_PPLAN_NM, KK_MANS_C_PPLANNM_03);
		}
		// ANK-4244-00-00 ADD START
		else if(TONAI_SPEED_JUDGE_RET_HHS_1G.equals(tonai_speed_judge_ret))
		{
			searchWorkId.put(KEY_PCRS_CD, KK_MANS_PCRSCD_01);
			searchWorkId.put(KEY_PCRS_NM, KK_MANS_PCRSNM_01);
			searchWorkId.put(KEY_PPLAN_CD, KK_MANS_PPLANCD_01);
			searchWorkId.put(KEY_PPLAN_NM, KK_MANS_PPLANNM_01);
		}
		else if(TONAI_SPEED_JUDGE_RET_HHS_5G.equals(tonai_speed_judge_ret))
		{
			searchWorkId.put(KEY_PCRS_CD, KK_MANS_PCRSCD_02);
			searchWorkId.put(KEY_PCRS_NM, KK_MANS_PCRSNM_02);
			searchWorkId.put(KEY_PPLAN_CD, KK_MANS_PPLANCD_02);
			searchWorkId.put(KEY_PPLAN_NM, KK_MANS_PPLANNM_02);
		}
		else if(TONAI_SPEED_JUDGE_RET_HHS_10G.equals(tonai_speed_judge_ret))
		{
			searchWorkId.put(KEY_PCRS_CD, KK_MANS_PCRSCD_03);
			searchWorkId.put(KEY_PCRS_NM, KK_MANS_PCRSNM_03);
			searchWorkId.put(KEY_PPLAN_CD, KK_MANS_PPLANCD_03);
			searchWorkId.put(KEY_PPLAN_NM, KK_MANS_PPLANNM_03);
		}
		// ANK-4244-00-00 ADD END
		
		return searchWorkId;
	}
// ANK-3989-00-00 ADD END
}
