/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom, 2011
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKIdoRsvHanei
*   ソースファイル名：JKKIdoRsvHanei.java
*   作成者          ：富士通
*   日付            ：2011年11月25日
*＜機能概要＞
*   異動予約反映実行CCクラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/11/25   FJ）        新規作成
*   v4.00.00    2012/09/11   FJ）        案件管理：ANK-0024-05-00 お客様退会登録処理、お客様回復登録処理の追加
*                                        案件番号：ANK-0050-00-00 請求先更新処理の追加
*   v4.01.00    2012/10/31   FJ）        IT1-2012-0001921 住所変更・登録の追加
*   v4.02.00    2013/02/28   FJ）        ST3-2013-0000329 撤去解約反映の場合、サービス終了年月日を＋１日
*   v9.00.00	2014/04/30   FJ)北谷     ANK-2056-00-00対応
*   v9.01.00	2014/05/15   FJ)北谷     IT1-2014-0000137対応
*   v9.02.00    2014/05/16   FJ)北谷     IT1-2014-0000146対応
*  v10.00.00    2014/07/15   FJ)谷口    【ANK-1918-00-00】ＵＳ管理Ｓ向けｅｏ顧客ＳのＩ／Ｆ改修
*  v14.00.00    2015/06/16   FJ)中野     OM-2015-0001456 リモートサポートプラスオプションの解約予約が反映されない
*  v20.00.00    2015/11/02   FJ)中林     ANK-2197-00-00対応
*  v20.01.00    2016/01/25   FJ)中野     IT2-2016-0000003対応
*  v23.00.00    2016/03/02   FJ)森脇     OM-2016-0000505 対応
*  v25.00.00    2016/07/07   FJ)江藤     OM-2016-0001521対応
*  v25.00.01    2016/07/19   FJ)中山     【OM-2016-0000752】消去可否チェックのワーニング対応
*  v29.00.00	2017/02/13   FJ)森脇     【OM-2016-0002358】サービス課金終了年月日更新不備
*  v39.00.00	2018/09/02   FJ)澤田     【ANK-3458-00-00】契約者氏名変更時の副次処理を追加（緊急通報氏名の更新）
*  v50.00.00	2020/06/15   FJ)平野	 【ANK-3754-00-00】トビラフォン対応
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKAddSjishoConst;
import com.fujitsu.futurity.bp.custom.constant.JKKDslRunConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKFmtcelIdoInfAddConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKHakkoSODConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKIdoRsvHaneiConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
import com.fujitsu.futurity.bp.custom.constant.KKSV0223_KKSV0223OP;
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.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0201B001CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0201B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B005CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B005CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0341B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0361A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0361C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0371C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0381C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0391C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0401B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0411A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0411C050CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0421C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0431C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0481B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0481B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0491A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0491A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1091B502CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091B502CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1681A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1681A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0181A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0181B020CBSMsg;

/**
 * 異動予約反映実行部品です。<p>
 * <br>
 * @author FJ
 */
public class JKKIdoRsvHanei extends AbstractCommonComponent
{
	
	/** 異動区分　00003：オプション引継 */
	public static final String IDO_DIV_OP_HKTGI = "00003";
	
	/** 異動区分　00005：解約 */
	public static final String IDO_DIV_DSL = "00005";
	
	/** 異動区分　00006：撤去（解約） */
	public static final String IDO_DIV_TEKKYO_DSL = "00006";
	
	/** 異動区分　00013：お客様併合 */
	public static final String IDO_DIV_CUST_HEIGO = "00013";
	
	/** 異動区分　00014：お客様分割 */
	public static final String IDO_DIV_CUST_BNKT = "00014";
	
	/** 異動区分　00016：請求契約併合 */
	public static final String IDO_DIV_SEIKY_HEIGO = "00016";
	
	/** 異動区分　00017：請求契約分割 */
	public static final String IDO_DIV_SEIKY_BNKT = "00017";

	// ADD START 2012/10/31 IT1-2012-0001921
	/** 異動区分　00019：住所変更・登録 */
	public static final String IDO_DIV_ADDCHG_REG = "00019";
	// ADD END   2012/10/31 IT1-2012-0001921
	
	/** 異動区分　00024：休止受付 */
	public static final String IDO_DIV_PAUSE_UK = "00024";
	
	// ST3-2013-0000247 2013/01/30 ADD START
	/** 異動区分　00025：休止変更・予約取消 */
	public static final String IDO_DIV_PAUSE_HEN = "00025";
	// ST3-2013-0000247 2013/01/30 ADD START
	
	/** 異動区分　00026：機器契約変更 */
	public static final String IDO_DIV_KIKI_KEI_CHG = "00026";
	
	/** 異動区分　00031：オプション設定 */
	public static final String IDO_DIV_OP_SETTE = "00031";
	
	/** 異動区分　00043：光電話・番号解約 */
	public static final String IDO_DIV_HTELNODSL = "00043";
	
	// ▼▼▼▼▼ ANK-2197-00-00 2015/11/02 ADD START ▼▼▼▼▼
	/** 異動区分　00066：TV契約主従料金設定 */
	public static final String IDO_DIV_TV_MAINSUBKEI = "00066";
	// ▲▲▲▲▲ ANK-2197-00-00 2015/11/02 ADD END ▲▲▲▲▲

	// ADD START 2012/10/31 IT1-2012-0001921
	/** 異動予約詳細コード　003：コース変更 */
	public static final String IDO_RSV_DTL_CD_COURCE_CHG = "003";
	// ADD END   2012/10/31 IT1-2012-0001921
	
	/** 異動予約詳細コード　005：サービス休止 */
	public static final String IDO_RSV_DTL_CD_SVC_PAUSE = "005";
	
	/** 異動予約詳細コード　006：サービス休止解除 */
	public static final String IDO_RSV_DTL_CD_SVC_PAUSE_RLS = "006";

	// ADD START 2012/10/31 IT1-2012-0001921
	/** 異動予約詳細コード　007：サービス解約 */
	public static final String IDO_RSV_DTL_CD_SVC_DSL = "007";
	// ADD END   2012/10/31 IT1-2012-0001921
	
	/** 異動予約詳細コード　013：機器解約 */
	public static final String IDO_RSV_DTL_CD_KIKI_DSL = "013";
	
	/** 異動予約詳細コード　014：オプション開始 */
	public static final String IDO_RSV_DTL_CD_OP_STA = "014";
	
	/** 異動予約詳細コード　016：オプション解約 */
	public static final String IDO_RSV_DTL_CD_OP_DSL = "016";

	// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/07 START
	/** 異動予約詳細コード　017：サブオプション開始 */
	public static final String IDO_RSV_DTL_CD_SBOP_STA = "017";
	
	/** 異動予約詳細コード　018：サブオプション解約 */
	public static final String IDO_RSV_DTL_CD_SBOP_DSL = "018";
	// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/07 END
	// ANK-2056-00-00 2014/04/28 start
	/** 異動予約詳細コード　027：電話オプションパック割引開始 */
	public static final String IDO_RSV_DTL_CD_TEL_OPPAC_STA = "027";
	
	/** 異動予約詳細コード　028：電話オプションパック割引解約 */
	public static final String IDO_RSV_DTL_CD_TEL_OPPAC_DSL = "028";
	// ANK-2056-00-00 2014/04/28 end

	/** 異動理由コード　39：お客様都合による契約先合併 */
	public static final String IDO_RSN_CD_CUST_HEIGO = "39";
	
	/** 異動理由コード　40：お客様都合による契約先分割 */
	public static final String IDO_RSN_CD_CUST_BNKT = "40";
	
	/** 異動理由コード　56：その他 */
	public static final String IDO_RSN_CD_OTHER = "56";
	
	/** 異動理由コード　B9：お客様申告による請求先分割 */
	public static final String IDO_RSN_CD_SEIKY_BNKT = "B9";
	
	/** 異動理由コード　C0：お客様申告による請求先併合 */
	public static final String IDO_RSN_CD_SEIKY_HEIGO = "C0";
	
	/** 進捗ステータス　1501：契約者分割登録完了 */
	public static final String PRG_STAT_CUST_BNKT = "1501";
	
	/** 進捗ステータス　1601：契約者併合登録完了 */
	public static final String PRG_STAT_CUST_HEIGO = "1601";
	
	/** 進捗ステータス　3200：レンタル解約完了 */
	public static final String PRG_STAT_RENT_DSLFIN = "3200";
	
	/** 進捗ステータス　3801：返品依頼中 */
	public static final String PRG_STAT_HEMPN_REQ_CHU = "3801";
	
	/** 進捗ステータス　4300：請求先分割完了 */
	public static final String PRG_STAT_SEIKY_BNKT = "4300";
	
	/** 進捗ステータス　4400：請求先併合完了 */
	public static final String PRG_STAT_SEIKY_HEIGO = "4400";
	
	/** 進捗ステータス　5102：オプション設定完了 */
	public static final String PRG_STAT_OP_SET_FIN = "5102";
	// ANK-2056-00-00 2014/04/28 start
	/** 進捗ステータス　5112：eo光電話オプションパック設定完了 */
	public static final String PRG_STAT_OPPAC_SET_FIN = "5112";
	// ANK-2056-00-00 2014/04/28 end
	
	/** 会員種別　00：非eo会員 */
	public static final String MEMBER_SBT_CD_NOT_EO = "00";
	
	/** 会員種別　10：マスター会員（個人） */
	public static final String MEMBER_SBT_CD_MST_KOJIN = "10";

	/** 会員種別　11：ファミリー会員（個人） */
	public static final String MEMBER_SBT_CD_FAMILY_KOJIN = "11";

	/** 会員種別　20：マスター会員（法人） */
	public static final String MEMBER_SBT_CD_MST_HOJIN = "20";

	/** 会員種別　21：ファミリー会員（法人） */
	public static final String MEMBER_SBT_CD_FAMILY_HOJIN = "21";

	/** 会員種別　30：オープン会員 */
	public static final String MEMBER_SBT_CD_OPEN = "30";

	/** 連絡方法コード　003：電話番号 */
	public static final String RRK_WAY_CD_TEL = "003";
	
	/** 契約者タイプコード　1：個人 */
	public static final String KEISHA_TYPE_CD_KOJIN = "1";
	
	/** 支払い方法入力支援コード　2：ISP決済 */
	public static final String PAYWAY_INPUT_SHIEN_CD_ISP = "2";
	
	/** 事務手数料自動適用要否　1：有り */
	public static final String AUTO_APLY_ARI = "1";
	
	/** 起動元コード　02：バッチ */
	public static final String KIDO_CD_BAT = "02";
	
	/** 工事受付コード　070：内容変更 */
	public static final String KOJI_UK_CD_NAIYO_CHG = "070";
	
	/** 工事受付詳細コード　A1：お客様情報変える */
	public static final String KOJI_UK_DTAIL_CD_CUST_CHG = "A1";
	
	/** エラーメッセージ */
	private static final String ERR_MSG = "INVALID_RETURN_MESSAGE";
	
	/** 処理結果（正常終了） */
	private static final String TRAN_RSLT_NORMAL_END = "00";
	/** 処理結果（反映取消） */
	private static final String TRAN_RSLT_HANEI_CL = "01";
	// 2013-04-19 ADD_START
	/** 処理結果（反映スキップ）*/
	private static final String TRAN_RSLT_HANEI_SKIP = "02";
	// 2013-04-19 ADD_END
	
	/** 機器提供サービス契約ステータス（解約済） */
	public static final String KKTK_SVC_KEI_STAT_DSL_ZM = "910";
	/** 機器提供サービス契約ステータス（キャンセル済） */
	public static final String KKTK_SVC_KEI_STAT_CNCL_ZM = "920";

	// ANK-2056-00-00 2014/04/28 start
	/** サービス契約ステータス（受付済） */
	public static final String SVC_KEI_STAT_UKE_ZM = "010";
	// ANK-2056-00-00 2014/04/28 end
	/** サービス契約ステータス（締結済） */
	public static final String SVC_KEI_STAT_CNC_ZM = "030";
	/** サービス契約ステータス（利用停止中） */
	public static final String SVC_KEI_STAT_USE_STP = "220";
	/** サービス契約ステータス（解約済） */
	public static final String SVC_KEI_STAT_DSL_ZM = "910";
	/** サービス契約ステータス（キャンセル済） */
	public static final String SVC_KEI_STAT_CNCL_ZM = "920";
	
	/** サービスコード（インターネットサービス） */
	public static final String SVC_CD_IN_SVC = "01";
	/** サービスコード（電話サービス） */
	public static final String SVC_CD_TEL_SVC = "02";
	/** サービスコード（テレビサービス） */
	public static final String SVC_CD_TV_SVC = "03";
	/** サービスコード（ホスティングサービス） */
	public static final String SVC_CD_HOS_SVC = "04";
	
	/** CD01262:宅内機器種別コード（ルーター） */
	public static final String TAKNKIKI_SBT_CD_BBR = "F0";
	
	/** サービス解約理由コード（通常解約） */
	public static final String SVC_DLRE_TUJYO_DSL = "01";
	// ANK-2056-00-00 2014/04/28 start
	/** サービスキャンセル理由コード（申出によるキャンセル） */
	public static final String SVC_CANCEL_RSN_CD_01 = "01";
	// ANK-2056-00-00 2014/04/28 end
	
	/** オプションサービスコード（Ｅメール） */
	public static final String OP_SVC_CD_EMAIL = "B001";
	
	/** オプションサービスコード（Myホームページ） */
	public static final String OP_SVC_CD_MYHP = "B002";
	
	/** オプションサービスコード（メールエイリアス） */
	public static final String SBOP_SVC_CD_MAILALIAS = "D01";
	
	// ▼▼▼▼▼ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD START ▼▼▼▼▼
	/** オプションサービスコード（割込電話） */
	public static final String OP_SVC_CD_WARIKOMITEL = "B023";	
	// ▲▲▲▲▲ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD END   ▲▲▲▲▲
	
	//OM-2015-0001456 ADD START
	/** オプションサービスコード（リモートサポートプラス） */
	public static final String OP_SVC_CD_RIMOSAPO = "B021";	
	//OM-2015-0001456 ADD END
	// ANK-1918-00-00 2014/07/15 ADD START
	/** オプションサービスコード（スマートリンクプレミアム） */
	public static final String OP_SVC_CD_SMARTLINK_PREMIUM = "B077";
	// ANK-1918-00-00 2014/07/15 ADD END

//OM-2016-0000752 ADD START
	/** エイジング種別コード（電話番号） */
	public static final String AGING_SBT_CD_TELNO = "001";
//OM-2016-0000752 ADD END
	/** エイジング種別コード（固定IPアドレス） */
	public static final String AGING_SBT_CD_FIXIPAD = "002";
	/** エイジング種別コード（URL） */
	public static final String AGING_SBT_CD_URL = "005";
	/** エイジング種別コード（WebID） */
	public static final String AGING_SBT_CD_WEBID = "006";
	/** エイジング種別コード（POPID） */
	public static final String AGING_SBT_CD_POPID = "007";
	/** エイジング種別コード（メールエイリアス） */
	public static final String AGING_SBT_CD_MAILALIAS = "008";
	/** エイジング種別コード（メールアドレス） */
	public static final String AGING_SBT_CD_MLAD = "009";
	/** エイジング種別コード（メーリングリスト） */
	public static final String AGING_SBT_CD_MLLIST = "010";
	
	// ST2-2012-0001575 2012/08/30 start
	/** 即時/翌月（設定なし） */
	public static final String SKJ_YKGT_NASHI = "00";
	// ST2-2012-0001575 2012/08/30 end
	/** 即時/翌月（即時） */
	public static final String SKJ_YKGT_SOKUJI = "01";

// 未使用
//	/** 異動予約状態コード：未反映 */
//	private static final String IDO_RSV_STAT_CD_MIHANEI = "00";
// 未使用
	
	/** 異動予約状態コード：反映済み */
	private static final String IDO_RSV_STAT_CD_HANEIZM = "01";

	/** 異動予約状態コード：取消済み */
	private static final String IDO_RSV_STAT_CD_CLZM = "02";

	/** サービスインタフェース呼び出しで使用するマッパー群 */
	private JKKIdoRsvHaneiMapperCC mapper = null;
	
	/** SC呼び出し部品 */
	ServiceComponentRequestInvoker scCall = null;
	
// ADD START 2012/09/11 案件番号：ANK-0050-00-00
	/** マップCCID */
	private static final String MAP_JACSEIKYUPDCC_ID = "JACSEIKYUPDCC";
	
	/** マップCCID */
	private static final String MAP_JCKCUSTTAIKAICMNCC_ID = "JCKCustTaikaiCmnCC";
	
	/** マップCCID */
	private static final String MAP_JCKCUSTKAIHKCMNCC_ID = "JCKCustKaihkCmnCC";
	// ANK-3458-00-00 ADD START
	/** マップCCID */
	private static final String FIXED_KEY_JKK_EMG_RRK_SNM_UPD_CC = "JKKEmgRrksNmUpdCC";
	// ANK-3458-00-00 ADD END
	/** 請求先更新依頼リスト */
	private static final String SEIKY_UPD_LIST = "JACseikyupdMsg1List";
// ADD END 2012/09/11 案件番号：ANK-0050-00-00

	private static final String SKIP_DATA_MAP = "SKIP_DATA_MAP";

	/**
	 * 異動予約反映実行の初期処理です。
	 * 
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return void
	 * @throws Throwable 
	 */
	private void init(IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		// マッパーの初期化
		if (null == this.mapper)
		{
			this.mapper = new JKKIdoRsvHaneiMapperCC();
		}
		
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		if (null == this.scCall)
		{
			this.scCall = new ServiceComponentRequestInvoker();
		}
		
		// リターンコードに正常を設定
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, JCMConstants.RET_NORMAL);
	}

	// ▼▼▼▼▼ 2013/02/28 ST3-2013-0000329 UPD START ▼▼▼▼▼
	/**
	 * 異動予約反映実行処理です。
	 * <br>
	 * パラメータの異動区分、異動予約詳細コードに従って異動予約反映処理を実行します。
	 * <br>
	 * @param	handle		セッションマネージャなどを持ったハンドル
	 * @param	param		モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param	trgtData	対象データ
	 * @param	fixedText	ユーザ任意文字列
	 * @throws	Throwable	
	 */
	@SuppressWarnings("unchecked")
	public void runIdoRsvHanei(SessionHandle handle, IRequestParameterReadWrite param, HashMap trgtData, String fixedText)
	throws Throwable
	{
		init(param, fixedText);

		// 対象データから業務情報を取得
		String idoDiv             = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_DIV);					// 異動区分
		String svcKeiNo           = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SVC_KEI_NO);					// サービス契約番号
		String trnDate            = (String)trgtData.get(JKKIdoRsvHaneiConstCC.TRN_DATE);					// 
// IT1-2013-0001149対応 20130505 星野 ADD START
		// 異動予約詳細コード
		String idoRsvDtlCd        = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_RSV_DTL_CD);
