/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JCKCustAddBnktUpdCC
*	ソースファイル名：JCKCustAddBnktUpdCC.java
*	作成者			：FJ
*	日付			：2012年12月10日
*＜機能概要＞
*	お客様分割処理の共通コンポーネント
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/12/10	FJ)庭山		【IT1-2012-0002197】対応
*	v4.00.01	2012/12/21	FJ)庭山		【IT1-2012-0002534】対応
*	v4.00.02	2012/12/23	FJ)庭山		【IT1-2012-0002546】対応
*	v4.00.03	2012/12/28	FJ)庭山		【IT1-2012-0002602】対応
*	v4.00.04	2012/12/28	FJ)庭山		【IT1-2012-0002610】対応
*	v4.00.05	2013/02/05	FJ)稲岡		【ST2-2013-0000514】対応
*	v4.00.06	2013/02/13	FJ)稲岡		【ST2-2013-0000670】対応
*	v4.00.07	2013/03/02	FJ)宇野		【OT-2013-0000292】対応
*	v4.00.08	2013/03/12	FJ)磯俣		【ST2-2013-0000439】支払方法更新処理を呼ばない
*	v4.00.09	2013/03/15	FJ)宇野		【IT1-2013-0000477】対応
*	v4.00.10	2013/03/20	FJ)稲岡		【IT1-2013-0000540】対応
*	v4.00.11	2013/03/22	FJ)稲岡		【IT1-2013-0000576】対応
*	v4.00.12	2013/04/04	FJ)稲岡		【IT1-2013-0000770】対応
*	v4.00.13	2013/04/27	FJ)稲岡		【IT1-2013-0001077】対応
*	v4.00.14	2013/05/30	FJ)宇野		【IT1-2013-0001246】対応
*	v5.00.00	2013/07/05	FJ)馬場		【IT1-2013-0001327】対応
*	v5.00.01	2013/07/08	FJ)馬場		【IT2-2013-0000600】対応
*	v5.00.02	2013/07/10	FJ)磯俣		【TG1-2013-0000658】プラン終了種別コードを削除
*	v5.00.03	2013/09/26	FJ)稲岡		【OM-2013-0001961】対応
*	v5.00.04	2013/10/14	FJ)稲岡		【OM-2013-0003150】対応
*	v8.00.00	2013/12/14	FJ)稲岡		【ANK-1584-00-00】対応 L2-MVNO(本体)
*	v8.00.01	2014/01/06	FJ)石橋		【ANK-1589-00-00】対応
*	v8.00.02	2014/02/20	FJ)磯俣		【IT2-2014-0000126】請求オプション解約条件にＭＶＮＯ追加
*	v8.00.03	2014/06/03	FJ)磯俣		【OM-2014-0002009】課金終了日の編集方法変更
*	v11.00.00	2014/10/25	FJ)舩橋		【ANK-2248-00-00】対応
*	v11.00.01	2014/11/19	FJ)山下		【OM-2014-0003310】対応
*	v16.00.00	2015/05/15	FJ)頼経		【ANK-2480-00-00】対応 新電力
*	v29.00.00	2017/05/15	FJ)クウン	【IT1-2017-0000042】対応
*   v39.00.00	2018/09/02	FJ)澤田		【ANK-3458-00-00】契約者氏名変更時の副次処理を追加（緊急通報氏名の更新）
*	v45.00.00	2019/08/01  FJ)星野		【ANK-3699-00-00】
*   v46.00.00   2019/10/17  FJ)星野      ANK-3752-00-00
*   v50.00.00   2020/08/05  FJ)吉田     【OM-2020-0000919】契約者名/カナを変更していないのにフェムトセル異動通知が登録される
*   v73.00.00	2024/12/03  FJ)辻中     【ANK-4427-00-00】NTT卸対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;


import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.KKSV0313_KKSV0313OP_WORK;
import com.fujitsu.futurity.bp.custom.constant.KKSV0313_KKSV0313OP_WORK_SVC_KEI;
import com.fujitsu.futurity.bp.custom.constant.KKSV0313_KKSV0313OP_WORK_SVC_KEI_GRP;
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.CCException;
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.rule.common.JRuleXMLHandler;
import com.fujitsu.futurity.rule.xml.compare.JRuleXMLPattern;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JCKStrConst;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.common.util.JKKWrisvcDchskmCommonUtil;
import eo.common.util.JPCDateUtil;
import eo.common.util.JPCUtilCommon;
import eo.ejb.cbs.cbsmsg.ECH0501B010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECH0501B010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0151D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081C250CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0111C080CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321B502CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B502CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321C020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0441B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0441B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0441C210CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0441C230CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0441C240CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0491D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1021D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2821C050CBSMsg;

/**
 * お客様分割共通部品。<p>
 * <BR>
 * @author 富士通
 */
public class JCKCustAddBnktUpdCC extends AbstractCommonComponent
{
	/** 申込内容承認登録 */
	private static final String TEMPLATE_ID_EKK0011D020 = "EKK0011D020";
	/** 申込明細照査・後続業務依頼 */
	private static final String TEMPLATE_ID_EKK0021C060 = "EKK0021C060";
	/** サービス契約お客様変更 */
	private static final String TEMPLATE_ID_EKK0081C250 = "EKK0081C250";
// ANK-3699-00-00対応 20190801 星野 ADD START
	/** サービス契約＜eo光電話＞譲渡情報変更 */
	private static final String TEMPLATE_ID_EKK0111C080 = "EKK0111C080";
// ANK-3699-00-00対応 20190801 星野 ADD END	
// ANK-3752-00-00対応 20191018 星野 ADD START
	/** サービス契約＜mineo＞譲渡情報変更 */
	private static final String TEMPLATE_ID_EKK2821C050 = "EKK2821C050";
// ANK-3752-00-00対応 20191018 星野 ADD END
	/** 一時金設定登録 */
	private static final String TEMPLATE_ID_EKK1021D010 = "EKK1021D010";
	
	/** 請求契約登録 */
	private static final String TEMPLATE_ID_EKK0491D010 = "EKK0491D010";
	/** 課金先一覧照会（請求契約番号） */
	private static final String TEMPLATE_ID_EKK0321B502 = "EKK0321B502";
	/** 課金先請求契約変更 */
	private static final String TEMPLATE_ID_EKK0321C020 = "EKK0321C020";
	/** 請求契約一意照会 */
	private static final String TEMPLATE_ID_EKK0491A010 = "EKK0491A010";
	/** 課金先一覧照会（請求契約番号/サービス契約番号） */
	private static final String TEMPLATE_ID_EKK0321B002 = "EKK0321B002";
	/** 請求オプションサービス契約一覧照会（複合検索） */
	private static final String TEMPLATE_ID_EKK0441B002 = "EKK0441B002";
	/** 料金スケジュール定義イベント一覧照会 */
	private static final String TEMPLATE_ID_ECH0501B010 = "ECH0501B010";
	/** 請求オプションサービス契約キャンセル */
	private static final String TEMPLATE_ID_EKK0441C210 = "EKK0441C210";
	/** 請求オプションサービス契約解約 */
	private static final String TEMPLATE_ID_EKK0441C230 = "EKK0441C230";
	/** 請求オプションサービス契約解約確定 */
	private static final String TEMPLATE_ID_EKK0441C240 = "EKK0441C240";
	
/* ++++++++++ v4.00.08 削除開始 ++++++++++ */
//	/** 支払方法入力支援一覧照会 */
//	private static final String TEMPLATE_ID_ECN0131B006 = "ECN0131B006";
//	/** 支払方法入力支援更新 */
//	private static final String TEMPLATE_ID_ECN0131C010 = "ECN0131C010";
//	/** 支払方法入力支援削除 */
//	private static final String TEMPLATE_ID_ECN0131E010 = "ECN0131E010";
//	/** 督促一意照会 */
//	private static final String TEMPLATE_ID_ECH0231A010 = "ECH0231A010";
/* ++++++++++ v4.00.08 削除開始 ++++++++++ */
	
	// OM-2020-0000919 ADD START
	/** お客様一意照会 */
	private static final String TEMPLATE_ID_ECK0011A010 = "ECK0011A010";
	// OM-2020-0000919 ADD END
	
	/** 進捗登録 */
	private static final String TEMPLATE_ID_EKK1091D010 = "EKK1091D010";
	/** 指示書登録 */
	private static final String TEMPLATE_ID_ECK0151D010 = "ECK0151D010";
	
/* ++++++++++ v4.00.09 追加開始 ++++++++++ */
	/** サービス契約一意照会 */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	/** サービスコード（指示書用） */
	private static final String SVC_CD_00000 = "00000";
	/** 識別コード（指示書用） */
	private static final String SBT_CD_00 = "00";
/* ++++++++++ v4.00.09 追加終了 ++++++++++ */
	
	/** 業務パラメータ管理一意照会 */
	private static final String TEMPLATE_ID_EZM0321A010 = "EZM0321A010";
	/** 業務パラメータ 取得Key */
	private static final String WORK_PARAM_ID = "KK_KEI_JOTO_PAY_PRC2";
	
	/** 異動区分（請求契約分割） */
	private static final String IDO_DIV_VALUE_00017 = "00017";
	/** 指示書設定値:課金先.課金先適用終了年月日 */
	private static final String KAKINS_TEND_YMD = "20991231";
	
/* ++++++++++ v4.00.11 追加開始 ++++++++++ */
	/** FIXED KEY */
	private static final String FIXED_KEY_KOJIAK_UPD_CC = "KojiakUpdCC";
/* ++++++++++ v4.00.11 追加終了 ++++++++++ */
	
	/** 要否（否） */
	private static final String KH_FAIL = "0";
	/** サービスキャンセル理由コード（01:申出によるキャンセル） */
	public static final String SVC_CNCL_RSN_CD_VALUE_01 = "01";
	/** サービス解約理由コード（01:通常解約） */
	public static final String SVC_DLRE_RSN_CD_VALUE_01 = "01";
	/** プラン終了種別コード（2:解約による終了） */
	public static final String PLAN_END_SBT_CD_VALUE_2 = "2";
	
	/** 料金グループコード(マンション・オーナー) */
	private static final String PRC_GRP_CD_MANS_OWNR = "99";
	
	/** 請求オプションサービス契約ステータス 受付済 */
	private static final String SEIOP_SVC_KEI_STAT_UK_ZM = "010";
	/** 請求オプションサービス契約ステータス 照査済 */
	private static final String SEIOP_SVC_KEI_STAT_SHOSA_ZM = "020";
	/** 請求オプションサービス契約ステータス 解約済 */
	private static final String SEIOP_SVC_KEI_STAT_DSL_ZM = "910";
	/** 請求オプションサービス契約ステータス キャンセル済 */
	private static final String SEIOP_SVC_KEI_STAT_CANCEL_ZM = "920";
	
/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
	/** サービスコード ＭＶＮＯサービス契約 */
	public static final String SVC_CD_MVNO = "51";
/* ++++++++++ v8.00.00 追加終了 ++++++++++ */
	
	/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
	/** ルール定義（XMLファイル）格納パス */
	public static String XML_PATH = "SOKAN_CHECK_XML_PATH";
	/**  */
	public static String PARAM_IDO_DIV = "00012";
	/**  */
	public static String PARAM_MSKM_PRC_GRP_CD = "10";
	/**  */
	public static String PARAM_IDO_RSN_CD = "N0";
	/* ++++++++++ v8.00.01 追加終了 ++++++++++ */

	// ANK-2248-00-00 ADD START
	/** 請求オプションサービス契約 料金コースコード：NHK団体一括契約 */
	private static final String SEIOP_SVC_KEI_PCRS_CD_NHK = "E02";

	/** 請求オプションサービス契約 料金プランコード：NHK団体一括契約 */
	private static final String SEIOP_SVC_KEI_PPLAN_CD_NHK = "PE0201";
	// ANK-2248-00-00 ADD END

	/**
	 * お客様分割の共通処理をする。
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite execute(SessionHandle handle,
												IRequestParameterReadWrite param,
												String fixedText) throws Throwable
	{
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(fixedText);
		String funcCd = (String)ccMsg.get(JCMConstants.FUNC_CODE_KEY);
		String motoSysid = (String)ccMsg.get("sysid");
		String svcKeiNo = (String)ccMsg.get("svc_kei_no");
		String idoDiv = (String)ccMsg.get("ido_div");
		String rsvAplyYmd = (String)ccMsg.get("rsv_aply_ymd");
		boolean bnktFlg = (Boolean)ccMsg.get("bnkt_flg");
		boolean rsvAplyFlg = (Boolean)ccMsg.get("rsv_aply_flg");
		
		Map workMap = param.getMappingWorkArea();
		HashMap workDataMap = (HashMap)workMap.get("WORK");
		String sysid = (String)workDataMap.get("sysid");
		
		CAANMsg seikyMsg = null;
		String prgDtm = null;
		
		// SC呼び出し部品のインスタンス生成
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// 申込内容承認登録
		HashMap mskmMap = (HashMap)ccMsg.get("EKK0011");
		Object[][] ekk0011d020In = {{EKK0011D020CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0011D020},
									{EKK0011D020CBSMsg.FUNC_CODE, funcCd},
									{EKK0011D020CBSMsg.SYSID, sysid},
									{EKK0011D020CBSMsg.MSKM_SBT_CD, mskmMap.get("mskm_sbt_cd")},
									{EKK0011D020CBSMsg.MSKM_UK_DTM, mskmMap.get("mskm_uk_dtm")},
									{EKK0011D020CBSMsg.MSKM_YMD, mskmMap.get("mskm_ymd")},
									{EKK0011D020CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD, mskmMap.get("consmbsn_mskm_stat_skbt_cd")},
									{EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST, mskmMap.get("EKK0011D020CBSMsg1List")}};
		
		CAANMsg ekk0011d020Out = callSC(handle, scCall, param, fixedText, ekk0011d020In);
		CAANMsg[] ekk0011d020OutList = ekk0011d020Out.getCAANMsgList(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);
		String mskmNo = ekk0011d020Out.getString(EKK0011D020CBSMsg.MSKM_NO);
		String mskmDtlNo = ekk0011d020OutList[0].getString(EKK0011D020CBSMsg1List.MSKM_DTL_NO);
		
		// サービス契約お客様変更
		HashMap inMap = (HashMap)ccMsg.get("EKK0081");
		Object[][] ekk0081c250In = {{EKK0081C250CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081C250},
									{EKK0081C250CBSMsg.FUNC_CODE, funcCd},
									{EKK0081C250CBSMsg.SVC_KEI_NO, svcKeiNo},
									{EKK0081C250CBSMsg.SYSID, sysid},
									{EKK0081C250CBSMsg.MSKM_DTL_NO, mskmDtlNo},
									{EKK0081C250CBSMsg.RSV_APLY_YMD, rsvAplyYmd},
									{EKK0081C250CBSMsg.IDO_DIV, idoDiv},
									{EKK0081C250CBSMsg.UPD_DTM_BF, ccMsg.get("upd_dtm_bf")},
									{EKK0081C250CBSMsg.IDO_RSN_CD, ccMsg.get("ido_rsn_cd")},
									{EKK0081C250CBSMsg.RULE0059_AUTO_APLY, inMap.get("rule0059_auto_aply")}};
		
		CAANMsg ekk0081c250Out = callSC(handle, scCall, param, fixedText, ekk0081c250In);
		
/* ++++++++++ v4.00.09 追加開始 ++++++++++ */
		// 分割元情報作成
		workDataMap.put("sj_mt_sys_id", motoSysid);	// 分割元＿SYSID
		