// IT1-2013-0001149対応 20130505 星野 ADD END

		// 処理結果
		String tranRslt = null;

		// サービス契約一意照会データ
		CAANMsg msgEKK0081A010 = null;

		if (!isNull(svcKeiNo))
		{
			// サービス契約一意照会処理を呼び出す
			msgEKK0081A010 = searchSvcKeiSngl(handle, param, fixedText, svcKeiNo, trnDate);

			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			// 異動予約反映判定処理                           //
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
// IT1-2013-0001149対応 20130505 星野 MOD START
			tranRslt = checkTran(msgEKK0081A010, idoDiv, idoRsvDtlCd);
// IT1-2013-0001149対応 20130505 星野 MOD END
		}
		else
		{
			// 上記以外の場合、処理結果に'01'(反映取消)を設定
			tranRslt = TRAN_RSLT_HANEI_CL;
		}

		// 処理結果が設定されていない場合
		if (isNull(tranRslt))
		{
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			// 異動予約反映処理                               //
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			// 20130712 IT2-2013-0000585 START
			tranRslt = idoRsvHanei(handle, param, trgtData, fixedText, idoDiv, msgEKK0081A010);
			// 20130712 IT2-2013-0000585 END
		}

		// 処理結果が「反映スキップ」以外の場合
		if (!TRAN_RSLT_HANEI_SKIP.equals(tranRslt))
		{
			// (処理結果が正常終了、かつ、異動区分が休止受付または休止変更・予約取消)以外の場合
			if (!(TRAN_RSLT_NORMAL_END.equals(tranRslt) &&
					(IDO_DIV_PAUSE_UK.equals(idoDiv) || IDO_DIV_PAUSE_HEN.equals(idoDiv))))
			{
				// ++++++++++++++++++++++++++++++++++++++++++++++ //
				// 異動予約状態更新                               //
				// ++++++++++++++++++++++++++++++++++++++++++++++ //
				updateIdoRsv(handle, param, fixedText, trgtData, tranRslt);
			}
		}
		// 処理結果が「反映スキップ」の場合
		else
		{
			trgtData.put(SKIP_DATA_MAP, msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
		}
	}
	// ▲▲▲▲▲ 2013/02/28 ST3-2013-0000329 UPD E N D ▲▲▲▲▲

	/**
	 * 
	 * 異動予約反映処理
	 * @param	handle
	 * @param	param
	 * @param	trgtData
	 * @param	fixedText
	 * @param	idoDiv
	 * @param	msgEKK0081A010
	 */
	@SuppressWarnings("unchecked")
	private String idoRsvHanei(SessionHandle handle, IRequestParameterReadWrite param,
			HashMap trgtData, String fixedText, String idoDiv, CAANMsg msgEKK0081A010) throws Throwable
	{
		// 処理結果
		String tranRslt           = null;
		// 異動予約詳細コード
		String idoRsvDtlCd        = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_RSV_DTL_CD);
		
		// ********************************************** //
		// 異動区分がお客様併合の場合                     //
		// ********************************************** //
		if (IDO_DIV_CUST_HEIGO.equals(idoDiv))
		{
			// お客様併合/分割処理を呼び出す
			tranRslt = heigoBnktCust(handle, param, trgtData, fixedText, msgEKK0081A010);
		}
		// ********************************************** //
		// 異動区分がお客様分割の場合                     //
		// ********************************************** //
		else if (IDO_DIV_CUST_BNKT.equals(idoDiv))
		{
			// お客様併合/分割処理を呼び出す
			tranRslt = heigoBnktCust(handle, param, trgtData, fixedText, msgEKK0081A010);
		}
		// ********************************************** //
		// 異動区分が請求契約併合の場合                   //
		// ********************************************** //
		else if (IDO_DIV_SEIKY_HEIGO.equals(idoDiv))
		{
			// 請求契約併合/分割処理を呼び出す
			tranRslt = heigoBnktSeiky(handle, param, trgtData, fixedText, msgEKK0081A010);
		}
		// ********************************************** //
		// 異動区分が請求契約分割の場合                   //
		// ********************************************** //
		else if (IDO_DIV_SEIKY_BNKT.equals(idoDiv))
		{
			// 請求契約併合/分割処理を呼び出す
			tranRslt = heigoBnktSeiky(handle, param, trgtData, fixedText, msgEKK0081A010);
		}
		// ********************************************** //
		// 異動区分が解約、撤去（解約）、                 //
		// 　光電話・番号解約、                           //
		// 　住所変更・登録．サービス解約の場合           //
		// ********************************************** //
		else if (
				IDO_DIV_DSL.equals(idoDiv)
				|| IDO_DIV_TEKKYO_DSL.equals(idoDiv)
				|| IDO_DIV_HTELNODSL.equals(idoDiv)
				|| (IDO_DIV_ADDCHG_REG.equals(idoDiv) && IDO_RSV_DTL_CD_SVC_DSL.equals(idoRsvDtlCd))
		)
		{
			if (IDO_DIV_ADDCHG_REG.equals(idoDiv) && IDO_RSV_DTL_CD_SVC_DSL.equals(idoRsvDtlCd))
			{
				// ********************************************** //
				// 異動区分が                                     //
				// 　住所変更・登録．サービス解約の場合           //
				// ********************************************** //
				setAdchgIdoDiv(handle, param, fixedText, trgtData);
			}

			// サービス契約解約・撤去(解約)処理を呼び出す
			tranRslt = dslSvcKei(handle, param, trgtData, fixedText, msgEKK0081A010);
		}
		// ********************************************** //
		// 異動区分が休止受付、休止変更・予約取消の場合   //
		// ********************************************** //
		else if (IDO_DIV_PAUSE_UK.equals(idoDiv) || IDO_DIV_PAUSE_HEN.equals(idoDiv))
		{
			// 休止受付処理を呼び出す
			tranRslt = pauseReceptu(handle, param, trgtData, fixedText, msgEKK0081A010);
		}
		// ********************************************** //
		// 異動区分がオプション設定、                     //
		// 　住所変更・登録．オプション解約の場合         //
		// ********************************************** //
		else if (
				IDO_DIV_OP_SETTE.equals(idoDiv)
				|| (IDO_DIV_ADDCHG_REG.equals(idoDiv) && IDO_RSV_DTL_CD_OP_DSL.equals(idoRsvDtlCd) && isOpHikitugi(trgtData))
		)
		{
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			// 異動予約詳細コードがオプション開始の場合       //
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			if (IDO_RSV_DTL_CD_OP_STA.equals(idoRsvDtlCd))
			{
				// オプション登録処理を呼び出す
				tranRslt = updateOpAdd(handle, param, trgtData, fixedText, msgEKK0081A010);
			}
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			// 異動予約詳細コードがオプション解約の場合       //
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			else if (IDO_RSV_DTL_CD_OP_DSL.equals(idoRsvDtlCd))
			{
				// オプション解約処理を呼び出す
				tranRslt = updateOpDsl(handle, param, trgtData, fixedText, msgEKK0081A010);
			}
			// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/07 START
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			// 異動予約詳細コードがサブオプション開始の場合   //
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			if (IDO_RSV_DTL_CD_SBOP_STA.equals(idoRsvDtlCd))
			{
				// サブオプション登録処理を呼び出す
				tranRslt = updateSbopAdd(handle, param, trgtData, fixedText, msgEKK0081A010);
			}
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			// 異動予約詳細コードがサブオプション解約の場合   //
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			else if (IDO_RSV_DTL_CD_SBOP_DSL.equals(idoRsvDtlCd))
			{
				// サブオプション解約処理を呼び出す
				tranRslt = updateSbopDsl(handle, param, trgtData, fixedText, msgEKK0081A010);
			}
			// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/07 END
		}
		// ********************************************** //
		// 異動区分がオプション引継、                     //
		// 　住所変更・登録．オプション解約の場合         //
		// ********************************************** //
		else if (
				IDO_DIV_OP_HKTGI.equals(idoDiv)
				|| (IDO_DIV_ADDCHG_REG.equals(idoDiv) && IDO_RSV_DTL_CD_OP_DSL.equals(idoRsvDtlCd) && !isOpHikitugi(trgtData))
		)
		{
			// オプション引継処理を呼び出す
			tranRslt = updateOpHktgi(handle, param, trgtData, fixedText, msgEKK0081A010);
		}
		// ********************************************** //
		// 異動区分が機器契約変更、                       //
		// 　住所変更・登録．機器解約の場合               //
		// ********************************************** //
		else if (
				IDO_DIV_KIKI_KEI_CHG.equals(idoDiv)
				|| (IDO_DIV_ADDCHG_REG.equals(idoDiv) && IDO_RSV_DTL_CD_KIKI_DSL.equals(idoRsvDtlCd))
		)
		{
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			// 異動予約詳細コードが機器解約の場合             //
			// ++++++++++++++++++++++++++++++++++++++++++++++ //
			if (IDO_RSV_DTL_CD_KIKI_DSL.equals(idoRsvDtlCd))
			{
				// 機器契約解約処理を呼び出す
				tranRslt = updateKikiKeiDsl(handle, param, trgtData, fixedText, msgEKK0081A010);
			}
		}
		// ANK-2056-00-00 2014/04/28 start
		// ********************************************** //
		// 異動区分が住所変更・登録  電話オプションパック割引開始の場合               //
		// ********************************************** //
		else if (IDO_DIV_ADDCHG_REG.equals(idoDiv) && IDO_RSV_DTL_CD_TEL_OPPAC_STA.equals(idoRsvDtlCd))
		{
			// 電話オプションパック割引開始処理を呼び出す
			tranRslt = updateOpPacAdd(handle, param, trgtData, fixedText, msgEKK0081A010);
		}
		// ********************************************** //
		// 異動区分が住所変更・登録  電話オプションパック割引解約の場合               //
		// ********************************************** //
		else if (IDO_DIV_ADDCHG_REG.equals(idoDiv) && IDO_RSV_DTL_CD_TEL_OPPAC_DSL.equals(idoRsvDtlCd))
		{
			// 電話オプションパック割引解約処理を呼び出す
			tranRslt = updateOpPacDsl(handle, param, trgtData, fixedText, msgEKK0081A010);
		}
		// ANK-2056-00-00 2014/04/28 end
		// ▼▼▼▼▼ ANK-2197-00-00 2015/11/02 ADD START ▼▼▼▼▼
		// ********************************************** //
		// 異動区分がTV契約主従料金設定の場合               //
		// ********************************************** //
		else if (IDO_DIV_TV_MAINSUBKEI.equals(idoDiv) == true)
		{
			// STB主従切替処理を呼び出す
			tranRslt = runMainSubKeiJudge(handle, param, trgtData);
		}
		// ▲▲▲▲▲ ANK-2197-00-00 2015/11/02 ADD END ▲▲▲▲▲
		
		return tranRslt;
	}
	
	/**
	 * 異動予約反映判定処理
	 * @param msgEKK0081A010
	 * @param idoDiv 
	 */
// IT1-2013-0001149対応 20130505 星野 MOD START
	private String checkTran(CAANMsg msgEKK0081A010, String idoDiv, String idoRsvDtlCd)
// IT1-2013-0001149対応 20130505 星野 MOD END
	{
		String checkTran = null;

		// サービス解約理由コード
		String svcDlreCd  = msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_DLRE_CD);
		String svcKeiStat = msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);

		// ****************************************************
		// キャンセル済
		// ****************************************************
		if (SVC_KEI_STAT_CNCL_ZM.equals(svcKeiStat))
		{
			// ================================
			// 異動区分が以下以外の場合
			// ================================
			if(
					!IDO_DIV_OP_HKTGI.equals(idoDiv) 
					&& !IDO_DIV_CUST_HEIGO.equals(idoDiv) 
					&& !IDO_DIV_CUST_BNKT.equals(idoDiv) 
					&& !IDO_DIV_SEIKY_HEIGO.equals(idoDiv)
					&& !IDO_DIV_SEIKY_BNKT.equals(idoDiv)
			)
			{
				checkTran = TRAN_RSLT_HANEI_CL;
			}
		}
		// ****************************************************
		// 解約済
		// ****************************************************
		else if (SVC_KEI_STAT_DSL_ZM.equals(svcKeiStat))
		{
			// ****************************************************
			// 強制解約済
			// ****************************************************
			if (JKKSvcConst.SVC_DLRE_CD_KYOSEIDSL.equals(svcDlreCd))
			{
				// ================================
				// 異動区分が以下の場合
				// ================================
				if (
						IDO_DIV_OP_HKTGI.equals(idoDiv) 
						|| IDO_DIV_DSL.equals(idoDiv) 
						|| IDO_DIV_OP_SETTE.equals(idoDiv) 
						|| IDO_DIV_PAUSE_UK.equals(idoDiv)
						|| IDO_DIV_PAUSE_HEN.equals(idoDiv)
						|| IDO_DIV_KIKI_KEI_CHG.equals(idoDiv)
				)
				{
					checkTran = TRAN_RSLT_HANEI_SKIP;
				}
				// ================================
				// 異動区分が以下の場合
				// ================================
				else if (IDO_DIV_TEKKYO_DSL.equals(idoDiv))
				{
					checkTran = TRAN_RSLT_HANEI_CL;
				}
			}
			// ****************************************************
			// 解約済
			// ****************************************************
			else
			{
				// ================================
				// 異動区分が以下以外の場合
				// ================================
				if(
						!IDO_DIV_OP_HKTGI.equals(idoDiv) 
						&& !IDO_DIV_CUST_HEIGO.equals(idoDiv) 
						&& !IDO_DIV_CUST_BNKT.equals(idoDiv) 
						&& !IDO_DIV_SEIKY_HEIGO.equals(idoDiv)
						&& !IDO_DIV_SEIKY_BNKT.equals(idoDiv)
// IT1-2013-0001149対応 20130505 星野 MOD START
						&& !(IDO_DIV_ADDCHG_REG.equals(idoDiv) && IDO_RSV_DTL_CD_KIKI_DSL.equals(idoRsvDtlCd))
// IT1-2013-0001149対応 20130505 星野 MOD END
				)
				{
					checkTran = TRAN_RSLT_HANEI_CL;
				}
			}
		}
		// ****************************************************
		// 利用停止中
		// ****************************************************
		else if (SVC_KEI_STAT_USE_STP.equals(svcKeiStat))
		{
			// ================================
			// 異動区分が以下の場合
			// ================================
			if (
					IDO_DIV_PAUSE_UK.equals(idoDiv)
					|| IDO_DIV_PAUSE_HEN.equals(idoDiv)
			)
			{
				checkTran = TRAN_RSLT_HANEI_SKIP;
			}
		}

		return checkTran;
	}
	
	/**
	 * お客様併合/分割処理です。
	 * 
	 * お客様併合/分割処理を実行します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 業務情報を保持するマップ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 サービス契約一意照会結果データ
	 * @return 処理結果
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private String heigoBnktCust(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			HashMap trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010
	) throws Throwable
	{
		HashMap<String, Object> tmpInMap = null;
		CAANMsg tmpRsltMsg       = null;
		CAANMsg[] tmpRsltMsgList = null;

		String tmpWorkMapKey  = null;
		String rrksTelno      = null;
		String prgStat        = null;
		String heigoBnktSysid = null;

		boolean tmpWorkMapKeyFlg = false;

		JKKKojiAnkenCC kojiAnkenCC   = new JKKKojiAnkenCC();	// 工事案件CC

		CAANMsg msgECK0011A010       = null;					// お客様一意照会結果データ
		CAANMsg[] msgListECK0201B001 = null;					// 連絡先一覧照会結果データ
		CAANMsg msgTelECK0201B001    = null;					// 連絡先一覧照会結果の連絡方法が電話番号のデータ
		CAANMsg msgEKK0021A010       = null;					// 申込明細一意照会結果データ
		CAANMsg[] msgListEZM0181B020 = null;					// 電話番号予約一覧照会データ

		// 対象データから業務情報を取得
		String idoDiv    = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_DIV);
		String trnDate   = (String)trgtData.get(JKKIdoRsvHaneiConstCC.TRN_DATE);
		String sysid     = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SYSID);
		String mskmDtlNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.MSKM_DTL_NO);
		String svcKeiNo  = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SVC_KEI_NO);

		if (IDO_DIV_CUST_HEIGO.equals(idoDiv))
		{
			// お客様併合
			heigoBnktSysid = (String)trgtData.get(JKKIdoRsvHaneiConstCC.HEIGO_SK_SYSID);
		}
		else
		{
			// お客様分割
			heigoBnktSysid = (String)trgtData.get(JKKIdoRsvHaneiConstCC.BUNKATSU_SK_SYSID);
		}

		// IT1-2012-0002349 ADD START
		// 処理対象のSYSID(お客様併合の場合：併合先SYSID、お客様分割の場合：分割先SYSID)とサービス契約のSYSIDが一致する場合は反映取消を返却する
		if (heigoBnktSysid.equals(msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SYSID)))
		{
			return TRAN_RSLT_HANEI_CL;
		}
		// IT1-2012-0002349 ADD END

		// お客様一意照会(併合/分割先)を呼び出す
		// 上りマッピング処理
		tmpInMap = this.mapper.editInMsgECK0011A010(param, heigoBnktSysid, trnDate);
		// サービスインターフェース呼び出し
		tmpRsltMsg = callSvcInter(handle, param, fixedText, tmpInMap);

		// お客様一意照会の結果を取り出す
		tmpRsltMsgList = tmpRsltMsg.getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST);
		if (0 == tmpRsltMsgList.length)
		{
			// お客様一意照会で検索結果が0件の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}
		else
		{
			msgECK0011A010 = tmpRsltMsgList[0];
		}

		// 連絡先一覧照会(併合/分割先)を呼び出す
		// 上りマッピング処理
		tmpInMap = this.mapper.editInMsgECK0201B001(param, heigoBnktSysid);
		// サービスインターフェース呼び出し
		tmpRsltMsg = callSvcInter(handle, param, fixedText, tmpInMap);

		// 連絡先一覧照会の結果を取り出す
		msgListECK0201B001 = tmpRsltMsg.getCAANMsgList(ECK0201B001CBSMsg.ECK0201B001CBSMSG1LIST);

		// 連絡先電話番号の取得
		for (int i = 0; i < msgListECK0201B001.length; i++)
		{
			String rrkWayCd = msgListECK0201B001[i].getString(ECK0201B001CBSMsg1List.RRK_WAY_CD);
			if (RRK_WAY_CD_TEL.equals(rrkWayCd))
			{
				msgTelECK0201B001 = msgListECK0201B001[i];
				rrksTelno = msgTelECK0201B001.getString(ECK0201B001CBSMsg1List.TELNO);
				break;
			}
		}

		// 申込明細一意照会を呼び出す
		// 上りマッピング処理
		tmpInMap = this.mapper.editInMsgEKK0021A010(param, mskmDtlNo);
		// サービスインターフェース呼び出し
		tmpRsltMsg = callSvcInter(handle, param, fixedText, tmpInMap);

		// 申込明細一意照会の結果を取り出す
		tmpRsltMsgList = tmpRsltMsg.getCAANMsgList(EKK0021A010CBSMsg.EKK0021A010CBSMSG1LIST);
		if (0 == tmpRsltMsgList.length)
		{
			// 申込明細一意照会で検索結果が0件の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}
		else
		{
			msgEKK0021A010 = tmpRsltMsgList[0];
		}

		// 電話番号予約一覧照会を呼び出す
		// 上りマッピング処理
		tmpInMap = this.mapper.editInMsgEZM0181B020(param, sysid, svcKeiNo);
		// サービスインターフェース呼び出し
		tmpRsltMsg = callSvcInter(handle, param, fixedText, tmpInMap);

		// 電話番号予約一覧照会の結果を取り出す
		msgListEZM0181B020 = tmpRsltMsg.getCAANMsgList(EZM0181B020CBSMsg.EZM0181B020CBSMSG1LIST);

		// サービス契約お客様変更を呼び出す
		// 上りマッピング処理
		tmpInMap = this.mapper.editInMsgEKK0081C250(param, trgtData, heigoBnktSysid, msgEKK0081A010);
		// サービスインターフェース呼び出し
		tmpRsltMsg = callSvcInter(handle, param, fixedText, tmpInMap);

		// 工事案件変更
		tmpWorkMapKey = "KojiAnkenCC";
		tmpWorkMapKeyFlg = createUserData(param, tmpWorkMapKey);

		this.mapper.editMapKojiAnken(
				param, 
				trgtData,
				tmpWorkMapKey,
				heigoBnktSysid,
				rrksTelno,
				msgECK0011A010,
				msgEKK0021A010
		);
		kojiAnkenCC.executeKojiAnken(handle, param, tmpWorkMapKey);

		// 工事案件番号を取得
		removeUserData(param, tmpWorkMapKey, tmpWorkMapKeyFlg);

		// 電話番号予約変更を呼び出す
		for (int i = 0; i < msgListEZM0181B020.length; i++)
		{
			CAANMsg msgEZM0181B020 = msgListEZM0181B020[i];
			
			// 電話番号予約一意照会を呼び出す
			// 上りマッピング処理
			tmpInMap = this.mapper.editInMsgEZM0181A010(param, msgEZM0181B020, trnDate);
			// サービスインターフェース呼び出し
			tmpRsltMsg = callSvcInter(handle, param, fixedText, tmpInMap);
			
			// 電話番号予約一意照会の結果を取り出す
			CAANMsg[] rsltMsgEZM0181A010List = tmpRsltMsg.getCAANMsgList(EZM0181A010CBSMsg.EZM0181A010CBSMSG1LIST);
			if (0 < rsltMsgEZM0181A010List.length)
			{
				CAANMsg msgEZM0181A010 = rsltMsgEZM0181A010List[0];

				// 電話番号予約変更を呼び出す
				// 上りマッピング処理
				tmpInMap = this.mapper.editInMsgEZM0181C010(param, heigoBnktSysid, msgEZM0181A010);
				// サービスインターフェース呼び出し
				tmpRsltMsg = callSvcInter(handle, param, fixedText, tmpInMap);
			}
		}

		// 進捗登録処理
		if (JKKIdoRsvHanei.IDO_DIV_CUST_HEIGO.equals(idoDiv))
		{
			// お客様併合
			prgStat = JKKIdoRsvHanei.PRG_STAT_CUST_HEIGO;
		}
		else if (JKKIdoRsvHanei.IDO_DIV_CUST_BNKT.equals(idoDiv))
		{
			// お客様分割
			prgStat = JKKIdoRsvHanei.PRG_STAT_CUST_BNKT;
		}

		// ▼▼▼▼▼ 2013/07/29 UPD START ▼▼▼▼▼
		// 進捗登録処理を呼び出す
		addPrg(handle, param, trgtData, fixedText, prgStat);
		// ▲▲▲▲▲ 2013/07/29 UPD E N D ▲▲▲▲▲

		if (JKKIdoRsvHanei.IDO_DIV_CUST_HEIGO.equals(idoDiv))
		{
			// 併合元のSYSIDでお客様退会共通機能の呼出し
			callCusTaikaiCmnKino(handle, param, trgtData, sysid, svcKeiNo);

			// 併合先のSYSIDでお客様回復共通機能の呼出し
			heigoBnktSysid = (String)trgtData.get(JKKIdoRsvHaneiConstCC.HEIGO_SK_SYSID);
			callCusKaifukuCmnKino(handle, param, trgtData, heigoBnktSysid, svcKeiNo);
		}
		else if (JKKIdoRsvHanei.IDO_DIV_CUST_BNKT.equals(idoDiv))
		{
			// 分割元のSYSIDでお客様退会共通機能の呼出し
			callCusTaikaiCmnKino(handle, param, trgtData, sysid, svcKeiNo);

			// 分割先のSYSIDでお客様回復共通機能の呼出し
			heigoBnktSysid = (String)trgtData.get(JKKIdoRsvHaneiConstCC.BUNKATSU_SK_SYSID);
			callCusKaifukuCmnKino(handle, param, trgtData, heigoBnktSysid, svcKeiNo);
		}
		// ANK-3458-00-00 ADD START
		callJKKEmgRrksNmUpdCC(handle, param, trgtData, heigoBnktSysid, idoDiv, mskmDtlNo);
		// ANK-3458-00-00 ADD END

		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}

	/**
	 * 請求契約併合/分割処理です。
	 * 
	 * 請求契約併合/分割処理を実行します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 業務情報を保持するマップ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 サービス契約一意照会結果データ
	 * @return 処理結果
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private String heigoBnktSeiky(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			HashMap trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010
	) throws Throwable
	{
		String prgStat = null;

		// 対象データから業務情報を取得
		String idoDiv = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_DIV);

		// ST2-2013-0001739 2013-04-16 ADD_START
		// ****************************
		//    課金先請求契約変更処理
		// ****************************
		seikyUpdKK(handle, param, trgtData, fixedText, msgEKK0081A010);
		// ST2-2013-0001739 2013-04-16 ADD_END

		// 進捗登録処理
		if (JKKIdoRsvHanei.IDO_DIV_SEIKY_HEIGO.equals(idoDiv))
		{
			// 請求契約併合
			prgStat = JKKIdoRsvHanei.PRG_STAT_SEIKY_HEIGO;
		}
		else
		{
			// 請求契約分割
			prgStat = JKKIdoRsvHanei.PRG_STAT_SEIKY_BNKT;
		}

		// ▼▼▼▼▼ 2013/07/29 UPD START ▼▼▼▼▼
		// 進捗登録処理を呼び出す
		addPrg(handle, param, trgtData, fixedText, prgStat);
		// ▲▲▲▲▲ 2013/07/29 UPD E N D ▲▲▲▲▲

		// 請求先更新を呼出す
		callSeikyUpd(handle, param, trgtData, fixedText);

		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}
	
// ST2-2013-0001739 2013-04-16 ADD_START
	/**
	 * 課金先請求契約変更
	 * @param handle
	 * @param param
	 * @param trgtData
	 * @param fixedText
	 * @param msgEKK0081A010
	 * @throws Throwable
	 */
	private void seikyUpdKK(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010
	) throws Throwable
	{
		HashMap<String, Object> tmpInMap = null;
		String updDtm = "";
		// 異動区分
		String idoDiv = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_DIV);
		// サービス契約番号
		String svcKeiNo = msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO);

		String seikyKeiNo = "";

		if (JKKIdoRsvHanei.IDO_DIV_SEIKY_HEIGO.equals(idoDiv))
		{
			// 併合先請求契約番号
			seikyKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.HEIGO_SK_SEIKY_KEI_NO);
		}
		else
		{
			// 分割先請求契約番号
			seikyKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.BUNKATSU_SK_SEIKY_KEI_NO);
		}

		// 請求契約一意照会
		tmpInMap = this.mapper.editInMsgEKK0491A010(param, trgtData, seikyKeiNo);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0491A010 = callSvcInter(handle, param, fixedText, tmpInMap);

		CAANMsg[] rsltMsgListEKK0491A010 = rsltMsgEKK0491A010.getCAANMsgList(EKK0491A010CBSMsg.EKK0491A010CBSMSG1LIST);
		CAANMsg msgEKK0491A010 = null;
		if (rsltMsgListEKK0491A010 != null && rsltMsgListEKK0491A010.length > 0)
		{
			msgEKK0491A010 = rsltMsgListEKK0491A010[0];
			updDtm = msgEKK0491A010.getString(EKK0491A010CBSMsg1List.LAST_UPD_DTM);
		}

		String kakinsNo = "";
		// 課金先一覧照会
		tmpInMap = this.mapper.editInMsgEKK0321B005(param, svcKeiNo);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0321B005 = callSvcInter(handle, param, fixedText, tmpInMap);

		CAANMsg[] rsltMsgListEKK0321B005 = rsltMsgEKK0321B005.getCAANMsgList(EKK0321B005CBSMsg.EKK0321B005CBSMSG1LIST);
		CAANMsg msgEKK0321B005 = null;
		if (rsltMsgListEKK0321B005 != null && rsltMsgListEKK0321B005.length > 0)
		{
			msgEKK0321B005 = rsltMsgListEKK0321B005[0];
			// 課金先番号
			kakinsNo = msgEKK0321B005.getString(EKK0321B005CBSMsg1List.KAKINS_NO);
		}

		// 課金先請求契約変更
		// S/IF副次処理にてサービス契約配下の課金先の変更実施
		tmpInMap = this.mapper.editInMsgEKK0321C020(param, trgtData, kakinsNo, seikyKeiNo, idoDiv, updDtm);
		// サービスインターフェース呼び出し
		callSvcInter(handle, param, fixedText, tmpInMap);
	}