		// 分割先情報作成
		workDataMap.put("sj_svc_kei_no", svcKeiNo);	// サービス契約番号
		workDataMap.put("sj_sk_sys_id", sysid);		// 分割先＿SYSID
		
		workDataMap.put("sj_add_dtm", ekk0081c250Out.getString(EKK0081C250CBSMsg.ADD_DTM));			// 登録年月日時分秒
		workDataMap.put("sj_add_opeacnt", ekk0081c250Out.getString(EKK0081C250CBSMsg.ADD_OPEACNT));	// 登録オペレータアカウント
		workDataMap.put("sj_upd_dtm", ekk0081c250Out.getString(EKK0081C250CBSMsg.UPD_DTM));			// 更新年月日時分秒
		workDataMap.put("sj_upd_opeacnt", ekk0081c250Out.getString(EKK0081C250CBSMsg.UPD_OPEACNT));	// 更新オペレータアカウント
		
		// 照査年月日、サービスコードを取得する
		Object[][] ekk0081a010In = {{EKK0081A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081A010},
				{EKK0081A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2},
				{EKK0081A010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo},
				{EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, rsvAplyYmd}};
		
		// サービス契約一意照会を実行する
		CAANMsg[] ekk81a010Out = callSC(handle, scCall, param, fixedText, ekk0081a010In).getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		
		String shosa_ymd = ekk81a010Out[0].getString(EKK0081A010CBSMsg1List.SHOSA_YMD);
		workDataMap.put("sj_shosa_ymd", shosa_ymd);														// 照査年月日
		workDataMap.put("sj_svc_cd", ekk81a010Out[0].getString(EKK0081A010CBSMsg1List.SVC_CD));			// サービスコード
		workDataMap.put("sj_pcrs_cd", ekk81a010Out[0].getString(EKK0081A010CBSMsg1List.PCRS_CD));		// 料金コースコード
		workDataMap.put("sj_pplan_cd", ekk81a010Out[0].getString(EKK0081A010CBSMsg1List.PPLAN_CD));		// 料金プランコード
		workDataMap.put("sj_prc_grp_cd", ekk81a010Out[0].getString(EKK0081A010CBSMsg1List.PRC_GRP_CD));	// 料金グループコード
		
		// 【ANK-4427-00-00】NTT卸対応 ADD START
		String nttOrsDiv =  ekk81a010Out[0].getString(EKK0081A010CBSMsg1List.NTTORS_DIV);
		// 【ANK-4427-00-00】NTT卸対応 ADD END
/* ++++++++++ v4.00.09 追加終了 ++++++++++ */
		
// ANK-3699-00-00対応 20190801 星野 ADD START
		// 実行時のみ
		if(JPCModelConstant.FUNC_CD_1.equals(funcCd))
		{
			// 予約の場合は未実行
			if (rsvAplyFlg)
			{
				String lastUpdDtm = ekk0081c250Out.getString(EKK0081C250CBSMsg.UPD_DTM);
				// 譲渡年月日を更新する
				updateJotoYmd(handle, scCall, param, fixedText, funcCd, svcKeiNo, mskmDtlNo, idoDiv, lastUpdDtm, ccMsg);
			}
		}
// ANK-3699-00-00対応 20190801 星野 ADD END

		
		// 請求先同時分割の場合
		if (bnktFlg)
		{
			// 請求契約登録
			// 課金先請求契約変更
			seikyMsg = callSeikyKei(handle, scCall, param, fixedText, funcCd, sysid, mskmDtlNo, svcKeiNo, rsvAplyYmd, idoDiv, ccMsg);
		}
		
		// 当画面では処理しないため削除 IT1-2013-0000439
		// 支払方法更新処理
//		callPayway(handle, scCall, param, fixedText, funcCd, motoSysid, svcKeiNo, rsvAplyYmd, ccMsg, rsvAplyFlg);
		
		// 予約の場合は未実行
		if (rsvAplyFlg)
		{
			if ((Boolean)ccMsg.get("koji_exec_flg"))
			{
				// 【ANK-4427-00-00】NTT卸対応 ADD START
				if (JKKStringUtil.isNullEmpty(nttOrsDiv)){
				// 【ANK-4427-00-00】NTT卸対応 ADD END
					// 工事諸変更処理
					callKojiak(handle, param, sysid, mskmDtlNo, ccMsg);
				// 【ANK-4427-00-00】NTT卸対応 ADD START
				}
				// 【ANK-4427-00-00】NTT卸対応 ADD END
			}
			
/* ++++++++++ v4.00.12 変更開始 ++++++++++ */
			// 指示書登録処理
			inMap = (HashMap)ccMsg.get("ECK0151");
			
			// 指示書登録の実行判定
			if (isSjishoAdd(handle, param, inMap))
			{
				// 分割元の指示書登録
				Object[][] eck0151d010In = setECK0151D010Moto(inMap, motoSysid, svcKeiNo, shosa_ymd, rsvAplyYmd, ekk0081c250Out);
				CAANMsg eck0151d010Out = callSC(handle, scCall, param, fixedText, eck0151d010In);
				
				// 分割先の指示書登録
				eck0151d010In = setECK0151D010Saki(sysid, svcKeiNo, rsvAplyYmd, inMap, ekk0081c250Out);
				eck0151d010Out = callSC(handle, scCall, param, fixedText, eck0151d010In);
				
				// 請求先同時分割の場合
				if (bnktFlg)
				{
					// 請求契約の指示書登録
					eck0151d010In = setECK0151D010Seiky(sysid, svcKeiNo, seikyMsg);
					eck0151d010Out = callSC(handle, scCall, param, fixedText, eck0151d010In);
				}
				
				/* ++++++++++ v4.00.09 追加開始 ++++++++++ */
				//指示書登録(F回線契約に紐づく各種サービス契約の情報)処理
				JCKKisnKeiHmdkShijiAddCC kisnKeiHmdkShijiAddCC = new JCKKisnKeiHmdkShijiAddCC();
				kisnKeiHmdkShijiAddCC.execMakeSjisho(handle, param, "JCKKisnKeiHmdkShijiAddCC");
				/* ++++++++++ v4.00.09 追加終了 ++++++++++ */
			}
/* ++++++++++ v4.00.12 変更終了 ++++++++++ */
			
			// 進捗登録処理
			inMap = (HashMap)ccMsg.get("EKK1091");
			String seikyKeiNo = "";
			String stat = (String)inMap.get("prg_stat");
			
			// 請求先同時分割の場合
			if (bnktFlg)
			{
				seikyKeiNo = (String)inMap.get("seiky_kei_no");
			}
			
			/* ++++++++++ v4.00.07 追加開始 ++++++++++ */
			String prgtkjk = "";
			
			// 分割元の進捗登録
			Object[][] ekk1091d010In = setEKK1091D010(inMap, funcCd, mskmDtlNo, seikyKeiNo, svcKeiNo, idoDiv, stat, "");
			/* ++++++++++ v4.00.07 追加開始 ++++++++++ */
			
			CAANMsg ekk1091d010Out = callSC(handle, scCall, param, fixedText, ekk1091d010In);
			prgDtm = ekk1091d010Out.getString(EKK1091D010CBSMsg.PRG_DTM);
			
			// 請求先同時分割の場合
			if (bnktFlg)
			{
				String idoDivSeikyBnktPrg = IDO_DIV_VALUE_00017;
				String statSeikyBnktPrg = (String)inMap.get("seiky_prg_stat");
				String seikyKeiNoOut = seikyMsg.getString(EKK0321C020CBSMsg.SEIKY_KEI_NO);
				
/* ++++++++++ v4.00.07 追加開始 ++++++++++ */
				// 特記事項の編集
				prgtkjk = "分割前請求先番号：" + seikyKeiNo;
				// 分割元請求先の進捗登録
				ekk1091d010In = setEKK1091D010(inMap, funcCd, mskmDtlNo, seikyKeiNo, svcKeiNo, idoDivSeikyBnktPrg, statSeikyBnktPrg, prgtkjk);
/* ++++++++++ v4.00.07 追加開始 ++++++++++ */
				
				ekk1091d010Out = callSC(handle, scCall, param, fixedText, ekk1091d010In);
				
				// 分割先請求先の進捗登録
/* ++++++++++ v4.00.07 追加開始 ++++++++++ */
				prgtkjk = "分割後請求先番号：" + seikyKeiNoOut;
				ekk1091d010In = setEKK1091D010(inMap, funcCd, mskmDtlNo, seikyKeiNoOut, svcKeiNo, idoDivSeikyBnktPrg, statSeikyBnktPrg, prgtkjk);
/* ++++++++++ v4.00.07 追加開始 ++++++++++ */
				ekk1091d010Out = callSC(handle, scCall, param, fixedText, ekk1091d010In);
			}
		}
		
		if ((Boolean)ccMsg.get("icjkn_exec_flg"))
		{
/* ++++++++++ v5.00.04 変更開始 ++++++++++ */
			inMap = (HashMap)ccMsg.get("EKK1021");
			
			// 一時支払料金番号(設定値)
			String setTmpPayPrcNo = "";
			
			// サービスコード = "01":ネット
			if(JCKStrConst.SVC_CD_NET.equals(inMap.get("svc_cd"))
			//---------v29.00.00 IT1-2017-0000042 ADD START---------//	
			// あるいはサービスコード = "51":MVNO(mineo)
				|| SVC_CD_MVNO.equals(inMap.get("svc_cd")))
			//---------v29.00.00 IT1-2017-0000042 ADD END-----------//
			{
				// 設定値:「010050046010」
				setTmpPayPrcNo = (String)inMap.get("tmp_pay_prc_no");
			}
			// サービスコード = "02":電話
			else
			{
				// 設定値:「010450246010」
				setTmpPayPrcNo = getTmpPayPrcNoForTel(handle, scCall,  param, fixedText);
			}
			
			// 一時金設定登録
			Object[][] ekk1021d010In = {{EKK1021D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1021D010},
										{EKK1021D010CBSMsg.FUNC_CODE, funcCd},
										{EKK1021D010CBSMsg.TMP_PAY_PRC_NO, setTmpPayPrcNo},
										{EKK1021D010CBSMsg.ICJKN_SETTE_CD, inMap.get("icjkn_sette_cd")},
										{EKK1021D010CBSMsg.ICJKN_SHITEI_AMNT, inMap.get("icjkn_shitei_amnt")},
										{EKK1021D010CBSMsg.SVC_KEI_NO, svcKeiNo},
										{EKK1021D010CBSMsg.MSKM_DTL_NO, mskmDtlNo},
										{EKK1021D010CBSMsg.FIN_STAT_CD, inMap.get("fin_stat_cd")}};
/* ++++++++++ v5.00.04 変更終了 ++++++++++ */
			CAANMsg ekk1021d010Out = callSC(handle, scCall, param, fixedText, ekk1021d010In);
		}
		
		// 予約の場合は未実行
		if (rsvAplyFlg)
		{
			// 割引サービス手動付替CC実行処理
			execWrisvcManAply(handle, param, sysid, motoSysid, ccMsg);
			
			// 割引サービス自動適用CC実行処理
			execWrisvcAutoAply(handle, param, funcCd, sysid, motoSysid, mskmNo, idoDiv, ccMsg, false);
			
			// 請求先同時分割の場合
			if (bnktFlg)
			{
				// 割引サービス自動適用CC実行処理（請求契約分割）
				execWrisvcAutoAply(handle, param, funcCd, sysid, motoSysid, mskmNo, idoDiv, ccMsg, true);
			}
			
			// OM-2020-0000919 ADD START
			// お客様一意照会
			Object[][] eck0011a010In = {{ECK0011A010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECK0011A010},
										{ECK0011A010CBSMsg.FUNC_CODE, "2"},
										{ECK0011A010CBSMsg.KEY_SYSID, ccMsg.get("sysid")},
										{ECK0011A010CBSMsg.KEY_RSV_APLY_YMD, ccMsg.get("ope_date")}};
			
			CAANMsg[] eck0011a010Out = callSC(handle, scCall, param, fixedText, eck0011a010In).getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST);
			String mtCustNm = "";
			String mtCustKana = "";
			
			if (eck0011a010Out != null && eck0011a010Out.length > 0)
			{
				mtCustNm = eck0011a010Out[0].getString(ECK0011A010CBSMsg1List.CUST_NM);		// お客様名
				mtCustKana = eck0011a010Out[0].getString(ECK0011A010CBSMsg1List.CUST_KANA);		// お客様カナ名
			}
			