// ST2-2013-0001739 2013-04-16 ADD_END

	
	/**
	 * サービス契約解約・撤去(解約)処理です。
	 * <br>
	 * サービス契約解約・撤去(解約)処理を実行します。
	 * <br>
	 * @param	handle			セッションマネージャなどを持ったハンドル
	 * @param	param			モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param	trgtData		業務情報を保持するマップ
	 * @param	fixedText		ユーザ任意文字列
	 * @param	msgEKK0081A010	サービス契約一意照会結果データ
	 * @return					処理結果
	 * @throws	Throwable 
	 */
	@SuppressWarnings("unchecked")
	private String dslSvcKei(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			HashMap trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010
	) throws Throwable
	{
		// ▼▼▼▼▼ 2013/07/29 UPD START ▼▼▼▼▼
		// 異動日時取得
		String idoDtm = getIdoDtm(handle, param, trgtData, fixedText);

		// サービス契約解約ＣＣ　キー設定
		String tmpWorkMapKey = "DslRun";
		boolean tmpWorkMapKeyFlg = createUserData(param, tmpWorkMapKey);

		// サービス契約解約ＣＣ　マッピング
		HashMap<String, Object> tmpOutMap = this.mapper.editMapDslRun(
				param, 
				trgtData, 
				tmpWorkMapKey, 
				msgEKK0081A010,
				idoDtm
		);

		// サービス契約解約ＣＣ　実行
		JKKDslRun dslRun = new JKKDslRun();
		dslRun.runDsl(handle, param, tmpOutMap, tmpWorkMapKey);
		// ▲▲▲▲▲ 2013/07/29 UPD E N D ▲▲▲▲▲

		// 2012-05-13追加、解約CC内で作成された指示書CC用マップを指定して指示書登録を実行
		callAddSjishoCommonCompo(handle, param, JKKDslRunConstCC.SJISHO_MAP);

		removeUserData(param, tmpWorkMapKey, tmpWorkMapKeyFlg);

		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}
	
	/**
	 * 休止受付処理です。
	 * 
	 * 休止受付処理を実行します。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 業務情報を保持するマップ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 サービス契約一意照会結果データ
	 * @return 処理結果
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private String pauseReceptu(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			HashMap trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010)
			throws Throwable
	{
		// 対象データから業務情報を取得
		String idoRsvDtlCd   = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_RSV_DTL_CD);
		String mskmDtlNo     = (String)trgtData.get(JKKIdoRsvHaneiConstCC.MSKM_DTL_NO);
		String idoRsvRsnMemo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_RSV_RSN_MEMO);

		String svcPauseYmd     = null;
		String svcPauseRlsYmd  = null;
		String svcPauseChrgYmd = null;

		// ******************************************************
		// 異動予約詳細コードがサービス休止の場合
		// ******************************************************
		if (IDO_RSV_DTL_CD_SVC_PAUSE.equals(idoRsvDtlCd))
		{
			// サービス休止年月日
			svcPauseYmd     = (String)trgtData.get(JKKIdoRsvHaneiConstCC.RSV_APLY_YMD);
			// サービス休止課金開始年月日
			svcPauseChrgYmd = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SVC_PAUSE_CHRG_STA_YMD);

			// 異動予約一覧照会を呼び出す
			// 上りマッピング処理
			HashMap<String, Object> inMapEKK1681B001 = this.mapper.editInMsgEKK1681B001_01(param, mskmDtlNo);
			// サービスインターフェース呼び出し
			CAANMsg rsltMsgEKK1681B001 = callSvcInter(handle, param, fixedText, inMapEKK1681B001);

			// 異動予約一覧照会の結果を取り出す
			CAANMsg[] rsltMsgListEKK1681B001 = rsltMsgEKK1681B001.getCAANMsgList(EKK1681B001CBSMsg.EKK1681B001CBSMSG1LIST);
			CAANMsg msgEKK1681B001 = null;
			if (0 != rsltMsgListEKK1681B001.length)
			{
				msgEKK1681B001 = rsltMsgListEKK1681B001[0];
				// サービス休止解除の予約レコードの予約適用年月日をサービス休止解除年月日として設定する
				svcPauseRlsYmd = msgEKK1681B001.getString(EKK1681B001CBSMsg1List.RSV_APLY_YMD);
			}
		}
		// ******************************************************
		// 異動予約詳細コードがサービス休止解除の場合
		// ******************************************************
		else if (IDO_RSV_DTL_CD_SVC_PAUSE_RLS.equals(idoRsvDtlCd))
		{
			// サービス休止年月日
			svcPauseYmd    = msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_PAUSE_YMD);
			// サービス休止解除年月日
			svcPauseRlsYmd = (String)trgtData.get(JKKIdoRsvHaneiConstCC.RSV_APLY_YMD);
		}

		// ▼▼▼▼▼ 2013/07/29 UPD START ▼▼▼▼▼
		// 異動日時取得
		String idoDtm = getIdoDtm(handle, param, trgtData, fixedText);

		// 休止変更・予約取消ＣＣ　キー設定
		String tmpWorkMapKey = "PauseChgRsvCl";
		boolean tmpWorkMapKeyFlg = createUserData(param, tmpWorkMapKey);

		// 休止変更・予約取消ＣＣ　マッピング
		this.mapper.editMapPauseChgRsvCl(
				param, 
				trgtData, 
				tmpWorkMapKey, 
				msgEKK0081A010,
				svcPauseYmd,
				svcPauseRlsYmd,
				svcPauseChrgYmd,
				idoRsvRsnMemo,
				idoDtm
		);

		// 休止変更・予約取消ＣＣ　実行
		JKKPauseChgRsvClCC pauseChgRsvCl = new JKKPauseChgRsvClCC();
		pauseChgRsvCl.pauseChgRsvClCtrlTran(handle, param, tmpWorkMapKey);
		// ▲▲▲▲▲ 2013/07/29 UPD E N D ▲▲▲▲▲

		removeUserData(param, tmpWorkMapKey, tmpWorkMapKeyFlg);

		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}
	
	/**
	 * 進捗登録処理です。<br>
	 * <br>
	 * @param	handle		セッションハンドル
	 * @param	param		パラメータオブジェクト
	 * @param	trgtData	対象データ
	 * @param	fixedText	ユーザ任意文字列
	 * @param	prgStat		進捗ステータス
	 * @return				処理結果
	 * @throws	Throwable
	 */
	@SuppressWarnings("unchecked")
	private String addPrg(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap trgtData,
			String fixedText,
			String prgStat
	) throws Throwable
	{
		HashMap<String, Object> tmpInMap = null;

		// 進捗特記事項取得
		// ANK-2056-00-00 2014/04/28 start
		//String[] prgTkjk = getPrgTkjk(trgtData);
		String[] prgTkjk = getPrgTkjk(handle, param, trgtData, fixedText);
		// ANK-2056-00-00 2014/04/28 end

		// ▼▼▼▼▼ 2013/07/29 UPD START ▼▼▼▼▼
		// 異動日時取得
		String idoDtm = getIdoDtm(handle, param, trgtData, fixedText);
		// ▲▲▲▲▲ 2013/07/29 UPD E N D ▲▲▲▲▲

		// 進捗登録を呼び出す
		// 上りマッピング処理
		tmpInMap = this.mapper.editInMsgEKK1091D010(param, trgtData, prgStat, idoDtm, prgTkjk);
		// サービスインターフェース呼び出し
		callSvcInter(handle, param, fixedText, tmpInMap);

		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}
	
// ADD START 2012/09/11 案件番号：ANK-0050-00-00
	/**
	 * 請求先更新処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param prgStat 進捗ステータス
	 * @return 処理結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String callSeikyUpd(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap trgtData,
			String fixedText)
			throws Throwable
	{
		// 対象データから業務情報を取得
		String trnDate = (String)trgtData.get(JKKIdoRsvHaneiConstCC.TRN_DATE);
		String svcKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SVC_KEI_NO);
		String seikyKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SEIKY_KEI_NO);

		// マップ生成
		HashMap<String, Object> updTrgtData = new HashMap<String, Object>();
		HashMap<String, Object> mesaiData = new HashMap<String, Object>();
		
		// 対象データリスト
		mesaiData.put("svc_kei_no", svcKeiNo);
		mesaiData.put("seiky_kei_no", seikyKeiNo);
		ArrayList<HashMap<String, Object>> updTrgtDataList = new ArrayList<HashMap<String, Object>>();
		updTrgtDataList.add(mesaiData);
		
		updTrgtData.put("unyo_day", trnDate);
		updTrgtData.put(SEIKY_UPD_LIST, updTrgtDataList);
		
		param.setData(MAP_JACSEIKYUPDCC_ID, updTrgtData);
		
		JACSeikyUpdCC jACSeikyUpdCC = new JACSeikyUpdCC();
		jACSeikyUpdCC.svcifcall(handle, param, MAP_JACSEIKYUPDCC_ID);

		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}
	
// ADD END 2012/09/11 案件番号：ANK-0050-00-00
	
	/**
	 * オプション登録処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 サービス契約一意照会データ
	 * @return 処理結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String updateOpAdd(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010)
			throws Throwable
	{
		
		// 対象データから業務情報を取得
		String trnDate = (String)trgtData.get(JKKIdoRsvHaneiConstCC.TRN_DATE);
		String opSvcKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.OP_SVC_KEI_NO);
		
		String svcCd = msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_CD);
		
		// 最終更新年月日時分秒
		String lastUpdDtm = null;
		
		// サービスオーダ発行処理の引数
		// 対象データマップ
		HashMap<String, Object> sodTrgtData = new HashMap<String, Object>();
		// 対象データリスト
		ArrayList<HashMap<String, Object>> trgtDataList = new ArrayList<HashMap<String, Object>>();
		sodTrgtData.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, trgtDataList);
		// 機能コード
		sodTrgtData.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		String opsvkeiGeneAddDtm = null;
		
		// オプションサービス契約一意照会を呼び出す
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0351A010 = this.mapper.editInMsgEKK0351A010(param, opSvcKeiNo, trnDate);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0351A010 = callSvcInter(handle, param, fixedText, inMapEKK0351A010);
		
		// オプションサービス契約一意照会の結果を取り出す
		CAANMsg[] rsltMsgListEKK0351A010 = rsltMsgEKK0351A010.getCAANMsgList(EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST);
		CAANMsg msgEKK0351A010 = null;
		if (0 == rsltMsgListEKK0351A010.length)
		{
			// オプションサービス契約一意照会で検索結果が0件の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}
		else
		{
			msgEKK0351A010 = rsltMsgListEKK0351A010[0];
			lastUpdDtm = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.LAST_UPD_DTM);
		}
		
		String opSvcKeiStat = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
		if (!SVC_KEI_STAT_CNC_ZM.equals(opSvcKeiStat))
		{
			// オプションサービス契約ステータスが'030'(締結済)以外の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}
		
		String svcKeiUcwkNo = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.SVC_KEI_UCWK_NO);
		// ▼▼▼▼▼ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD START ▼▼▼▼▼
		String svcKeiUcwkGeneAddDtm = null;
		if (svcKeiUcwkNo != null && ! "".equals(svcKeiUcwkNo))
		{
			CAANMsg ekk0161a010cbsmsg1list = searchSvcKeiUcwkSngl(handle, param, fixedText, svcKeiUcwkNo, trnDate);
			svcKeiUcwkGeneAddDtm = ekk0161a010cbsmsg1list.getString(EKK0161A010CBSMsg1List.GENE_ADD_DTM);
		}
		// ▲▲▲▲▲ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD E N D ▲▲▲▲▲
		
		if (SVC_CD_IN_SVC.equals(svcCd))
		{
			// サービスコードが'01'(インターネットサービス)の場合
			
			//OM-2015-0001456 ADD START
			
			// リモートサポートの場合、ISPスキーマではなくサポートスキーマに登録されているので
			// オプションサービスコードで切り分ける。
			String opSvcCd = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.OP_SVC_CD);
			
			if(OP_SVC_CD_RIMOSAPO.equals(opSvcCd))
			{
				// オプションサービスコードがリモートサポートプラスの場合はサブタイプから取得する
				// データがない為、そのまま後続を処理する。
				
				// オプションサービス契約<サポート>開始を呼び出す
				// 上りマッピング処理
				HashMap<String, Object> inMapEKK0391C040 = this.mapper.editInMsgEKK0391C040(param, trgtData, msgEKK0351A010, lastUpdDtm);
				// サービスインターフェース呼び出し
				CAANMsg rsltMsgEKK0391C040 = callSvcInter(handle, param, fixedText, inMapEKK0391C040);
				
				// 最終更新年月日時分秒を更新
				lastUpdDtm = rsltMsgEKK0391C040.getString(EKK0391C040CBSMsg.UPD_DTM);
			}
			else
			{
				// リモートサポートプラス以外の場合は既存のISPスキーマに対して検索する
				// オプションサービス契約<ISP>一意照会を呼び出す
				// 上りマッピング処理
				HashMap<String, Object> inMapEKK0361A010 = this.mapper.editInMsgEKK0361A010(param, opSvcKeiNo);
				// サービスインターフェース呼び出し
				CAANMsg rsltMsgEKK0361A010 = callSvcInter(handle, param, fixedText, inMapEKK0361A010);
				
				// オプションサービス契約<ISP>一意照会の結果を取り出す
				CAANMsg[] rsltMsgListEKK0361A010 = rsltMsgEKK0361A010.getCAANMsgList(EKK0361A010CBSMsg.EKK0361A010CBSMSG1LIST);
				CAANMsg msgEKK0361A010 = null;
				if (0 == rsltMsgListEKK0361A010.length)
				{
					// オプションサービス契約<ISP>一意照会で検索結果が0件の場合、'01'(反映取消)を返却
					return TRAN_RSLT_HANEI_CL;
				}
				else
				{
					msgEKK0361A010 = rsltMsgListEKK0361A010[0];
				}
				
				// オプションサービス契約<ISP>開始を呼び出す
				// 上りマッピング処理
				HashMap<String, Object> inMapEKK0361C040 = this.mapper.editInMsgEKK0361C040(param, trgtData, msgEKK0351A010, msgEKK0361A010, lastUpdDtm);
				// サービスインターフェース呼び出し
				CAANMsg rsltMsgEKK0361C040 = callSvcInter(handle, param, fixedText, inMapEKK0361C040);
				// サービスオーダ発行処理の対象データリストにSODマップを追加
				opsvkeiGeneAddDtm = rsltMsgEKK0361C040.getString(EKK0361C040CBSMsg.KK0351_GENE_ADD_DTM);

				// ▼▼▼▼▼ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD START ▼▼▼▼▼
				trgtDataList.add(
						createSodMapForOpSette(
								trgtData,
								null,
								null,
								null,
								opsvkeiGeneAddDtm,
								null,
								svcKeiUcwkNo,
								svcKeiUcwkGeneAddDtm,
								// ▼▼▼▼▼ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD START ▼▼▼▼▼
								null,
								null
								// ▲▲▲▲▲ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD END   ▲▲▲▲▲
						)
				);
				// ▲▲▲▲▲ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD E N D ▲▲▲▲▲

				// 最終更新年月日時分秒を更新
				lastUpdDtm = rsltMsgEKK0361C040.getString(EKK0361C040CBSMsg.UPD_DTM);

				//↓↓↓2012-05-14追加　巻@指示書CC取込み対応↓↓↓
				String sysid = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.SYSID);
				
				if (OP_SVC_CD_EMAIL.equals(opSvcCd))
				{
					String popId = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.POP_ID);
					if (null != popId && 0 < popId.length())
					{
						JKKBpCommon.putAxMRenkeiDataKbn(param, JKKIdoRsvHaneiConstCC.SJISHO_MAP, 
								JKKAddSjishoConst.RENKEI_DATA_KBN_POPID, JKKAddSjishoConst.TRN_KBN_ADD, 
								new String[]{opSvcKeiNo}, sysid);
					}
				}
				else if (OP_SVC_CD_MYHP.equals(opSvcCd))
				{
					String webId = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.WEB_ID);
					if (null != webId && 0 < webId.length())
					{
						JKKBpCommon.putAxMRenkeiDataKbn(param, JKKIdoRsvHaneiConstCC.SJISHO_MAP, 
								JKKAddSjishoConst.RENKEI_DATA_KBN_WEBID, JKKAddSjishoConst.TRN_KBN_ADD, 
								new String[]{opSvcKeiNo}, sysid
								);
					}
				}
			}
			//OM-2015-0001456 ADD END
			
			//OM-2015-0001456 DEL START
//			// オプションサービス契約<ISP>一意照会を呼び出す
//			// 上りマッピング処理
//			HashMap<String, Object> inMapEKK0361A010 = this.mapper.editInMsgEKK0361A010(param, opSvcKeiNo);
//			// サービスインターフェース呼び出し
//			CAANMsg rsltMsgEKK0361A010 = callSvcInter(handle, param, fixedText, inMapEKK0361A010);
//			
//			// オプションサービス契約<ISP>一意照会の結果を取り出す
//			CAANMsg[] rsltMsgListEKK0361A010 = rsltMsgEKK0361A010.getCAANMsgList(EKK0361A010CBSMsg.EKK0361A010CBSMSG1LIST);
//			CAANMsg msgEKK0361A010 = null;
//			if (0 == rsltMsgListEKK0361A010.length)
//			{
//				// オプションサービス契約<ISP>一意照会で検索結果が0件の場合、'01'(反映取消)を返却
//				return TRAN_RSLT_HANEI_CL;
//			}
//			else
//			{
//				msgEKK0361A010 = rsltMsgListEKK0361A010[0];
//			}
//			
//			// オプションサービス契約<ISP>開始を呼び出す
//			// 上りマッピング処理
//			HashMap<String, Object> inMapEKK0361C040 = this.mapper.editInMsgEKK0361C040(param, trgtData, msgEKK0351A010, msgEKK0361A010, lastUpdDtm);
//			// サービスインターフェース呼び出し
//			CAANMsg rsltMsgEKK0361C040 = callSvcInter(handle, param, fixedText, inMapEKK0361C040);
//			
//			// サービスオーダ発行処理の対象データリストにSODマップを追加
//			opsvkeiGeneAddDtm = rsltMsgEKK0361C040.getString(EKK0361C040CBSMsg.KK0351_GENE_ADD_DTM);
//
//			// ▼▼▼▼▼ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD START ▼▼▼▼▼
//			trgtDataList.add(
//					createSodMapForOpSette(
//							trgtData,
//							null,
//							null,
//							null,
//							opsvkeiGeneAddDtm,
//							null,
//							svcKeiUcwkNo,
//							svcKeiUcwkGeneAddDtm,
//							// ▼▼▼▼▼ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD START ▼▼▼▼▼
//							null,
//							null
//							// ▲▲▲▲▲ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD END   ▲▲▲▲▲
//					)
//			);
//			// ▲▲▲▲▲ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD E N D ▲▲▲▲▲
//
//			// 最終更新年月日時分秒を更新
//			lastUpdDtm = rsltMsgEKK0361C040.getString(EKK0361C040CBSMsg.UPD_DTM);
//
//			//↓↓↓2012-05-14追加　巻@指示書CC取込み対応↓↓↓
//			String sysid = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.SYSID);
//			String opSvcCd = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.OP_SVC_CD);
//			if (OP_SVC_CD_EMAIL.equals(opSvcCd))
//			{
//				String popId = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.POP_ID);
//				if (null != popId && 0 < popId.length())
//				{
//					JKKBpCommon.putAxMRenkeiDataKbn(param, JKKIdoRsvHaneiConstCC.SJISHO_MAP, 
//							JKKAddSjishoConst.RENKEI_DATA_KBN_POPID, JKKAddSjishoConst.TRN_KBN_ADD, 
//							new String[]{opSvcKeiNo}, sysid);
//				}
//			}
//			else if (OP_SVC_CD_MYHP.equals(opSvcCd))
//			{
//				String webId = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.WEB_ID);
//				if (null != webId && 0 < webId.length())
//				{
//					JKKBpCommon.putAxMRenkeiDataKbn(param, JKKIdoRsvHaneiConstCC.SJISHO_MAP, 
//							JKKAddSjishoConst.RENKEI_DATA_KBN_WEBID, JKKAddSjishoConst.TRN_KBN_ADD, 
//							new String[]{opSvcKeiNo}, sysid
//							);
//				}
//			}
//			//↑↑↑2012-05-14追加　巻@指示書CC取込み対応↑↑↑
			//OM-2015-0001456 DEL END
		}
		else if (SVC_CD_TEL_SVC.equals(svcCd))
		{
			// サービスコードが'02'(電話サービス)の場合
			
			// オプションサービス契約<電話>一意照会を呼び出す
			// 上りマッピング処理
			HashMap<String, Object> inMapEKK0371A010 = this.mapper.editInMsgEKK0371A010(param, opSvcKeiNo);
			// サービスインターフェース呼び出し
			CAANMsg rsltMsgEKK0371A010 = callSvcInter(handle, param, fixedText, inMapEKK0371A010);
			
			// オプションサービス契約<電話>一意照会の結果を取り出す
			CAANMsg[] rsltMsgListEKK0371A010 = rsltMsgEKK0371A010.getCAANMsgList(EKK0371A010CBSMsg.EKK0371A010CBSMSG1LIST);
			CAANMsg msgEKK0371A010 = null;
			if (0 == rsltMsgListEKK0371A010.length)
			{
				// オプションサービス契約<電話>一意照会で検索結果が0件の場合、'01'(反映取消)を返却
				return TRAN_RSLT_HANEI_CL;
			}
			else
			{
				msgEKK0371A010 = rsltMsgListEKK0371A010[0];
			}
			
			// ▼▼▼▼▼ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD START ▼▼▼▼▼
			
			String kktkSvcKeiNo = null;
			String kktkSvcKeiGeneAddDtm = null;
			
			// オプションサービスコードの確認
			String opSvcCD = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.OP_SVC_CD);
			if(OP_SVC_CD_WARIKOMITEL.equals(opSvcCD))
			{
				// 割込電話の場合にはOLSオーダを発行するために機器情報が必要
				// サービス契約内訳番号をキーにVA機器変更番号を取得する。(カレント検索)
				//------------------------------------------------------------------------
				// EKK0191A010_サービス契約内訳＜eo光電話＞一意照会
				//------------------------------------------------------------------------

				// 上りマッピング処理
				HashMap<String, Object> inMapEKK0191A010 = this.mapper.editInMsgEKK0191A010(param, svcKeiUcwkNo);

				// サービスインターフェース呼び出し
				CAANMsg rsltMsgEKK0191A010 = callSvcInter(handle, param, fixedText, inMapEKK0191A010);
				
				// サービス契約内訳＜eo光電話＞一意照会の結果を取り出す
				CAANMsg[] rsltMsgListEKK0191A010 = rsltMsgEKK0191A010.getCAANMsgList(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);
				CAANMsg msgEKK0191A010 = null;
				String vaChgNo = null;
				if (0 == rsltMsgListEKK0191A010.length)
				{
					// サービス契約内訳＜eo光電話＞一意照会で検索結果が0件の場合、'02'(反映スキップ)を返却(OLSオーダが発行できないので)
					return TRAN_RSLT_HANEI_SKIP;
				}
				else
				{
					msgEKK0191A010 = rsltMsgListEKK0191A010[0];
					vaChgNo = msgEKK0191A010.getString(EKK0191A010CBSMsg1List.VA_KIKI_CHG_NO);
					
					// VA機器変更番号の確認。
					if(vaChgNo == null || "".equals(vaChgNo))
					{
						// VA機器変更番号がNULLの場合、'02'(反映スキップ)を返却(OLSオーダが発行できないので)
						return TRAN_RSLT_HANEI_SKIP;
					}
					else
					{
						// 何もしない
					}
				}

				// サービス契約番号よりVA機器変更番号が一致するレコードを取得
				//------------------------------------------------------------------------
				// EKK0341B002_機器提供サービス契約一覧照会（サービス契約番号）
				//------------------------------------------------------------------------
				
				String svcKeiNo   = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SVC_KEI_NO);
				
				// 上りマッピング処理
				HashMap<String, Object> inMapEKK0341B002 = this.mapper.editInMsgEKK0341B002(param, svcKeiNo);

				// サービスインターフェース呼び出し
				CAANMsg rsltMsgEKK0341B002 = callSvcInter(handle, param, fixedText, inMapEKK0341B002);
				
				// 機器提供サービス契約一覧照会（サービス契約番号）の結果を取り出す
				CAANMsg[] rsltMsgListEKK0341B002 = rsltMsgEKK0341B002.getCAANMsgList(EKK0341B002CBSMsg.EKK0341B002CBSMSG1LIST);

				if (0 == rsltMsgListEKK0341B002.length)
				{
					//  機器提供サービス契約一覧照会（サービス契約番号）で検索結果が0件の場合、'02'(反映スキップ)を返却(OLSオーダが発行できないので)
					return TRAN_RSLT_HANEI_SKIP;
				}
				else
				{
					// VA機器変更番号が一致するかを確認する。
					for (int i = 0; i < rsltMsgListEKK0341B002.length; i++)
					{
						CAANMsg msgEKK0341B002 = rsltMsgListEKK0341B002[i];
						if (vaChgNo.equals(msgEKK0341B002.getString(EKK0341B002CBSMsg1List.KIKI_CHG_NO)))
						{
							// VA機器変更番号と機器変更番号が一致すれば該当レコードの為、機器提供サービス契約番号、世代を取得
							kktkSvcKeiNo = msgEKK0341B002.getString(EKK0341B002CBSMsg1List.KKTK_SVC_KEI_NO);
							kktkSvcKeiGeneAddDtm = msgEKK0341B002.getString(EKK0341B002CBSMsg1List.GENE_ADD_DTM);
							break;
						}
						else
						{
							// 何もしない
						}
					}
				}
				// 機器提供サービス契約番号の確認
				if (kktkSvcKeiNo == null || "".equals(kktkSvcKeiNo))
				{
					// 一致する機器が存在しなければ'02'(反映スキップ)を返却(OLSオーダが発行できないので)
					return TRAN_RSLT_HANEI_SKIP;
				}
				else
				{
					// 何もしない
				}
			}
			else
			{
				// 何もしない
			}
			// ▲▲▲▲▲ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD END   ▲▲▲▲▲
			
			// オプションサービス契約<電話>開始を呼び出す
			// 上りマッピング処理
			HashMap<String, Object> inMapEKK0371C040 = this.mapper.editInMsgEKK0371C040(param, trgtData, msgEKK0351A010, msgEKK0371A010, lastUpdDtm);
			// サービスインターフェース呼び出し
			CAANMsg rsltMsgEKK0371C040 = callSvcInter(handle, param, fixedText, inMapEKK0371C040);
			
			// サービスオーダ発行処理の対象データリストにSODマップを追加
			opsvkeiGeneAddDtm = rsltMsgEKK0371C040.getString(EKK0371C040CBSMsg.KK0351_GENE_ADD_DTM);

				// ▼▼▼▼▼ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD START ▼▼▼▼▼
				trgtDataList.add(
						createSodMapForOpSette(
								trgtData,
								null,
								null,
								null,
								opsvkeiGeneAddDtm,
								null,
								svcKeiUcwkNo,
								svcKeiUcwkGeneAddDtm,
								// ▼▼▼▼▼ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD START ▼▼▼▼▼
								kktkSvcKeiNo,
								kktkSvcKeiGeneAddDtm
								// ▲▲▲▲▲ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD END   ▲▲▲▲▲
						)
				);
				// ▲▲▲▲▲ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD E N D ▲▲▲▲▲

			// 最終更新年月日時分秒を更新
			lastUpdDtm = rsltMsgEKK0371C040.getString(EKK0371C040CBSMsg.UPD_DTM);
		}
		else if (SVC_CD_TV_SVC.equals(svcCd))
		{
			// サービスコードが'03'(テレビサービス)の場合
			
			// オプションサービス契約<TV>開始を呼び出す
			// 上りマッピング処理
			HashMap<String, Object> inMapEKK0381C040 = this.mapper.editInMsgEKK0381C040(param, trgtData, msgEKK0351A010, lastUpdDtm);
			// サービスインターフェース呼び出し
			CAANMsg rsltMsgEKK0381C040 = callSvcInter(handle, param, fixedText, inMapEKK0381C040);
			
			// 最終更新年月日時分秒を更新
			lastUpdDtm = rsltMsgEKK0381C040.getString(EKK0381C040CBSMsg.UPD_DTM);
		}
		else if (SVC_CD_HOS_SVC.equals(svcCd))
		{
			// サービスコードが'04'(ホスティングサービス)の場合
			
			// オプションサービス契約<サポート>開始を呼び出す
			// 上りマッピング処理
			HashMap<String, Object> inMapEKK0391C040 = this.mapper.editInMsgEKK0391C040(param, trgtData, msgEKK0351A010, lastUpdDtm);
			// サービスインターフェース呼び出し
			CAANMsg rsltMsgEKK0391C040 = callSvcInter(handle, param, fixedText, inMapEKK0391C040);
			
			// 最終更新年月日時分秒を更新
			lastUpdDtm = rsltMsgEKK0391C040.getString(EKK0391C040CBSMsg.UPD_DTM);
		}
		
		if (SVC_CD_IN_SVC.equals(svcCd)
				|| SVC_CD_TEL_SVC.equals(svcCd)
				|| SVC_CD_TV_SVC.equals(svcCd))
		{
			// サービスコードが'01'(インターネットサービス)、'02'(電話サービス)、'03'(テレビサービス)の場合
		
			// サブオプションサービス契約一覧照会を呼び出す
			// 上りマッピング処理
			HashMap<String, Object> inMapEKK0401B001 = this.mapper.editInMsgEKK0401B001(param, opSvcKeiNo);
			// サービスインターフェース呼び出し
			CAANMsg rsltMsgEKK0401B001 = callSvcInter(handle, param, fixedText, inMapEKK0401B001);
			
			// サブオプションサービス契約一覧照会の結果を取り出す
			CAANMsg[] rsltMsgListEKK0401B001 = rsltMsgEKK0401B001.getCAANMsgList(EKK0401B001CBSMsg.EKK0401B001CBSMSG1LIST);
			
			for (int i = 0; i < rsltMsgListEKK0401B001.length; i++)
			{
				CAANMsg msgEKK0401B001 = rsltMsgListEKK0401B001[i];
				String sbopSvcKeiStat = msgEKK0401B001.getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
				
				if (SVC_KEI_STAT_CNC_ZM.equals(sbopSvcKeiStat))
				{
					// サブオプションサービス契約ステータスが '030'(締結済)の場合
					
					if (SVC_CD_IN_SVC.equals(svcCd))
					{
						// サービスコードが'01'(インターネットサービス)の場合
						
						// サブオプションサービス契約<ISP>使用開始を呼び出す
						// 上りマッピング処理
						HashMap<String, Object> inMapEKK0411C050 = this.mapper.editInMsgEKK0411C050(param, trgtData, msgEKK0401B001, lastUpdDtm);
						// サービスインターフェース呼び出し
						CAANMsg rsltMsgEKK0411C050 = callSvcInter(handle, param, fixedText, inMapEKK0411C050);

						// ▼▼▼▼▼ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD START ▼▼▼▼▼
						// サービスオーダ発行処理の対象データリストにSODマップを追加
						trgtDataList.add(
								createSodMapForOpSette(
										trgtData,
										msgEKK0401B001.getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO),
										null,
										null,
										opsvkeiGeneAddDtm,
										rsltMsgEKK0411C050.getString(EKK0411C050CBSMsg.KK0401_GENE_ADD_DTM),
										null,
										null,
										// ▼▼▼▼▼ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD START ▼▼▼▼▼
										null,
										null
										// ▲▲▲▲▲ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD END   ▲▲▲▲▲
								)
						);
						// ▲▲▲▲▲ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD E N D ▲▲▲▲▲

						// 最終更新年月日時分秒を更新
						lastUpdDtm = rsltMsgEKK0411C050.getString(EKK0411C050CBSMsg.UPD_DTM);
					}
					else if (SVC_CD_TEL_SVC.equals(svcCd))
					{
						// サービスコードが'02'(電話サービス)の場合
						
						// サブオプションサービス契約<電話>使用開始を呼び出す
						// 上りマッピング処理
						HashMap<String, Object> inMapEKK0431C040 = this.mapper.editInMsgEKK0431C040(param, trgtData, msgEKK0401B001, lastUpdDtm);
						// サービスインターフェース呼び出し
						CAANMsg rsltMsgEKK0431C040 = callSvcInter(handle, param, fixedText, inMapEKK0431C040);

						// ▼▼▼▼▼ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD START ▼▼▼▼▼
						// サービスオーダ発行処理の対象データリストにSODマップを追加
						trgtDataList.add(
								createSodMapForOpSette(
										trgtData,
										msgEKK0401B001.getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO),
										null,
										null,
										opsvkeiGeneAddDtm,
										rsltMsgEKK0431C040.getString(EKK0431C040CBSMsg.KK0401_GENE_ADD_DTM),
										svcKeiUcwkNo,
										svcKeiUcwkGeneAddDtm,
										// ▼▼▼▼▼ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD START ▼▼▼▼▼
										null,
										null
										// ▲▲▲▲▲ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD END   ▲▲▲▲▲
								)
						);
						// ▲▲▲▲▲ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD E N D ▲▲▲▲▲

						// 最終更新年月日時分秒を更新
						lastUpdDtm = rsltMsgEKK0431C040.getString(EKK0431C040CBSMsg.UPD_DTM);
					}
					else if (SVC_CD_TV_SVC.equals(svcCd))
					{
						// サービスコードが'03'(テレビサービス)の場合
						
						// サブオプションサービス契約<TV>使用開始を呼び出す
						// 上りマッピング処理
						HashMap<String, Object> inMapEKK0421C040 = this.mapper.editInMsgEKK0421C040(param, trgtData, msgEKK0401B001, lastUpdDtm);
						// サービスインターフェース呼び出し
						CAANMsg rsltMsgEKK0421C040 = callSvcInter(handle, param, fixedText, inMapEKK0421C040);
						
						// 最終更新年月日時分秒を更新
						lastUpdDtm = rsltMsgEKK0421C040.getString(EKK0421C040CBSMsg.UPD_DTM);
					}
				}
			}
		}
		
		if (0 < trgtDataList.size())
		{
			// サービスオーダーの対象データリスト ＞ 0 の場合
			if (1 < trgtDataList.size())
			{
				// サービスオーダーの対象データリスト ＞ 1 の場合、先頭レコードを削除
				// ※サブオプションを含む場合、オプションのみのレコードは不要なため
				trgtDataList.remove(0);
			}
			//↓↓↓2012-09-01追加　IT1-2012-0000952対応↓↓↓
			//EKK0361C040が世代登録年月日時分秒を返さないようなので、チェックして、無かったら照会掛ける
			makeUp4GeneAddDtm(handle, param, fixedText, sodTrgtData, trnDate);
			//↑↑↑2012-09-01追加　IT1-2012-0000952対応↑↑↑
			// サービスオーダ発行CCを呼び出す
			JKKHakkoSODCC hakkoSODCC = new JKKHakkoSODCC();
			param.setData("sodTrgtData", sodTrgtData);
			hakkoSODCC.hakkoSOD(handle, param, "sodTrgtData");
		}
		
		// 指示書登録処理
		//↓↓↓2012-05-14追加　巻@指示書CC取込み対応↓↓↓
		callAddSjishoCommonCompo(handle, param, JKKIdoRsvHaneiConstCC.SJISHO_MAP);
		//↑↑↑2012-05-14追加　巻@指示書CC取込み対応↑↑↑

		// ▼▼▼▼▼ 2013/07/29 UPD START ▼▼▼▼▼
		// 進捗登録処理を呼び出す
		addPrg(handle, param, trgtData, fixedText, PRG_STAT_OP_SET_FIN);
		// ▲▲▲▲▲ 2013/07/29 UPD E N D ▲▲▲▲▲

		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}
	
	/**
	 * オプション解約処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 サービス契約一意照会データ
	 * @return 処理結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String updateOpDsl(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010)
			throws Throwable
	{
		// 対象データから業務情報を取得
		String sysid         = msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SYSID);
		String mskmDtlNo     = (String)trgtData.get(JKKIdoRsvHaneiConstCC.MSKM_DTL_NO);
		String svcKeiNo      = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SVC_KEI_NO);
		String idoDiv        = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_DIV);
		String trnDate       = (String)trgtData.get(JKKIdoRsvHaneiConstCC.TRN_DATE);
		String opSvcKeiNo    = (String)trgtData.get(JKKIdoRsvHaneiConstCC.OP_SVC_KEI_NO);
		String svcChrgEndymd = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SVC_CHRG_ENDYMD);
		// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/10 START
		String dslSbopSvcKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SBOP_SVC_KEI_NO);
		// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/10 END
		// OM-2016-0002358 ADD START
		String rsvAplyYmd = (String)trgtData.get(JKKIdoRsvHaneiConstCC.RSV_APLY_YMD);
		// OM-2016-0002358 ADD END

		// 異動日時取得
		String idoDtm = getIdoDtm(handle, param, trgtData, fixedText);

		String svcCd = msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_CD);
		ArrayList<HashMap<String, Object>> agingInfoList = new ArrayList<HashMap<String, Object>>();

		// オプションサービス契約一意照会を呼び出す
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0351A010 = this.mapper.editInMsgEKK0351A010(param, opSvcKeiNo, trnDate);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0351A010 = callSvcInter(handle, param, fixedText, inMapEKK0351A010);
		
		// オプションサービス契約一意照会の結果を取り出す
		CAANMsg[] rsltMsgListEKK0351A010 = rsltMsgEKK0351A010.getCAANMsgList(EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST);
		CAANMsg msgEKK0351A010 = null;
		if (0 == rsltMsgListEKK0351A010.length)
		{
			// オプションサービス契約一意照会で検索結果が0件の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}
		else
		{
			msgEKK0351A010 = rsltMsgListEKK0351A010[0];
		}
		
		String opSvcKeiStat = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
		String opSvcCd = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.OP_SVC_CD);
		String chbfOpsvkeiGeneAddDtm = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.GENE_ADD_DTM);
		String opUpdDtm = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.LAST_UPD_DTM);
		//↓↓↓2012-11-21追加　ロット２IT1-2012-0002119（電話オプションの解約にサービス契約内訳が必要）↓↓↓
		String svcKeiUcwkNo = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.SVC_KEI_UCWK_NO);
		//↑↑↑2012-11-21追加　ロット２IT1-2012-0002119（電話オプションの解約にサービス契約内訳が必要）↑↑↑
		// ▼▼▼▼▼ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD START ▼▼▼▼▼
		String svcKeiUcwkGeneAddDtm = null;
		if (svcKeiUcwkNo != null && ! "".equals(svcKeiUcwkNo))
		{
			CAANMsg ekk0161a010cbsmsg1list = searchSvcKeiUcwkSngl(handle, param, fixedText, svcKeiUcwkNo, trnDate);
			svcKeiUcwkGeneAddDtm = ekk0161a010cbsmsg1list.getString(EKK0161A010CBSMsg1List.GENE_ADD_DTM);
		}
		// ▲▲▲▲▲ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD E N D ▲▲▲▲▲

		if (SVC_KEI_STAT_DSL_ZM.equals(opSvcKeiStat)
				|| SVC_KEI_STAT_CNCL_ZM.equals(opSvcKeiStat))
		{
			// オプションサービス契約ステータスが'910'(解約済)・'920'(キャンセル済)の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}

		// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/10 START
		// サブオプション解約の場合
		if (!isNull(dslSbopSvcKeiNo))
		{
			// サブオプションサービス契約一意照会を呼び出す
			// 上りマッピング処理
			HashMap<String, Object> inMapEKK0401A010 = this.mapper.editInMsgEKK0401A010(param, opSvcKeiNo, dslSbopSvcKeiNo, trnDate);
			// サービスインターフェース呼び出し
			CAANMsg rsltMsgEKK0401A010 = callSvcInter(handle, param, fixedText, inMapEKK0401A010);

			// サブオプションサービス契約一意照会の結果を取り出す
			CAANMsg[] rsltMsgListEKK0401A010 = rsltMsgEKK0401A010.getCAANMsgList(EKK0401A010CBSMsg.EKK0401A010CBSMSG1LIST);
			CAANMsg msgEKK0401A010 = null;
			if (0 == rsltMsgListEKK0401A010.length)
			{
				// サブオプションサービス契約一意照会で検索結果が0件の場合、'01'(反映取消)を返却
				return TRAN_RSLT_HANEI_CL;
			}

			msgEKK0401A010 = rsltMsgListEKK0401A010[0];
			String dslSbopSvcKeiStat = msgEKK0401A010.getString(EKK0401A010CBSMsg1List.SBOP_SVC_KEI_STAT);
			if (SVC_KEI_STAT_DSL_ZM.equals(dslSbopSvcKeiStat)
				|| SVC_KEI_STAT_CNCL_ZM.equals(dslSbopSvcKeiStat))
			{
				// サブオプションサービス契約ステータスが'910'(解約済)・'920'(キャンセル済)の場合、'01'(反映取消)を返却
				return TRAN_RSLT_HANEI_CL;
			}
		}
		// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/10 END

		if (SVC_CD_IN_SVC.equals(svcCd))
		{
			// サービスコードが'01'(インターネットサービス)の場合
			
			//OM-2015-0001456 ADD START
			String mlad = "";
			String urlDomain ="";
			String urlAccount = "";
			String mllistNm = "";
			String koteiIpAd = "";
			String webId = "";
			String popId = "";
			
			// リモートサポートの場合、ISPスキーマではなくサポートスキーマに登録されているので
			// オプションサービスコードで切り分ける。
			
			if(OP_SVC_CD_RIMOSAPO.equals(opSvcCd))
			{
				// オプションサービスコードがリモートサポートプラスの場合はサブタイプから取得する
				// データがない為、そのまま後続を処理する。
			
			}
			else
			{
				// リモートサポートプラス以外の場合は既存のISPスキーマに対して検索する
				// オプションサービス契約<ISP>一意照会を呼び出す
				// 上りマッピング処理
				HashMap<String, Object> inMapEKK0361A010 = this.mapper.editInMsgEKK0361A010(param, opSvcKeiNo);
				// サービスインターフェース呼び出し
				CAANMsg rsltMsgEKK0361A010 = callSvcInter(handle, param, fixedText, inMapEKK0361A010);
				
				// オプションサービス契約<ISP>一意照会の結果を取り出す
				CAANMsg[] rsltMsgListEKK0361A010 = rsltMsgEKK0361A010.getCAANMsgList(EKK0361A010CBSMsg.EKK0361A010CBSMSG1LIST);
				CAANMsg msgEKK0361A010 = null;
				if (0 == rsltMsgListEKK0361A010.length)
				{
					// オプションサービス契約<ISP>一意照会で検索結果が0件の場合、'01'(反映取消)を返却
					return TRAN_RSLT_HANEI_CL;
				}
				else
				{
					msgEKK0361A010 = rsltMsgListEKK0361A010[0];
				}
				mlad = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.MLAD);
				urlDomain = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.URL_DOMAIN);
				urlAccount = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.URL_ACCOUNT);
				mllistNm = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.MLLIST_NM);
				koteiIpAd = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.KOTEI_IP_AD);
				webId = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.WEB_ID);
				popId = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.POP_ID);
			}
			//OM-2015-0001456 ADD END
			
			//OM-2015-0001456 DEL START
//			// オプションサービス契約<ISP>一意照会を呼び出す
//			// 上りマッピング処理
//			HashMap<String, Object> inMapEKK0361A010 = this.mapper.editInMsgEKK0361A010(param, opSvcKeiNo);
//			// サービスインターフェース呼び出し
//			CAANMsg rsltMsgEKK0361A010 = callSvcInter(handle, param, fixedText, inMapEKK0361A010);
//			
//			// オプションサービス契約<ISP>一意照会の結果を取り出す
//			CAANMsg[] rsltMsgListEKK0361A010 = rsltMsgEKK0361A010.getCAANMsgList(EKK0361A010CBSMsg.EKK0361A010CBSMSG1LIST);
//			CAANMsg msgEKK0361A010 = null;
//			if (0 == rsltMsgListEKK0361A010.length)
//			{
//				// オプションサービス契約<ISP>一意照会で検索結果が0件の場合、'01'(反映取消)を返却
//				return TRAN_RSLT_HANEI_CL;
//			}
//			else
//			{
//				msgEKK0361A010 = rsltMsgListEKK0361A010[0];
//			}
//
//			String mlad = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.MLAD);
//			String urlDomain = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.URL_DOMAIN);
//			String urlAccount = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.URL_ACCOUNT);
//			String mllistNm = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.MLLIST_NM);
//			String koteiIpAd = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.KOTEI_IP_AD);
//			String webId = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.WEB_ID);
//			String popId = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.POP_ID);

			//OM-2015-0001456 DEL END
			
			// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/10 START
			// オプション解約の場合
			if (isNull(dslSbopSvcKeiNo))
			{
			// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/10 END
				if (!isNull(mlad))
				{
					// メールアドレスが設定されている場合
					
					// エイジング情報生成処理を呼び出す
					agingInfoList.add(createAgingInfo(AGING_SBT_CD_MLAD, mlad));
				}
				if (!isNull(urlDomain)
						&& !isNull(urlAccount))
				{
					// URL(ドメイン)・URL(アカウント)が設定されている場合
					
					// エイジング情報生成処理を呼び出す
					agingInfoList.add(createAgingInfo(AGING_SBT_CD_URL, urlDomain + urlAccount));
				}
				if (!isNull(mllistNm))
				{
					// メーリングリスト名が設定されている場合
					
					// エイジング情報生成処理を呼び出す
					agingInfoList.add(createAgingInfo(AGING_SBT_CD_MLLIST, mllistNm));
				}
				if (!isNull(koteiIpAd))
				{
					// 固定IPアドレスが設定されている場合
					
					// エイジング情報生成処理を呼び出す
					agingInfoList.add(createAgingInfo(AGING_SBT_CD_FIXIPAD, koteiIpAd));
				}
				if (!isNull(webId))
				{
					// WebIDが設定されている場合
					
					// エイジング情報生成処理を呼び出す
					agingInfoList.add(createAgingInfo(AGING_SBT_CD_WEBID, webId));
				}
				if (!isNull(popId))
				{
					// POPIDが設定されている場合
					
					// エイジング情報生成処理を呼び出す
					agingInfoList.add(createAgingInfo(AGING_SBT_CD_POPID, popId));
				}
			// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/10 START
			}
			// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/10 END
			
			if (OP_SVC_CD_EMAIL.equals(opSvcCd))
			{
				// オプションサービスコードが'B001'(Ｅメール)の場合
				
				// サブオプションサービス契約一覧照会を呼び出す
				// 上りマッピング処理
				HashMap<String, Object> inMapEKK0401B001 = this.mapper.editInMsgEKK0401B001(param, opSvcKeiNo);
				// サービスインターフェース呼び出し
				CAANMsg rsltMsgEKK0401B001 = callSvcInter(handle, param, fixedText, inMapEKK0401B001);
				
				// サブオプションサービス契約一覧照会の結果を取り出す
				CAANMsg[] rsltMsgListEKK0401B001 = rsltMsgEKK0401B001.getCAANMsgList(EKK0401B001CBSMsg.EKK0401B001CBSMSG1LIST);
				
				for (int i = 0; i < rsltMsgListEKK0401B001.length; i++)
				{
					CAANMsg msgEKK0401B001 = rsltMsgListEKK0401B001[i];
					String sbopSvcKeiNo = msgEKK0401B001.getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO);
					String sbopSvcKeiStat = msgEKK0401B001.getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
					String sbopSvcCd = msgEKK0401B001.getString(EKK0401B001CBSMsg1List.SBOP_SVC_CD);
					// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/10 START
					// サブオプションの解約で、サブオプションサービス契約番号が一致しない場合
					if (!isNull(dslSbopSvcKeiNo) && !dslSbopSvcKeiNo.equals(sbopSvcKeiNo))
					{
						// 解約対象外
						continue;
					}
					// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/10 END

					if (!(SVC_KEI_STAT_DSL_ZM.equals(sbopSvcKeiStat)
							|| SVC_KEI_STAT_CNCL_ZM.equals(sbopSvcKeiStat))
							&& SBOP_SVC_CD_MAILALIAS.equals(sbopSvcCd))
					{
						// サブオプションサービス契約ステータスが '910'(解約済)・'920'(キャンセル済)以外、かつ、
						// サブオプションサービスコードが'D01'(メールエイリアス)の場合
						
						// サブオプションサービス契約<ISP>一意照会を呼び出す
						// 上りマッピング処理
						HashMap<String, Object> inMapEKK0411A010 = this.mapper.editInMsgEKK0411A010(param, opSvcKeiNo, sbopSvcKeiNo);
						// サービスインターフェース呼び出し
						CAANMsg rsltMsgEKK0411A010 = callSvcInter(handle, param, fixedText, inMapEKK0411A010);
						
						// サブオプションサービス契約<ISP>一意照会の結果を取り出す
						CAANMsg[] rsltMsgListEKK0411A010 = rsltMsgEKK0411A010.getCAANMsgList(EKK0411A010CBSMsg.EKK0411A010CBSMSG1LIST);
						CAANMsg msgEKK0411A010 = null;
						if (0 == rsltMsgListEKK0411A010.length)
						{
							continue;
						}
						else
						{
							msgEKK0411A010 = rsltMsgListEKK0411A010[0];
						}
						
						// エイジング情報生成処理を呼び出す
						String alias = msgEKK0411A010.getString(EKK0411A010CBSMsg1List.ALIAS);
						agingInfoList.add(createAgingInfo(AGING_SBT_CD_MAILALIAS, alias));
					}
				}
			}
		}
//OM-2016-0000752 ADD START
		else if (SVC_CD_TEL_SVC.equals(svcCd))
		{
			String n050OpTelno = "";
			
			if (JKKStrConst.OP_SVC_CD_050_NUMBER_PLUS.equals(opSvcCd))
			{
				// オプションサービス契約<電話>一意照会を呼び出す
				// 上りマッピング処理
				HashMap<String, Object> inMapEKK0371A010 = this.mapper.editInMsgEKK0371A010(param, opSvcKeiNo);
				// サービスインターフェース呼び出し
				CAANMsg rsltMsgEKK0371A010 = callSvcInter(handle, param, fixedText, inMapEKK0371A010);
				
				// オプションサービス契約<電話>一意照会の結果を取り出す
				CAANMsg[] rsltMsgListEKK0371A010 = rsltMsgEKK0371A010.getCAANMsgList(EKK0371A010CBSMsg.EKK0371A010CBSMSG1LIST);
				if (0 < rsltMsgListEKK0371A010.length)
				{
					n050OpTelno = rsltMsgListEKK0371A010[0].getString(EKK0371A010CBSMsg1List.N_050_OP_TELNO);
				}
			}
			
			if (!isNull(n050OpTelno))
			{
				// 050オプション電話番号が設定されている場合
				
				// エイジング情報生成処理を呼び出す
				agingInfoList.add(createAgingInfo(AGING_SBT_CD_TELNO, n050OpTelno));
			}
		}
//OM-2016-0000752 ADD END

		// オプションサービス契約解約処理の引数を生成
		// 対象データマップ
		HashMap<String, Object> opDslTrgtData = new HashMap<String, Object>();
		// 機能コード
		opDslTrgtData.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		// SYSID
		opDslTrgtData.put("sysid", sysid);
		// サービス契約番号
		opDslTrgtData.put("svc_kei_no", svcKeiNo);
		// オプションサービス契約番号
		opDslTrgtData.put("op_svc_kei_no", opSvcKeiNo);
		// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/10 START
		if (!isNull(dslSbopSvcKeiNo))
		{
			// サブオプションサービス契約番号
			opDslTrgtData.put("sbop_svc_kei_no", dslSbopSvcKeiNo);
		}
		// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/10 END
		// 更新年月日時分秒（オプションサービス契約）
		opDslTrgtData.put("upd_dtm_bf", opUpdDtm);
		// 異動区分
		opDslTrgtData.put("ido_div", idoDiv);
		// サービス終了年月日
		// OM-2016-0002358 MOD START
//		opDslTrgtData.put("svc_endymd", trnDate);
		opDslTrgtData.put("svc_endymd", rsvAplyYmd);
		// OM-2016-0002358 MOD END
		// 申込明細番号
		opDslTrgtData.put("mskm_dtl_no", mskmDtlNo);
		// 進捗異動年月日時分秒
		opDslTrgtData.put("prg_ido_dtm", idoDtm);
		// サービス課金終了年月日
		// ANK-1256-00-00 2012/10/24 MOD START
		if (svcChrgEndymd != null && ! "".equals(svcChrgEndymd))
		{
			opDslTrgtData.put("svc_chrg_endymd", svcChrgEndymd);
			opDslTrgtData.put("svc_chrg_endymd_flg", "1");
		}
		else
		{
			opDslTrgtData.put("svc_chrg_endymd", trnDate);
		}
		// ANK-1256-00-00 2012/10/24 MOD END
		// エイジング情報リスト
		opDslTrgtData.put("aging_info_list", agingInfoList);

		// 異動理由明細（設定する必要がないが、SI側で必須扱いとしているため、暫定的にその他を設定しておく）
		ArrayList<HashMap<String, Object>> eKK1091D010CBSMsg1List = new ArrayList<HashMap<String,Object>>();
		HashMap<String, Object> eKK1091D010CBSMsg1 = new HashMap<String, Object>();
		eKK1091D010CBSMsg1List.add(eKK1091D010CBSMsg1);
		eKK1091D010CBSMsg1.put("ido_rsn_cd", "56");
		opDslTrgtData.put("EKK1091D010CBSMsg1List", eKK1091D010CBSMsg1List);
		// OM-2016-0002358 AND START
		// 起動元コード
		opDslTrgtData.put("kido_cd", JKKIdoRsvHanei.KIDO_CD_BAT);
		// OM-2016-0002358 ADD END

		// オプションサービス契約解約CCを呼び出す
		param.setData("opDslTrgtData", opDslTrgtData);
		// OM-2016-0001521 フェムトセル異動情報登録部品の呼出を追加 2016/07/07 ADD START
		// オプション解約CCがフェムトセル異動情報登録用に進捗年月日時分秒を返却する。受け渡し用のキーを事前に登録しておく必要がある。
		param.setData("FmtcelIdoInfAddCC", new HashMap<String, Object>());
		// OM-2016-0001521 フェムトセル異動情報登録部品の呼出を追加 2016/07/07 ADD END
		JKKOpsvckeiDslCC opsvckeiDslCC = new JKKOpsvckeiDslCC();
		opsvckeiDslCC.dslOpsvckei(handle, param, "opDslTrgtData");
		
		// 住所変更リファクタリング対応 ADD-S
		boolean chgidoDivAdchg = false;
		if (IDO_DIV_ADDCHG_REG.equals(idoDiv))
		{
			// 異動区分をオプション設定に差し替え
			trgtData.put(JKKIdoRsvHaneiConstCC.IDO_DIV, IDO_DIV_OP_SETTE);
			chgidoDivAdchg = true;
		}
		// 住所変更リファクタリング対応 ADD-E
		
		if (SVC_CD_IN_SVC.equals(svcCd)
				|| SVC_CD_TEL_SVC.equals(svcCd))
		{
			// サービスコードが'01'(インターネットサービス)・'02'(電話サービス)の場合
			
			// サービスオーダ発行処理の引数
			// 対象データマップ
			HashMap<String, Object> sodTrgtData = new HashMap<String, Object>();
			// 対象データリスト
			ArrayList<HashMap<String, Object>> trgtDataList = new ArrayList<HashMap<String, Object>>();
			sodTrgtData.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, trgtDataList);
			// 機能コード
			sodTrgtData.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
			
			String chafOpsvkeiGeneAddDtm = (String)opDslTrgtData.get("chgaf_gene_add_dtm");
			
			// サービスオーダ発行処理の対象データリストにSODマップを追加
			ArrayList<HashMap<String, Object>> sbopSvcKeiInfoList = (ArrayList<HashMap<String, Object>>)opDslTrgtData.get("sbop_svc_kei_info_list");
			if (null != sbopSvcKeiInfoList)
			{
				for (HashMap<String, Object> sbopSvcKeiInfo:sbopSvcKeiInfoList)
				{
					String sbopsvkeiNo = (String)sbopSvcKeiInfo.get("chgaf_sbop_svc_kei_no");
					String chbfSbopsvkeiGeneAddDtm = (String)sbopSvcKeiInfo.get("chgbf_sbop_gene_add_dtm");
					String chafSbopsvkeiGeneAddDtm = (String)sbopSvcKeiInfo.get("chgaf_sbop_gene_add_dtm");

					// ▼▼▼▼▼ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD START ▼▼▼▼▼
					// サービスオーダ発行処理の対象データリストにSODマップを追加
					trgtDataList.add(
							createSodMapForOpSette(
									trgtData,
									sbopsvkeiNo,
									chbfOpsvkeiGeneAddDtm,
									chbfSbopsvkeiGeneAddDtm,
									chafOpsvkeiGeneAddDtm,
									chafSbopsvkeiGeneAddDtm,
									svcKeiUcwkNo,
									svcKeiUcwkGeneAddDtm,
									// ▼▼▼▼▼ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD START ▼▼▼▼▼
									null,
									null
									// ▲▲▲▲▲ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD END   ▲▲▲▲▲
							)
					);
					// ▲▲▲▲▲ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD E N D ▲▲▲▲▲
				}
			}
			else
			{
				// ▼▼▼▼▼ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD START ▼▼▼▼▼
				trgtDataList.add(
						createSodMapForOpSette(
								trgtData,
								null,
								chbfOpsvkeiGeneAddDtm,
								null,
								chafOpsvkeiGeneAddDtm,
								null,
								svcKeiUcwkNo,
								svcKeiUcwkGeneAddDtm,
								// ▼▼▼▼▼ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD START ▼▼▼▼▼
								null,
								null
								// ▲▲▲▲▲ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD END   ▲▲▲▲▲
						)
				);
				// ▲▲▲▲▲ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD E N D ▲▲▲▲▲
			}
			
			// サービスオーダ発行CCを呼び出す
			JKKHakkoSODCC hakkoSODCC = new JKKHakkoSODCC();
			param.setData("sodTrgtData", sodTrgtData);
			hakkoSODCC.hakkoSOD(handle, param, "sodTrgtData");
		}
		
		// 住所変更リファクタリング対応 ADD START
		if (chgidoDivAdchg)
		{
			trgtData.put(JKKDslRunConstCC.IDO_DIV, IDO_DIV_ADDCHG_REG);
		}
		// 住所変更リファクタリング対応 ADD END

		// 指示書登録処理
		//↓↓↓2012-05-14追加　巻@指示書CC取込み対応↓↓↓
		callAddSjishoCommonCompo(handle, param, JKKIdoRsvHaneiConstCC.SJISHO_MAP);
		//↑↑↑2012-05-14追加　巻@指示書CC取込み対応↑↑↑
		
		// ANK-1918-00-00 2014/07/15 ADD START
		// オプションサービスコードが"スマートリンクプレミアム"の場合
		if(OP_SVC_CD_SMARTLINK_PREMIUM.equals(opSvcCd))
		{
			// 工事案件CCを呼び出す
			callKojiAnkenCCSmlnChg(param, handle, trgtData, fixedText);
		}
		// ANK-1918-00-00 2014/07/15 ADD END
		
		
		// OM-2016-0001521 フェムトセル異動情報登録部品の呼出を追加 2016/07/07 ADD START
		// フェムトセル異動情報登録処理
		if (JKKStrConst.OP_SVC_CD_FMTCEL.equals(opSvcCd))
		{
			callFmtcelIdoInfAdd(handle, param, trgtData);
		}
		// OM-2016-0001521 フェムトセル異動情報登録部品の呼出を追加 2016/07/07 ADD END
		
		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}

	// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/07 START
	/**
	 * サブオプション登録処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 サービス契約一意照会データ
	 * @return 処理結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String updateSbopAdd(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010)
			throws Throwable
	{
		// 対象データから業務情報を取得
		String trnDate = (String)trgtData.get(JKKIdoRsvHaneiConstCC.TRN_DATE);
		String opSvcKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.OP_SVC_KEI_NO);
		String sbopSvcKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SBOP_SVC_KEI_NO);

		String svcCd = msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_CD);

		// 最終更新年月日時分秒
		String lastUpdDtm = null;
		
		// サービスオーダ発行処理の引数
		// 対象データマップ
		HashMap<String, Object> sodTrgtData = new HashMap<String, Object>();
		// 対象データリスト
		ArrayList<HashMap<String, Object>> trgtDataList = new ArrayList<HashMap<String, Object>>();
		sodTrgtData.put(JKKHakkoSODConstCC.TRGT_DATA_LIST, trgtDataList);
		// 機能コード
		sodTrgtData.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		String opsvkeiGeneAddDtm = null;

		// サブオプションサービス契約一意照会を呼び出す
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0401A010 = this.mapper.editInMsgEKK0401A010(param, opSvcKeiNo, sbopSvcKeiNo, trnDate);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0401A010 = callSvcInter(handle, param, fixedText, inMapEKK0401A010);
		
		// サブオプションサービス契約一意照会の結果を取り出す
		CAANMsg[] rsltMsgListEKK0401A010 = rsltMsgEKK0401A010.getCAANMsgList(EKK0401A010CBSMsg.EKK0401A010CBSMSG1LIST);
		CAANMsg msgEKK0401A010 = null;
		if (0 == rsltMsgListEKK0401A010.length)
		{
			// サブオプションサービス契約一意照会で検索結果が0件の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}

		msgEKK0401A010 = rsltMsgListEKK0401A010[0];
		lastUpdDtm = msgEKK0401A010.getString(EKK0401A010CBSMsg1List.LAST_UPD_DTM);
		String sbopSvcKeiStat = msgEKK0401A010.getString(EKK0401A010CBSMsg1List.SBOP_SVC_KEI_STAT);
		if (!SVC_KEI_STAT_CNC_ZM.equals(sbopSvcKeiStat))
		{
			// サブオプションサービス契約ステータスが'030'(締結済)以外の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}

		// サブオプションの親オプションを取得
		// オプションサービス契約一意照会を呼び出す
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0351A010 = this.mapper.editInMsgEKK0351A010(param, opSvcKeiNo, trnDate);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0351A010 = callSvcInter(handle, param, fixedText, inMapEKK0351A010);
		
		// オプションサービス契約一意照会の結果を取り出す
		CAANMsg[] rsltMsgListEKK0351A010 = rsltMsgEKK0351A010.getCAANMsgList(EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST);
		CAANMsg msgEKK0351A010 = null;
		if (0 == rsltMsgListEKK0351A010.length)
		{
			// オプションサービス契約一意照会で検索結果が0件の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}

		msgEKK0351A010 = rsltMsgListEKK0351A010[0];
		String opSvcKeiStat = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
		if (!JKKStrConst.CD00037_SVCTK_CHU.equals(opSvcKeiStat))
		{
			// 親オプションのオプションサービス契約ステータスが'100'(サービス提供中)以外の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}

		opsvkeiGeneAddDtm = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.GENE_ADD_DTM);

		String svcKeiUcwkNo = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.SVC_KEI_UCWK_NO);
		String svcKeiUcwkGeneAddDtm = null;
		if (svcKeiUcwkNo != null && ! "".equals(svcKeiUcwkNo))
		{
			CAANMsg ekk0161a010cbsmsg1list = searchSvcKeiUcwkSngl(handle, param, fixedText, svcKeiUcwkNo, trnDate);
			svcKeiUcwkGeneAddDtm = ekk0161a010cbsmsg1list.getString(EKK0161A010CBSMsg1List.GENE_ADD_DTM);
		}

		if (SVC_CD_IN_SVC.equals(svcCd))
		{
			// サービスコードが'01'(インターネットサービス)の場合
			
			// サブオプションサービス契約<ISP>使用開始を呼び出す
			// 上りマッピング処理
			HashMap<String, Object> inMapEKK0411C050 = this.mapper.editInMsgEKK0411C050(param, trgtData, msgEKK0401A010, lastUpdDtm);
			// サービスインターフェース呼び出し
			CAANMsg rsltMsgEKK0411C050 = callSvcInter(handle, param, fixedText, inMapEKK0411C050);

			// サービスオーダ発行処理の対象データリストにSODマップを追加
			trgtDataList.add(
					createSodMapForOpSette(
							trgtData,
							msgEKK0401A010.getString(EKK0401A010CBSMsg1List.SBOP_SVC_KEI_NO),
							opsvkeiGeneAddDtm,
							null,
							opsvkeiGeneAddDtm,
							rsltMsgEKK0411C050.getString(EKK0411C050CBSMsg.KK0401_GENE_ADD_DTM),
							null,
							null,
							null,
							null
					)
			);

			// 最終更新年月日時分秒を更新
			lastUpdDtm = rsltMsgEKK0411C050.getString(EKK0411C050CBSMsg.UPD_DTM);
		}
		else if (SVC_CD_TEL_SVC.equals(svcCd))
		{
			// サービスコードが'02'(電話サービス)の場合
			
			// サブオプションサービス契約<電話>使用開始を呼び出す
			// 上りマッピング処理
			HashMap<String, Object> inMapEKK0431C040 = this.mapper.editInMsgEKK0431C040(param, trgtData, msgEKK0401A010, lastUpdDtm);
			// サービスインターフェース呼び出し
			CAANMsg rsltMsgEKK0431C040 = callSvcInter(handle, param, fixedText, inMapEKK0431C040);

			// サービスオーダ発行処理の対象データリストにSODマップを追加
			trgtDataList.add(
					createSodMapForOpSette(
							trgtData,
							msgEKK0401A010.getString(EKK0401A010CBSMsg1List.SBOP_SVC_KEI_NO),
							opsvkeiGeneAddDtm,
							null,
							opsvkeiGeneAddDtm,
							rsltMsgEKK0431C040.getString(EKK0431C040CBSMsg.KK0401_GENE_ADD_DTM),
							svcKeiUcwkNo,
							svcKeiUcwkGeneAddDtm,
							null,
							null
					)
			);

			// 最終更新年月日時分秒を更新
			lastUpdDtm = rsltMsgEKK0431C040.getString(EKK0431C040CBSMsg.UPD_DTM);
		}
		else if (SVC_CD_TV_SVC.equals(svcCd))
		{
			// サービスコードが'03'(テレビサービス)の場合
			
			// サブオプションサービス契約<TV>使用開始を呼び出す
			// 上りマッピング処理
			HashMap<String, Object> inMapEKK0421C040 = this.mapper.editInMsgEKK0421C040(param, trgtData, msgEKK0401A010, lastUpdDtm);
			// サービスインターフェース呼び出し
			CAANMsg rsltMsgEKK0421C040 = callSvcInter(handle, param, fixedText, inMapEKK0421C040);
			
			// 最終更新年月日時分秒を更新
			lastUpdDtm = rsltMsgEKK0421C040.getString(EKK0421C040CBSMsg.UPD_DTM);
		}
		
		if (0 < trgtDataList.size())
		{
			makeUp4GeneAddDtm(handle, param, fixedText, sodTrgtData, trnDate);
			// サービスオーダ発行CCを呼び出す
			JKKHakkoSODCC hakkoSODCC = new JKKHakkoSODCC();
			param.setData("sodTrgtData", sodTrgtData);
			hakkoSODCC.hakkoSOD(handle, param, "sodTrgtData");
		}
		
		// 指示書登録処理
		callAddSjishoCommonCompo(handle, param, JKKIdoRsvHaneiConstCC.SJISHO_MAP);

		// 進捗登録処理を呼び出す
		addPrg(handle, param, trgtData, fixedText, PRG_STAT_OP_SET_FIN);

		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}
	
	/**
	 * サブオプション解約処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 サービス契約一意照会データ
	 * @return 処理結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String updateSbopDsl(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010)
			throws Throwable
	{
		return updateOpDsl(handle, param, trgtData, fixedText, msgEKK0081A010);
	}
	// OM-2014-0000032 非通知着信拒否オプションの開始予約が反映されない 2014/01/07 END

	/**
	 * オプション引継処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 サービス契約一意照会データ
	 * @return 処理結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String updateOpHktgi(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010
	) throws Throwable
	{
		// 対象データから業務情報を取得
		String idoDiv            = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_DIV);
		String mskmDtlNo         = (String)trgtData.get(JKKIdoRsvHaneiConstCC.MSKM_DTL_NO);
		String opSvcKeiNo        = (String)trgtData.get(JKKIdoRsvHaneiConstCC.OP_SVC_KEI_NO); 
		String trnDate           = (String)trgtData.get(JKKIdoRsvHaneiConstCC.TRN_DATE);
		String opHktgiSkSvcKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.OP_HKTGI_SK_SVC_KEI_NO);

		// 異動日時取得
		String idoDtm = getIdoDtm(handle, param, trgtData, fixedText);

		CAANMsg opHktgiSkMsgEKK0081A010 = null;

		// オプション引継先サービス契約番号が空白でない場合
		if (!isNull(opHktgiSkSvcKeiNo))
		{
			// サービス契約一意照会処理を呼び出し、引継先のサービス契約のステータスを取得
			opHktgiSkMsgEKK0081A010 = searchSvcKeiSngl(handle, param, fixedText, opHktgiSkSvcKeiNo, trnDate);

			if (null == opHktgiSkMsgEKK0081A010)
			{
				// サービス契約一意照会で検索結果が取得できない場合、処理結果に'01'(反映取消)を返却する
				return TRAN_RSLT_HANEI_CL;
			}
			else
			{
				// 引継先のサービス契約ステータス取得
				String svcKeiStat = opHktgiSkMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
				if (
						SVC_KEI_STAT_DSL_ZM.equals(svcKeiStat)
						|| SVC_KEI_STAT_CNCL_ZM.equals(svcKeiStat)
				)
				{
					// サービス契約ステータスが'910'(解約済)・'920'(キャンセル済)の場合、処理結果に'01'(反映取消)を返却する
					return TRAN_RSLT_HANEI_CL;
				}
			}
		}
		else
		{
			// オプション引継先サービス契約番号が空白の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}

		// オプションサービス契約一意照会を呼び出す
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0351A010 = this.mapper.editInMsgEKK0351A010(param, opSvcKeiNo, trnDate);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0351A010 = callSvcInter(handle, param, fixedText, inMapEKK0351A010);

		// オプションサービス契約一意照会の結果を取り出す
		CAANMsg[] rsltMsgListEKK0351A010 = rsltMsgEKK0351A010.getCAANMsgList(EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST);
		CAANMsg msgEKK0351A010 = null;
		if (0 == rsltMsgListEKK0351A010.length)
		{
			// オプションサービス契約一意照会で検索結果が0件の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}
		else
		{
			msgEKK0351A010 = rsltMsgListEKK0351A010[0];
		}

		// 20130724 IT1-2013-0001434 オプション引継予約対応 DEL START
//		// オプション引継対象更新CCの引数を生成
//		// 対象データマップ
//		HashMap<String, Object> opSvcHktgUpdTrgtData = new HashMap<String, Object>();
//		
//		opSvcHktgUpdTrgtData.put(KKSV0223_KKSV0223OP_OpSvcHktgiUpd.HIKISAKI_SVC_KEI_NO, opHktgiSkSvcKeiNo);
//		if (null != opHktgiSkMsgEKK0081A010)
//		{
//			opSvcHktgUpdTrgtData.put(KKSV0223_KKSV0223OP_OpSvcHktgiUpd.HIKISAKI_SYSID, opHktgiSkMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.SYSID));
//			opSvcHktgUpdTrgtData.put(KKSV0223_KKSV0223OP_OpSvcHktgiUpd.HIKISAKI_SVC_KEI_STAT_CD, opHktgiSkMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
//			//↓↓↓2012-09-01追加　IT1-2012-0000952対応↓↓↓
//			opSvcHktgUpdTrgtData.put("hikisaki_last_upd_dtm", opHktgiSkMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM));
//			//↑↑↑2012-09-01追加　IT1-2012-0000952対応↑↑↑
//		}
//		
//		//↓↓↓2012-09-01追加　IT1-2012-0000952対応↓↓↓
//		opSvcHktgUpdTrgtData.put("kidoMoto", "IdoRsvHanei");
//
//		HashMap<String, String> idoRsnMap = new HashMap<String, String>();
//		idoRsnMap.put("ido_rsn_cd", "C2");
//		ArrayList<Object> idoRsnList = new ArrayList<Object>();
//		idoRsnList.add(idoRsnMap);
//		opSvcHktgUpdTrgtData.put("ido_rsn_cdList", idoRsnList);		//空の異動理由リストを作成
//		//↑↑↑2012-09-01追加　IT1-2012-0000952対応↑↑↑
//		opSvcHktgUpdTrgtData.put(KKSV0223_KKSV0223OP_OpSvcHktgiUpd.MSKM_DTL_NO, mskmDtlNo);	//"mskm_dtl_no"
//		opSvcHktgUpdTrgtData.put(KKSV0223_KKSV0223OP_OpSvcHktgiUpd.LAST_UPD_DTM, msgEKK0081A010.getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM));	//"last_upd_dtm"
//		opSvcHktgUpdTrgtData.put(KKSV0223_KKSV0223OP_OpSvcHktgiUpd.HIKISAKI_APLY_YMD, trnDate);
//		
//		opSvcHktgUpdTrgtData.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
//		
//		List<Map<String, Object>> opSvcKeiList = new ArrayList<Map<String,Object>>();
//		opSvcHktgUpdTrgtData.put(KKSV0223_KKSV0223OP_OpSvcHktgiUpd.OPSVCKEILIST, opSvcKeiList);
//		
//		Map<String, Object> opSvcKeiMap = new HashMap<String, Object>();
//		opSvcKeiList.add(opSvcKeiMap);
//		
//		opSvcKeiMap.put(KKSV0223_KKSV0223OP_OpSvcHktgiUpd_opSvcKeiList.OP_SVC_KEI_NO, opSvcKeiNo);
//		opSvcKeiMap.put(KKSV0223_KKSV0223OP_OpSvcHktgiUpd_opSvcKeiList.OP_SVC_CD, msgEKK0351A010.getString(EKK0351A010CBSMsg1List.OP_SVC_CD));
//		opSvcKeiMap.put(KKSV0223_KKSV0223OP_OpSvcHktgiUpd_opSvcKeiList.PCRS_CD, msgEKK0351A010.getString(EKK0351A010CBSMsg1List.PCRS_CD));
//		//↓↓↓2012-09-01追加　IT1-2012-0000952対応↓↓↓
//		opSvcKeiMap.put(KKSV0223_KKSV0223OP_OpSvcHktgiUpd_opSvcKeiList.OP_SVC_KEI_STAT, msgEKK0351A010.getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT));
//		//↑↑↑2012-09-01追加　IT1-2012-0000952対応↑↑↑
//		
//		// オプション引継対象更新CCを呼び出す
//		param.setData(KKSV0223_KKSV0223OP.OPSVCHKTGIUPD, opSvcHktgUpdTrgtData);
//		JKKOpSvcHktgiUpdCC opSvcHktgiUpdCC = new JKKOpSvcHktgiUpdCC();
//		opSvcHktgiUpdCC.opSvcHktgiUpd(handle, param, KKSV0223_KKSV0223OP.OPSVCHKTGIUPD);
//		
//		// 指示書登録処理（指示書登録用マップはオプション引継対象更新CC内で設定される）
//		//↓↓↓2012-05-14追加　巻@指示書CC取込み対応↓↓↓
////		callAddSjishoCommonCompo(handle, param, KKSV0223_KKSV0223OP.SJISHO_MAP);
//		//↑↑↑2012-05-14追加　巻@指示書CC取込み対応↑↑↑
		// 20130724 IT1-2013-0001434 オプション引継予約対応 DEL END

		// 20130724 IT1-2013-0001434 オプション引継予約対応 ADD START
		// 引継元サービス契約情報を取得
		CAANMsg opHktgiMtMsgEKK0081A010 = searchSvcKeiSngl(
															handle, 
															param, 
															fixedText, 
															msgEKK0351A010.getString(EKK0351A010CBSMsg1List.SVC_KEI_NO), 
															trnDate
															);

		if (null == opHktgiMtMsgEKK0081A010)
		{
			throw new CCException("", new SCCallException("引継元サービス契約情報取得エラー サービス契約番号["+msgEKK0351A010.getString(EKK0351A010CBSMsg1List.SVC_KEI_NO)+"]", String.valueOf(9051), 8011));
		}

		// 引継元サービス契約内訳情報を取得
		CAANMsg opHktgiMtMsgEKK0161B004 = searchSvcKeiUcwkBySvcKeiNo(
																	handle, 
																	param, 
																	fixedText, 
																	opHktgiMtMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO), 
																	opHktgiMtMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT)
																	);

		if (null == opHktgiMtMsgEKK0161B004)
		{
			throw new CCException("", new SCCallException("引継元サービス契約内訳情報取得エラー サービス契約番号["+opHktgiSkMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO)+"]", String.valueOf(9051), 8011));
		}

		// ■ オプションサービス引継チェック
		HashMap<String, Object> inMapEKK0351C011 = this.mapper.editInMsgEKK0351C011(
																					param, 
																					trnDate, 
																					opHktgiMtMsgEKK0081A010, 
																					opHktgiSkMsgEKK0081A010, 
																					opHktgiMtMsgEKK0161B004,
																					msgEKK0351A010
																					);
		callSvcInter(handle, param, fixedText, inMapEKK0351C011);

		// ■ オプション引継対象更新CC
		HashMap<String, Object> opSvcHktgUpdTrgtData = new HashMap<String, Object>();

		// 機能コード
		opSvcHktgUpdTrgtData.put(JCMConstants.FUNC_CODE_KEY,                             JPCModelConstant.FUNC_CD_1);
		// 異動区分
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_IDO_DIV,               idoDiv);
		// 適用開始年月日
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_HIKISAKI_APLY_YMD,     trnDate);
		// 申込明細番号
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_MSKM_DTL_NO,           mskmDtlNo);
		// 引継先SYSID
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_HIKISAKI_SYSID,        opHktgiSkMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.SYSID));
		// 引継先サービス契約番号
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_HIKISAKI_SVC_KEI_NO,   opHktgiSkMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
		// 引継先サービス契約最終更新年月日時分秒
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_HIKISAKI_LAST_UPD_DTM, opHktgiSkMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM));
		// 引継先サービス契約ステータス
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_HIKISAKI_SVC_KEI_STAT, opHktgiSkMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));
		// 引継元SYSID
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_HIKIMOTO_SYSID,        opHktgiMtMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.SYSID));
		// 引継元サービス契約番号
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_HIKIMOTO_SVC_KEI_NO,   opHktgiMtMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
		// 引継元サービス契約最終更新年月日時分秒
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_HIKIMOTO_LAST_UPD_DTM, opHktgiMtMsgEKK0081A010.getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM));
		// 進捗異動年月日時分秒
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_PRG_IDO_DTM,           idoDtm);
		// 起動元コード
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_KIDO_CD,               KIDO_CD_BAT);

		// オプションサービス契約一覧情報
		List<Map<String, Object>> opSvcKeiList = new ArrayList<Map<String,Object>>();
		Map<String, Object> opSvcKeiMap = new HashMap<String, Object>();
		// オプションサービス契約番号
		opSvcKeiMap.put("op_svc_kei_no", opSvcKeiNo);
		opSvcKeiList.add(opSvcKeiMap);
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.OP_SVC_KEI_LIST, opSvcKeiList);

		// 異動理由
		HashMap<String, String> idoRsnMap = new HashMap<String, String>();
		idoRsnMap.put("ido_rsn_memo", null);
		idoRsnMap.put("ido_rsn_cd", "C2");
		ArrayList<Object> idoRsnList = new ArrayList<Object>();
		idoRsnList.add(idoRsnMap);
		opSvcHktgUpdTrgtData.put(JKKOpSvcHktgiUpdCC.USER_DATA_KEY_IDO_RSN_CD_LIST, idoRsnList);	

		// オプション引継対象更新CCを呼び出す
		param.setData(KKSV0223_KKSV0223OP.OPSVCHKTGIUPD, opSvcHktgUpdTrgtData);

		// オプション引継対象更新ＣＣ　実行
		JKKOpSvcHktgiUpdCC opSvcHktgiUpdCC = new JKKOpSvcHktgiUpdCC();
		opSvcHktgiUpdCC.opSvcHktgiUpd(handle, param, KKSV0223_KKSV0223OP.OPSVCHKTGIUPD);
		// 20130724 IT1-2013-0001434 オプション引継予約対応 ADD END

		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}
	
	/**
	 * 機器契約解約処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 サービス契約一意照会データ
	 * @return 処理結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String updateKikiKeiDsl(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010
	) throws Throwable
	{
		// 対象データから業務情報を取得
		String kktkSvcKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.KKTK_SVC_KEI_NO); 
		String trnDate      = (String)trgtData.get(JKKIdoRsvHaneiConstCC.TRN_DATE);

		// 機器提供サービス契約一意照会を呼び出す
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0341A010 = this.mapper.editInMsgEKK0341A010(param, kktkSvcKeiNo, trnDate);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0341A010 = callSvcInter(handle, param, fixedText, inMapEKK0341A010);

		// 機器提供サービス契約一意照会の結果を取り出す
		CAANMsg[] rsltMsgListEKK0341A010 = rsltMsgEKK0341A010.getCAANMsgList(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
		CAANMsg msgEKK0341A010 = null;
		if (0 < rsltMsgListEKK0341A010.length)
		{
			msgEKK0341A010 = rsltMsgListEKK0341A010[0];
		}
		else
		{
			// 機器提供サービス契約一意照会で検索結果が0件の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}

		// 機器提供サービス契約ステータスを取得
		String kktkSvcKeiStat = msgEKK0341A010.getString(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT);

		if (
				KKTK_SVC_KEI_STAT_DSL_ZM.equals(kktkSvcKeiStat)
				|| KKTK_SVC_KEI_STAT_CNCL_ZM.equals(kktkSvcKeiStat)
		)
		{
			// 機器提供サービス契約ステータスが '910'(解約済)・'920'(キャンセル済)の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}

		// 機器提供サービス契約解約を呼び出す
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0341C340 = this.mapper.editInMsgEKK0341C340(param, trgtData, msgEKK0341A010);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0341C340 = callSvcInter(handle, param, fixedText, inMapEKK0341C340);

		// 機器提供サービス契約解約確定を呼び出す
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0341C350 = this.mapper.editInMsgEKK0341C350(param, trgtData, msgEKK0341A010, rsltMsgEKK0341C340);
		// サービスインターフェース呼び出し
		callSvcInter(handle, param, fixedText, inMapEKK0341C350);

		// ▼▼▼▼▼ 2013/07/29 UPD START ▼▼▼▼▼
		// 進捗登録処理を呼び出す
		addPrg(handle, param, trgtData, fixedText, PRG_STAT_RENT_DSLFIN);
		addPrg(handle, param, trgtData, fixedText, PRG_STAT_HEMPN_REQ_CHU);
		// ▲▲▲▲▲ 2013/07/29 UPD E N D ▲▲▲▲▲

		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}
	
	// ANK-2056-00-00 2014/04/28 start
	/**
	 * 電話オプションパック割引開始処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 サービス契約一意照会データ
	 * @return 処理結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String updateOpPacAdd(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010
	) throws Throwable
	{
		// 対象データから業務情報を取得
		String wribSvcKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.WRIB_SVC_KEI_NO);
		String trnDate = (String)trgtData.get(JKKIdoRsvHaneiConstCC.TRN_DATE);
		// IT1-2014-0000146 2014/05/16 add start
		String rsvAplyYmd = (String)trgtData.get(JKKIdoRsvHaneiConstCC.RSV_APLY_YMD);
		// IT1-2014-0000146 2014/05/16 add end
		
		// 割引サービス契約一意照会を呼び出す
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0451A010 = this.mapper.editInMsgEKK0451A010(param, wribSvcKeiNo, trnDate);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0451A010 = callSvcInter(handle, param, fixedText, inMapEKK0451A010);
		// 割引サービス契約一意照会の結果を取り出す
		CAANMsg[] rsltMsgListEKK0451A010 = rsltMsgEKK0451A010.getCAANMsgList(EKK0451A010CBSMsg.EKK0451A010CBSMSG1LIST);

		if (!SVC_KEI_STAT_UKE_ZM.equals(rsltMsgListEKK0451A010[0].getString(EKK0451A010CBSMsg1List.WRIB_SVC_KEI_STAT)))
		{
			// 割引サービス契約ステータスが受付済以外の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}
		
		// 割引サービス契約＜置換型＞開始を呼び出す
		// 上りマッピング処理
		// IT1-2014-0000146 2014/05/16 mod start
		//HashMap<String, Object> inMapEKK0451C220 = this.mapper.editInMsgEKK0451C220(param, rsltMsgListEKK0451A010[0],
		//		(String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_DIV));
		HashMap<String, Object> inMapEKK0451C220 = this.mapper.editInMsgEKK0451C220(param, rsltMsgListEKK0451A010[0],
				(String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_DIV), 
				msgEKK0081A010.getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM), rsvAplyYmd);
		// IT1-2014-0000146 2014/05/16 mod end
		// サービスインターフェース呼び出し
		//CAANMsg rsltMsgEKK0451C220 = 
		callSvcInter(handle, param, fixedText, inMapEKK0451C220);

		// 進捗登録処理を呼び出す
		trgtData.put("tmp_wrib_svc_cd", rsltMsgListEKK0451A010[0].getString(EKK0451A010CBSMsg1List.WRIB_SVC_CD));
		String svcKeiUcwkNo = getSvcKeiUcwkNoFromWribSvcKeiNo(handle, param, fixedText, wribSvcKeiNo, trnDate);
		trgtData.put("tmp_svc_kei_ucwk_no", svcKeiUcwkNo);
		addPrg(handle, param, trgtData, fixedText, PRG_STAT_OPPAC_SET_FIN);

		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}
	
	/**
	 * 電話オプションパック割引解約処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @param fixedText ユーザ任意文字列
	 * @param msgEKK0081A010 サービス契約一意照会データ
	 * @return 処理結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String updateOpPacDsl(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap trgtData,
			String fixedText,
			CAANMsg msgEKK0081A010
	) throws Throwable
	{
		// 対象データから業務情報を取得
		String wribSvcKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.WRIB_SVC_KEI_NO);
		String trnDate = (String)trgtData.get(JKKIdoRsvHaneiConstCC.TRN_DATE);

		// 割引サービス契約一意照会を呼び出す
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0451A010 = this.mapper.editInMsgEKK0451A010(param, wribSvcKeiNo, trnDate);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0451A010 = callSvcInter(handle, param, fixedText, inMapEKK0451A010);
		// 割引サービス契約一意照会の結果を取り出す
		CAANMsg[] rsltMsgListEKK0451A010 = rsltMsgEKK0451A010.getCAANMsgList(EKK0451A010CBSMsg.EKK0451A010CBSMSG1LIST);
		String wribSvcCd = rsltMsgListEKK0451A010[0].getString(EKK0451A010CBSMsg1List.WRIB_SVC_CD);
		String wribSvcKeiStat = rsltMsgListEKK0451A010[0].getString(EKK0451A010CBSMsg1List.WRIB_SVC_KEI_STAT);

		if (SVC_KEI_STAT_DSL_ZM.equals(wribSvcKeiStat)
				|| SVC_KEI_STAT_CNCL_ZM.equals(wribSvcKeiStat))
		{
			// オプションサービス契約ステータスが'910'(解約済)・'920'(キャンセル済)の場合、'01'(反映取消)を返却
			return TRAN_RSLT_HANEI_CL;
		}
		
		// IT1-2014-0000137 2014/05/15 start
		String svcKeiUcwkNo = getSvcKeiUcwkNoFromWribSvcKeiNo(handle, param, fixedText, wribSvcKeiNo, trnDate);
		if("".equals(svcKeiUcwkNo)){
			//有効なサービス契約内訳番号を取得できなかった
			return TRAN_RSLT_HANEI_CL;
		}
		// IT1-2014-0000137 2014/05/15 end
		
		String fixedTextPackCC = "fixedTextPackCC";
		JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
		//電話セレクトオプションパック操作CCに渡すパラメータを作成
		HashMap<String, Object> paramMapPackCC = new HashMap<String, Object>();
		paramMapPackCC.put("func_cd", "1");
		paramMapPackCC.put("trn_div","02"); //解約
		paramMapPackCC.put("sysid", msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SYSID));
		paramMapPackCC.put("svc_kei_no", msgEKK0081A010.getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
		paramMapPackCC.put("svc_kei_ucwk_no", svcKeiUcwkNo);
		paramMapPackCC.put("mskm_dtl_no", trgtData.get(JKKIdoRsvHaneiConstCC.MSKM_DTL_NO));
		paramMapPackCC.put("svc_dlre_cd", SVC_DLRE_TUJYO_DSL);
		paramMapPackCC.put("svc_cancel_rsn_cd", SVC_CANCEL_RSN_CD_01);
		paramMapPackCC.put("kisan_ymd", trnDate);
		paramMapPackCC.put("ido_div", trgtData.get(JKKIdoRsvHaneiConstCC.IDO_DIV));
		String packDiv = "";
		if("W00000007".equals(wribSvcCd)){
			packDiv = "1";
		}else if("W00000008".equals(wribSvcCd)){
			packDiv = "2";
		// ANK-3754-00-00 ADD START
		}else if("W00000023".equals(wribSvcCd)){
			packDiv = "3";
		// ANK-3754-00-00 ADD END
		}
		paramMapPackCC.put("pack_div", packDiv);
		paramMapPackCC.put("pnlty_div", trgtData.get(JKKIdoRsvHaneiConstCC.PNLTY_HASSEI_CD));
		paramMapPackCC.put("kk0081_upd_dtm", msgEKK0081A010.getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM));
		
		param.setData(fixedTextPackCC, paramMapPackCC);
		//解約を実行
		param = telSelectOpPackOperateCC.execute(handle, param, fixedTextPackCC);
//		HashMap<String, Object> retMapPackCC = (HashMap<String, Object>)param.getData(fixedTextPackCC);
		
		// 進捗登録処理を呼び出す
		trgtData.put("tmp_svc_kei_ucwk_no", svcKeiUcwkNo);
		// IT1-2014-0000146 2014/05/16 add start
		trgtData.put("tmp_wrib_svc_cd", wribSvcCd);
		// IT1-2014-0000146 2014/05/16 add end
		addPrg(handle, param, trgtData, fixedText, PRG_STAT_OPPAC_SET_FIN);

		// '00'(正常終了)を返却
		return TRAN_RSLT_NORMAL_END;
	}
	// ANK-2056-00-00 2014/04/28 end
	
	/**
	 * サービス契約一意照会処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param svcKeiNo サービス契約番号
	 * @param trnDate 処理年月日
	 * @return サービス契約一意照会の結果
	 * @throws Throwable
	 */
	private CAANMsg searchSvcKeiSngl(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNo,
			String trnDate)
			throws Throwable
	{
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0081A010 = this.mapper.editInMsgEKK0081A010(param, svcKeiNo, trnDate);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0081A010 = callSvcInter(handle, param, fixedText, inMapEKK0081A010);
		
		// 結果を返却
		CAANMsg[] rsltMsgListEKK0081A010 = rsltMsgEKK0081A010.getCAANMsgList(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		if (0 < rsltMsgListEKK0081A010.length)
		{
			return rsltMsgListEKK0081A010[0];
		}
		else
		{
			return null;
		}
	}
	
	/**
	 * サービス契約内訳一意照会処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param svcKeiUcwkNo サービス契約内訳番号
	 * @param trnDate 処理年月日
	 * @return サービス契約内訳一意照会の結果
	 * @throws Throwable
	 */
	private CAANMsg searchSvcKeiUcwkSngl(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiUcwkNo,
			String trnDate
	) throws Throwable
	{
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0161A010 = this.mapper.editInMsgEKK0161A010(param, svcKeiUcwkNo, trnDate);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0161A010 = callSvcInter(handle, param, fixedText, inMapEKK0161A010);

		// 結果を返却
		CAANMsg[] rsltMsgListEKK0161A010 = rsltMsgEKK0161A010.getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
		if (rsltMsgListEKK0161A010.length > 0)
		{
			return rsltMsgListEKK0161A010[0];
		}
		else
		{
			return null;
		}
	}

	// ▼▼▼▼▼ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD START ▼▼▼▼▼
	/**
	 * SODマップ生成処理(オプション設定)です。<br>
	 * <br>
	 * @param	trgtData					対象データ
	 * @param	sbopsvkeiNo					サブオプションサービス契約番号
	 * @param	chbfOpsvkeiGeneAddDtm		変更前オプションサービス契約世代登録年月日時分秒
	 * @param	chbfSbopsvkeiGeneAddDtm		変更前サブオプションサービス契約世代登録年月日時分秒
	 * @param	chafOpsvkeiGeneAddDtm		変更後オプションサービス契約世代登録年月日時分秒
	 * @param	chafSbopsvkeiGeneAddDtm		変更後サブオプションサービス契約世代登録年月日時分秒
	 * @param	svcKeiUcwkNo				サービス契約内訳番号（電話オプション用）
	 * @param	svcKeiUcwkGeneAddDtm		サービス契約内訳世代登録年月日時分秒
	 * @param	kktkSvcKeiNo				機器提供サービス契約番号
	 * @param	kktkSvcKeiGeneAddDtm		機器提供サービス契約世代登録年月日時分秒
	 * @return	SODマップ
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> createSodMapForOpSette(
			HashMap trgtData,
			String sbopsvkeiNo,
			String chbfOpsvkeiGeneAddDtm,
			String chbfSbopsvkeiGeneAddDtm,
			String chafOpsvkeiGeneAddDtm,
			String chafSbopsvkeiGeneAddDtm,
			String svcKeiUcwkNo,
			String svcKeiUcwkGeneAddDtm,
			// ▼▼▼▼▼ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD START ▼▼▼▼▼
			String kktkSvcKeiNo,
			String kktkSvcKeiGeneAddDtm
			// ▲▲▲▲▲ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD END   ▲▲▲▲▲
	)				//2012-11-21追加　ロット２IT1-2012-0002119（電話オプションの解約にサービス契約内訳が必要）
	{ 
		// 対象データから業務情報を取得
		String sysid      = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SYSID);
		String svcKeiNo   = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SVC_KEI_NO);
		String idoDiv     = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_DIV);
		String opSvcKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.OP_SVC_KEI_NO);

		// SODマップ
		HashMap<String, Object> sodMap = new HashMap<String, Object>();

		// SOD基本情報
		HashMap<String, Object> sodKihonInfo = new HashMap<String, Object>();
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYSID,   sysid);
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_IDO_DIV, idoDiv);
		sodMap.put(JKKHakkoSODConstCC.SOD_KIHON_INFO, sodKihonInfo);

		// サービス契約情報
		HashMap<String, Object> svcKeiInfo = new HashMap<String, Object>();
		svcKeiInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_NO, svcKeiNo);
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_INFO, svcKeiInfo);

		// サービス契約内訳情報
		HashMap<String, Object> svcKeiUcwkInfo = new HashMap<String, Object>();
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_UCWK_NO,                svcKeiUcwkNo);
		svcKeiUcwkInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SVC_KEI_UCWK_GENE_ADD_DTM, svcKeiUcwkGeneAddDtm);
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_UCWK_INFO, svcKeiUcwkInfo);

		// オプションサービス契約情報
		HashMap<String, Object> opsvkeiInfo = new HashMap<String, Object>();
		if (isNull(chbfOpsvkeiGeneAddDtm))
		{
			opsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHBF_OPSVKEI_NO, null);
		}
		else
		{
			opsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHBF_OPSVKEI_NO, opSvcKeiNo);
		}
		opsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHBF_OPSVKEI_GENE_ADD_DTM, chbfOpsvkeiGeneAddDtm);
		if (isNull(chbfSbopsvkeiGeneAddDtm))
		{
			opsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHBF_SBOPSVKEI_NO, null);
		}
		else
		{
			opsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHBF_SBOPSVKEI_NO, sbopsvkeiNo);
		}
		opsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHBF_SBOPSVKEI_GENE_ADD_DTM, chbfSbopsvkeiGeneAddDtm);
		opsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_NO, opSvcKeiNo);
		opsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_GENE_ADD_DTM, chafOpsvkeiGeneAddDtm);
		opsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SBOPSVKEI_NO, sbopsvkeiNo);
		opsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_SBOPSVKEI_GENE_ADD_DTM, chafSbopsvkeiGeneAddDtm);
		sodMap.put(JKKHakkoSODConstCC.OPSVKEI_INFO, opsvkeiInfo);

		// ▼▼▼▼▼ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD START ▼▼▼▼▼
		HashMap<String, Object> kktksvkeiInfo = new HashMap<String, Object>();
		kktksvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_KKTSVKEI_NO, kktkSvcKeiNo);
		kktksvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_KKTSVKEI_GENE_ADD_DTM, kktkSvcKeiGeneAddDtm);
		// ▲▲▲▲▲ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 ADD END   ▲▲▲▲▲
		
		// 機器提供サービス契約情報
		// ▼▼▼▼▼ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 MOD START ▼▼▼▼▼
//		sodMap.put(JKKHakkoSODConstCC.KKTSVKEI_INFO, new HashMap<String, Object>());
		sodMap.put(JKKHakkoSODConstCC.KKTSVKEI_INFO, kktksvkeiInfo);
		// ▲▲▲▲▲ IT2-2013-0000585 2013/07/10 割込電話の予約反映時に機器提供サービス契約番号、世代が必要 MOD END   ▲▲▲▲▲
		return sodMap;
	}
	// ▲▲▲▲▲ 2013/01/26 ST2-2013-0000270 電話オプション開始内訳の世代登録年月日が必要 ADD E N D ▲▲▲▲▲

	/**
	 * エイジング情報生成処理です。
	 * <br>
	 * @param agingSbtCd エイジング種別コード
	 * @param agingTgValue エイジング対象値
	 * @return エイジング情報マップ
	 */
	private HashMap<String, Object> createAgingInfo(
			String agingSbtCd,
			String agingTgValue)
	{
		// エイジング情報を生成
		HashMap<String, Object> agingInfo = new HashMap<String, Object>();
		// エイジング種別コード
		agingInfo.put("aging_sbt_cd", agingSbtCd);
		// エイジング対象値
		agingInfo.put("aging_tg_value", agingTgValue);
		
		return agingInfo;
	}
	
	/**
	 * 異動予約状態変更<br/>
	 * <br/>
	 * KK1681異動予約スキーマの指定レコード（異動予約番号を指定）に対し、<br/>
	 * 異動予約の反映／取消の処理結果を更新します。<br/>
	 * <br/>
	 * @param tranRslt 処理結果の値、00:成功、01:取消
	 * @param fixedText "KKSV044601CC"
	 * @param param BPパラメータマップ一式
	 * @param handle セッションハンドル
	 * @param trgtData 入力データマップ
	 * 
	 * @throws Throwable 任意の例外
	 * 
	 * @since 2011-12-26
	 * @version 2012-03-01 IT障害1023対応のPT障害改修
	 */
	@SuppressWarnings("unchecked")
	private void updateIdoRsv(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap trgtData, String tranRslt)
	throws Throwable
	{
		//異動予約状態コード
		String ido_rsv_stat_cd = (TRAN_RSLT_NORMAL_END.equals(tranRslt) ? IDO_RSV_STAT_CD_HANEIZM : IDO_RSV_STAT_CD_CLZM);

		//異動予約番号
		String ido_rsv_no = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_RSV_NO);

		//更新年月日時分秒(更新前)
		String upd_dtm_bf = (String)trgtData.get(JKKIdoRsvHaneiConstCC.UPD_DTM);

		//↓↓↓2012-03-01追加↓↓↓
		/* 
		 * 解約CC内で実行している割引サービス契約自動適用CCが割引サービス契約解約確定S-IFを呼び出しているが、
		 * その副次処理で異動予約を更新しているため、一旦最新の更新年月日時分秒を取得する必要があり、
		 * 異動予約一意照会S-IFを追加実装する
		 */
		HashMap<String, Object> inMapEKK1681A010 = this.mapper.editInMsgEKK1681A010(param, ido_rsv_no);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK1681A010 = callSvcInter(handle, param, fixedText, inMapEKK1681A010);
		// 結果を返却
		CAANMsg[] rsltMsgListEKK1681A010 = rsltMsgEKK1681A010.getCAANMsgList(EKK1681A010CBSMsg.EKK1681A010CBSMSG1LIST);
		if (null != rsltMsgListEKK1681A010 && 0 < rsltMsgListEKK1681A010.length)
		{
			upd_dtm_bf = rsltMsgListEKK1681A010[0].getString(EKK1681A010CBSMsg1List.UPD_DTM);
		}
		//↑↑↑2012-03-01追加↑↑↑

		//異動予約反映日／異動予約取消日の設定
		String haneiYmd = null;
		String clYmd = null;

		String today = (String)trgtData.get(JKKIdoRsvHaneiConstCC.TRN_DATE);	//JCCBPCommon.getOpeDate(null);

		if (IDO_RSV_STAT_CD_HANEIZM.equals(ido_rsv_stat_cd))
		{
			haneiYmd = today;
		}
		else
		{
			clYmd = today;
		}

		//EKK1681C010 異動予約状態変更S-IF呼出し
		{
			// 上りマッピング処理
			HashMap<String, Object> inMapEKK1681C010 = this.mapper.editInMsgEKK1681C010(param, ido_rsv_no, haneiYmd, clYmd, ido_rsv_stat_cd, upd_dtm_bf);
	
			// サービスインターフェース呼び出し
			//CAANMsg rsltMsgEKK1681C010 = 
			callSvcInter(handle, param, fixedText, inMapEKK1681C010);
		}
	}

	//↓↓↓2012-05-13追加　巻@指示書CC取込み対応↓↓↓
	/**
	 * 指示書CCを実行します
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param mapNm 指示書CC向けI/Oデータマップのマップ名
	 * @throws Throwable 任意の例外
	 * 
	 */
	private void callAddSjishoCommonCompo(SessionHandle handle, 
			IRequestParameterReadWrite param, String mapNm) throws Throwable
	{
		Map<?, ?> sjishoMap = (Map<?, ?>)param.getData(mapNm);
		if (null != sjishoMap)
		{
			List<?> dataList = (List<?>)sjishoMap.get(JKKAddSjishoConst.RENKEI_DATA_KBN_LIST);
			// IT1-2012-0000677 2012.06.14 m.etou mod start
			if (null != dataList && 0 < dataList.size())
			// IT1-2012-0000677 2012.06.14 m.etou mod end
			{
				//連携データマップが１件以上作成されている場合のみ指示書CC呼び出し
				(new JKKAddSjishoCC()).addSjisho(handle, param, mapNm);
			}
		}
	}
	//↑↑↑2012-05-13追加　巻@指示書CC取込み対応↑↑↑



	/**
	 * 世代登録年月日時分秒の補完
	 * @param param 
	 * @param handle 
	 * @param fixedText 
	 * 
	 * @param sodTrgtData
	 * @param trnDate 
	 * @throws Throwable 
	 * @since 2012-09-04 IT1-2012-0000952対応
	 */
	@SuppressWarnings("unchecked")
	private void makeUp4GeneAddDtm(SessionHandle handle, IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> sodTrgtData, String trnDate) throws Throwable
	{
		ArrayList<HashMap<String, Object>> trgtDataList = (ArrayList<HashMap<String, Object>>) sodTrgtData.get(JKKHakkoSODConstCC.TRGT_DATA_LIST);
		
		String lastNo = "";
		String lastDtm = "";
		for (int i = 0; i < trgtDataList.size(); i++)
		{
			HashMap<String, Object> sodMap = trgtDataList.get(i);
			HashMap<String, Object> opsvkeiInfo = (HashMap<String, Object>) sodMap.get(JKKHakkoSODConstCC.OPSVKEI_INFO);
			
			String chafOpSvcKeiNo = (String) opsvkeiInfo.get(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_NO);
			String chafOpsvkeiGeneAddDtm = (String) opsvkeiInfo.get(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_GENE_ADD_DTM);
			if (!JKKBpCommon.isNull(chafOpSvcKeiNo))
			{
				if (null == lastNo || !lastNo.equals(chafOpSvcKeiNo))
				{
					lastNo = chafOpSvcKeiNo;
					lastDtm = chafOpsvkeiGeneAddDtm;
				}
				if (JKKBpCommon.isNull(chafOpsvkeiGeneAddDtm) || 17 > chafOpsvkeiGeneAddDtm.length())
				{
					if (null == lastDtm || !lastDtm.equals(chafOpsvkeiGeneAddDtm))
					{
						// オプションサービス契約一意照会を呼び出す
						// 上りマッピング処理
						HashMap<String, Object> inMapEKK0351A010 = this.mapper.editInMsgEKK0351A010(param, lastNo, trnDate);
						// サービスインターフェース呼び出し
						CAANMsg rsltMsgEKK0351A010 = callSvcInter(handle, param, fixedText, inMapEKK0351A010);
						// オプションサービス契約一意照会の結果を取り出す
						CAANMsg[] rsltMsgListEKK0351A010 = rsltMsgEKK0351A010.getCAANMsgList(EKK0351A010CBSMsg.EKK0351A010CBSMSG1LIST);
						if (null != rsltMsgListEKK0351A010 && 0 < rsltMsgListEKK0351A010.length)
						{
							CAANMsg msgEKK0351A010 = rsltMsgListEKK0351A010[0];
							lastDtm = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.LAST_UPD_DTM);
						}
					}
					opsvkeiInfo.put(JKKHakkoSODConstCC.INFO_CHAF_OPSVKEI_GENE_ADD_DTM, lastDtm);
				}
			}
		}
	}

	/*
	 * --------------------------------------------------------------------------------------------
	 *  以下共通で使用するUtil系のメソッド ↓↓↓↓↓
	 * --------------------------------------------------------------------------------------------
	 */
	
	/**
	 * サービスインターフェース呼び出し処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param siInMap サービスインターフェースの入力マップ
	 * @return 業務データ
	 * @throws Throwable 
	 */
	private CAANMsg callSvcInter(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			HashMap<String, Object> siInMap)
			throws Throwable
	{
		
		// サービスインターフェースの呼び出し
		Map<?, ?> rsltMap = this.scCall.run(siInMap, handle);
		// エラーマッピング処理
		this.mapper.editResultRP(rsltMap, param, fixedText);
		// エラーチェック処理
		errChk(rsltMap);
		// 業務データ取得処理
		CAANMsg workData = getWorkCAANMsg(rsltMap);
		
		return workData;
	}
	
	/**
	 * エラーチェック処理です。
	 * <br>
	 * @param msgList サービスインタフェース実行結果
	 * @return void
	 * @throws SCCallException 
	 */
	private void errChk(
			Map<?, ?> msgList) 
			throws SCCallException
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// ステータス取得
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		// 20130724 IT1-2013-0001434 警告は正常扱いに変更 MOD START
//		if ((0 != returnCode.intValue()) || (0 != templateStatus))
		if ((0 != returnCode.intValue()) || (templateStatus > StatusCodes.WARNING))
		// 20130724 IT1-2013-0001434 警告は正常扱いに変更 MOD END
		{
			String errMsg = ERR_MSG;
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}
	
	/**
	 * 業務データの取得処理です。
	 * <br>
	 * @param workMapKey 業務データのマップキー
	 * @param rslt SVIFの実行結果データ
	 * @return 業務データ
	 */
	private CAANMsg getWorkCAANMsg(Map<?, ?> rslt)
	{
		CAANMsg[] templates = (CAANMsg[])rslt.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		return parentTemplate;
	}

	/**
	 * オブジェクトに値が設定されているか判定する
	 * 
	 * @param arg0 判定するオブジェクト
	 * @return オブジェクトに値が設定されていない場合はtrue
	 */
	private boolean isNull(Object arg0) 
	{
		if (null == arg0) 
		{
			return true;
		}

		return 0 == arg0.toString().length();
	}
	
	/**
	 * ユーザ定義文字列がユーザ情報になければデータを作成します。
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param workMapKey 業務データのマップキー
	 * @return true：作成した　False：存在していたため作成不要
	 * @throws RequestParameterException 
	 */
	private boolean createUserData(
			IRequestParameterReadWrite param, 
			String workMapKey) 
	throws RequestParameterException
	{
		if (null == param.getData(workMapKey))
		{
			param.setData(workMapKey, new HashMap<String, Object>());
			return true;
		}
		
		return false;
	}

	/**
	 * 指定されたユーザデータを削除します。
	 * <br>
	 * @param param 業務データ取得用I/F
	 * @param workMapKey 業務データのマップキー
	 * @param workMapKeyFlg true：ユーザデータを削除する
	 *                       false：ユーザデータを削除しない
	 * @return void
	 */
	private void removeUserData(
			IRequestParameterReadWrite param, 
			String workMapKey, 
			boolean workMapKeyFlg) 
	{
		if (workMapKeyFlg)
		{
			param.removeData(workMapKey);
		}
	}