			// 契約者名、契約者カナを取得
			String custNm = (String)ccMsg.get("keisha_nm");
			String custKana = (String)ccMsg.get("keisha_kana");
			if (!mtCustNm.equals(custNm) || !mtCustKana.equals(custKana))
			{
			// OM-2020-0000919 ADD END
				
				// フェムトセル異動情報登録CC実行処理
				HashMap fmtcelMap = new HashMap();
				
				fmtcelMap.put(JCMConstants.FUNC_CODE_KEY, funcCd);					// 機能コード
				fmtcelMap.put("sysid", sysid);										// 新規発番＿ＳＹＳＩＤ
				fmtcelMap.put("ido_div", idoDiv);									// 分割元異動区分
				fmtcelMap.put("fmtcel_ido_dtl_cd", JKKStrConst.CD01420_SHKV);		// フェムトセル異動詳細コード
				fmtcelMap.put("prg_dtm", prgDtm);									// 進捗年月日時分秒
				param.setData("JKKFmtcelIdoInfAdd", fmtcelMap);
				
				JKKFmtcelIdoInfAdd fmtcelIdoInfAdd = new JKKFmtcelIdoInfAdd();
				fmtcelIdoInfAdd.addFmtcelIdoInf(handle, param, fmtcelMap, "JKKFmtcelIdoInfAdd");
			// OM-2020-0000919 ADD START
			}
			// OM-2020-0000919 ADD END
		}
		
		// お客様退会共通CC実行処理
		HashMap taikaiMap = new HashMap();
		
		taikaiMap.put(JCMConstants.FUNC_CODE_KEY, funcCd);		// 機能コード
		taikaiMap.put("sysid", motoSysid);						// 分割元＿引継＿ＳＹＳＩＤ
		param.setData("JCKCustTaikaiCmnCC", taikaiMap);
		
		JCKCustTaikaiCmnCC custTaikaiCmnCC = new JCKCustTaikaiCmnCC();
		custTaikaiCmnCC.execute(handle, param, "JCKCustTaikaiCmnCC");
		
		// お客様回復共通CC実行処理
		HashMap kaifkMap = new HashMap();
		
		kaifkMap.put(JCMConstants.FUNC_CODE_KEY, funcCd);		// 機能コード
		kaifkMap.put("sysid", sysid);							// 新規発番＿ＳＹＳＩＤ
		kaifkMap.put("svc_kei_no", svcKeiNo);				// 分割元＿引継＿サービス契約番号
		param.setData("JCKCustKaihkCmnCC", kaifkMap);
		
		JCKCustKaihkCmnCC custKaihkCmnCC = new JCKCustKaihkCmnCC();
		custKaihkCmnCC.execute(handle, param, "JCKCustKaihkCmnCC");
		
		// 予約の場合は未実行
		if (rsvAplyFlg)
		{
			// 整理番号発番
			HashMap seiriNoMap = new HashMap();
			
			seiriNoMap.put(JCMConstants.FUNC_CODE_KEY, funcCd);		// 機能コード
			seiriNoMap.put("sysid", sysid);							// 新規発番＿ＳＹＳＩＤ
			seiriNoMap.put("svc_kei_no", svcKeiNo);					// 分割対象サービス契約番号
			param.setData("JKKSeiriNoHtbChgCC", seiriNoMap);
			
			JKKSeiriNoHtbChgCC seiriNoHtbChgCC = new JKKSeiriNoHtbChgCC();
			seiriNoHtbChgCC.seiriNoHtbChg(handle, param, "JKKSeiriNoHtbChgCC");
		}
		
		// 申込明細照査・後続業務依頼
		Object[][] ekk0021c060In = {{EKK0021C060CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0021C060},
									{EKK0021C060CBSMsg.FUNC_CODE, funcCd},
									{EKK0021C060CBSMsg.MSKM_DTL_NO, mskmDtlNo},
									{EKK0021C060CBSMsg.KZKWRK_REQYMD, mskmMap.get("mskm_ymd")},
									{EKK0021C060CBSMsg.UPD_DTM_BF, ekk0011d020Out.getString(EKK0011D020CBSMsg.UPD_DTM)},
									{EKK0021C060CBSMsg.IDO_DIV, idoDiv}};
		
		CAANMsg ekk0021c060Out = callSC(handle, scCall, param, fixedText, ekk0021c060In);
		
/* ++++++++++ v8.00.00 追加開始 ++++++++++ */
		// 予約の場合は未実行
		if (rsvAplyFlg)
		{
			// 実行時のみ
			if(JPCModelConstant.FUNC_CD_1.equals(funcCd))
			{
				// 分割対象サービスコード = "51":ＭＶＮＯサービス
				if(SVC_CD_MVNO.equals(ekk81a010Out[0].getString(EKK0081A010CBSMsg1List.SVC_CD)))
				{
					HashMap mvnoMap = new HashMap();
					
					mvnoMap.put("svc_kei_no", svcKeiNo);	// 分割対象サービス契約番号
					mvnoMap.put("sysid", sysid);			// 新規発番＿ＳＹＳＩＤ
					param.setData("JCKKMvnoSvcKeiUpdCC", mvnoMap);
					
					// MVNOサービス契約お客様変更CC実行
					JCKKMvnoSvcKeiUpdCC mvnoSvcKeiUpdCC = new JCKKMvnoSvcKeiUpdCC();
					mvnoSvcKeiUpdCC.execute(handle, param, "JCKKMvnoSvcKeiUpdCC");
				}
			}
		}
/* ++++++++++ v8.00.00 追加終了 ++++++++++ */
		
		// ANK-2480-00-00 ADD START
		// 予約の場合は未実行
		if (rsvAplyFlg)
		{
			String svc_cd = ekk81a010Out[0].getString(EKK0081A010CBSMsg1List.SVC_CD);
			
			// 分割対象サービスコード = "05":eo電気サービス
			if(JKKStrConst.CD00130_05.equals(svc_cd))
			{
				HashMap elecMap = new HashMap();
				
				elecMap.put("svc_kei_no", svcKeiNo);	// 分割対象サービス契約番号
				elecMap.put("sysid", sysid);			// 新規発番＿ＳＹＳＩＤ
				param.setData("JKKEoElecCustUpdCC", elecMap);
				
				// ｅｏ電気サービス契約お客様変更CC実行
				JKKEoElecCustUpdCC eoElecCustUpdCC = new JKKEoElecCustUpdCC();
				eoElecCustUpdCC.execute(handle, param, "JKKEoElecCustUpdCC");
			}
		}
		// ANK-2480-00-00 ADD END
		// ANK-3458-00-00 ADD START
		// 予約の場合は未実行
		if (rsvAplyFlg)
		{
			HashMap emgRrksNmUpdMap = new HashMap();
			
			emgRrksNmUpdMap.put("ido_div", idoDiv);	// 分割対象サービス契約番号
			emgRrksNmUpdMap.put("sysid", sysid);			// 新規発番＿ＳＹＳＩＤ
			emgRrksNmUpdMap.put("mskm_dtl_no", mskmDtlNo);			// 申込明細番号
			param.setData("JKKEmgRrksNmUpdCC", emgRrksNmUpdMap);
			
			// 緊急通報用契約者名・カナ名更新処理実行
			JKKEmgRrksNmUpdCC jkkEmgRrksNmUpdCC = new JKKEmgRrksNmUpdCC();
			jkkEmgRrksNmUpdCC.execute(handle, param, "JKKEmgRrksNmUpdCC");
		}
		// ANK-3458-00-00 ADD END
		
		return param;
	}

// ANK-3699-00-00対応 20190801 星野 ADD START
	/**
	 * 譲渡年月日を更新する
	 */
	private void updateJotoYmd(
		SessionHandle handle,
		ServiceComponentRequestInvoker scCall,
		IRequestParameterReadWrite param, 
		String fixedText, 
		String funcCd,
		String svcKeiNo, 
		String mskmDtlNo, 
		String idoDiv,
		String lastUpdDtm, 
		HashMap<String, Object> ccMsg
	) throws Exception 
	{
		
		String prcGrpCd = (String)ccMsg.get("tg_prc_grp_cd");
		String jotoKbn = (String)ccMsg.get("joto_kbn");
		String jotoYmd = (String)ccMsg.get("joto_ymd");
		
// ANK-3752-00-00対応 20191018 星野 DEL START
//		// 料金グループコードが「eo光電話」以外は処理対象外
//		if(!JCKStrConst.PRC_GRP_CD_EOH_TEL.equals(prcGrpCd))
//		{
//			return;
//		}
// ANK-3752-00-00対応 20191018 星野 DEL END
		
		// 譲渡区分に入力がなければ処理対象外
		if( StringUtils.isEmpty(jotoKbn) )
		{
			return;
		}
		
// ANK-3752-00-00対応 20191018 星野 ADD START
		// 料金グループコードが「eo光電話」の場合
		if( JCKStrConst.PRC_GRP_CD_EOH_TEL.equals(prcGrpCd) )
		{
// ANK-3752-00-00対応 20191018 星野 ADD END
			// 譲渡年月日を反映する
			// サービス契約＜eo光電話＞譲渡情報変更
			Object[][] ekk0111c080In = {{EKK0111C080CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0111C080},
				{EKK0111C080CBSMsg.FUNC_CODE, funcCd},
				{EKK0111C080CBSMsg.SVC_KEI_NO, svcKeiNo},
				{EKK0111C080CBSMsg.MSKM_DTL_NO, mskmDtlNo},
				{EKK0111C080CBSMsg.IDO_DIV, idoDiv},
				{EKK0111C080CBSMsg.UPD_DTM_BF, lastUpdDtm},
				{EKK0111C080CBSMsg.JOTO_YMD, jotoYmd}
// ANK-3752-00-00対応 20191018 星野 ADD START
				,
				{EKK0111C080CBSMsg.JOTO_DIV, jotoKbn}
// ANK-3752-00-00対応 20191018 星野 ADD END
			};
			callSC(handle, scCall, param, fixedText, ekk0111c080In);

// ANK-3752-00-00対応 20191018 星野 ADD START
		}
		// 料金グループコードが「mineo」の場合
		else if( JCKStrConst.PRC_GRP_CD_MINEO.equals(prcGrpCd) )
		{
			// 譲渡年月日を反映する
			// サービス契約＜mineo＞譲渡情報変更
			Object[][] ekk2821c050In = {{EKK2821C050CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK2821C050},
				{EKK2821C050CBSMsg.FUNC_CODE, funcCd},
				{EKK2821C050CBSMsg.SVC_KEI_NO, svcKeiNo},
				{EKK2821C050CBSMsg.MSKM_DTL_NO, mskmDtlNo},
				{EKK2821C050CBSMsg.IDO_DIV, idoDiv},
				{EKK2821C050CBSMsg.JOTO_YMD, jotoYmd},
				{EKK2821C050CBSMsg.JOTO_DIV, jotoKbn}
			};
			callSC(handle, scCall, param, fixedText, ekk2821c050In);
		}
// ANK-3752-00-00対応 20191018 星野 ADD END
	}