// ADD START 2012/09/11 案件管理：ANK-0024-05-00 - お客さまID通知停止・初期eoID未発番対応
	/**
	 * お客様退会共通機能を呼び出す。
	 * <br>
	 * @param heigoBnktSysid 退会対象SYSID
	 * @param svcKeiNo サービス契約番号
	 * @return void
	 */
	private void callCusTaikaiCmnKino(
			SessionHandle handle, 
			IRequestParameterReadWrite param,
			HashMap<String, Object> trgtData,
			String heigoBnktSysid,
			// 20121216 機能コード、サービス契約番号を追加 ADD START
			String svcKeiNo
			// 20121216 機能コード、サービス契約番号を追加 ADD END
	) throws Throwable
	{
		// マップ生成
		HashMap<String, Object> taikaiCCMap = new HashMap<String, Object>();
		
		// マップ編集
		// 20121216 機能コード、サービス契約番号を追加 ADD START
		taikaiCCMap.put(JCMConstants.FUNC_CODE_KEY, "1");
		taikaiCCMap.put("svc_kei_no", svcKeiNo);
		// 20121216 機能コード、サービス契約番号を追加 ADD END
		taikaiCCMap.put("sysid", heigoBnktSysid);
		param.setData(MAP_JCKCUSTTAIKAICMNCC_ID, taikaiCCMap);
		
		JCKCustTaikaiCmnCC jCKCustTaikaiCmnCC = new JCKCustTaikaiCmnCC();
		jCKCustTaikaiCmnCC.execute(handle, param, MAP_JCKCUSTTAIKAICMNCC_ID);
	}

	/**
	 * お客様回復共通機能を呼び出す。
	 * <br>
	 * @param heigoBnktSysid 回復対象SYSID
	 * @param svcKeiNo サービス契約番号
	 * @return void
	 */
	private void callCusKaifukuCmnKino(
			SessionHandle handle, 
			IRequestParameterReadWrite param,
			HashMap<String, Object> trgtData,
			String heigoBnktSysid,
			// 20121216 機能コード、サービス契約番号を追加 ADD START
			String svcKeiNo
			// 20121216 機能コード、サービス契約番号を追加 ADD END
			
	) throws Throwable
	{
		// マップ生成
		HashMap<String, Object> kaihkCCMap = new HashMap<String, Object>();
		
		// マップ編集
		// 20121216 機能コード、サービス契約番号を追加 ADD START
		kaihkCCMap.put(JCMConstants.FUNC_CODE_KEY, "1");
		kaihkCCMap.put("svc_kei_no", svcKeiNo);
		// 20121216 機能コード、サービス契約番号を追加 ADD END
		kaihkCCMap.put("sysid", heigoBnktSysid);
		param.setData(MAP_JCKCUSTKAIHKCMNCC_ID, kaihkCCMap);
		
		JCKCustKaihkCmnCC jCKCustKaihkCmnCC = new JCKCustKaihkCmnCC();
		jCKCustKaihkCmnCC.execute(handle, param, MAP_JCKCUSTKAIHKCMNCC_ID);
	}