// ANK-3699-00-00対応 20190801 星野 ADD END

	/**
	 * チェック処理<br>
	 * サービスコンポーネント実行用CAANMsgを返却します。<br>
	 * <br>
	 * @param handle セッションハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return HashMap<String, Object>
	 * @exception RequestParameterExceptionがスローされます 。
	 */
	@SuppressWarnings("unchecked")
	public  HashMap<String, Object> getInvokeCBS(SessionHandle handle,
												IRequestParameterReadWrite param,
												String fixedText) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		List<CAANMsg> templates = new ArrayList<CAANMsg>();
		
		// チェック用サービスインターフェイス
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, Arrays.asList(templates));
		
		return paramMap;
	}

	/**
	 * サービスインターフェイス処理結果(エラー情報)の取得<br>
	 * 業務データ取得・書込用I/Fをそのまま返却します。<br>
	 * <br>
	 * @param param デルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param templates CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param,
													CAANMsg[] templates,
													int returnCode,
													String fixedText) throws Throwable
	{
		HashMap<String, Object> dataMap = (HashMap)param.getData(fixedText);
		for (CAANMsg template : templates)
		{
			CAANMsg[] workTemplates = {template};
		}
		return param;
	}

	/**
	 * SC(サービスインターフェイス）を呼び出す。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSC(SessionHandle handle,
							ServiceComponentRequestInvoker scCall,
							IRequestParameterReadWrite param,
							String dataMapKey,
							Object[][] mappingData) throws Exception
	{
		HashMap<String, Object> paramMap = editInMsg(param, mappingData);
		
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		CAANMsg[] templates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg msg = templates[0];
		
		// リターンコード取得
		int returnCode = (Integer)result.get(JCMConstants.RET_CD_INT_KEY);
		
		int templateStatus = msg.getInt(EKK0011D020CBSMsg.STATUS);
		
		if (returnCode != 0)
		{
			templateStatus = 9000;
		}
		
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		setErrorInf(msg, (HashMap<String, Object>)param.getData(dataMapKey));
		
		String svcIf = (String)mappingData[0][1];
		
		if (TEMPLATE_ID_EKK0011D020.equals(svcIf))
		{
			ArrayList inList = (ArrayList)mappingData[mappingData.length - 1][1];
			CAANMsg[] templateArray = msg.getCAANMsgList(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);
			
			if (templateArray != null)
			{
				for (int i = 0; i < templateArray.length; i++)
				{
					setErrorInf(templateArray[i], (HashMap)inList.get(i));
				}
			}
		}
		else if (TEMPLATE_ID_EKK1091D010.equals(svcIf))
		{
			ArrayList inList = (ArrayList)mappingData[mappingData.length - 1][1];
			CAANMsg[] templateArray = msg.getCAANMsgList(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST);
			
			if (templateArray != null)
			{
				for (int i = 0; i < templateArray.length; i++)
				{
					setErrorInf(templateArray[i], (HashMap)inList.get(i));
				}
			}
		}
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(result, errList));
		
		/* ◇処理結果の判定*/
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = result.get(JCMConstants.RET_CD_INT_KEY).toString();
		Integer status = msg.getInt(JCMConstants.STATUS_INT_KEY);
		
		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status.intValue()))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
		return msg;
	}

	/**
	 * @param param
	 * @param mappingData
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	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));
		setMsgAll(template);
		
		// オペレータ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));
		
		if (TEMPLATE_ID_EKK0011D020.equals(svcIf))
		{
			for (int i = 0; i < mappingData.length - 1; i++)
			{
				template = setMsgVal(template, (String)mappingData[i][0], (String)mappingData[i][1]);
			}
			
			CAANMsg[] templateArray = template.getCAANMsgList(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);
			if (templateArray == null)
			{
				templateArray = new CAANMsg[1];
			}
			
			CAANMsg childTemplate = templateArray[0];
			if (childTemplate == null)
			{
				childTemplate = new CAANMsg(EKK0011D020CBSMsg1List.class.getName());
			}
			
			setMsgAll(childTemplate);
			templateArray[0] = childTemplate;
			template.set(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST, templateArray);
		}
		else if (TEMPLATE_ID_EKK1091D010.equals(svcIf))
		{
			for (int i = 0; i < mappingData.length - 1; i++)
			{
				template = setMsgVal(template, (String)mappingData[i][0], (String)mappingData[i][1]);
			}
			
			ArrayList list = (ArrayList)mappingData[mappingData.length - 1][1];
			CAANMsg[] templateArray = template.getCAANMsgList(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST);
			if (templateArray == null)
			{
				templateArray = new CAANMsg[list.size()];
			}
			
			for (int i = 0; i < list.size(); i++)
			{
				HashMap map = (HashMap)list.get(i);
				CAANMsg childTemplate = templateArray[i];
				if (childTemplate == null)
				{
					childTemplate = new CAANMsg(EKK1091D010CBSMsg1List.class.getName());
				}
				
				Iterator<String> msgKey = childTemplate.getSchema().getSchemaKeySet().iterator();
				while (msgKey.hasNext())
				{
					String key = msgKey.next();
					
					if (!key.endsWith("_err"))
					{
						childTemplate = setMsgVal(childTemplate, key, (String)map.get(key));
					}
				}
				templateArray[i] = childTemplate;
			}
			
			template.set(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST, templateArray);
		}
		else
		{
			for (int i = 0; i < mappingData.length; i++)
			{
				template = setMsgVal(template, (String)mappingData[i][0], (String)mappingData[i][1]);
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		return paramMap;
	}

	/**
	 * 上り項目全てに空値を設定します。
	 * 
	 * @param msg
	 */
	@SuppressWarnings("unchecked")
	private void setMsgAll(CAANMsg msg)
	{
		Iterator<String> msgKey = msg.getSchema().getSchemaKeySet().iterator();
		
		while (msgKey.hasNext())
		{
			String key = msgKey.next();
			
			if (!key.endsWith("_err"))
			{
				msg.setNull(key);
			}
		}
	}

	/**
	 * 値を設定します。
	 * 
	 * @param msg
	 * @param key
	 * @param value
	 * @return CAANMsg
	 */
	private CAANMsg setMsgVal(CAANMsg msg, String key, String value)
	{
		if (value == null || "".equals(value))
		{
			msg.setNull(key);
		}
		else
		{
			msg.set(key, value);
		}
		return msg;
	}

	/**
	 * 分割元指示書登録の上り項目を設定します。
	 * 
	 * @param inMsg
	 * @param sysid
	 * @param svcKeiNo
	 * @param shosa_ymd
	 * @param rsvAplyYmd
	 * @param svcMsg
	 * 
	 * @return Object[][]
	 */
	@SuppressWarnings("unchecked")
	private Object[][] setECK0151D010Moto(HashMap inMsg, String sysid, String svcKeiNo, String shosa_ymd, String rsvAplyYmd, CAANMsg svcMsg)
	{
		// 運用日-１した日付
		String endday = "";
		endday = JPCDateUtil.addDay(rsvAplyYmd, -1);
		
		// 指示書登録
		Object[][] eck0151d010In = {{ECK0151D010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECK0151D010},
									{ECK0151D010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
									{ECK0151D010CBSMsg.TRN_CD, JCKStrConst.SJISHO_TRN_CD_REPLICA_API},
									{ECK0151D010CBSMsg.TRGT_TABLE_ID, "TNM00040"},
									{ECK0151D010CBSMsg.TRAN_TRGT_SYSID, sysid},
									{ECK0151D010CBSMsg.RSLT_FLG, "0"},
									{ECK0151D010CBSMsg.PARAMETER_YK_CNT, "13"},
									{ECK0151D010CBSMsg.PARAMETER_1, sysid},
									{ECK0151D010CBSMsg.PARAMETER_2, svcKeiNo},
//									{ECK0151D010CBSMsg.PARAMETER_3, inMsg.get("svc_sta_ymd")},
//									{ECK0151D010CBSMsg.PARAMETER_4, inMsg.get("svc_end_ymd")},
									{ECK0151D010CBSMsg.PARAMETER_3, shosa_ymd},
									{ECK0151D010CBSMsg.PARAMETER_4, endday},
									{ECK0151D010CBSMsg.PARAMETER_5, svcMsg.getString(EKK0081C250CBSMsg.MK_FLG)},
									{ECK0151D010CBSMsg.PARAMETER_6, svcMsg.getString(EKK0081C250CBSMsg.ADD_DTM)},
									{ECK0151D010CBSMsg.PARAMETER_7, svcMsg.getString(EKK0081C250CBSMsg.ADD_OPEACNT)},
									{ECK0151D010CBSMsg.PARAMETER_9, svcMsg.getString(EKK0081C250CBSMsg.UPD_DTM)},
									{ECK0151D010CBSMsg.PARAMETER_10, svcMsg.getString(EKK0081C250CBSMsg.UPD_OPEACNT)},
									{ECK0151D010CBSMsg.PARAMETER_12, SBT_CD_00},
									{ECK0151D010CBSMsg.PARAMETER_13, SVC_CD_00000}};
		
		return eck0151d010In;
	}

	/**
	 * 分割先指示書登録の上り項目を設定します。
	 * 
	 * @param sysid
	 * @param svcKeiNo
	 * @param rsvAplyYmd
	 * @param inMsg
	 * @param svcMsg
	 * 
	 * @return Object[][]
	 */
	@SuppressWarnings("unchecked")
	private Object[][] setECK0151D010Saki(String sysid, String svcKeiNo, String rsvAplyYmd, HashMap inMsg, CAANMsg svcMsg)
	{
		// 指示書登録
		Object[][] eck0151d010In = {{ECK0151D010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECK0151D010},
									{ECK0151D010CBSMsg.FUNC_CODE,  JPCModelConstant.FUNC_CD_1},
									{ECK0151D010CBSMsg.TRN_CD, JCKStrConst.SJISHO_TRN_CD_REPLICA_API},
									{ECK0151D010CBSMsg.TRGT_TABLE_ID, "TNM00040"},
									{ECK0151D010CBSMsg.TRAN_TRGT_SYSID, sysid},
									{ECK0151D010CBSMsg.RSLT_FLG, "0"},
									{ECK0151D010CBSMsg.PARAMETER_YK_CNT, "13"},
									{ECK0151D010CBSMsg.PARAMETER_1, sysid},
									{ECK0151D010CBSMsg.PARAMETER_2, svcKeiNo},
									{ECK0151D010CBSMsg.PARAMETER_3, rsvAplyYmd},
									{ECK0151D010CBSMsg.PARAMETER_4, inMsg.get("end_ymd")},
									{ECK0151D010CBSMsg.PARAMETER_5, svcMsg.getString(EKK0081C250CBSMsg.MK_FLG)},
									{ECK0151D010CBSMsg.PARAMETER_6, svcMsg.getString(EKK0081C250CBSMsg.ADD_DTM)},
									{ECK0151D010CBSMsg.PARAMETER_7, svcMsg.getString(EKK0081C250CBSMsg.ADD_OPEACNT)},
									{ECK0151D010CBSMsg.PARAMETER_9, svcMsg.getString(EKK0081C250CBSMsg.UPD_DTM)},
									{ECK0151D010CBSMsg.PARAMETER_10, svcMsg.getString(EKK0081C250CBSMsg.UPD_OPEACNT)},
									{ECK0151D010CBSMsg.PARAMETER_12, SBT_CD_00},
									{ECK0151D010CBSMsg.PARAMETER_13, SVC_CD_00000}};

		
		return eck0151d010In;
	}

	/**
	 * 請求契約指示書登録の上り項目を設定します。
	 * 
	 * @param sysid
	 * @param svcKeiNo
	 * @param seikyMsg
	 * 
	 * @return Object[][]
	 */
	private Object[][] setECK0151D010Seiky(String sysid, String svcKeiNo, CAANMsg seikyMsg)
	{
		String kakinsTstaymd = "";
		String kakinsTendymd = "";
		
		kakinsTstaymd = JCCBPCommon.getOpeDate(null);
		if (isNotBlank(seikyMsg.getString(EKK0321C020CBSMsg.KAKINS_TENDYMD)))
		{
			kakinsTendymd = seikyMsg.getString(EKK0321C020CBSMsg.KAKINS_TENDYMD);
		}
		else
		{
			kakinsTendymd = KAKINS_TEND_YMD;
		}
		
		// 指示書登録
		Object[][] eck0151d010In = {{ECK0151D010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECK0151D010},
									{ECK0151D010CBSMsg.FUNC_CODE,  JPCModelConstant.FUNC_CD_1},
									{ECK0151D010CBSMsg.TRN_CD, JCKStrConst.SJISHO_TRN_CD_REPLICA_API},
									{ECK0151D010CBSMsg.TRGT_TABLE_ID, "TNM00050"},
									{ECK0151D010CBSMsg.TRAN_TRGT_SYSID, sysid},
									{ECK0151D010CBSMsg.RSLT_FLG, "0"},
									{ECK0151D010CBSMsg.PARAMETER_YK_CNT, "14"},
									{ECK0151D010CBSMsg.PARAMETER_1, svcKeiNo},
									{ECK0151D010CBSMsg.PARAMETER_2, "01"},
/* ++++++++++ v4.00.10 変更開始 ++++++++++ */
									{ECK0151D010CBSMsg.PARAMETER_3, "1"},
/* ++++++++++ v4.00.10 変更開始 ++++++++++ */
									{ECK0151D010CBSMsg.PARAMETER_4, seikyMsg.getString(EKK0321C020CBSMsg.SEIKY_KEI_NO)},
									{ECK0151D010CBSMsg.PARAMETER_5, kakinsTstaymd},
									{ECK0151D010CBSMsg.PARAMETER_6, kakinsTendymd},
									{ECK0151D010CBSMsg.PARAMETER_8, seikyMsg.getString(EKK0321C020CBSMsg.MK_FLG)},
									{ECK0151D010CBSMsg.PARAMETER_9, seikyMsg.getString(EKK0321C020CBSMsg.ADD_DTM)},
									{ECK0151D010CBSMsg.PARAMETER_10, seikyMsg.getString(EKK0321C020CBSMsg.ADD_OPEACNT)},
									{ECK0151D010CBSMsg.PARAMETER_12, seikyMsg.getString(EKK0321C020CBSMsg.UPD_DTM)},
									{ECK0151D010CBSMsg.PARAMETER_13, seikyMsg.getString(EKK0321C020CBSMsg.UPD_OPEACNT)}};
		
		return eck0151d010In;
	}

/* ++++++++++ v4.00.08 削除開始 ++++++++++ */
//	/**
//	 * 支払方法指示書登録の上り項目を設定します。
//	 * 
//	 * @param sysid
//	 * @param tableId
//	 * @param ispSvcKeiNo
//	 * @param stat
//	 * @param inMsg
//	 * @param msg
//	 * 
//	 * @return Object[][]
//	 */
//	private Object[][] setECK0151D010Payway(String sysid, String tableId, String ispSvcKeiNo, String stat, CAANMsg inMsg, CAANMsg msg)
//	{
//		// 指示書登録
//		Object[][] eck0151d010In = {{ECK0151D010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECK0151D010},
//									{ECK0151D010CBSMsg.FUNC_CODE,  "1"},
//									{ECK0151D010CBSMsg.TRN_CD, JCKStrConst.SJISHO_TRN_CD_REPLICA_API},
//									{ECK0151D010CBSMsg.TRGT_TABLE_ID, tableId},
//									{ECK0151D010CBSMsg.TRAN_TRGT_SYSID, sysid},
//									{ECK0151D010CBSMsg.RSLT_FLG, "0"},
//									{ECK0151D010CBSMsg.PARAMETER_YK_CNT, "13"},
//									{ECK0151D010CBSMsg.PARAMETER_1, sysid},
//									{ECK0151D010CBSMsg.PARAMETER_2, inMsg.getString(ECN0131B006CBSMsgList.PAYWAY_INPUT_SHIEN_CD)},
//									{ECK0151D010CBSMsg.PARAMETER_3, inMsg.getString(ECN0131B006CBSMsgList.PAYWAY_NO)},
//									{ECK0151D010CBSMsg.PARAMETER_4, ispSvcKeiNo},
//									{ECK0151D010CBSMsg.PARAMETER_6, msg.getString(ECN0131E010CBSMsg.MK_FLG)},
//									{ECK0151D010CBSMsg.PARAMETER_7, inMsg.getString(ECN0131B006CBSMsgList.ADD_DTM)},
//									{ECK0151D010CBSMsg.PARAMETER_8, inMsg.getString(ECN0131B006CBSMsgList.ADD_OPEACNT)},
//									{ECK0151D010CBSMsg.PARAMETER_10, msg.getString(ECN0131E010CBSMsg.UPD_DTM)},
//									{ECK0151D010CBSMsg.PARAMETER_11, msg.getString(ECN0131E010CBSMsg.UPD_OPEACNT)},
//									{ECK0151D010CBSMsg.PARAMETER_13, stat}};
//		return eck0151d010In;
//	}
/* ++++++++++ v4.00.08 削除開始 ++++++++++ */
	
	/**
	 * 進捗登録の上り項目を設定する。
	 * 
	 * @param inMsg
	 * @param funcCd
	 * @param mskmDtlNo
	 * @param seikyKeiNo
	 * @param svcKeiNo
	 * @param idoDiv
	 * @param stat
	 * @param prg_tkjk
	 * 
	 * @return Object[][]
	 */
	@SuppressWarnings("unchecked")
	private Object[][] setEKK1091D010(HashMap inMsg, String funcCd, String mskmDtlNo, String seikyKeiNo, String svcKeiNo, String idoDiv, String stat, String prg_tkjk)
	{
		Object[][] ekk1091d010In = {{EKK1091D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK1091D010},
									{EKK1091D010CBSMsg.FUNC_CODE, funcCd},
									{EKK1091D010CBSMsg.MSKM_DTL_NO, mskmDtlNo},
									{EKK1091D010CBSMsg.SEIKY_KEI_NO, seikyKeiNo},
									{EKK1091D010CBSMsg.SVC_KEI_NO, svcKeiNo},
									{EKK1091D010CBSMsg.IDO_DIV, idoDiv},
									{EKK1091D010CBSMsg.IDO_DTM, inMsg.get("ido_dtm")},
									// ******** v4.00.07 変更開始 ********
									{EKK1091D010CBSMsg.PRG_TKJK_1, prg_tkjk},
									// ******** v4.00.07 変更終了 ********
									{EKK1091D010CBSMsg.PRG_STAT, stat},
									{EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST, inMsg.get("EKK1091D010CBSMsg1List")}};
		
		return ekk1091d010In;
	}
	
	/**
	 * エラー情報を設定します。
	 * 
	 * @param msg
	 * @param map
	 * 
	 */
	@SuppressWarnings("unchecked")
	private void setErrorInf(CAANMsg msg, HashMap<String, Object> map)
	{
		Iterator<String> msgKey = msg.getSchema().getSchemaKeySet().iterator();
		
		while (msgKey.hasNext())
		{
			String key = msgKey.next();
			
			if (key.endsWith("_err"))
			{
				if (!msg.isNull(key))
				{
					if (!map.containsKey(key))
					{
						map.put(key, msg.getString(key));
					}
				}
			}
		}
	}

	/**
	 * 請求契約更新処理を行う。
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param funcCd
	 * @param sysid
	 * @param mskmDtlNo
	 * @param svcKeiNo
	 * @param rsvAplyYmd
	 * @param idoDiv
	 * @param ccMsg
	 * 
	 * @return CAANMsg
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private CAANMsg callSeikyKei(SessionHandle handle,
								ServiceComponentRequestInvoker scCall,
								IRequestParameterReadWrite param,
								String fixedText,
								String funcCd,
								String sysid,
								String mskmDtlNo,
								String svcKeiNo,
								String rsvAplyYmd,
								String idoDiv,
								HashMap ccMsg) throws Throwable
	{
		HashMap inMap = (HashMap)ccMsg.get("EKK0491");
		String kakinsNo = null;
		
		// 請求契約登録
		Object[][] ekk0491d010In = {{EKK0491D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0491D010},
									{EKK0491D010CBSMsg.FUNC_CODE, funcCd},
									{EKK0491D010CBSMsg.SYSID, sysid},
									{EKK0491D010CBSMsg.MSKM_DTL_NO, mskmDtlNo},
									{EKK0491D010CBSMsg.SEIKY_WAY_CD, inMap.get("seiky_way_cd")},
									{EKK0491D010CBSMsg.KEI_CNC_YMD, rsvAplyYmd},
									{EKK0491D010CBSMsg.SEIKYUS_HAKKO_YH, inMap.get("seikyus_hakko_yh")},
									{EKK0491D010CBSMsg.SHS_HOJIN_SBT_CD, inMap.get("shs_hojin_sbt_cd")},
									{EKK0491D010CBSMsg.SHS_HOJIN_ZENGO_SHITEI_CD, inMap.get("shs_hojin_zengo_shitei_cd")},
									{EKK0491D010CBSMsg.SHS_KANA, inMap.get("shs_kana")},
									{EKK0491D010CBSMsg.SOHUS_NM, inMap.get("sohus_nm")},
									{EKK0491D010CBSMsg.SOHUS_BKM, inMap.get("sohus_bkm")},
									{EKK0491D010CBSMsg.SOHUS_TNTSHA_NM, inMap.get("sohus_tntsha_nm")},
									{EKK0491D010CBSMsg.SOHUS_AD_CD, inMap.get("sohus_ad_cd")},
									{EKK0491D010CBSMsg.SOHUS_PCD, inMap.get("sohus_pcd")},
									{EKK0491D010CBSMsg.SOHUS_STATE_NM, inMap.get("sohus_state_nm")},
									{EKK0491D010CBSMsg.SOHUS_CITY_NM, inMap.get("sohus_city_nm")},
									{EKK0491D010CBSMsg.SOHUS_OAZTSU_NM, inMap.get("sohus_oaztsu_nm")},
									{EKK0491D010CBSMsg.SOHUS_AZCHO_NM, inMap.get("sohus_azcho_nm")},
									{EKK0491D010CBSMsg.SOHUS_ADRTTM, inMap.get("sohus_adrttm")},
									{EKK0491D010CBSMsg.SOHUS_ADRRM, inMap.get("sohus_adrrm")},
									{EKK0491D010CBSMsg.SOHUS_BNCHIGO, inMap.get("sohus_bnchigo")},
									{EKK0491D010CBSMsg.SOHUS_TELNO, inMap.get("sohus_telno")},
									{EKK0491D010CBSMsg.SOHUS_MLAD, inMap.get("sohus_mlad")},
									{EKK0491D010CBSMsg.IDO_DIV, IDO_DIV_VALUE_00017}};
		
		CAANMsg ekk0491d010Out = callSC(handle, scCall, param, fixedText, ekk0491d010In);
		String seikyKeiNo = ekk0491d010Out.getString(EKK0491D010CBSMsg.SEIKY_KEI_NO);
		
		// 課金先一覧照会（請求契約番号）
		Object[][] ekk0321b502In = {{EKK0321B502CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0321B502},
									{EKK0321B502CBSMsg.FUNC_CODE, funcCd},
									{EKK0321B502CBSMsg.KEY_SVC_KEI_NO, svcKeiNo}};
		
		CAANMsg[] ekk0321b502Out = callSC(handle, scCall, param, fixedText, ekk0321b502In).getCAANMsgList(EKK0321B502CBSMsg.EKK0321B502CBSMSG1LIST);
		if (ekk0321b502Out != null && ekk0321b502Out.length > 0)
		{
			kakinsNo = ekk0321b502Out[0].getString(EKK0321B502CBSMsg1List.KAKINS_NO);
		}
		
		// 課金先請求契約変更
		Object[][] ekk0321c020In = {{EKK0321C020CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0321C020},
									{EKK0321C020CBSMsg.FUNC_CODE, funcCd},
									{EKK0321C020CBSMsg.KAKINS_NO, kakinsNo},
									{EKK0321C020CBSMsg.SEIKY_KEI_NO, seikyKeiNo},
									{EKK0321C020CBSMsg.KAKINS_TSTAYMD, rsvAplyYmd},
									{EKK0321C020CBSMsg.IDO_DIV, IDO_DIV_VALUE_00017},
									{EKK0321C020CBSMsg.UPD_DTM_BF, ekk0491d010Out.getString(EKK0491D010CBSMsg.UPD_DTM)},
									{EKK0321C020CBSMsg.MSKM_DTL_NO, mskmDtlNo}};
		
		CAANMsg ekk0321c020Out = callSC(handle, scCall, param, fixedText, ekk0321c020In);
		
		// 請求オプションサービス契約 解約／キャンセル
		execDslSeikyOpSvcKei(handle, scCall, param, fixedText, inMap, mskmDtlNo, rsvAplyYmd, idoDiv);
		
		if ((Boolean)ccMsg.get("rsv_aply_flg"))
		{
			HashMap outMap = new HashMap();
			ArrayList seikyUpdList = new ArrayList();
			HashMap seikyUpdMap = new HashMap();
			
			seikyUpdMap.put("seiky_kei_no", seikyKeiNo);		// 請求契約番号
			seikyUpdMap.put("svc_kei_no", svcKeiNo);			// 分割元サービス契約番号
			seikyUpdList.add(seikyUpdMap);
			
			outMap.put(JCMConstants.FUNC_CODE_KEY, funcCd);		// 機能コード
			outMap.put("unyo_day", inMap.get("unyo_day"));		// オンライン運用日
			outMap.put("JACseikyupdMsg1List", seikyUpdList);
			param.setData("JACSEIKYUPDCC", outMap);
			
			// 割引サービス自動適用CC実行処理
			// OM-2014-0003310 MOD START
			// JACSeikyUpdCC jacSeikyuUpd = new JACSeikyUpdCC();
			// jacSeikyuUpd.svcifcall(handle, param, "JACSEIKYUPDCC");
			try
			{
				JACSeikyUpdCC jacSeikyuUpd = new JACSeikyUpdCC();
				jacSeikyuUpd.svcifcall(handle, param, "JACSEIKYUPDCC");
			}
			catch (Exception e)
			{
				throw new CCException(e.getClass().getName(), new Throwable(e.getMessage()));
			}
			// OM-2014-0003310 MOD END
		}
		
		return ekk0321c020Out;
	}

	/**
	 * 工事案件諸変更処理を行う。
	 * 
	 * @param handle
	 * @param param
	 * @param sysid
	 * @param mskmDtlNo
	 * @param ccMsg
	 * 
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void callKojiak(SessionHandle handle, 
								IRequestParameterReadWrite param, 
								String sysid, 
								String mskmDtlNo, 
								HashMap ccMsg) throws Throwable
	{
		HashMap inMap = (HashMap)ccMsg.get("EKU00");
		
/* ++++++++++ v4.00.11 変更開始 ++++++++++ */
		// params[0]：料金グループコード
		// params[1]：サービス契約番号
		// params[2]：運用日
		// params[3]：マンション物件コード
		// params[4]：申込明細番号
		// params[5]：サービス契約回線内訳番号
		// params[6]：工事受付契機異動年月日時分秒
		// params[7]：サービスコード
		// params[8]：サービス開始年月日
		// params[9]：SYSID
		// params[10]：マンション通信設備コード
		String[] params = new String[11];
		params[0] = (String)inMap.get("prc_grp_cd");
		params[1] = (String)inMap.get("svc_kei_no");
		params[2] = (String)ccMsg.get("rsv_aply_ymd");
		params[3] = (String)inMap.get("mansion_bukken_cd");
		params[4] = mskmDtlNo;
		params[5] = (String)inMap.get("svc_kei_kaisen_ucwk_no");
		params[6] = (String)inMap.get("ope_date_time");
		params[7] = (String)inMap.get("svc_cd");
		params[8] = (String)inMap.get("svc_sta_ymd");
		params[9] = sysid;
		params[10] = (String)inMap.get("mans_tushin_equip_cd");
		
		// 作業領域の取得
		Map workMap = (Map)param.getMappingWorkArea();
		// 作業項目マップ
		HashMap workDataMap = (HashMap)workMap.get("WORK");
		workDataMap.put("params", params);
		
		JCKKKojiakUpdCC kojiakUpdCC = new JCKKKojiakUpdCC();
		kojiakUpdCC.execute(handle, param, FIXED_KEY_KOJIAK_UPD_CC);
/* ++++++++++ v4.00.11 変更開始 ++++++++++ */
	}