//ADD END 2012/09/11 案件管理：ANK-0024-05-00 - お客さまID通知停止・初期eoID未発番対応

	// ADD START 2012/10/31 IT1-2012-0001921
	/**
	 * オプション引継先サービス契約番号の設定有無を返却する
	 * <br>
	 * @param trgtData 対象データ
	 */
	private boolean isOpHikitugi(HashMap<String, Object> trgtData)
	{
		return JKKStringUtil.isNullBlank((String)trgtData.get(JKKIdoRsvHaneiConstCC.OP_HKTGI_SK_SVC_KEI_NO));
	}
	// ADD END   2012/10/31 IT1-2012-0001921
	
	// ADD START 2012/10/31 IT1-2012-0001921
	/**
	 * サービス契約番号設定状況により住所変更内異動区分を設定する
	 * <br>
	 * @param param
	 * @param fixedText
	 * @param trgtData
	 * @throws Throwable 
	 */
	@SuppressWarnings("unchecked")
	private void setAdchgIdoDiv(SessionHandle handle,IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> trgtData) throws Throwable
	{
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);
		String svcKeiUcwkNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SVC_KEI_UCWK_NO);
		String svcKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SVC_KEI_NO);
		String trnDate = (String)trgtData.get(JKKIdoRsvHaneiConstCC.TRN_DATE);