/* ++++++++++ v4.00.08 削除開始 ++++++++++ */
//	/**
//	 * 支払方法更新処理を行う。
//	 * 
//	 * @param handle
//	 * @param scCall
//	 * @param param
//	 * @param fixedText
//	 * @param funcCd
//	 * @param sysid
//	 * @param svcKeiNo
//	 * @param rsvAplyYmd
//	 * @param ccMsg
//	 * @param rsvAplyFlg
//	 * 
//	 * @throws Exception
//	 */
//	@SuppressWarnings("unchecked")
//	private void callPayway(SessionHandle handle,
//								ServiceComponentRequestInvoker scCall,
//								IRequestParameterReadWrite param,
//								String fixedText,
//								String funcCd,
//								String sysid,
//								String svcKeiNo,
//								String rsvAplyYmd,
//								HashMap ccMsg,
//								boolean rsvAplyFlg) throws Exception
//	{
//		HashMap svcNoMap = new HashMap();
//		HashMap seikyMap = new HashMap();
//		HashMap inMap = (HashMap)ccMsg.get("ECN0131");
//		boolean ispFlg = true;
//		Object[][] eck0151d010In = null;
//		CAANMsg inMsg = null;
//		
//		// 支払方法入力支援一覧照会
//		Object[][] ecn0131b006In = {{ECN0131B006CBSMsg.TEMPLATEID, TEMPLATE_ID_ECN0131B006},
//									{ECN0131B006CBSMsg.FUNC_CODE, funcCd},
//									{ECN0131B006CBSMsg.KEY_SYSID, sysid}};
//		
//		CAANMsg[] ecn0131b006Out = callSC(handle, scCall, param, fixedText, ecn0131b006In).getCAANMsgList(ECN0131B006CBSMsg.ECN0131B006CBSMSGLIST);
//		for (int i = 0; i < ecn0131b006Out.length; i++)
//		{
//			// ISP決済サービス契約番号と比較
//			if (svcKeiNo.equals(ecn0131b006Out[i].getString(ECN0131B006CBSMsgList.ISP_KSSAI_SVC_KEI_NO)))
//			{
//				ispFlg = false;
//			}
//		}
//		
//		// 分割対象契約番号がISP決済サービス契約番号に設定されていない場合、以降の処理はしない
//		if (ispFlg)
//		{
//			return;
//		}
//		
//		// 初期表示時取得したサービス契約情報一覧リスト
//		ArrayList svcList = (ArrayList)inMap.get("svc_kei_info_list");
//		
//		for (int i = 0; i < svcList.size(); i++)
//		{
//			ArrayList tempList = null;
//			HashMap childMap = (HashMap)svcList.get(i);
//			String svcNo = (String)childMap.get("svc_kei_no");
//			String seikyNo = (String)childMap.get("seiky_kei_no");
//			
//			// サービス契約番号をキーに請求契約番号をセット
//			svcNoMap.put(svcNo, seikyNo);
//			
//			// 請求契約マップに対象の請求契約番号が存在する場合
//			if(seikyMap.containsKey(seikyNo))
//			{
//				tempList = (ArrayList)seikyMap.get(seikyNo);
//			}
//			// 上記以外
//			else
//			{
//				tempList = new ArrayList();
//				seikyMap.put(seikyNo, tempList);
//			}
//			
//			HashMap tempMap = new HashMap();
//			tempMap.put("svc_kei_no", svcNo);
//			tempMap.put("priority", childMap.get("ispks_reset_yusen_jun"));
//			tempList.add(tempMap);
//		}
//		
//		String seikyKeiNo = (String)svcNoMap.get(svcKeiNo);
//		
//		// スライド先サービス契約番号を取得
//		String svcNo = getSlideSvcNo(svcKeiNo, seikyKeiNo, seikyMap);
//		
//		// 督促一意照会
//		Object[][] ech0231a010In = {{ECH0231A010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECH0231A010},
//									{ECH0231A010CBSMsg.FUNC_CODE, "2"},
//									{ECH0231A010CBSMsg.KEY_SEIKY_KEI_NO, seikyKeiNo},
//									{ECH0231A010CBSMsg.KEY_TOKUSOKU_KANRI_YMD, rsvAplyYmd}};
//		
//		String stat = "";
//		CAANMsg[] ech0231a010Out = callSC(handle, scCall, param, fixedText, ech0231a010In).getCAANMsgList(ECH0231A010CBSMsg.ECH0231A010CBSMSG1LIST);
//		if (ech0231a010Out != null && ech0231a010Out.length > 0)
//		{
//			stat = ech0231a010Out[0].getString(ECH0231A010CBSMsg1List.TOKUSOKU_STAT);
//		}
//		
//		if (svcNo == null || svcNo.length() == 0)
//		{
//			for (int i = 0; i < ecn0131b006Out.length; i++)
//			{
//				if (svcKeiNo.equals(ecn0131b006Out[i].getString(ECN0131B006CBSMsgList.ISP_KSSAI_SVC_KEI_NO)))
//				{
//					inMsg = ecn0131b006Out[i];
//				}
//			}
//			
//			// 支払方法入力支援削除
//			Object[][] ecn0131e010In = {{ECN0131E010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECN0131E010},
//										{ECN0131E010CBSMsg.FUNC_CODE, funcCd},
//										{ECN0131E010CBSMsg.KEY_PAYWAY_NO, inMsg.getString(ECN0131B006CBSMsgList.PAYWAY_NO)},
//										{ECN0131E010CBSMsg.KEY_ADD_DTM, inMsg.getString(ECN0131B006CBSMsgList.ADD_DTM)},
//										{ECN0131E010CBSMsg.KEY_SYSID, sysid}};
//			
//			CAANMsg ecn0131e010Out = callSC(handle, scCall, param, fixedText, ecn0131e010In);
//			eck0151d010In = setECK0151D010Payway(sysid, "TNM00060_D", svcKeiNo, stat, inMsg, ecn0131e010Out);
//		}
//		else
//		{
//			for (int i = 0; i < ecn0131b006Out.length; i++)
//			{
//				if (svcNo.equals(ecn0131b006Out[i].getString(ECN0131B006CBSMsgList.ISP_KSSAI_SVC_KEI_NO)))
//				{
//					inMsg = ecn0131b006Out[i];
//				}
//			}
//			
//			if (inMsg == null)
//			{
//				return;
//			}
//			
//			// 支払方法入力支援更新
//			Object[][] ecn0131c010In = {{ECN0131C010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECN0131C010},
//										{ECN0131C010CBSMsg.FUNC_CODE, funcCd},
//										{ECN0131C010CBSMsg.KEY_PAYWAY_NO, inMsg.getString(ECN0131B006CBSMsgList.PAYWAY_NO)},
//										{ECN0131C010CBSMsg.KEY_ADD_DTM, inMsg.getString(ECN0131B006CBSMsgList.ADD_DTM)},
//										{ECN0131C010CBSMsg.KEY_SYSID, sysid},
//										{ECN0131C010CBSMsg.PAYWAY_INPUT_SHIEN_CD, inMsg.getString(ECN0131B006CBSMsgList.PAYWAY_INPUT_SHIEN_CD)},
//										{ECN0131C010CBSMsg.CRECARD_ID, inMsg.getString(ECN0131B006CBSMsgList.CRECARD_ID)},
//										{ECN0131C010CBSMsg.ISP_KSSAI_SVC_KEI_NO, svcNo},
//										{ECN0131C010CBSMsg.TSYRN_PAY_SEQ, inMsg.getString(ECN0131B006CBSMsgList.TSYRN_PAY_SEQ)}};
//			
//			CAANMsg ecn0131c010Out = callSC(handle, scCall, param, fixedText, ecn0131c010In);
//			eck0151d010In = setECK0151D010Payway(sysid, "TNM00060", svcKeiNo, stat, inMsg, ecn0131c010Out);
//		}
//		
//		// 予約の場合は未実行
//		if (rsvAplyFlg)
//		{
//			// 指示書登録
//			CAANMsg eck0151d010Out = callSC(handle, scCall, param, fixedText, eck0151d010In);
//		}
//	}
//
//	/**
//	 * スライド処理有無を判定します。
//	 * 
//	 * @param svcKeiNo
//	 * @param seikyKeiNo
//	 * @param seikyMap
//	 * 
//	 * @return slideSvcNo
//	 */
//	@SuppressWarnings("unchecked")
//	private String getSlideSvcNo(String svcKeiNo, String seikyKeiNo, HashMap seikyMap)
//	{
//		HashMap map = null;
//		String workSvcKeiNO = null;
//		String workPriority = null;
//		
//		// 請求契約番号に紐付くサービス契約情報の取得
//		ArrayList list = (ArrayList)seikyMap.get(seikyKeiNo);
//		
//		// 同一請求契約のサービス契約数が一件の場合
//		if (list.size() == 1)
//		{
//			return null;
//		}
//		
//		// 優先度の高いサービス契約の抽出
//		for (int i = 0; i < list.size(); i++)
//		{
//			map = (HashMap)list.get(i);
//			String value = (String)map.get("svc_kei_no");
//			String priority = (String)map.get("priority");
//			
//			// 分割対象のサービス契約番号と同じ場合は対象外
//			if (value.equals(svcKeiNo))
//			{
//				continue;
//			}
//			
//			// 優先度の取得
//			if(priority == null || priority.length() == 0 || Integer.parseInt(priority) > Integer.parseInt(workPriority))
//			{
//				workPriority = priority;
//				workSvcKeiNO = value;
//			}
//		}
//		
//		return workSvcKeiNO;
//	}
/* ++++++++++ v4.00.08 削除終了 ++++++++++ */
	
	/**
	 * 割引サービス手動付替CC実行処理
	 * 
	 * @param handle
	 * @param param
	 * @param sysid
	 * @param motoSysid
	 * 
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execWrisvcManAply(SessionHandle handle,
									IRequestParameterReadWrite param,
									String sysid,
									String motoSysid,
									HashMap ccMsg) throws Throwable
	{
		HashMap outMap = new HashMap();
		ArrayList svcKeiList = new ArrayList();
		HashMap svcKeiMap = new HashMap();
		
		// 併合元＿ＳＹＳＩＤ
		outMap.put("mt_sysid", motoSysid);
		// 併合先＿ＳＹＳＩＤ
		outMap.put("sk_sysid", sysid);
		// サービス契約番号リスト
		HashMap inMap = (HashMap)ccMsg.get("JKKWrisvcAutoAplyCC");
		ArrayList svcKeiListForWriManCC = (ArrayList)inMap.get("svc_kei_list");
		for (int i = 0; i < svcKeiListForWriManCC.size(); i++)
		{
			HashMap map = (HashMap)svcKeiListForWriManCC.get(i);
			// サービス契約番号
			svcKeiMap.put(KKSV0313_KKSV0313OP_WORK_SVC_KEI.SVC_KEI_NO, (String)map.get("svc_kei_no"));
			svcKeiList.add(svcKeiMap);
		}
		outMap.put("svc_kei_list", svcKeiList);
		param.setData("WrisvcManAplyCC", outMap);
		
		// 割引サービス自動適用CC実行処理
		JCKKWrisvcManAplyCC wrisvcManAplyCC = new JCKKWrisvcManAplyCC();
		wrisvcManAplyCC.execWrisvcManAply(handle, param, "WrisvcManAplyCC");
	}
	
	/**
	 * 割引サービス自動適用CC実行処理
	 * 
	 * @param handle
	 * @param param
	 * @param funcCd
	 * @param sysid
	 * @param motoSysid
	 * @param mskmNo
	 * @param idoDiv
	 * @param ccMsg
	 * @param bnktFlg
	 * 
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execWrisvcAutoAply(SessionHandle handle,
									IRequestParameterReadWrite param,
									String funcCd,
									String sysid,
									String motoSysid,
									String mskmNo,
									String idoDiv,
									HashMap ccMsg,
									boolean bnktFlg) throws Throwable
	{
		HashMap outMap = new HashMap();
		HashMap inMap = (HashMap)ccMsg.get("JKKWrisvcAutoAplyCC");
		ArrayList svcKeiListForWriCC = (ArrayList)inMap.get("svc_kei_list");
		
		ArrayList svcKeiGrpList = new ArrayList();
		ArrayList svcKeiList = new ArrayList();
		HashMap svcKeiGrpMap = new HashMap();
		HashMap svcKeiMap = new HashMap();
		
		outMap.put(JCMConstants.FUNC_CODE_KEY, funcCd);											// 機能コード
		outMap.put(KKSV0313_KKSV0313OP_WORK.SYSID, sysid);										// 新規発番＿ＳＹＳＩＤ
		outMap.put(KKSV0313_KKSV0313OP_WORK.OLD_SYSID, motoSysid);								// 旧SYSID
		outMap.put(KKSV0313_KKSV0313OP_WORK.MSKM_NO, mskmNo);									// 申込番号
		outMap.put(KKSV0313_KKSV0313OP_WORK.IDO_DIV, idoDiv);									// 異動区分
		outMap.put(KKSV0313_KKSV0313OP_WORK.MSKM_SBT_CD, (String)inMap.get("mskm_sbt_cd"));		// 申込種別コード
		
		// 請求契約分割の場合
		if (bnktFlg)
		{
			// "14"：請求契約分割 → 登録／変更区分
			outMap.put(KKSV0313_KKSV0313OP_WORK.ADD_CHGE_DIV, JKKWrisvcDchskmCommonUtil.ADD_CHGE_DIV_BILL_SLT);
			// 旧請求契約番号
			outMap.put(KKSV0313_KKSV0313OP_WORK.OLD_SEIKY_KEI_NO, (String)inMap.get("old_seiky_kei_no"));
		}
		else
		{
			// "12"：契約者分割 → 登録／変更区分
			outMap.put(KKSV0313_KKSV0313OP_WORK.ADD_CHGE_DIV, JKKWrisvcDchskmCommonUtil.ADD_CHGE_DIV_CUST_SLT);
		}
		
		svcKeiGrpMap.put(KKSV0313_KKSV0313OP_WORK_SVC_KEI_GRP.GRP_DIV, JKKWrisvcDchskmCommonUtil.GRP_DIV_STDARD_KEI);	// グループ区分
		
		for (int i = 0; i < svcKeiListForWriCC.size(); i++)
		{
			HashMap map = (HashMap)svcKeiListForWriCC.get(i);
			
			svcKeiMap.put(KKSV0313_KKSV0313OP_WORK_SVC_KEI.TG_KEI_SKBT_CD, (String)map.get("tg_kei_skbt_cd"));		// 対象契約識別コード
			svcKeiMap.put(KKSV0313_KKSV0313OP_WORK_SVC_KEI.SVC_KEI_NO, (String)map.get("svc_kei_no"));				// サービス契約番号
			svcKeiMap.put(KKSV0313_KKSV0313OP_WORK_SVC_KEI.SVC_KEI_STAT, (String)map.get("svc_kei_stat"));			// サービス契約ステータス
			svcKeiMap.put(KKSV0313_KKSV0313OP_WORK_SVC_KEI.SVC_CD, (String)map.get("svc_cd"));						// サービスコード
			svcKeiMap.put(KKSV0313_KKSV0313OP_WORK_SVC_KEI.PRC_GRP_CD, (String)map.get("prc_grp_cd"));				// 料金グループコード
			svcKeiMap.put(KKSV0313_KKSV0313OP_WORK_SVC_KEI.PCRS_CD, (String)map.get("pcrs_cd"));					// 料金コースコード
			svcKeiMap.put(KKSV0313_KKSV0313OP_WORK_SVC_KEI.PPLAN_CD, (String)map.get("pplan_cd"));					// 料金プランコード
		}
		
		svcKeiList.add(svcKeiMap);
		svcKeiGrpMap.put(KKSV0313_KKSV0313OP_WORK_SVC_KEI_GRP.SVC_KEI_LIST, svcKeiList);
		svcKeiGrpList.add(svcKeiGrpMap);
		outMap.put(KKSV0313_KKSV0313OP_WORK.SVC_KEI_GRP_LIST, svcKeiGrpList);
		param.setData("JKKWrisvcAutoAplyCC", outMap);
		
		// 割引サービス自動適用CC実行処理
		JKKWrisvcAutoAplyCC wrisvcAutoAplyCC = new JKKWrisvcAutoAplyCC();
		wrisvcAutoAplyCC.execute(handle, param, "JKKWrisvcAutoAplyCC");
	}
	
	/**
	 * 指示書登録実行判定を行います。
	 * @param handle
	 * @param param
	 * @param inMap
	 * @return 判定結果
	 */
	@SuppressWarnings("unchecked")
	private boolean isSjishoAdd(SessionHandle handle, IRequestParameterReadWrite param, HashMap inMap) throws Throwable
	{
		Map workMap = param.getMappingWorkArea();
		HashMap workDataMap = (HashMap)workMap.get("WORK");
		workDataMap.put("pcrs_cd", inMap.get("pcrs_cd"));
		param.setData("JCKKJdgExecSjishoAddCC", new HashMap<String, Object>());
		
		JCKKJdgExecSjishoAddCC jdgExecSjishoAddCC = new JCKKJdgExecSjishoAddCC();
		jdgExecSjishoAddCC.execJdgSjishoAdd(handle, param, "JCKKJdgExecSjishoAddCC");
		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData("JCKKJdgExecSjishoAddCC");
		
		return (Boolean)outMap.get("sjisho_add_flg");
	}
	
	/**
	 * 請求オプションサービス契約解約実行処理
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @param fixedText
	 * @param ekk0491Map
	 * @param mskmDtlNo
	 * @param rsvAplyYmd
	 * @param idoDiv
	 * 
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private void execDslSeikyOpSvcKei(SessionHandle handle,
									ServiceComponentRequestInvoker scCall,
									IRequestParameterReadWrite param,
									String fixedText,
									HashMap ekk0491Map,
									String mskmDtlNo,
									String rsvAplyYmd,
									String idoDiv) throws Throwable
	{
		String mtSeikyKeiNo = (String)ekk0491Map.get("mt_seiky_kei_no");
		String opeDate = (String)ekk0491Map.get("unyo_day");
		String svcCd = (String)ekk0491Map.get("tg_svc_cd");
		String prcGrpCd = (String)ekk0491Map.get("tg_prc_grp_cd");
		
		//**********************************************************
		// 分割元：請求契約一意照会
		//**********************************************************
		Object[][] ekk0491a010inMsg = {
										{EKK0491A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0491A010},
										{EKK0491A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2},
										{EKK0491A010CBSMsg.KEY_SEIKY_KEI_NO, mtSeikyKeiNo},
										{EKK0491A010CBSMsg.KEY_RSV_APLY_YMD, opeDate}
										};
		
		CAANMsg[] ekk0491a010outMsg = callSC(handle, scCall, param, fixedText, ekk0491a010inMsg).getCAANMsgList(EKK0491A010CBSMsg.EKK0491A010CBSMSG1LIST);
		
		if (ekk0491a010outMsg == null || ekk0491a010outMsg.length == 0)
		{
			return;
		}
		
		// 請求書発行要否
		String mtSeikyusHakkoYh = ekk0491a010outMsg[0].getString(EKK0491A010CBSMsg1List.SEIKYUS_HAKKO_YH);
		// 最終更新年月日時分秒
		String ekk0491LastUpdDtm = ekk0491a010outMsg[0].getString(EKK0491A010CBSMsg1List.LAST_UPD_DTM);
		
		// 分割元＿インターネットサービス契約検索フラグ
		boolean mtNetKeiSearchFlg = false;
		// 分割元＿インターネットサービス契約存在フラグ
		boolean mtNetKeiExistFlg = false;
		
		//**********************************************************
		// 分割元：請求書作成要否 判定
		//**********************************************************
		// 分割元：請求書作成要否 = "否"
		if (KH_FAIL.equals(mtSeikyusHakkoYh))
		{
			// 処理なし
		}
		else
		{
			// 分割対象サービス契約にネット契約有
			// ※インターネットサービス契約件数 = １件以上
			if (hasNetSvcKei(svcCd, prcGrpCd))
			{
				mtNetKeiSearchFlg = true;
			}
		}
		
		// サービス契約検索フラグ = true
		if(mtNetKeiSearchFlg)
		{
			// インターネットサービス契約が存在するか請求契約番号で課金先→サービス契約を検索
			mtNetKeiExistFlg = hasNetSvcKeiFromSeikyKei(handle, param, scCall, fixedText, opeDate, mtSeikyKeiNo, rsvAplyYmd);
		}
		
		// 分割対象サービス契約:インターネットサービスの契約件数が1件以上の場合
		if(mtNetKeiExistFlg)
		{
			// 処理なし
		}
		// 分割対象サービス契約:インターネットサービスの契約件数が0件の場合
		else
		{
			// 分割対象:請求オプションサービス契約が存在する場合
			if(isExistSeikyOpSvcKei(handle, param, scCall, fixedText, mtSeikyKeiNo))
			{
				// 作業項目マップより請求オプションサービス契約ステータス取得
				Map workMap = (Map)param.getMappingWorkArea();
				HashMap workDataMap = (HashMap)workMap.get("WORK");
				String seiopsvcKeiStat = (String)workDataMap.get("seiopsvc_kei_stat");
				
				// 分割対象:請求オプションサービス契約ステータス判定
				if(isCnclSeikyOpSvcKei(seiopsvcKeiStat))
				{
					// "010":受付済、"020":照査済の場合
					// 分割対象:請求オプションサービス契約 キャンセル
					executeCnclSeikyOpSvcKei(handle, param, scCall, fixedText, mtSeikyKeiNo, mskmDtlNo, idoDiv, ekk0491LastUpdDtm);
				}
				else
				{
					// "030":締結済、"100":サービス提供中、"210"休止・中断中、"220":停止中の場合
					// 分割対象:請求オプションサービス契約解約 解約確定
					executeDslSeikyOpSvcKei(handle, param, scCall, fixedText, opeDate, mtSeikyKeiNo, mskmDtlNo, rsvAplyYmd, idoDiv, ekk0491LastUpdDtm);
				}
			}
		}
	}
	
	/**
	 * 請求オプションサービス契約をキャンセルします。
	 * 
	 * @param handle
	 * @param param
	 * @param scCall
	 * @param fixedText
	 * @param seikyKeiNo
	 * @param mskmDtlNo
	 * @param idoDiv
	 * @param updDtmBf
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void executeCnclSeikyOpSvcKei(
											SessionHandle handle, 
											IRequestParameterReadWrite param, 
											ServiceComponentRequestInvoker scCall, 
											String fixedText, 
											String seikyKeiNo,
											String mskmDtlNo,
											String idoDiv,
											String updDtmBf) throws Exception
	{
		// 作業領域の取得
		Map workMap = (Map)param.getMappingWorkArea();
		HashMap workDataMap = (HashMap)workMap.get("WORK");
		
		Object[][] ekk0441c210In = {{EKK0441C210CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0441C210},
									{EKK0441C210CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
									{EKK0441C210CBSMsg.SEIOPSVC_KEI_NO, workDataMap.get("seiopsvc_kei_no")},// 請求オプションサービス契約番号
									{EKK0441C210CBSMsg.MSKM_DTL_NO, mskmDtlNo},								// 申込明細番号
									{EKK0441C210CBSMsg.SVC_CANCEL_RSN_CD, SVC_CNCL_RSN_CD_VALUE_01},		// サービスキャンセル理由コード(01:申出によるキャンセル)
									{EKK0441C210CBSMsg.IDO_DIV, idoDiv},									// 異動区分
									{EKK0441C210CBSMsg.UPD_DTM_BF, updDtmBf}};								// 請求契約＿更新年月日時分秒
		
		// 実行
		callSC(handle, scCall, param, fixedText, ekk0441c210In);
	}
	
	/**
	 * 請求オプションサービス契約を解約します。
	 * 
	 * @param handle
	 * @param param
	 * @param scCall
	 * @param fixedText
	 * @param opeDate
	 * @param seikyKeiNo
	 * @param mskmDtlNo
	 * @param rsvAplyYmd
	 * @param idoDiv
	 * @param updDtmBf
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private void executeDslSeikyOpSvcKei(
											SessionHandle handle, 
											IRequestParameterReadWrite param, 
											ServiceComponentRequestInvoker scCall, 
											String fixedText,
											String opeDate,
											String seikyKeiNo,
											String mskmDtlNo,
											String rsvAplyYmd,
											String idoDiv,
											String updDtmBf) throws Exception
	{
		//**********************************************************
		// 料金スケジュール定義イベント一覧照会
		// 料金計算走行日 取得
		//**********************************************************
		Object[][] ech0501b010In = {{ECH0501B010CBSMsg.TEMPLATEID, TEMPLATE_ID_ECH0501B010},
									{ECH0501B010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
									{ECH0501B010CBSMsg.KEY_EVENT_CD, "03"},					// イベントコード
									{ECH0501B010CBSMsg.KEY_STDARDYMD, opeDate}};			// 運用日
		// 実行
		CAANMsg[] ech0501b010Out = callSC(handle, scCall, param, fixedText, ech0501b010In).getCAANMsgList(ECH0501B010CBSMsg.ECH0501B010CBSMSG1LIST);
		String ech0501EvevtYmd = ech0501b010Out[0].getString(ECH0501B010CBSMsg1List.EVENT_YMD);
		
		//**********************************************************
		// サービス課金終了年月日 取得
		//**********************************************************
		String svcChrgEndYmd = getSvcChrgEndYmd(param, fixedText, opeDate, ech0501EvevtYmd);
		
		// 作業領域の取得
		Map workMap = (Map)param.getMappingWorkArea();
		HashMap workDataMap = (HashMap)workMap.get("WORK");
		
		String seiopsvcKeiNo = (String)workDataMap.get("seiopsvc_kei_no");
		
		//**********************************************************
		// 請求オプションサービス契約解約
		//**********************************************************
		Object[][] ekk0441c230In = {{EKK0441C230CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0441C230},
									{EKK0441C230CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
									{EKK0441C230CBSMsg.SEIOPSVC_KEI_NO, seiopsvcKeiNo},				// 請求オプションサービス契約番号
									{EKK0441C230CBSMsg.MSKM_DTL_NO, mskmDtlNo},						// 申込明細番号
									{EKK0441C230CBSMsg.SVC_ENDYMD, rsvAplyYmd},						// サービス終了年月日
									{EKK0441C230CBSMsg.SVC_CHRG_ENDYMD, svcChrgEndYmd},				// サービス課金終了年月日
//									{EKK0441C230CBSMsg.PLAN_END_SBT_CD, PLAN_END_SBT_CD_VALUE_2},	// プラン終了種別コード（2:解約による終了）
									{EKK0441C230CBSMsg.SVC_DSL_YMD, rsvAplyYmd},					// サービス解約年月日
									{EKK0441C230CBSMsg.SVC_DLRE_CD, SVC_DLRE_RSN_CD_VALUE_01},		// サービス解約理由コード（01:通常解約）
									{EKK0441C230CBSMsg.IDO_DIV, idoDiv},							// 異動区分
									{EKK0441C230CBSMsg.UPD_DTM_BF, updDtmBf}};						// 請求契約＿更新年月日時分秒
		
		// 実行
		CAANMsg ekk0441c230Out = callSC(handle, scCall, param, fixedText, ekk0441c230In);
		String c230OutGeneAddDtm = ekk0441c230Out.getString(EKK0441C230CBSMsg.GENE_ADD_DTM);
		String c230OutUpdDtm = ekk0441c230Out.getString(EKK0441C230CBSMsg.UPD_DTM);
		
		//**********************************************************
		// 請求オプションサービス契約解約確定
		//**********************************************************
		Object[][] ekk0441c240In = {{EKK0441C240CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0441C240},
									{EKK0441C240CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
									{EKK0441C240CBSMsg.SEIOPSVC_KEI_NO, seiopsvcKeiNo},				// 請求オプションサービス契約番号
									{EKK0441C240CBSMsg.GENE_ADD_DTM, c230OutGeneAddDtm},			// 請求オプションサービス契約解約.世代登録年月日時分秒
									{EKK0441C240CBSMsg.SVC_ENDYMD, rsvAplyYmd},						// サービス終了年月日
									{EKK0441C240CBSMsg.SVC_CHRG_ENDYMD, svcChrgEndYmd},				// サービス課金終了年月日
									{EKK0441C240CBSMsg.SVC_DSL_YMD, rsvAplyYmd},					// サービス解約年月日
									{EKK0441C240CBSMsg.SVC_DLRE_CD, SVC_DLRE_RSN_CD_VALUE_01},		// サービス解約理由コード（01:通常解約）
									{EKK0441C240CBSMsg.UPD_DTM_BF, c230OutUpdDtm}};					// 請求オプションサービス契約解約.更新年月日時分秒
		
		// 実行
		callSC(handle, scCall, param, fixedText, ekk0441c240In);
	}
	
	/**
	 * サービス課金終了年月日取得
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param opeDate
	 * @param prcSokoYmd
	 * @throws RequestParameterException, ParseException
	 */
	@SuppressWarnings("unchecked")
	private String getSvcChrgEndYmd(
										IRequestParameterReadWrite param, 
										String fixedText, 
										String opeDate, 
										String prcSokoYmd) throws RequestParameterException, ParseException
	{
		// サービス課金終了年月日
		String svcChrgEndYmd = "";
		
//		// 運用日(YYYYMM)
//		String opeDateYM = opeDate.substring(0, 6);
//		
//		// 当月１日
//		String beginOfMonth = "";
//		// 当月末日
//		String endOfMonth = "";
//		
//		// 当月１日
//		beginOfMonth = editDate(opeDateYM, FIRST_DATE);
//		
//		// 当月末日
//		endOfMonth = editDate(opeDateYM, JPCUtilCommon.getEndOfMonth(opeDateYM));
//		
//		// 運用日が「当月１日〜料金計算走行日(走行日含)」の場合
//		if(JPCUtilCommon.isFutureDate(opeDate, beginOfMonth, "1") && JPCUtilCommon.isPastDate(opeDate, prcSokoYmd, "1"))
//		{
//			// 『サービス課金終了年月日』に当月末日を設定する
//			svcChrgEndYmd = endOfMonth;
//		}
//		// 運用日が「料金計算走行日後(走行日除)〜当月末日」の場合
//		else if(JPCUtilCommon.isFutureDate(opeDate, prcSokoYmd, "0") && JPCUtilCommon.isPastDate(opeDate, endOfMonth, "1"))
//		{
//			// 『サービス課金終了年月日』に来月末日を設定する
//			String nextOpeYM = JPCUtilCommon.addMonth(opeDate, 1).substring(0, 6);
//			svcChrgEndYmd = editDate(nextOpeYM, JPCUtilCommon.getEndOfMonth(nextOpeYM));
//		}
		
		// 適用開始日
		HashMap<String, Object> ccMsg = (HashMap<String, Object>)param.getData(fixedText);
		String rsvAplyYmd = (String)ccMsg.get("rsv_aply_ymd");
		// 適用開始日の年月
		String rsvAplyYm = rsvAplyYmd.substring(0, 6);
		
		// 作業領域の取得
		Map workMap = (Map)param.getMappingWorkArea();
		HashMap workDataMap = (HashMap)workMap.get("WORK");
		
/* ++++++++++ v8.00.03 変更開始 ++++++++++ */
//		// 請求オプションサービス契約のサービス課金開始年月日
//		String svcChrgStaymd = (String)workDataMap.get("svc_chrg_staymd");
//		
//		// サービス課金開始年月日が空白　または　サービス課金開始年月≧適用開始年月の場合
//		if(svcChrgStaymd == null || "".equals(svcChrgStaymd) || JPCUtilCommon.isFutureDate(svcChrgStaymd.substring(0, 6) + "01", rsvAplyYm + "01", "1"))
//		{
//			// 『サービス課金終了年月日』に適用開始日の前月末日を設定する
//			String preRsvYM = JPCUtilCommon.addMonth(rsvAplyYmd, -1).substring(0, 6);
//			svcChrgEndYmd = editDate(preRsvYM, JPCUtilCommon.getEndOfMonth(preRsvYM));
//		}
//		// サービス課金開始年月＜適用開始年月の場合
//		else if(JPCUtilCommon.isPastDate(svcChrgStaymd.substring(0, 6) + "01", rsvAplyYm + "01", "0"))
//		{
			// 『サービス課金終了年月日』に適用開始日の当月末日を設定する
			svcChrgEndYmd = editDate(rsvAplyYm, JPCUtilCommon.getEndOfMonth(rsvAplyYm));
//		}
/* ++++++++++ v8.00.03 変更終了 ++++++++++ */
		
		return svcChrgEndYmd;
	}
	
	/**
	 * 日付編集
	 * <br>
	 * @param	yyyymm		年月
	 * @param	dd			日
	 * @return	yyyymmdd	年月日
	 */
	private String editDate(String yyyymm, String dd)
	{
		StringBuilder date = new StringBuilder();
		date.append(yyyymm);
		date.append(dd);
		
		return date.toString();
	}
	
	/**
	 * インターネットサービス契約が存在するか請求契約側からチェック。
	 * 
	 * @param handle
	 * @param param
	 * @param scCall
	 * @param fixedText
	 * @param opeDate
	 * @param mtSeikyKeiNo
	 * @param rsvAplyYmd
	 * @return boolean
	 * @throws Exception
	 */
	private boolean hasNetSvcKeiFromSeikyKei(
												SessionHandle handle, 
												IRequestParameterReadWrite param, 
												ServiceComponentRequestInvoker scCall, 
												String fixedText, 
												String opeDate, 
												String mtSeikyKeiNo, 
												String rsvAplyYmd) throws Exception
	{
		//**********************************************************
		// 請求契約側からサービス契約を検索
		// 課金先一覧照会（請求契約番号/サービス契約番号）
		//**********************************************************
		Object[][] ekk0321b002inMsg = {
										{EKK0321B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0321B002},
										{EKK0321B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
										{EKK0321B002CBSMsg.KEY_SEIKY_KEI_NO, mtSeikyKeiNo},
										{EKK0321B002CBSMsg.KEY_RSV_APLY_YMD, rsvAplyYmd}
										};
		
		CAANMsg[] ekk0321b002outMsg = callSC(handle, scCall, param, fixedText, ekk0321b002inMsg).getCAANMsgList(EKK0321B002CBSMsg.EKK0321B002CBSMSG1LIST);
		
		for(int i=0; i<ekk0321b002outMsg.length; i++)
		{
			if(isBlank(ekk0321b002outMsg[i].getString(EKK0321B002CBSMsg1List.SVC_KEI_NO)))
			{
				continue;
			}
			
			//**********************************************************
			// サービス契約一意照会
			//**********************************************************
			Object[][] ekk0081a010inMsg = {
											{EKK0081A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081A010},
											{EKK0081A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2},
											{EKK0081A010CBSMsg.KEY_SVC_KEI_NO, ekk0321b002outMsg[i].getString(EKK0321B002CBSMsg1List.SVC_KEI_NO)},
											{EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, opeDate}
											};
			
			CAANMsg[] ekk0081a010outMsg =callSC(handle, scCall, param, fixedText, ekk0081a010inMsg).getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
			
			if (ekk0081a010outMsg == null || ekk0081a010outMsg.length == 0)
			{
				continue;
			}
			
			// サービス契約ステータス
			String svcKeiStat = ekk0081a010outMsg[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
			
			// サービス契約ステータス = 910:"解約済" または 920:"キャンセル済" は対象外
			if(JKKStrConst.CD00037_DSL_ZM.equals(svcKeiStat) || JKKStrConst.CD00037_CANCEL_ZM.equals(svcKeiStat))
			{
				continue;
			}
/* ++++++++++ v8.00.02 変更開始 ++++++++++ */
			// サービスコード = 01:"インターネットサービス"か"ＭＶＮＯサービス"の契約件数が1件以上の場合
//			if(JKKStrConst.CD00130_01.equals(ekk0081a010outMsg[0].getString(EKK0081A010CBSMsg1List.SVC_CD)))
			if(JKKStrConst.CD00130_01.equals(ekk0081a010outMsg[0].getString(EKK0081A010CBSMsg1List.SVC_CD))
					|| JKKStrConst.CD00130_51.equals(ekk0081a010outMsg[0].getString(EKK0081A010CBSMsg1List.SVC_CD)))
/* ++++++++++ v8.00.02 変更終了 ++++++++++ */
			{
				return true;
			}
		}
		
		return false;
	}
	
	/**
	 * 請求オプションサービス契約存在チェック
	 * 
	 * @param handle
	 * @param param
	 * @param scCall
	 * @param fixedText
	 * @param mtSeikyKeiNo
	 * @return boolean
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private boolean isExistSeikyOpSvcKei(
											SessionHandle handle, 
											IRequestParameterReadWrite param, 
											ServiceComponentRequestInvoker scCall, 
											String fixedText, 
											String mtSeikyKeiNo) throws Exception
	{
		// 作業領域の取得
		Map workMap = (Map)param.getMappingWorkArea();
		HashMap workDataMap = (HashMap)workMap.get("WORK");
		
		//**********************************************************
		// 請求オプションサービス契約一覧照会（複合検索）
		//**********************************************************
		// 上りメッセージ作成
		Object[][] ekk0441b002inMsg = {
										{EKK0441B002CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0441B002},
										{EKK0441B002CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1},
										{EKK0441B002CBSMsg.KEY_SEIKY_KEI_NO, mtSeikyKeiNo}
										};
		
		// 実行
		CAANMsg[] ekk0441b002outMsg = callSC(handle, scCall, param, fixedText, ekk0441b002inMsg).getCAANMsgList(EKK0441B002CBSMsg.EKK0441B002CBSMSG1LIST);
		
		boolean existFlg = false;
		
		if (ekk0441b002outMsg != null && ekk0441b002outMsg.length > 0)
		{
			for(int i=0; i<ekk0441b002outMsg.length; i++)
			{
				String seiopsvcKeiStat = ekk0441b002outMsg[i].getString(EKK0441B002CBSMsg1List.SEIOPSVC_KEI_STAT);
				
				if(SEIOP_SVC_KEI_STAT_DSL_ZM.equals(seiopsvcKeiStat) || SEIOP_SVC_KEI_STAT_CANCEL_ZM.equals(seiopsvcKeiStat))
				{
					continue;
				}

				// ANK-2248-00-00 ADD START
				String seiopsvcKeiPcrs = ekk0441b002outMsg[i].getString(EKK0441B002CBSMsg1List.PCRS_CD);
				String seiopsvcKeiPplan = ekk0441b002outMsg[i].getString(EKK0441B002CBSMsg1List.PPLAN_CD);

				// 料金コースコードと料金プランコードがNHK団体一括契約は対象外
				if(SEIOP_SVC_KEI_PCRS_CD_NHK.equals(seiopsvcKeiPcrs) && SEIOP_SVC_KEI_PPLAN_CD_NHK.equals(seiopsvcKeiPplan))
				{
					continue;
				}
				// ANK-2248-00-00 ADD END

				// 作業項目マップ.請求オプションサービス契約番号 ← 請求オプションサービス契約一覧照会明細.請求オプションサービス契約番号
				if (!ekk0441b002outMsg[i].isNull(EKK0441B002CBSMsg1List.SEIOPSVC_KEI_NO))
				{
					workDataMap.put("seiopsvc_kei_no", ekk0441b002outMsg[i].getString(EKK0441B002CBSMsg1List.SEIOPSVC_KEI_NO));
					existFlg = true;
				}
				
				// 作業項目マップ.請求オプションサービス契約ステータス ← 請求オプションサービス契約一覧照会明細.請求オプションサービス契約ステータス
				if (!ekk0441b002outMsg[i].isNull(EKK0441B002CBSMsg1List.SEIOPSVC_KEI_STAT))
				{
					workDataMap.put("seiopsvc_kei_stat", ekk0441b002outMsg[i].getString(EKK0441B002CBSMsg1List.SEIOPSVC_KEI_STAT));
				}
				
				// 作業項目マップ.サービス課金開始年月日 ← 請求オプションサービス契約一覧照会明細.サービス課金開始年月日
				if (!ekk0441b002outMsg[i].isNull(EKK0441B002CBSMsg1List.SVC_CHRG_STAYMD))
				{
					workDataMap.put("svc_chrg_staymd", ekk0441b002outMsg[i].getString(EKK0441B002CBSMsg1List.SVC_CHRG_STAYMD));
				}
			}
			
		}
		
		workMap.put("WORK", workDataMap);
		param.setMappingWorkArea(workMap);
		
		return existFlg;
	}
	
	/**
	 * 請求オプションサービス契約ステータスの判定を行います。
	 * <br>
	 * @param seiopsvcKeiStat
	 * @return boolean
	 */
	private boolean isCnclSeikyOpSvcKei(String seiopsvcKeiStat)
	{
		// "010":受付済
		if(SEIOP_SVC_KEI_STAT_UK_ZM.equals(seiopsvcKeiStat))
		{
			return true;
		}
		
		// "020":照査済
		if(SEIOP_SVC_KEI_STAT_SHOSA_ZM.equals(seiopsvcKeiStat))
		{
			return true;
		}
		
		return false;
	}
	
	/**
	 * 分割対象サービス契約にネット契約("16":ｅｏモバイル（メールアドレス）,"99":マンション・オーナーは除外)
	 * が含まれているか判定します。<br>
	 * <br>
	 * @param svcCd
	 * @param prcGrpCd
	 * @return boolean
	 */
	private boolean hasNetSvcKei(String svcCd, String prcGrpCd)
	{
		
/* ++++++++++ v8.00.02 変更開始 ++++++++++ */
		// サービスコードが"01":ネットサービスか"51":ＭＶＮＯサービスの場合
//		if(JCKStrConst.SVC_CD_NET.equals(svcCd))
		if(JCKStrConst.SVC_CD_NET.equals(svcCd) || JKKStrConst.CD00130_51.equals(svcCd))
/* ++++++++++ v8.00.02 変更終了 ++++++++++ */
		{
			// "16":ｅｏモバイル（メールアドレス）
			// "99":マンション・オーナー以外が１件以上存在
			if(isTargetPrcGrpCd(prcGrpCd))
			{
				return true;
			}
		}
		
		return false;
	}
	
	/**
	 * 分割対象料金グループコードか判定を行います。
	 * 併合先サービス契約.料金グループコードが
	 * "16":ｅｏモバイル（メールアドレス）、"99":マンション・オーナーは除外
	 * <br>
	 * @param prcGrpCd
	 * @return boolean
	 */
	private boolean isTargetPrcGrpCd(String prcGrpCd)
	{
		// "16":ｅｏモバイル（メールアドレス）は除外
		if(JCKStrConst.PRC_GRP_CD_MOBILE_EOMAIL.equals(prcGrpCd))
		{
			return false;
		}
		
		// "99":マンション・オーナー は除外
		if(PRC_GRP_CD_MANS_OWNR.equals(prcGrpCd))
		{
			return false;
		}
		
		return true;
	}
	
	/**
	 * 一時支払料金番号（電話用）取得
	 * 
	 * @param handle
	 * @param scCall
	 * @param param
	 * @return fixedText
	 * @throws Throwable
	 * @throws Exception
	 */
	private String getTmpPayPrcNoForTel(
											SessionHandle handle, 
											ServiceComponentRequestInvoker scCall, 
											IRequestParameterReadWrite param, 
											String fixedText) throws Throwable, Exception
	{
		/* ++++++++++ v8.00.01 変更開始 ++++++++++ */
		// 一時支払料金番号:TMP_PAY_PRC_NO
		String tmpPayPrcNo = "";
		
		ArrayList<ArrayList<HashMap<String, Object>>> outMsgList = new ArrayList<ArrayList<HashMap<String, Object>>>();
		// 呼出相関ルール[RULE0059:事務手数料判定]を呼び出す。
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("IDO_DIV", PARAM_IDO_DIV);
		map.put("MSKM_PRC_GRP_CD", PARAM_MSKM_PRC_GRP_CD);
		map.put("IDO_RSN_CD", PARAM_IDO_RSN_CD);
		
		// RULE0059:事務手数料判定 呼出
		JRuleXMLHandler xmlHandler = createSokanRuleEngine("RULE0059001", JRuleXMLPattern.SINGLE_MODE_TYPE);
		outMsgList = xmlHandler.getCheckResultArray(map);

		// ルール[RULE0059:事務手数料判定]の結果が有る場合
		if(null != outMsgList.get(0))
		{
			tmpPayPrcNo = (String)outMsgList.get(0).get(0).get("TMP_PAY_PRC_NO");//一時支払料金番号
		}
		
		return tmpPayPrcNo;
		
//		//**********************************************************
//		// 業務パラメータ管理一意照会
//		//**********************************************************
//		Object[][] ezm0321a010InMsg = {
//										{EZM0321A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EZM0321A010},
//										{EZM0321A010CBSMsg.FUNC_CODE, "1"},
//										{EZM0321A010CBSMsg.KEY_WORK_PARAM_ID, WORK_PARAM_ID}
//										};
//		
//		CAANMsg[] ezm0321a010OutMsg = callSC(handle, scCall, param, fixedText, ezm0321a010InMsg).getCAANMsgList(EZM0321A010CBSMsg.EZM0321A010CBSMSG1LIST);
//		
//		if (ezm0321a010OutMsg == null || ezm0321a010OutMsg.length == 0)
//		{
//			return "";
//		}
//		
//		return ezm0321a010OutMsg[0].getString(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
		
		/* ++++++++++ v8.00.01 変更終了 ++++++++++ */
	}
	
	/**
	 * 引数の空文字判定を行います。
	 * @param param
	 * @return 判定結果
	 */
	private boolean isBlank(String param)
	{
		if(param == null || param.length() == 0)
		{
			return true;
		}
		return false;
	}
	
	/**
	 * 引数の空文字判定を行います。
	 * @param param
	 * @return 判定結果
	 */
	private boolean isNotBlank(String param)
	{
		if(param != null && param.length() > 0)
		{
			return true;
		}
		return false;
	}
	
	/* ++++++++++ v8.00.01 追加開始 ++++++++++ */
	/**
	 * ルール定義パス、ルールID、モードタイプ【単一条件/複数条件】を引数に、JRuleXMLHandler(String, String, int)
	 * を呼び出して相関チェック用ルールエンジンのハンドラクラスオブジェクトを生成します。
	 * <br>
	 * @param ruleId 相関チェックしたいXMLのルールID
	 * @param modeType モードタイプ SINGLE_MODE_TYPE【単一条件】/MULTI_MODE_TYPE【複数条件】
	 * @return JRuleXMLHandler 相関チェックルールエンジン用ハンドラクラスオブジェクト
	 */
	public JRuleXMLHandler createSokanRuleEngine(String ruleId, int modeType)
	{
		return new JRuleXMLHandler(JCCBPCommon.getApplicationConst(XML_PATH), ruleId, modeType);
	}
	
	/**
	 * XMLパターン判定を行い、判定結果の選択値リストを返却します。
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.保持しているXMLパターンリスト数分のXMLパターン判定を実行し、結果リスト取得します。<br>
	 * 2.実行結果リストに結果をセット（相関チェックCAANMsgリスト数分の要素を作る）します。<br>
	 * 3.実行結果がNULLの場合はリストにNULLをセットします。<br>
	 * </pre>
	 * <p>
	 * @param xmlHandler 相関チェックルールエンジン用ハンドラクラスオブジェクト
	 * @return 判定結果の選択値リスト
	 */
	public ArrayList<ArrayList<HashMap<String, Object>>> getCheckResultArray(JRuleXMLHandler xmlHandler)
	{
		return xmlHandler.getCheckResultArray();
	}
	/* ++++++++++ v8.00.01 追加終了 ++++++++++ */
}