// IT1-2013-0000778対応 20130405 星野 ADD START
		String kojiakNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.KOJIAK_NO);
// IT1-2013-0000778対応 20130405 星野 ADD END
		
		boolean ucwkTelExist = isExistSvcKeiUcwkTel(handle, param, fixedText, svcKeiNo, trnDate);
		
		if (!JKKStringUtil.isNullBlank(svcKeiUcwkNo) && ucwkTelExist)
		{
			// サービス契約内訳番号が設定されている為、「光電話・番号解約」を設定
			inMap.put(JKKDslRunConstCC.ADCHG_IDO_DIV, JKKDslRun.ADCHG_IDO_DIV_HTELNODSL);
		}
		else if (!JKKStringUtil.isNullBlank(svcKeiUcwkNo) && !ucwkTelExist)
		{
			// サービス契約内訳番号が設定されている為、「機器解約」を設定
			inMap.put(JKKDslRunConstCC.ADCHG_IDO_DIV, JKKDslRun.ADCHG_IDO_DIV_KIKIDSL);
		}
		else if (!JKKStringUtil.isNullBlank(svcKeiNo))
		{
// IT1-2013-0000778対応 20130405 星野 ADD START
			if(!JKKStringUtil.isNullBlank(kojiakNo)){
				// 工事案件番号が設定されている場合、「撤去解約」を設定
				inMap.put(JKKDslRunConstCC.ADCHG_IDO_DIV, JKKDslRun.ADCHG_IDO_DIV_DSL_TEKKYO);
			}else{
// IT1-2013-0000778対応 20130405 星野 ADD END

				// サービス契約番号が設定されている為、「解約」を設定
				inMap.put(JKKDslRunConstCC.ADCHG_IDO_DIV, JKKDslRun.ADCHG_IDO_DIV_DSL);
// IT1-2013-0000778対応 20130405 星野 ADD START
			}
// IT1-2013-0000778対応 20130405 星野 ADD END
		}
	}
	// ADD END   2012/10/31 IT1-2012-0001921
	
	/**
	 * サービス契約内訳＜eo光電話＞一覧照会（サービス契約番号）処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param svcKeiNo サービス契約番号
	 * @param trnDate 処理年月日
	 * @return サービス契約内訳＜eo光電話＞一覧照会結果有無
	 * @throws Throwable
	 */
	private boolean isExistSvcKeiUcwkTel(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNo,
			String trnDate)
			throws Throwable
	{
		// 上りマッピング処理
		HashMap<String, Object> inMapEKK0191B001 = this.mapper.editInMsgEKK0191B001(param, svcKeiNo, trnDate);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0191B001 = callSvcInter(handle, param, fixedText, inMapEKK0191B001);
		
		// 結果を返却
		CAANMsg[] rsltMsgListEKK0191B001 = rsltMsgEKK0191B001.getCAANMsgList(EKK0191B001CBSMsg.EKK0191B001CBSMSG1LIST);
		if (rsltMsgListEKK0191B001.length > 0)
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	/**
	 * 
	 * @param	trgtData
	 * @return	
	 */
	// IT1-2014-0000137 2014/05/15 start
	//private String[] getPrgTkjk(HashMap trgtData)
	private String[] getPrgTkjk(SessionHandle handle, IRequestParameterReadWrite param, HashMap trgtData, String fixedText) throws Throwable
	// IT1-2014-0000137 2014/05/15 end
	{
		// 進捗特記事項１＆２
		String[] retPrgTkjk = {"", ""};

		// 対象データから業務情報を取得
		String idoDiv = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_DIV);

		// ********************************************** //
		// 異動区分が請求契約併合の場合                   //
		// ********************************************** //
		if (IDO_DIV_SEIKY_HEIGO.equals(idoDiv))
		{
			// 併合元請求契約番号
			String motoSeikyKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SEIKY_KEI_NO);

			retPrgTkjk[0] = "併合前請求先番号：" + motoSeikyKeiNo;
		}
		// ********************************************** //
		// 異動区分が請求契約分割の場合                   //
		// ********************************************** //
		else if (IDO_DIV_SEIKY_BNKT.equals(idoDiv))
		{
			// 分割元請求契約番号
			String motoSeikyKeiNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.SEIKY_KEI_NO);

			retPrgTkjk[0] = "分割前請求先番号：" + motoSeikyKeiNo;
		}
		
		// ANK-2056-00-00 2014/04/28 start
		String idoRsvDtlCd = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_RSV_DTL_CD);
		if(IDO_RSV_DTL_CD_TEL_OPPAC_STA.equals(idoRsvDtlCd) || IDO_RSV_DTL_CD_TEL_OPPAC_DSL.equals(idoRsvDtlCd)){
			// 電話オプションパック割引開始  電話オプションパック割引解約  
			
			// 上りマッピング処理
			HashMap<String, Object> inMapEKK0191A010 = this.mapper.editInMsgEKK0191A010(param, (String)trgtData.get("tmp_svc_kei_ucwk_no"));

			// サービスインターフェース呼び出し
			CAANMsg rsltMsgEKK0191A010 = callSvcInter(handle, param, fixedText, inMapEKK0191A010);
			
			// サービス契約内訳＜eo光電話＞一意照会の結果を取り出す
			CAANMsg[] rsltMsgListEKK0191A010 = rsltMsgEKK0191A010.getCAANMsgList(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);
			CAANMsg msgEKK0191A010 = rsltMsgListEKK0191A010[0];
			
			retPrgTkjk[0] = "電話番号："+msgEKK0191A010.getString(EKK0191A010CBSMsg1List.TELNO)+" ";
			String wrib_svc_cd = (String)trgtData.get("tmp_wrib_svc_cd");
			if("W00000007".equals(wrib_svc_cd)){
				retPrgTkjk[0] += "eo光電話パック３";
			}else if("W00000008".equals(wrib_svc_cd)){
				retPrgTkjk[0] += "eo光電話パック７";
			// ANK-3754-00-00 ADD START
			}else if("W00000023".equals(wrib_svc_cd)){
				retPrgTkjk[0] += "あんしん電話パック";
			// ANK-3754-00-00 ADD END
			}
			if(IDO_RSV_DTL_CD_TEL_OPPAC_STA.equals(idoRsvDtlCd)){
				retPrgTkjk[0] += "登録 利用開始日：";
			}else if(IDO_RSV_DTL_CD_TEL_OPPAC_DSL.equals(idoRsvDtlCd)){
				retPrgTkjk[0] += "解約 利用終了日：";
			}
			String idoDtm = getIdoDtm(handle, param, trgtData, fixedText);
			
			retPrgTkjk[0] += idoDtm.substring(0,4)+"/"+idoDtm.substring(4,6)+"/"+idoDtm.substring(6,8);
		}
		// ANK-2056-00-00 2014/04/28 end

		return retPrgTkjk;
	}
	// 20130724 IT1-2013-0001434 オプション引継予約対応 ADD START
	/**
	 * サービス契約内訳一覧照会処理です。
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param svcKeiNo サービス契約番号
	 * @param svcKeiStat サービス契約ステータス
	 * @return サービス契約内訳＜eo光電話＞一覧照会結果有無
	 * @throws Throwable
	 */
	private CAANMsg searchSvcKeiUcwkBySvcKeiNo(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			String svcKeiNo,
			String svcKeiStat
			)
			throws Throwable
	{
		// 戻り値
		CAANMsg rsltMsg = null;
		
		// サービス契約に紐付くサービス契約内訳を取得する
		HashMap<String, Object> inMapEKK0161B004 = this.mapper.editInMsgEKK0161B004(param, svcKeiNo);
		CAANMsg rsltMsgEKK0161B004 = callSvcInter(handle, param, fixedText, inMapEKK0161B004);
		
		// 結果を返却
		CAANMsg[] rsltMsgListEKK0161B004 = rsltMsgEKK0161B004.getCAANMsgList(EKK0161B004CBSMsg.EKK0161B004CBSMSG1LIST);
		
		if (rsltMsgListEKK0161B004 != null)
		{
			if (rsltMsgListEKK0161B004.length == 1)
			{
				// サービス契約に紐付くサービス契約内訳が１件の場合、その内訳を返す
				rsltMsg =  rsltMsgListEKK0161B004[0];
			}
			else if (rsltMsgListEKK0161B004.length > 1)
			{
				// サービス契約に紐付くサービス契約内訳が２件の場合、
				// サービス契約と同じステータスの内訳を返す。
				// 同じステータスが複数ある場合は、世代の新しいほうを返す
				// ※内訳が２件以上ある場合は、サービス契約と同じステータスの内訳が必ず１件以上存在する
				CAANMsg tmpMsgEKK0161B004 = null;
				for (CAANMsg msgEKK0161B004 : rsltMsgListEKK0161B004)
				{
					if (svcKeiStat.equals(msgEKK0161B004.getString(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT)))
					{
						if (tmpMsgEKK0161B004 != null)
						{
							if(msgEKK0161B004.getString(EKK0161B004CBSMsg1List.GENE_ADD_DTM).compareTo(tmpMsgEKK0161B004.getString(EKK0161B004CBSMsg1List.GENE_ADD_DTM)) > 0)
							{
								tmpMsgEKK0161B004 = msgEKK0161B004;
							}
						}
						else
						{
							tmpMsgEKK0161B004 = msgEKK0161B004;
						}
					}
				}
				
				rsltMsg = tmpMsgEKK0161B004;
				
			}
		}
		
		return rsltMsg;
	}
	// 20130724 IT1-2013-0001434 オプション引継予約対応 ADD END

	// ▼▼▼▼▼ 2013/07/29 ADD START ▼▼▼▼▼
	private String getIdoDtm(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap trgtData,
			String fixedText
	) throws Throwable
	{
		HashMap<String, Object> tmpInMap = null;
		CAANMsg tmpRsltMsg = null;

		// 進捗一覧照会結果データ
		CAANMsg[] msgListEKK1091B502 = null;

		// 異動日時
		String idoDtm = "";

		// 進捗一覧照会を呼び出す
		// 上りマッピング処理
		tmpInMap = this.mapper.editInMsgEKK1091B502(param, trgtData);
		// サービスインターフェース呼び出し
		tmpRsltMsg = callSvcInter(handle, param, fixedText, tmpInMap);

		// 進捗一覧照会の結果を取り出す
		msgListEKK1091B502 = tmpRsltMsg.getCAANMsgList(EKK1091B502CBSMsg.EKK1091B502CBSMSG1LIST);

		// 進捗の取得
		if (0 < msgListEKK1091B502.length)
		{
			// 進捗が取得できた場合
			CAANMsg msgEKK1091B502 = msgListEKK1091B502[0];
			idoDtm = (String)msgEKK1091B502.getString(EKK1091B502CBSMsg1List.IDO_DTM);
		}
		else
		{
			// 進捗が取得できなかった場合
			idoDtm = JKKBpCommon.getSysDateTimeStamp();
		}

		return idoDtm;
	}
	// ▲▲▲▲▲ 2013/07/29 ADD E N D ▲▲▲▲▲
	
	// IT1-2014-0000137 2014/05/15 start
	private String getSvcKeiUcwkNoFromWribSvcKeiNo(SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			String wribSvcKeiNo,
			String trnDate) throws Throwable{
		// SSA01_EKK0481B001_割引サービス対象契約一覧照会
		HashMap<String, Object> inMapEKK0481B001 = mapper.editInMsgEKK0481B001(param, wribSvcKeiNo);
		// サービスインターフェース呼び出し
		CAANMsg rsltMsgEKK0481B001 = callSvcInter(handle, param, fixedText, inMapEKK0481B001);
		// 割引サービス対象契約一覧照会の結果を取り出す
		CAANMsg[] rsltMsgListEKK0481B001 = rsltMsgEKK0481B001.getCAANMsgList(EKK0481B001CBSMsg.EKK0481B001CBSMSG1LIST);
		
		String svcKeiUcwkNo = "";
		for(int i=0; i<rsltMsgListEKK0481B001.length; i++){
			CAANMsg ekk0481B001 = rsltMsgListEKK0481B001[i];
			String retSvcKeiUcwkNo = ekk0481B001.getString(EKK0481B001CBSMsg1List.SVC_KEI_UCWK_NO);
			if(StringUtils.isEmpty(retSvcKeiUcwkNo)){
				continue;
			}
			// サービス契約内訳のステータスを確認
			HashMap<String, Object> inMapEKK0161A010 = this.mapper.editInMsgEKK0161A010(param, retSvcKeiUcwkNo, trnDate);
			// サービスインターフェース呼び出し
			CAANMsg rsltMsgEKK0161A010 = callSvcInter(handle, param, fixedText, inMapEKK0161A010);
			// 割引サービス契約一意照会の結果を取り出す
			CAANMsg[] rsltMsgListEKK0161A010 = rsltMsgEKK0161A010.getCAANMsgList(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
			if(SVC_KEI_STAT_DSL_ZM.compareTo(rsltMsgListEKK0161A010[0].getString(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT))>0){
				svcKeiUcwkNo = retSvcKeiUcwkNo;
				break;
			}
		}
		return svcKeiUcwkNo;
	}
	// IT1-2014-0000137 2014/05/15 end
	
	// ANK-1918-00-00 2014/07/15 ADD START
	/**
	 * 工事CC実行処理(スマートリンクプレミアム諸変更)
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgdData 対象データ
	 * @throws Throwable
	 */
	private void callKojiAnkenCCSmlnChg(
			IRequestParameterReadWrite param,
			SessionHandle handle, 
			HashMap<String, Object> trgtData,
			String fixedText
	) throws Throwable
	{
		JKKKojiAnkenCC kojiCC = new JKKKojiAnkenCC();
		String workFixedText = "KojiakCC";

		HashMap<String, Object> tmpInMap = null;
		CAANMsg tmpRsltMsg       = null;
		CAANMsg[] tmpRsltMsgList = null;
		
		// 申込明細一意照会データ
		CAANMsg msgEKK0021A010 = null;
		
		String mskmDtlNo = (String)trgtData.get(JKKIdoRsvHaneiConstCC.MSKM_DTL_NO);
		
		// 申込明細一意照会を呼び出す
		// 上りマッピング処理
		tmpInMap = this.mapper.editInMsgEKK0021A010(param, mskmDtlNo);
		// サービスインターフェース呼び出し
		tmpRsltMsg = callSvcInter(handle, param, fixedText, tmpInMap);

		// 申込明細一意照会の結果を取り出す
		tmpRsltMsgList = tmpRsltMsg.getCAANMsgList(EKK0021A010CBSMsg.EKK0021A010CBSMSG1LIST);
		msgEKK0021A010 = tmpRsltMsgList[0];
		
		// データマッピング
		this.mapper.mappingKojiAnkenCCSmlnChg(param, workFixedText, trgtData, msgEKK0021A010);

		// 工事案件CC呼び出し
		kojiCC.executeKojiAnken(handle, param, workFixedText);
	}
	// ANK-1918-00-00 2014/07/15 ADD END
	
	// ▼▼▼▼▼ ANK-2197-00-00 2015/11/02 ADD START ▼▼▼▼▼
	/**
	 * STB主従切替処理
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgtData 対象データ
	 * @return 処理結果
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private String runMainSubKeiJudge(SessionHandle handle, IRequestParameterReadWrite param, HashMap trgtData) throws Throwable
	{
		// ▼▼▼▼▼ IT2-2016-0000003 2016/01/25 ADD START ▼▼▼▼▼

		// 主従切替CC入力パラメータの作成
		param.setData("JKKMainSubkeiJudgeCC", new HashMap<String, Object>());
		// パラメタを取得する。
		HashMap<String, Object> outMap = (HashMap<String, Object>)param.getData("JKKMainSubkeiJudgeCC");
		
		// 起動元コードをセットする
		outMap.put("kido_cd", JKKIdoRsvHanei.KIDO_CD_BAT);
		
		// 予約適用年月日をセットする
		String rsvAplyYMD = (String)trgtData.get(JKKIdoRsvHaneiConstCC.RSV_APLY_YMD);
		outMap.put("stb_plan_end_ymd", rsvAplyYMD);
		// ▲▲▲▲▲ IT2-2016-0000003 2016/01/25 ADD END   ▲▲▲▲▲
		
		// OM-2016-0000505 ADD START
		// 異動予約詳細コード
		String idoRsvDtlCd = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_RSV_DTL_CD);
		outMap.put("ido_rsv_dtl_cd", idoRsvDtlCd);
		// OM-2016-0000505 ADD START

		// STB主従切替CC実行
		JKKMainSubKeiJudge MainSubKeiJudge = new JKKMainSubKeiJudge();
		
		// 処理結果を返却
		return MainSubKeiJudge.runMainSubKeijudge(handle, param, trgtData, "JKKMainSubkeiJudgeCC");
	}	
	// ▲▲▲▲▲ ANK-2197-00-00 2015/11/02 ADD END ▲▲▲▲▲
// OM-2016-0001521 フェムトセル異動情報登録部品の呼出を追加 2016/07/07 ADD START
	/**
	 * フェムトセル異動情報登録処理
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param trgdData 対象データ
	 * @throws Throwable
	 */
	private void callFmtcelIdoInfAdd(
			 SessionHandle handle
			,IRequestParameterReadWrite param
			,HashMap<String, Object> trgtData
	) throws Throwable
	{
		
		// フェムトセル異動情報登録部品用のINデータ(オプション解約CCを呼出す前にキーを生成済)
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData("FmtcelIdoInfAddCC");
		
		// SYSID
		// 設定不要
		
		// サービス契約番号 ← INPUT.サービス契約番号
		inMap.put(JKKFmtcelIdoInfAddConstCC.SVC_KEI_NO, trgtData.get(JKKIdoRsvHaneiConstCC.SVC_KEI_NO));
		
		// オプションサービス契約番号 ← INPUT.オプションサービス契約番号
		inMap.put(JKKFmtcelIdoInfAddConstCC.OP_SVC_KEI_NO, trgtData.get(JKKIdoRsvHaneiConstCC.OP_SVC_KEI_NO));
		
		// 異動区分 ← INPUT.異動区分
		String idoDiv = (String)trgtData.get(JKKIdoRsvHaneiConstCC.IDO_DIV);
		
		if (JKKStrConst.CD00576_ADCHG_ADD.equals(idoDiv))
		{
			// 「住所変更・登録」の場合、異動区分を「住所変更・確定」に差し替える
			idoDiv =  JKKStrConst.CD00576_ADCHG_FIX;
		}
		
		// 異動区分
		inMap.put(JKKFmtcelIdoInfAddConstCC.IDO_DIV, idoDiv);
		
		// フェムトセル異動詳細コード ← 解約
		String fmtcelIdoDtlCd =  "02";
		
		if (JKKStrConst.CD00576_ADCHG_FIX.equals(idoDiv))
		{
			// 異動区分「住変変更・確定」(差替後)で解約する場合は、00:初期値を設定する。
			fmtcelIdoDtlCd = "00";
		}
		
		// フェムトセル異動詳細コード
		inMap.put(JKKFmtcelIdoInfAddConstCC.FMTCEL_IDO_DTL_CD, fmtcelIdoDtlCd);
		
		// 進捗年月日時分秒
		// オプション解約CCが設定済のため、ここでは設定不要
		
		// 工事案件番号
		// 設定不要
		
		// フェムトセルー異動情報登録部品
		JKKBpCommon.addFmtcelIdoInf(handle, param, inMap, "FmtcelIdoInfAddCC");
		
	}
// OM-2016-0001521 フェムトセル異動情報登録部品の呼出を追加 2016/07/07 ADD END
	// ANK-3458-00-00 ADD START
	/**
	 * 緊急通報用契約者名・カナ名更新処理を呼び出す。
	 * <br>
	 * @param heigoBnktSysid 回復対象SYSID
  	 * @param idoDiv 異動区分
	 * @return void
	 */
	private void callJKKEmgRrksNmUpdCC(
			SessionHandle handle, 
			IRequestParameterReadWrite param,
			HashMap<String, Object> trgtData,
			String heigoBnktSysid,
			String idoDiv,
			String mskmDtlNo
	) throws Throwable
	{
		// マップ生成
		HashMap<String, Object> outMap = new HashMap<String, Object>();
		// SYSID
		outMap.put("sysid", heigoBnktSysid);
		// 異動区分
		outMap.put("ido_div", idoDiv);
		// 申込明細番号
		outMap.put("mskm_dtl_no", mskmDtlNo);
		param.setData(FIXED_KEY_JKK_EMG_RRK_SNM_UPD_CC, outMap);
		
		JKKEmgRrksNmUpdCC jkkEmgRrksNmUpdCC = new JKKEmgRrksNmUpdCC();
		jkkEmgRrksNmUpdCC.execute(handle, param, FIXED_KEY_JKK_EMG_RRK_SNM_UPD_CC);
	}
	// ANK-3458-00-00 ADD END
}
