/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKOpSvcHktgiUpdCC
 *   ソースファイル名：JKKOpSvcHktgiUpdCC.java
 *   作成者          ：FJ
 *   日付            ：2011年11月14日
 *＜機能概要＞
 * 
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/11/14   FJ）　　    新規作成
 *   v4.00.00    2012/10/11   FJ）森      【ANK-1223-00-00】進捗補足事項編集対応
 *   v7.00.00    2014/03/07   FJ）阮      【OM-2014-0000703】ファミリーパック保有引継ぎ先のウィルスチェックの付与
 *   v7.01.00    2014/03/14   FJ）阮      【OM-2014-0001082】引継元のサブオプションの解約処理を訂正
 *   v7.02.00    2014/03/20   FJ）藤本    【OM-2014-0000761】オプション引継後の引継元メールオプションが課金されない
 *   v8.00.00    2014/04/02   FJ)北谷     OM-2014-0001247 Myホームページの交換引継ぎができない
 *   v8.01.00    2014/05/27   FJ)藤本     【OM-2014-0001956】オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない
 *  v10.00.00    2014/09/10   FJ)田中     OM-2014-0002930対応
 *  v19.00.00    2015/09/02   FJ)三浦     【OM-2015-0002109】オプション引継でファミリーパックがキャンセルされた引継先にウイルスチェックが登録された
 *  v32.00.00    2017/04/21   FJ)三原     【ANK-3149-00-00】セキュリティーパック導入
 *  v32.00.01    2017/05/15   FJ)三原     IT1-2017-0000043 オプション引継時に申込明細番号が正しく設定されない
 *  v32.00.02    2017/05/19   FJ)三原     【ANK-3149-08-00】新セキュリティパック導入(オプション引継でのセキュリティーパック引継)
 *  v32.00.03    2017/06/22   FJ)三原     【ANK-3149-20-00】新セキュリティパック導入(メールウィルスチェックの自動登録)
 *  v32.00.04    2017/07/11   FJ)澤田    【IT1-2017-0000094】メールウィルスチェック無→有のSOD発行されない
 *  v33.00.00    2017/08/21   FJ)河邊     【OM-2017-0000754】オプトインメール受信設定不備
 *  v72.00.00    2024/09/05   FJ)丸田    【ANK-4577-00-00】eo光ネット「シンプルプラン」追加対応(Step2)
 *  v72.00.01    2024/11/20   FJ)舘山    【ANK-4577-00-00】eo光ネット「シンプルプラン」追加対応(Step2)
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.fujitsu.futurity.bp.custom.constant.JKKAddSjishoConst;
import com.fujitsu.futurity.bp.custom.constant.JKKHakkoSODConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKKojiAnkenConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.ErrorInfoMapKeys;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;
import com.sun.enterprise.tools.common.util.StringUtils;
import com.fujitsu.futurity.bp.custom.common.JKKSecurityPackOperateCC;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0141A010CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0141A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0141B002CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0141B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0141B005CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0141B005CBSMsg1List;
import eo.ejb.cbs.cbsmsg.ECK0141C030CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0141C040CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0141D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0321B002CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0321B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351C080CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C220CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C240CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C250CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C270CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0361B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0361B003CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361C051CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0361D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0401C150CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C170CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C180CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0401C200CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0411B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411C011CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411C020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411C040CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411C050CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0411D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0451B010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1041D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1881B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0111B030CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0111B030CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0111C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0111C020CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EZM0321A010CBSMsg1List;

/**
 * オプション引継対象更新コモンコンポーネント部品
 * 
 * @author FJ
 */
public class JKKOpSvcHktgiUpdCC extends AbstractCommonComponent
{

	/** ユーザデータのマップキー */
	private static final String USER_DATA_KEY = "OpSvcHktgiUpd";

	/** オプションサービス契約一覧情報 */
	public static final String OP_SVC_KEI_LIST = "opSvcKeiList";

	/** サービスインターフェイスのパッケージ */
	private static final String PACKAGE_NAME = "eo.ejb.cbs.cbsmsg.";

	/** LISTサフィックス */
	private static final String SAF_LIST = "CBSMsg1List";

	/** MSGサフィックス */
	private static final String SAF_MSG = "CBSMsg";

	/** 空文字 */
	private static final String STR_EMPTY = "";
	//ANK-3149-08-00 ADD START
	/** エラー用 */
	protected static final String SC_ERROR_STRING = "サービスコンポーネントエラー";
	//ANK-3149-08-00 ADD END

	/*************************************************************/
	/** サービス契約ステータス                                  **/
	/*************************************************************/
	/** サービス契約ステータス：010 登録済 */
	private static final String SVC_KEI_STAT_010 = "010";
	/** サービス契約ステータス：020 照査済 */
	private static final String SVC_KEI_STAT_020 = "020";
	/** サービス契約ステータス：030 締結済 */
	private static final String SVC_KEI_STAT_030 = "030";
	/** サービス契約ステータス：100 サービス提供中 */
	private static final String SVC_KEI_STAT_100 = "100";
	/** サービス契約ステータス：210 休止・中断中 */
	private static final String SVC_KEI_STAT_210 = "210";
	/** サービス契約ステータス：910 解約済 */
	private static final String SVC_KEI_STAT_910 = "910";
	/** サービス契約ステータス：920 キャンセル済 */
	private static final String SVC_KEI_STAT_920 = "920";

	/** 異動理由コード：C2 オプション引継ぎ受付 */
	private static final String IDO_RSN_CD_C2 = "C2";

	/*************************************************************/
	/** 進捗ステータス                                          **/
	/*************************************************************/
	/** 進捗ステータス：5101 オプション情報申請中 */
	private static final String PRG_STAT_5101 = "5101";
	/** 進捗ステータス：5102 オプション設定完了 */
	private static final String PRG_STAT_5102 = "5102";

	/** 割引サービスコード：ファミリーパック */
	public static final String WRIB_SVC_CD_FP_WRIB = "W00000006";
	//ANK-3149-08-00 ADD START
	/** 割引サービスコード：セキュリティーパック */
	public static final String WRIB_SVC_CD_SP_WRIB = "W00000010";
	//ANK-3149-08-00 ADD END
	//ANK-3149-20-00 ADD START
	/** 割引サービスコード：プレミアムパック */
	public static final String WRIB_SVC_CD_PP_WRIB = "W00000080";
	//ANK-3149-20-00 ADD END

	/*************************************************************/
	/** オプションサービスコード                                **/
	/*************************************************************/
	/** オプションサービスコード（Ｅメール） */
	public static final String OP_SVC_CD_EMAIL = "B001";
	/** オプションサービスコード（Myホームページ） */
	public static final String OP_SVC_CD_MYHOMEPAGE = "B002";
	/** オプションサービスコード（メーリングリスト） */
	public static final String OP_SVC_CD_MAILINGLIST = "B003";
	/** オプションサービスコード（固定グローバルIPアドレス） */
	public static final String OP_SVC_CD_KOTEI_IP = "B004";
	/** オプションサービスコード（マルチセッション） */
	public static final String OP_SVC_CD_MLTISE = "B015";
	// ANK-3149-00-00 ADD START
	/** オプションサービスコード（インターネットサギウォール　ｆｏｒ　ｅｏ）*/
	public static final String OP_SVC_CD_SAGIWALL = "B131";
	/** オプションサービスコード（ノートンファミリープレミア　ｆｏｒ　ｅｏ）*/
	public static final String OP_SVC_CD_NORTON = "B132";
	// ANK-3149-00-00 ADD END

	/** サブオプションサービスコード（メールウィルスチェック）*/
	public static final String SBOP_SVC_CD_MAIL_VIRUS_CHK = "D03";
	/** サブオプションサービスコード（ホームページ容量）*/
	public static final String SBOP_SVC_CD_HP_CAPA = "D04";

// ▽▽▽ ANK-4577-00-00 ADD START
	/** サブオプションサービスコード（PCワイドプラン）*/
	public static final String SBOP_SVC_CD_PC_WIDE_PLAN = "D12";
// △△△ ANK-4577-00-00 ADD END
	
	/*************************************************************/
	/** テンプレートＩＤ                                        **/
	/*************************************************************/
	/** 申込内容承認登録 */
	private static final String EKK0011D020 = "EKK0011D020";
// OM-2013-0005075対応 20131219 星野 ADD START
	/** 申込明細一意照会 */
	private static final String EKK0021A010 = "EKK0021A010";
// OM-2013-0005075対応 20131219 星野 ADD END
	/** 申込明細照査・後続業務依頼 */
	private static final String EKK0021C060 = "EKK0021C060";
	/** サービス契約一意照会 */
	private static final String EKK0081A010 = "EKK0081A010";
	/** サービス契約内訳一覧照会 */
	private static final String EKK0161B004 = "EKK0161B004";
	/** 課金先一覧照会（請求契約番号/サービス契約番号） */
	private static final String EKK0321B002 = "EKK0321B002";
	/** オプションサービス一意照会 */
	private static final String EKK0351A010 = "EKK0351A010";
	/** オプションサービス契約サービス契約変更 */
	private static final String EKK0351C080 = "EKK0351C080";
	/** オプションサービス契約キャンセル */
	private static final String EKK0351C220 = "EKK0351C220";
	/** オプションサービス契約解約 */
	private static final String EKK0351C240 = "EKK0351C240";
	/** オプションサービス契約解約確定 */
	private static final String EKK0351C250 = "EKK0351C250";
	/** オプションサービス契約回復 */
	private static final String EKK0351C270 = "EKK0351C270";
	/** オプションサービス契約＜ＩＳＰ＞一意照会 */
	private static final String EKK0361A010 = "EKK0361A010";
	/** オプションサービス契約＜ＩＳＰ＞一覧照会 */
	private static final String EKK0361B001 = "EKK0361B001";
	/** オプションサービス契約＜ＩＳＰ＞一意照会 */
	private static final String EKK0361B003 = "EKK0361B003";
	/** オプションサービス契約＜ＩＳＰ＞照査 */
	private static final String EKK0361C010 = "EKK0361C010";
	/** オプションサービス契約＜ＩＳＰ＞照査締結 */
	private static final String EKK0361C030 = "EKK0361C030";
	/** オプションサービス契約＜ＩＳＰ＞照査締結 */
	private static final String EKK0361C040 = "EKK0361C040";
	// OM-2014-0000761 オプション引継後の引継元メールオプションが課金されない 2014/03/20 START
//	/** オプションサービス契約＜ＩＳＰ＞情報変更 */
//	private static final String EKK0361C050 = "EKK0361C050";
	/** オプションサービス契約＜ISP＞情報変更（更新） */
	private static final String EKK0361C051 = "EKK0361C051";
	// OM-2014-0000761 オプション引継後の引継元メールオプションが課金されない 2014/03/20 END
	/** オプションサービス契約＜ＩＳＰ＞登録 */
	private static final String EKK0361D010 = "EKK0361D010";
	/** サブオプションサービス契約一意照会 */
	private static final String EKK0401A010 = "EKK0401A010";
	/** サブオプションサービス契約一覧照会 */
	private static final String EKK0401B001 = "EKK0401B001";
	/** サブオプションサービス契約キャンセル */
	private static final String EKK0401C150 = "EKK0401C150";
	/** サブオプションサービス契約解約 */
	private static final String EKK0401C170 = "EKK0401C170";
	/** サブオプションサービス契約解約確定 */
	private static final String EKK0401C180 = "EKK0401C180";
	/** サブオプションサービス契約回復 */
	private static final String EKK0401C200 = "EKK0401C200";
	/** サブオプションサービス契約＜ＩＳＰ＞一意照会 */
	private static final String EKK0411A010 = "EKK0411A010";
	/** サブオプションサービス契約＜ＩＳＰ＞一覧照会 */
	private static final String EKK0411B001 = "EKK0411B001";
	// OM-2014-0000761 オプション引継後の引継元メールオプションが課金されない 2014/03/20 START
//	/** サブオプションサービス契約＜ＩＳＰ＞更新 */
//	private static final String EKK0411C010 = "EKK0411C010";
	/** サブオプションサービス契約<ISP>変更（更新） */
	private static final String EKK0411C011 = "EKK0411C011";
	// OM-2014-0000761 オプション引継後の引継元メールオプションが課金されない 2014/03/20 END
	/** サブオプションサービス契約＜ＩＳＰ＞照査 */
	private static final String EKK0411C020 = "EKK0411C020";
	/** サブオプションサービス契約＜ＩＳＰ＞照査締結 */
	private static final String EKK0411C040 = "EKK0411C040";
	/** サブオプションサービス契約＜ＩＳＰ＞使用開始 */
	private static final String EKK0411C050 = "EKK0411C050";
	/** サブオプションサービス契約＜ＩＳＰ＞登録 */
	private static final String EKK0411D010 = "EKK0411D010";
	/** 割引サービス契約一覧照会（割引サービス指定） */
	private static final String EKK0451B010 = "EKK0451B010";
	// OM-2014-0000703 2014/03/07 MOD START
	/** 割引サービス契約一覧照会 */
//	private static final String EKK0451B030 = "EKK0451B030";
	private static final String EKK0451B001 = "EKK0451B001";
	// OM-2014-0000703 2014/03/07 MOD END
	/** 進捗登録 */
	private static final String EKK1091D010 = "EKK1091D010";
	/**  */
	private static final String EZM0111B030 = "EZM0111B030";
	/** エイジング対象登録 */
	private static final String EZM0111D010 = "EZM0111D010";
	/** エイジング対象使用終了 */
	private static final String EZM0111C010 = "EZM0111C010";
	/** エイジング対象回復 */
	private static final String EZM0111C020 = "EZM0111C020";
	/** 業務パラメータ管理一意照会 */
	private static final String EZM0321A010 = "EZM0321A010";
	/** 料金コース_サブオプションサービス一覧照会 */
	private static final String EKK1881B001 = "EKK1881B001";
	// 20130810 オーダ設定登録処理を追加 ADD START
	/** オーダ設定登録 */
	private static final String EKK1041D010 = "EKK1041D010";
	// 20130810 オーダ設定登録処理を追加 ADD END
// OM-2013-0005075対応 20131219 星野 ADD START
	/** 工事案件一覧照会（複合検索） */
	private static final String EKU0011B030 = "EKU0011B030";
// OM-2013-0005075対応 20131219 星野 ADD END
	//20131110 OM-2013-0003488 ADD START
	/** オプトインメール一覧照会 */
	private static final String ECK0141B002 = "ECK0141B002";
	/** オプトインメール受信設定一覧照会(SYSID)２ */
	private static final String ECK0141B005 = "ECK0141B005";
	/** オプトインメール受信設定無効 */
	private static final String ECK0141C030 = "ECK0141C030";
	/** オプトインメール受信設定回復 */
	private static final String ECK0141C040 = "ECK0141C040";
	/** オプトインメール受信設定登録 */
	private static final String ECK0141D010 = "ECK0141D010";
	//20131110 OM-2013-0003488 ADD END
	/** サービスオーダ発行CC ユーザ定義文字列 */
	private static final String SODCC_FIXED_TEXT = "trgt_data_list";

// 2012/10/11 【ANK-1223-00-00】進捗補足事項編集対応 ADD START
	/** 進捗特記事項1の固定文字部分 */
	private static final String PRG_TKJK_HIKITSUGI_SAKI = "オプション引継 [引継先お客様ID:";
	private static final String PRG_TKJK_HIKITSUGI_MOTO = "オプション引継 [引継元お客様ID:";
	private static final String PRG_TKJK_HIKITSUGI_END = "]";
// 2012/10/11 【ANK-1223-00-00】進捗補足事項編集対応 ADD END

	// 2013/05/24 ST3-2013-0000919 START
	private static final String AT_MARK = "@";
	// 2013/05/24 ST3-2013-0000919 END
	/**
	 * 割引タイプコード：パック割引
	 * @since 2012-10-06 ロット２残件対応、オプション引継画面の動確NG対応
	 */
	private static final String WRIB_TYPE_CD_FAMIPA = "20";

	// ▼▼▼▼▼ 2012/11/05 ANK-1255-00-00 ADD START ▼▼▼▼▼
	/** 解約種別フラグ(サービス契約解約) */
	public static final String DSL_SBT_FLG_SVC_KEI_DSL = "1";
	
	/** 解約種別フラグ(オプションサービス契約解約) */
	public static final String DSL_SBT_FLG_OP_SVC_KEI_DSL = "2";
	
	/** 解約種別フラグ(サブオプションサービス契約解約) */
	public static final String DSL_SBT_FLG_SBOP_SVC_KEI_DSL = "3";
	// ▲▲▲▲▲ 2012/11/05 ANK-1255-00-00 ADD E N D ▲▲▲▲▲

	// ▼▼▼▼▼ 2012/12/13 IT1-2012-0002332 ADD START ▼▼▼▼▼
	/** エイジングマップキー：エイジング種別コード */
	public static final String AGING_MAP_KEY_AGING_SBT_CD   = "aging_sbt_cd";

	/** エイジングマップキー：エイジング対象値 */
	public static final String AGING_MAP_KEY_AGING_TG_VALUE = "aging_tg_value";

	/** エイジングステータス：使用中 */
	private static final String AGING_STAT_USE     = "100";

	/** エイジングステータス：回復可能 */
	private static final String AGING_STAT_KIHK_OK = "200";

	/*************************************************************/
	/** エイジング種別コード                                    **/
	/*************************************************************/
	/** エイジング種別コード：固定IPアドレス */
	private static final String AGING_SBT_CD_IP     = "002";
	/** エイジング種別コード：URL */
	private static final String AGING_SBT_CD_URL    = "005";
	/** エイジング種別コード：WebID */
	private static final String AGING_SBT_CD_WEB_ID = "006";
	/** エイジング種別コード：PopID */
	private static final String AGING_SBT_CD_POP_ID = "007";
	/** エイジング種別コード：エイリアス */
	private static final String AGING_SBT_CD_ALIAS  = "008";
	/** エイジング種別コード：メールアドレス */
	private static final String AGING_SBT_CD_MLAD   = "009";
	/** エイジング種別コード：メーリングリスト */
	private static final String AGING_SBT_CD_MLLIST = "010";

	//20131110 OM-2013-0003488 ADD START
	/** オプトインメール受信設定ステータス:有効 */
	private static final String OPTINM_RCV_SETTE_STAT_UK = "010";
	/** オプトインメール受信設定ステータス:無効 */
	private static final String OPTINM_RCV_SETTE_STAT_MK = "020";
	//20131110 OM-2013-0003488 ADD END

	/** 業務パラメータID：メーリングリストドメイン */
	private static final String WORK_PARAM_ID_MLLIST_NM_DOMAIN = "KK_MLLIST_NM_DOMAIN";

	/** マップキー */
	private static final String MAP_KEY_OP_SVC       = "OP_SVC";
	private static final String MAP_KEY_OP_SVC_ISP   = "OP_SVC_ISP";
	private static final String MAP_KEY_SBOP_SVC     = "SBOP_SVC";
	private static final String MAP_KEY_SBOP_SVC_ISP = "SBOP_SVC_ISP";
	// ▲▲▲▲▲ 2012/12/13 IT1-2012-0002332 ADD E N D ▲▲▲▲▲

	/*************************************************************/
	/** 解約理由コード                                          **/
	/*************************************************************/
	private static final String SVC_DLRE_CD_NORMAL = "01";
	private static final String SVC_DLRE_CD_HKTG   = "04";

	private static final Object[][] TEMPLATE_INFO =
	{
		//20131110 OM-2013-0003488 ADD START
		{ECK0141B002, new ECK0141B002CBSMsg().getContents()},
		{ECK0141B005, new ECK0141B005CBSMsg().getContents()},
		{ECK0141C030, new ECK0141C030CBSMsg().getContents()},
		{ECK0141C040, new ECK0141C040CBSMsg().getContents()},
		{ECK0141D010, new ECK0141D010CBSMsg().getContents()},
		//20131110 OM-2013-0003488 ADD END
		{EKK0011D020, new EKK0011D020CBSMsg().getContents()},
		{EKK0021C060, new EKK0021C060CBSMsg().getContents()},
		{EKK0081A010, new EKK0081A010CBSMsg().getContents()},
		{EKK0161B004, new EKK0161B004CBSMsg().getContents()},
		{EKK0321B002, new EKK0321B002CBSMsg().getContents()},
		{EKK0351A010, new EKK0351A010CBSMsg().getContents()},
		{EKK0351C080, new EKK0351C080CBSMsg().getContents()},
		{EKK0351C220, new EKK0351C220CBSMsg().getContents()},
		{EKK0351C240, new EKK0351C240CBSMsg().getContents()},
		{EKK0351C250, new EKK0351C250CBSMsg().getContents()},
		{EKK0351C270, new EKK0351C270CBSMsg().getContents()},
		{EKK0361A010, new EKK0361A010CBSMsg().getContents()},
		{EKK0361B001, new EKK0361B001CBSMsg().getContents()},
		{EKK0361B003, new EKK0361B003CBSMsg().getContents()},
		{EKK0361C010, new EKK0361C010CBSMsg().getContents()},
		{EKK0361C030, new EKK0361C030CBSMsg().getContents()},
		{EKK0361C040, new EKK0361C040CBSMsg().getContents()},
		// OM-2014-0000761 オプション引継後の引継元メールオプションが課金されない 2014/03/20 START
//		{EKK0361C050, new EKK0361C050CBSMsg().getContents()},
		{EKK0361C051, new EKK0361C051CBSMsg().getContents()},
		// OM-2014-0000761 オプション引継後の引継元メールオプションが課金されない 2014/03/20 END
		{EKK0361D010, new EKK0361D010CBSMsg().getContents()},
		{EKK0401A010, new EKK0401A010CBSMsg().getContents()},
		{EKK0401B001, new EKK0401B001CBSMsg().getContents()},
		{EKK0401C150, new EKK0401C150CBSMsg().getContents()},
		{EKK0401C170, new EKK0401C170CBSMsg().getContents()},
		{EKK0401C180, new EKK0401C180CBSMsg().getContents()},
		{EKK0401C200, new EKK0401C200CBSMsg().getContents()},
		{EKK0411A010, new EKK0411A010CBSMsg().getContents()},
		{EKK0411B001, new EKK0411B001CBSMsg().getContents()},
		// OM-2014-0000761 オプション引継後の引継元メールオプションが課金されない 2014/03/20 START
//		{EKK0411C010, new EKK0411C010CBSMsg().getContents()},
		{EKK0411C011, new EKK0411C011CBSMsg().getContents()},
		// OM-2014-0000761 オプション引継後の引継元メールオプションが課金されない 2014/03/20 END
		{EKK0411C020, new EKK0411C020CBSMsg().getContents()},
		{EKK0411C040, new EKK0411C040CBSMsg().getContents()},
		{EKK0411C050, new EKK0411C050CBSMsg().getContents()},
		{EKK0411D010, new EKK0411D010CBSMsg().getContents()},
		{EKK0451B010, new EKK0451B010CBSMsg().getContents()},
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
//		// OM-2014-0000703 2014/03/07 MOD START
////		{EKK0451B030, new EKK0451B030CBSMsg().getContents()},
//		{EKK0451B001, new EKK0451B030CBSMsg().getContents()},
//		// OM-2014-0000703 2014/03/07 MOD END
		{EKK0451B001, new EKK0451B001CBSMsg().getContents()},
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
		{EKK1091D010, new EKK1091D010CBSMsg().getContents()},
		{EZM0111B030, new EZM0111B030CBSMsg().getContents()},
		{EZM0111C010, new EZM0111C010CBSMsg().getContents()},
		{EZM0111C020, new EZM0111C020CBSMsg().getContents()},
		{EZM0321A010, new EZM0321A010CBSMsg().getContents()},
		// 20130810 オーダ設定登録処理を追加 ADD START
		{EKK1041D010, new EKK1041D010CBSMsg().getContents()}
		// 20130810 オーダ設定登録処理を追加 ADD END 
		
	};

	/*************************************************************/
	/** ワークマップキー                                        **/
	/*************************************************************/
	/** ワークマップキー：引継元SYSID */
	private static final String WORK_MAP_KEY_HIKIMOTO_SYSID = "hikimoto_sysid";
	/** ワークマップキー：引継先SYSID */
	private static final String WORK_MAP_KEY_HIKISAKI_SYSID = "hikisaki_sysid";
	/** ワークマップキー：引継元サービス契約番号 */
	private static final String WORK_MAP_KEY_HIKIMOTO_SVC_KEI_NO = "hikimoto_svc_kei_no";
	/** ワークマップキー：引継元サービス契約ステータス */
	private static final String WORK_MAP_KEY_HIKIMOTO_SVC_KEI_STAT = "hikimoto_svc_kei_stat";
	/** ワークマップキー：引継先サービス契約番号 */
	private static final String WORK_MAP_KEY_HIKISAKI_SVC_KEI_NO = "hikisaki_svc_kei_no";
	/** ワークマップキー：引継先サービス契約ステータス */
	private static final String WORK_MAP_KEY_HIKISAKI_SVC_KEI_STAT = "hikisaki_svc_kei_stat_cd";
	/** ワークマップキー：異動区分 */
	private static final String WORK_MAP_KEY_IDO_DIV = "ido_div";
	/** ワークマップキー：引継先サービス契約内訳番号 */
	private static final String WORK_MAP_KEY_HIKISAKI_SVC_KEI_UCWK_NO = "hikisaki_svc_kei_ucwk_no";
	/** ワークマップキー：適用年月日 */
	private static final String WORK_MAP_KEY_APLY_YMD = "aply_ymd";
	/** ワークマップキー：引継元オプションサービス契約リスト */
	private static final String WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_LIST = "hikimoto_op_svc_kei_list";
	/** ワークマップキー：引継元オプションサービス契約番号 */
	private static final String WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_NO = "hikimoto_op_svc_kei_no";
	/** ワークマップキー：引継元オプションサービス契約ステータス */
	private static final String WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_STAT = "hikimoto_op_svc_kei_stat";
	/** ワークマップキー：引継元オプションサービスコード */
	private static final String WORK_MAP_KEY_HIKIMOTO_OP_SVC_CD = "hikimoto_op_svc_cd";
	/** ワークマップキー：引継元オプション料金コースコード */
	private static final String WORK_MAP_KEY_HIKIMOTO_PCRS_CD = "hikimoto_pcrs_cd";
	/** ワークマップキー：引継先オプションサービス契約番号 */
	private static final String WORK_MAP_KEY_HIKISAKI_OP_SVC_KEI_NO = "hikisaki_op_svc_kei_no";
	/** ワークマップキー：引継先オプションサービス契約ステータス */
	private static final String WORK_MAP_KEY_HIKISAKI_OP_SVC_KEI_STAT = "hikisaki_op_svc_kei_stat";
	// 20130716 LT-2013-0000487追加対応分 FTTH認証・登録・FTTH認証・消去でサービス契約の世代が必須のため、世代を設定する ADD START
	/** ワークマップキー：引継元サービス契約世代登録年月日時分秒 */
	private static final String WORK_MAP_KEY_HIKIMOTO_SVKEI_GENE_ADD_DTM = "hikimoto_svkei_gene_add_dtm";
	// 20130716 LT-2013-0000487追加対応分 FTTH認証・登録・FTTH認証・消去でサービス契約の世代が必須のため、世代を設定する ADD END
	// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 ADD START ▼▼▼▼▼
	/** ワークマップキー：引継先オプションサービス契約世代登録年月日 */
	private static final String WORK_MAP_KEY_HIKISAKI_OPSVKEI_GENE_ADD_DTM = "hikisaki_opsvkei_gene_add_dtm";
	// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 ADD E N D ▲▲▲▲▲

	/*************************************************************/
	/** ユーザデータマップキー                                  **/
	/*************************************************************/
	/** ユーザデータマップキー：引継元SYSID */
	public static final String USER_DATA_KEY_HIKIMOTO_SYSID = "hikimoto_sysid";
	/** ユーザデータマップキー：引継先SYSID */
	public static final String USER_DATA_KEY_HIKISAKI_SYSID = "hikisaki_sysid";
	/** ユーザデータマップキー：引継元サービス契約番号 */
	public static final String USER_DATA_KEY_HIKIMOTO_SVC_KEI_NO = "hikimoto_svc_kei_no";
	/** ユーザデータマップキー：引継先サービス契約番号 */
	public static final String USER_DATA_KEY_HIKISAKI_SVC_KEI_NO = "hikisaki_svc_kei_no";
	/** ユーザデータマップキー：引継先サービス契約ステータス */
	public static final String USER_DATA_KEY_HIKISAKI_SVC_KEI_STAT = "hikisaki_svc_kei_stat_cd";
	/** ユーザデータマップキー：異動区分 */
	public static final String USER_DATA_KEY_IDO_DIV = "ido_div";
	/** ユーザデータマップキー：適用年月日 */
	public static final String USER_DATA_KEY_HIKISAKI_APLY_YMD = "hikisaki_aply_ymd";
//	// 20130716 LT-2013-0000487追加対応分 FTTH認証・登録・FTTH認証・消去でサービス契約の世代が必須のため、世代を設定する ADD START
//	/** ユーザデータマップキー：引継元サービス契約世代登録年月日時分秒 */
//	private static final String USER_DATA_KEY_HIKIMOTO_SVKEI_GENE_ADD_DTM = "hikimoto_svkei_gene_add_dtm";
//	// 20130716 LT-2013-0000487追加対応分 FTTH認証・登録・FTTH認証・消去でサービス契約の世代が必須のため、世代を設定する ADD END
	/** ユーザデータマップキー：申込書番号 */
	public static final String USER_DATA_KEY_MSKMSHO_NO = "mskmsho_no";
	/** ユーザデータマップキー：申込書明細番号 */
	public static final String USER_DATA_KEY_MSKMSHO_DTL_NO = "mskmsho_dtl_no";
	/** ユーザデータマップキー：申込明細番号 */
	public static final String USER_DATA_KEY_MSKM_DTL_NO = "mskm_dtl_no";
	/** ユーザデータマップキー：引継先最終更新年月日 */
	public static final String USER_DATA_KEY_HIKISAKI_LAST_UPD_DTM = "hikisaki_last_upd_dtm";
	/** ユーザデータマップキー：引継元最終更新年月日 */
	public static final String USER_DATA_KEY_HIKIMOTO_LAST_UPD_DTM = "last_upd_dtm";
	/** ユーザデータマップキー：異動理由コードりスト */
	public static final String USER_DATA_KEY_IDO_RSN_CD_LIST = "ido_rsn_cdList";
	/** ユーザデータマップキー：進捗異動年月日時分秒 */
	public static final String USER_DATA_KEY_PRG_IDO_DTM = "prg_ido_dtm";
	/** ユーザデータマップキー：起動元コード */
	public static final String USER_DATA_KEY_KIDO_CD = "kido_cd";

	/*************************************************************/
	/** エイジング処理                                          **/
	/*************************************************************/
	private static final String AGING_EXEC_KBN_ADD  = "01";
	private static final String AGING_EXEC_KBN_KIHK = "02";
	private static final String AGING_EXEC_KBN_END  = "03";

	/** 起動元コード：バッチ */
	private static final String KIDO_CD_BAT = "02";

	/*************************************************************/
	/** クラス変数                                              **/
	/*************************************************************/
	/** 引継元排他制御用更新日時 */
	private String motoLastUpdDtm = null;

	/** 引継先御用更新日時 */
	private String sakiLastUpdDtm = null;

	private String fixedText = "";

	/** サービスインタフェース呼び出しで使用するマッパー群 */
	private JKKOpSvcHktgiUpdMapperCC mapper = null;

	/** SC呼び出し部品 */
	ServiceComponentRequestInvoker scCall = null;

	private String opeDate = null;

//	private boolean isIdoRsvHanei;
	private boolean isSokujitsu;

	/**
	 * オプション引継の初期処理です。
	 * 
	 * <br>
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @return void
	 * @throws Throwable 
	 */
	private void init(IRequestParameterReadWrite param, String fixedText)
	throws Throwable
	{
		//ユーザー任意文字列の初期化
		if(fixedText!=null && !"".equals(fixedText)){
			this.fixedText = fixedText;
		} else {
			this.fixedText = USER_DATA_KEY;
		}
		
		// マッパーの初期化
		if (null == this.mapper)
		{
			this.mapper = new JKKOpSvcHktgiUpdMapperCC();
		}
		
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		if (null == this.scCall)
		{
			this.scCall = new ServiceComponentRequestInvoker();
		}
		
		// コントロールマップのエラー情報を初期化
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, new ArrayList<Object>());
	}

	/**
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @return IRequestParameterReadWrite
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite opSvcHktgiUpd(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText
	) throws Throwable
	{
		// 初期処理
		init(param, fixedText);

		Map<String, Object> userData = (HashMap<String, Object>)param.getData(this.fixedText);
		Map<String, Object> inputMap = new HashMap<String, Object>();
		CAANMsg[] retMsgs = null;
		CAANMsg retMsg = null;

		// 20130724 IT1-2013-0001434 ADD START
		// ワークマップ
		HashMap<String, Object> workMap = new HashMap<String, Object>();
		// 20130724 IT1-2013-0001434 ADD END

		// INPUT項目を保持
		String hikisakiSysId      = (String)userData.get(USER_DATA_KEY_HIKISAKI_SYSID);
		String hikisakiSvcKeiNo   = (String)userData.get(USER_DATA_KEY_HIKISAKI_SVC_KEI_NO);
		String hikisakiSvcKeiStat = (String)userData.get(USER_DATA_KEY_HIKISAKI_SVC_KEI_STAT);
		String hikimotoSvcKeiNo   = (String)userData.get(USER_DATA_KEY_HIKIMOTO_SVC_KEI_NO);
		String mskmshoNo          = (String)userData.get(USER_DATA_KEY_MSKMSHO_NO);
		String mskmshoDtlNo       = (String)userData.get(USER_DATA_KEY_MSKMSHO_DTL_NO);
		String mskmDtlNo          = (String)userData.get(USER_DATA_KEY_MSKM_DTL_NO);
		String tekiyoYmd          = (String)userData.get(USER_DATA_KEY_HIKISAKI_APLY_YMD);
		String prgIdoDtm          = (String)userData.get(USER_DATA_KEY_PRG_IDO_DTM);
		String kidoCd             = (String)userData.get(USER_DATA_KEY_KIDO_CD);

		// 20130724 IT1-2013-0001434 MOD START
		if (! userData.containsKey(USER_DATA_KEY_IDO_DIV))
		{
			// インプット情報に異動区分が存在しない場合
			userData.put(USER_DATA_KEY_IDO_DIV, JKKSvcConst.IDO_DIV_OPHKTGI);
		}
		else
		{
			String idoDiv = (String)userData.get(USER_DATA_KEY_IDO_DIV);
			if (idoDiv == null || "".equals(idoDiv))
			{
				// インプット情報に異動区分が存在しない場合
				userData.put(USER_DATA_KEY_IDO_DIV, JKKSvcConst.IDO_DIV_OPHKTGI);
			}
		}
		setIdoDiv(workMap, userData);				// 異動区分
		// 20130724 IT1-2013-0001434 MOD END

		// 機能コード
		String funcCd = (String)userData.get(JCMConstants.FUNC_CODE_KEY);

		// 運用年月日を取得
		opeDate = JCCBPCommon.getOpeDate(null);
		String unyoDtm = JCCBPCommon.getOpeDateTimeStamp(null);

		// 2013/01/11 IT1-2013-0000039 ADD START
		String sysDtm = JCCBPCommon.getSysDateTimeStamp();
		// 2013/01/11 IT1-2013-0000039 ADD END

		// 即日反映かどうか？
		isSokujitsu = (opeDate.compareTo(tekiyoYmd) >= 0);

		if (isNull(mskmDtlNo))
		{
			// 申込明細が引数に設定されていない場合

			// S-IF：EKK0011D020 申込内容承認登録
			inputMap = new HashMap<String, Object>();
			inputMap.put(JCMConstants.FUNC_CODE_KEY, funcCd);
			inputMap.put(EKK0011D020CBSMsg.SYSID, hikisakiSysId);
			inputMap.put(EKK0011D020CBSMsg.MSKM_SBT_CD, "00003");
			inputMap.put(EKK0011D020CBSMsg.MSKM_UK_DTM, unyoDtm);
			inputMap.put(EKK0011D020CBSMsg.MSKM_YMD, opeDate);
			inputMap.put("consmbsn_mskm_stat_skbt_cd", "04");
			CAANMsg eKK0011D020CBSMsg1ListMap = new CAANMsg(EKK0011D020CBSMsg1List.class.getName());
			fillCAANMSGNullMapping(eKK0011D020CBSMsg1ListMap, new EKK0011D020CBSMsg1List().getContents());
			CAANMsg[] eKK0011D020CBSMsg1List = new CAANMsg[1];
			eKK0011D020CBSMsg1List[0] = eKK0011D020CBSMsg1ListMap;
			eKK0011D020CBSMsg1List[0].set("mskmsho_no", mskmshoNo);
			eKK0011D020CBSMsg1List[0].set("mskmsho_dtl_no", mskmshoDtlNo);
			// 2013-03-14 KT1-2013-0000358 ADD_START
			eKK0011D020CBSMsg1List[0].set("op_svc_hktgi_um", "1");
			// 2013-03-14 KT1-2013-0000358 ADD_END
			inputMap.put(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST, eKK0011D020CBSMsg1List);

			retMsg = (CAANMsg)runSc(handle, param, EKK0011D020, inputMap);

			String lastUpdDtmMskm = retMsg.getString(EKK0011D020CBSMsg.UPD_DTM);
			retMsgs = retMsg.getCAANMsgList(EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST);
			mskmDtlNo = retMsgs[0].getString(EKK0011D020CBSMsg1List.MSKM_DTL_NO);

			if (SVC_KEI_STAT_020.compareTo(hikisakiSvcKeiStat) <= 0)
			{
				// S-IF：EKK0021C060 申込明細照査・後続業務依頼
				inputMap = new HashMap<String, Object>();
				inputMap.put(JCMConstants.FUNC_CODE_KEY, funcCd);
				inputMap.put("mskm_dtl_no", mskmDtlNo);
				inputMap.put("kzkwrk_reqymd", opeDate);
				inputMap.put("upd_dtm_bf", lastUpdDtmMskm);
				runSc(handle, param, EKK0021C060, inputMap);
			}
		}

		// 20130724 IT1-2013-0001434 即日処理と予約処理をわける MOD START
		if ( isSokujitsu )
		{
			copyOption(handle, param, mskmDtlNo, workMap);
		}
		else
		{
			rsvOpHktgi(handle, param, fixedText, mskmDtlNo, workMap);
		}
		// 20130724 IT1-2013-0001434 即日処理と予約処理をわける MOD END

		// ▼▼▼▼▼ 2013/07/29 UPD START ▼▼▼▼▼
		// 進捗登録処理を呼び出す
		callEKK1091D010(handle, param, userData, workMap, funcCd, kidoCd, hikisakiSvcKeiNo, hikimotoSvcKeiNo, mskmDtlNo, prgIdoDtm, sysDtm);
		// ▲▲▲▲▲ 2013/07/29 UPD E N D ▲▲▲▲▲

		return param;
	}
	// 2012-05-11 巻E指示書CC取込 ADD_START

	/**
	 * 指示書CC呼出
	 * @param handle
	 * @param param
	 * @param hikisakiSysId
	 * @param opSvcKeiNoB001List
	 * IT2-2012-0000585 2012/06/14 mod
	 */
	@SuppressWarnings("unchecked")
	private void sjishoCC(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			ArrayList hikiMotoOpSvcKeiB001Sjisho,
			ArrayList hikiSakiOpSvcKeiB001Sjisho,
			ArrayList hikiMotoOpSvcKeiB002Sjisho,
			ArrayList hikiSakiOpSvcKeiB002Sjisho,
			ArrayList hikiSakiDslOpSvcKeiB002Sjisho,
			HashMap<String, Object> workMap
	) throws Throwable
	{
		JKKAddSjishoCC sjishoCC = new JKKAddSjishoCC();
		// ユーザ定義領域作成
		createUserData(param, "renkei_data_list1");
		createUserData(param, "renkei_data_list2");

		// KT1-2013-0000236 2013-02-27 EDIT_START
		// 引継ぎ先連携フラグ
		boolean renkei1 = false;
		// 引継ぎ元連携フラグ
		boolean renkei2 = false;
		// TODO:ＭＹホームページが引継がれた場合、引継元でＭＹホームページを再度新規登録する為、
		// 引継元オプションサービス契約番号で登録連携を行う
		// KT1-2013-0000236では未対応
		String opSvcKeiNoB002motoNew = "";

		// 引継元SYSID取得
		String hikiMotoSysid = getHikiMotoSysid(workMap);
		// 引継先SYSID取得
		String hikiSakiSysid = getHikiSakiSysid(workMap);

		// ******************************************** //
		// 引継ぎ先SYSIDで指示書CCを呼び出す            //
		// ******************************************** //
		// 処理区分:登録
		if (!isNull(hikiSakiSysid))
		{
			// Ｅメール：引継先オプションサービス契約番号で登録連携
			if (hikiSakiOpSvcKeiB001Sjisho.size() > 0)
			{
				// 連携データ区分 03 ：POPIDの情報
				// 処理区分:登録
				JKKBpCommon.putAxMRenkeiDataKbn(
						param,
						"renkei_data_list1",
						JKKAddSjishoConst.RENKEI_DATA_KBN_POPID,
						JKKAddSjishoConst.TRN_KBN_ADD,
						(String[])hikiSakiOpSvcKeiB001Sjisho.toArray(new String[0]),
						hikiSakiSysid
				);
				renkei1 = true;
			}

			// ＭＹホームページ：引継先の旧オプションサービス契約番号を削除連携（引継先が削除の場合）
			if(hikiSakiDslOpSvcKeiB002Sjisho.size() > 0)
			{
				// 連携データ区分 04 ：WEBIDの情報
				// 処理区分:削除
				JKKBpCommon.putAxMRenkeiDataKbn(
						param,
						"renkei_data_list1",
						JKKAddSjishoConst.RENKEI_DATA_KBN_WEBID,
						JKKAddSjishoConst.TRN_KBN_DEL,
						(String[])hikiSakiDslOpSvcKeiB002Sjisho.toArray(new String[0]),
						hikiSakiSysid
				);
				renkei1 = true;
			}
			// ＭＹホームページ：引継先の新オプションサービス契約番号で登録連携（引継先で登録）
			if(hikiSakiOpSvcKeiB002Sjisho.size() > 0)
			{
				// 連携データ区分 04 ：WEBIDの情報
				// 処理区分:登録
				JKKBpCommon.putAxMRenkeiDataKbn(
						param,
						"renkei_data_list1",
						JKKAddSjishoConst.RENKEI_DATA_KBN_WEBID,
						JKKAddSjishoConst.TRN_KBN_ADD,
						(String[])hikiSakiOpSvcKeiB002Sjisho.toArray(new String[0]),
						hikiSakiSysid
				);
				renkei1 = true;
			}

			// 引継ぎ先で連携を行う場合指示書CC呼出を行う
			if (renkei1)
			{
				// 指示書登録
				sjishoCC.addSjisho(handle, param, "renkei_data_list1");
			}
		}

		// ******************************************** //
		// 引継ぎ元SYSIDで指示書CCを呼び出す            //
		// ******************************************** //
		// 処理区分:削除
		if (!isNull(hikiMotoSysid))
		{
			// Ｅメール：引継元のオプションサービス契約番号を削除連携（引継元メール削除の連携）
			if (hikiMotoOpSvcKeiB001Sjisho.size() > 0)
			{
				// 連携データ区分 03 ：POPIDの情報
				// 処理区分:削除
				JKKBpCommon.putAxMRenkeiDataKbn(
						param,
						"renkei_data_list2",
						JKKAddSjishoConst.RENKEI_DATA_KBN_POPID,
						JKKAddSjishoConst.TRN_KBN_DEL,
						(String[])hikiMotoOpSvcKeiB001Sjisho.toArray(new String[0]),
						hikiMotoSysid
				);
				renkei2 = true;
			}

			// ＭＹホームページ：引継元のオプションサービス契約番号を削除連携（引継元の）
			if(hikiMotoOpSvcKeiB002Sjisho.size() > 0)
			{
				// 連携データ区分 04 ：WEBIDの情報
				// 処理区分:削除
				JKKBpCommon.putAxMRenkeiDataKbn(
						param,
						"renkei_data_list2",
						JKKAddSjishoConst.RENKEI_DATA_KBN_WEBID,
						JKKAddSjishoConst.TRN_KBN_DEL,
						(String[])hikiMotoOpSvcKeiB002Sjisho.toArray(new String[0]),
						hikiMotoSysid
				);
				renkei2 = true;
			}

			// ＭＹホームページ：引継元の新オプションサービス契約番号で登録連携（引継先で登録）
			if(!isNull(opSvcKeiNoB002motoNew))
			{
				// 連携データ区分 04 ：WEBIDの情報
				// 処理区分:登録
				JKKBpCommon.putAxMRenkeiDataKbn(
						param,
						"renkei_data_list2",
						JKKAddSjishoConst.RENKEI_DATA_KBN_WEBID,
						JKKAddSjishoConst.TRN_KBN_ADD,
						new String[]{opSvcKeiNoB002motoNew},
						hikiMotoSysid
				);
				renkei2 = true;
			}

			// 引継ぎ元で連携を行う場合指示書CC呼出を行う
			if (renkei2)
			{
				// 指示書登録
				sjishoCC.addSjisho(handle, param, "renkei_data_list2");
			}
		}
	}

	
	/**
	 * ユーザ定義文字列がユーザ情報になければデータを作成します。 <br>
	 * 
	 * @param param 業務データ取得用I/F
	 * @param workMapKey 業務データのマップキー
	 * @return true：作成した　False：存在していたため作成不要
	 * @throws RequestParameterException
	 */
	private boolean createUserData(IRequestParameterReadWrite param, String workMapKey)
			throws RequestParameterException
	{
		if (param.getData(workMapKey) == null)
		{
			param.setData(workMapKey, new HashMap<String, Object>());
			return true;
		}

		return false;
	}
	// 2012-05-11 巻E指示書CC取込 ADD_END
	/**
	 * @param handle
	 * @param param
	 * @param templateId
	 * @param inMap
	 * @return CAANMsg[]
	 * @throws Throwable
	 */
	private Object runSc(SessionHandle handle, IRequestParameterReadWrite param, String templateId,
			Map<String, Object> inMap) throws Throwable
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// 【取得元：電文ヘッダ(ヘッダ)】
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// 【取得元：ユーザエリア(コントロールマップ)】
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		CAANMsg template = new CAANMsg(PACKAGE_NAME + templateId + SAF_MSG);

		// NULLクリア
		for (int i = 0; i < TEMPLATE_INFO.length; i++)
		{
			String workTempId = (String)TEMPLATE_INFO[i][0];
			if (workTempId.equals(templateId))
			{
				Object[][] contentsInfo = (Object[][])TEMPLATE_INFO[i][1];
				fillCAANMSGNullMapping(template, contentsInfo);
				break;
			}
		}

		template.set(JCMConstants.TEMPLATE_ID_KEY,      templateId);
		template.set(JCMConstants.OPERATOR_ID_KEY,      param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		template.set(JCMConstants.OPERATE_DATE_KEY,     param.getControlMapData(SCControlMapKeys.OPE_DATE));
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));

		// 
		if (inMap != null)
		{
			Set<String> setKey = inMap.keySet();
			Iterator<String> iter = setKey.iterator();
// UI残65_異動理由の要否について 2012/05/14 ariyoshi strat
			boolean idoRsnFlg = true;
			while (iter.hasNext())
			{
				String key = iter.next();
				if (!isEmptyKey(inMap, key))
				{
					if (EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST.equals(key) && idoRsnFlg) {
						CAANMsg[] list = (CAANMsg[])inMap.get(key);
						template.set(key, list);
						idoRsnFlg = false;
// UI残65_異動理由の要否について 2012/05/14 ariyoshi end
					}
					else if (EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST.equals(key)) {
						CAANMsg[] list = (CAANMsg[])inMap.get(key);
						template.set(key, list);
					}
					else {
						template.set(key, inMap.get(key));
					}
				}
				else
				{
					template.setNull(key);
				}
			}
		}

		// リクエスト用クラスの設定
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		Map<?, ?> result = scCall.run(paramMap, handle);

		// エラーマッピング処理
// 20121014 住所変更リファクタリング対応 MOD START
//		editResultRP(result, param, USER_DATA_KEY);
		editResultRP(result, param, this.fixedText);
// 20121014 住所変更リファクタリング対応 MOD END
		// エラーチェック処理
		errChk(result);
		
		CAANMsg[] resultTemplates = (CAANMsg[])result.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		if (EKK0011D020.equals(templateId))
		{
			return resultTemplates[0];
		}
		else if (EZM0111B030.equals(templateId))
		{
			if( resultTemplates[0].getCAANMsgList(templateId + SAF_LIST) != null && resultTemplates[0].getCAANMsgList(templateId + SAF_LIST).length > 0)
			{
				return resultTemplates[0].getCAANMsgList(templateId + SAF_LIST);
			}
			else
			{
				return null;
			}
		}
		else if (resultTemplates[0].getCAANMsgList(templateId + SAF_LIST) != null)
		{
			return resultTemplates[0].getCAANMsgList(templateId + SAF_LIST);
		}
		else
		{
			return resultTemplates[0];
		}
	}

	/**
	 * @param map
	 * @param key
	 * @return boolean
	 */
	private boolean isEmptyKey(Map<String, Object> map, String key)
	{
		if (map == null || map.get(key) == null || STR_EMPTY.equals(map.get(key)))
		{
			return true;
		}
		else
		{
			return false;
		}
	}

	/**
	 * チェック処理<br>
	 * サービスコンポーネント実行用CAANMsgを返却します。<br>
	 * <br>
	 * 
	 * @param handle
	 *            セッションハンドル
	 * @param param
	 *            (I) 業務データ取得用I/F
	 * @param fixedText
	 *            (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @throws RequestParameterException
	 * @exception Throwableがスローされます。
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText)
			throws RequestParameterException
	{
		HashMap<String, Object> map = new HashMap<String, Object>();
		// SCインプット共通データ
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		map.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		map.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		map.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		map.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());

		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		map.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		map.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		map.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		map.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));

		map.put(JCMConstants.TEMPLATE_LIST_KEY, null);

		return map;
	}

	/**
	 * サービスインターフェイス処理結果(エラー情報)の取得<br>
	 * 業務データ取得・書込用I/Fをそのまま返却します。<br>
	 * <br>
	 * 
	 * @param param
	 *            デルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param templates
	 *            CAANMsgクラス配列
	 * @param returnCode
	 *            リターンコード
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] templates,
			Integer returnCode) throws Throwable
	{
		return param;
	}

	/**
	 * @param svcKeiNo
	 * @param sysId
	 * @param idoDiv
	 * @return SOD基本情報MAP
	 */
	// 20130716 LT-2013-0000487追加対応分 motoSvkeiGeneAddDtmを追加 MOD START
	private Map<String, Object> createSodMap(String svcKeiNo, String motoSvcKeiNo, String sysId, String idoDiv, String motoSvkeiGeneAddDtm)
	// 20130716 LT-2013-0000487追加対応分 motoSvkeiGeneAddDtmを追加 MOD END
	{
		Map<String, Object> sodMap       = new HashMap<String, Object>();

		Map<String, Object> sodKihonInfo = new HashMap<String, Object>();
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_SYSID,   sysId);
		sodKihonInfo.put(JKKHakkoSODConstCC.INFO_IDO_DIV, idoDiv);
		sodKihonInfo.put("svc_kei_no",      svcKeiNo);
		sodKihonInfo.put("saki_svc_kei_no", svcKeiNo);
		// LT-2013-0000487 オプション引継の固定グローバルIP引継時、引継元に発行されるSODが誤っている 2013/07/14 START
		sodKihonInfo.put("moto_svc_kei_no", motoSvcKeiNo);
		// LT-2013-0000487 オプション引継の固定グローバルIP引継時、引継元に発行されるSODが誤っている 2013/07/14 END

		Map<String, Object> svcKeiInfo = new HashMap<String, Object>();
		svcKeiInfo.put(JKKHakkoSODConstCC.INFO_SVC_KEI_NO,      svcKeiNo);
		svcKeiInfo.put(JKKHakkoSODConstCC.INFO_SAKI_SVC_KEI_NO, svcKeiNo);
		// LT-2013-0000487 オプション引継の固定グローバルIP引継時、引継元に発行されるSODが誤っている 2013/07/14 START
		svcKeiInfo.put(JKKHakkoSODConstCC.INFO_MOTO_SVC_KEI_NO, motoSvcKeiNo);
		// LT-2013-0000487 オプション引継の固定グローバルIP引継時、引継元に発行されるSODが誤っている 2013/07/14 END
		// 20130716 LT-2013-0000487追加対応分 FTTH認証・登録・FTTH認証・消去でサービス契約の世代が必須のため、世代を設定する ADD START
		svcKeiInfo.put(JKKHakkoSODConstCC.INFO_MOTO_SVKEI_GENE_ADD_DTM, motoSvkeiGeneAddDtm);
		// 20130716 LT-2013-0000487追加対応分 FTTH認証・登録・FTTH認証・消去でサービス契約の世代が必須のため、世代を設定する ADD END

		sodMap.put(JKKHakkoSODConstCC.SOD_KIHON_INFO, sodKihonInfo);
		sodMap.put(JKKHakkoSODConstCC.SVC_KEI_INFO,   svcKeiInfo);

		return sodMap;
	}
	
	/**
	 * エラーチェック処理です。
	 * <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);
		
		if ((0 != returnCode.intValue()) || (0 != templateStatus))
		{
			String errMsg = "INVALID_RETURN_MESSAGE";
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}
	
	/**
	 * 持ちうるフィールドにNullマッピングで埋める
	 * 
	 * @param msg 対象クラス
	 * @param contents 対応クラスのフィールド列挙
	 */
	private void fillCAANMSGNullMapping(CAANMsg msg, Object[][] contents)
	{
		// 要素ごとのループ
		for(int i = 0 ; i < contents.length ; i++)
		{
			Object element = null;
			// キーに該当する箇所の取得
			element = contents[i][0];
			// Nullでマッピング
			msg.setNull((String)element);
		}
	}
	
	/**
	 * <pre>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 * 
	 * </pre>
	 * @param msgList CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText ユーザ任意文字列
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editResultRP(
			Map<?, ?> msgList,
			IRequestParameterReadWrite param,
			String fixedText) 
			throws Throwable 
	{

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		Integer returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);

		// テンプレートID、ステータス取得
		String templateId = template.getString(JCMConstants.TEMPLATE_ID_KEY);
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (returnCode.intValue() != 0)
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_"
				+ String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}

		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_"
					+ formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}

		/* ユーザデータ情報 */
		HashMap inMap = (HashMap)param.getData(fixedText);

		// ユーザデータ情報にエラー情報をマッピング
		Object[][] contents = null;
		for (int i = 0; i < TEMPLATE_INFO.length; i++)
		{
			String workTempId = (String)TEMPLATE_INFO[i][0];
			if (workTempId.equals(templateId))
			{
				contents = (Object[][])TEMPLATE_INFO[i][1];
				break;
			}
		}

		for(int i = 0 ; contents != null && i < contents.length ; i++)
		{
			String element = null;
			element = (String)contents[i][0];
			if (element.indexOf("_err") > 0)
			{
				if (!template.isNull(element))
				{
					if (!inMap.containsKey(element))
					{
						inMap.put(element, template.getString(element));
					}
				}
			}
		}
		
		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));

		return param;
	}
	
	/**
	 * オブジェクトに値が設定されているか判定する
	 * 
	 * @param arg0 判定するオブジェクト
	 * @return オブジェクトに値が設定されていない場合はtrue
	 */
	private boolean isNull(Object arg0) 
	{
		if (arg0 == null) 
		{
			return true;
		}

		return 0 == arg0.toString().length();
	}

// IT1-2012-0000585 2012/06/14 add start

	/**
	 * <pre>
	 * オプション引継処理
	 * </pre>
	 * @param	handle
	 * @param	param
	 * @param	mskmDtlNo			申込明細番号
	 * @param	hikisakiSeikyKeiNo	請求契約番号
	 * @return	
	 * @throws	Throwable
	 */
	@SuppressWarnings("unchecked")
	private void copyOption(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String mskmDtlNo,
			HashMap<String, Object> workMap
	) throws Throwable
	{
		// ユーザデータ取得
		Map<String, Object> userData = (HashMap<String, Object>)param.getData(this.fixedText);

		// オプションサービス契約情報取得
		List<Map<String, Object>> opSvcKeiList = (ArrayList<Map<String, Object>>)userData.get(OP_SVC_KEI_LIST);

		// インプットマップ（汎用）
		Map<String, Object> inputMap = new HashMap<String, Object>();

		CAANMsg[] retMsgs = null;
		CAANMsg   retMsg = null;

		// 引継先解約対象オプションサービス契約リスト
		CAANMsg[] retHikiSakiDslEKK0361B001 = null;

		// 引継元オプションサービス契約リスト（Ｍｙホームページ用）
		CAANMsg[] retHikiMotoMyHpEKK0361B001 = null;

		// 引継元オプションサービス契約リスト
		CAANMsg[] retHikiMotoEKK0351A010 = null;
		CAANMsg[] retHikiMotoEKK0361A010 = null;

		// 引継元サブオプションサービス契約リスト
		CAANMsg[] retHikiMotoEKK0401B001 = null;

		// 指示書用
		ArrayList<String> hikiMotoOpSvcKeiB001Sjisho = new ArrayList<String>();
		ArrayList<String> hikiSakiOpSvcKeiB001Sjisho = new ArrayList<String>();
		ArrayList<String> hikiMotoOpSvcKeiB002Sjisho = new ArrayList<String>();
		ArrayList<String> hikiSakiOpSvcKeiB002Sjisho = new ArrayList<String>();

		ArrayList<String> hikiSakiDslOpSvcKeiB002Sjisho = new ArrayList<String>();

		// ＳＯＤ用
		List<Map<String, Object>> sodCcInputList = new ArrayList<Map<String, Object>>();

		// ＳＯＤ用
		Map<String, Object> opSvkeiSodInfo = new HashMap<String, Object>();

		// ========================================================== //
		// ユーザデータをワークマップにセット                         //
		// ========================================================== //
		setHikiMotoSysid(workMap, userData);		// 引継元SYSID
		setHikiSakiSysid(workMap, userData);		// 引継先SYSID
		setHikiMotoSvcKeiNo(workMap, userData);		// 引継元サービス契約番号
		setHikiSakiSvcKeiNo(workMap, userData);		// 引継先サービス契約番号
		setHikiSakiSvcKeiStat(workMap, userData);	// 引継先サービス契約ステータス
		setAplyYmd(workMap, userData);				// 適用年月日

		// 引継先サービス契約番号
		String hikiSakiSvcKeiNo   = getHikiSakiSvcKeiNo(workMap);
		// 引継先サービス契約ステータス
		String hikiSakiSvcKeiStat = getHikiSakiSvcKeiStat(workMap);
		// 引継元請求契約番号
		String hikiMotoSeikyKeiNo = getSeikyKeiNo(handle, param, getHikiMotoSvcKeiNo(workMap));
		// 引継先請求契約番号
		String hikiSakiSeikyKeiNo = getSeikyKeiNo(handle, param, getHikiSakiSvcKeiNo(workMap));

		// 排他用更新日時時分秒をセット
		sakiLastUpdDtm = (String)userData.get(USER_DATA_KEY_HIKISAKI_LAST_UPD_DTM);
		motoLastUpdDtm = (String)userData.get(USER_DATA_KEY_HIKIMOTO_LAST_UPD_DTM);

		CAANMsg[] retHikiMotoEKK0081A010 = null;

		// ========================================================== //
		// 引継元サービス契約一意照会実行                             //
		// ========================================================== //
		retHikiMotoEKK0081A010 = callEKK0081A010(handle, param, getHikiMotoSvcKeiNo(workMap));

		// 引継元サービス契約ステータス
		setHikiMotoSvcKeiStat(workMap, retHikiMotoEKK0081A010[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT));

		// 引継元料金コースコード
		setHikiMotoPcrsCd(workMap, retHikiMotoEKK0081A010[0].getString(EKK0081A010CBSMsg1List.PCRS_CD));

		// 20130716 LT-2013-0000487追加対応分 引継元サービス契約世代登録年月日時分秒を追加 ADD START
		setHikiMotoSvkeiGeneAddDtm(workMap, retHikiMotoEKK0081A010[0].getString(EKK0081A010CBSMsg1List.GENE_ADD_DTM));		// 引継元サービス契約世代登録年月日時分秒
		// 20130716 LT-2013-0000487追加対応分 引継元サービス契約世代登録年月日時分秒を追加 ADD END

		// ========================================================== //
		// 引継先サービス契約一意照会実行                             //
		// ========================================================== //
		CAANMsg[] retHikiSakiEKK0081A010 = callEKK0081A010(handle, param, getHikiSakiSvcKeiNo(workMap));

		// ========================================================== //
		// 引継先サービス契約内訳番号取得                             //
		// ========================================================== //
		callEKK0161B004(handle, param, workMap);

		// ========================================================== //
		// 引継元のオプションサービス契約＜ISP＞一覧照会              //
		// ========================================================== //
		inputMap = new HashMap<String, Object>();
		inputMap.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		inputMap.put(EKK0361B001CBSMsg.KEY_SVC_KEI_NO, getHikiMotoSvcKeiNo(workMap));
		retHikiMotoMyHpEKK0361B001 = (CAANMsg[])runSc(handle, param, EKK0361B001, inputMap);

		// ========================================================== //
		// 引継先のオプションサービス契約＜ISP＞一覧照会              //
		// ========================================================== //
		inputMap = new HashMap<String, Object>();
		inputMap.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		inputMap.put(EKK0361B001CBSMsg.KEY_SVC_KEI_NO, hikiSakiSvcKeiNo);
		retHikiSakiDslEKK0361B001 = (CAANMsg[])runSc(handle, param, EKK0361B001, inputMap);

		// ■■■引継先オプションサービスチェック■■■
		ArrayList<String> hikiSakiOpSvcKeiListB001 = new ArrayList<String>();
		ArrayList<String> hikiSakiOpSvcKeiListB002 = new ArrayList<String>();
		ArrayList<String> hikiSakiOpSvcKeiStatListB002 = new ArrayList<String>();

		for(int i = 0; i < retHikiSakiDslEKK0361B001.length; i++)
		{
			// ▼▼▼▼▼ 2013/08/24 OM-2013-0000731 ADD START ▼▼▼▼▼
			// オプションサービス契約ステータス
			String opSvcKeiStat = retHikiSakiDslEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_KEI_STAT);

			// 「解約済」「キャンセル済」は除外する
			if (SVC_KEI_STAT_910.equals(opSvcKeiStat) || SVC_KEI_STAT_920.equals(opSvcKeiStat))
			{
				continue;
			}
			// ▲▲▲▲▲ 2013/08/24 OM-2013-0000731 ADD E N D ▲▲▲▲▲

			// オプションサービスコード
			String opSvcCd = retHikiSakiDslEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_CD);

			if(OP_SVC_CD_EMAIL.equals(opSvcCd))
			{
				// メールアドレス
				String mlad = retHikiSakiDslEKK0361B001[i].getString(EKK0361B001CBSMsg1List.MLAD);

				if (mlad == null || "".equals(mlad))
				{
					// 空の場合、解約用にオプションサービス契約番号を保持
					hikiSakiOpSvcKeiListB001.add(retHikiSakiDslEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_KEI_NO));
				}
			}
			else if(OP_SVC_CD_MYHOMEPAGE.equals(opSvcCd))
			{
				// ＵＲＬ
				String urlAccount = retHikiSakiDslEKK0361B001[i].getString(EKK0361B001CBSMsg1List.URL_ACCOUNT);

				if (urlAccount == null || "".equals(urlAccount))
				{
					// 空の場合、解約用にオプションサービス契約番号を保持
					hikiSakiOpSvcKeiListB002.add(retHikiSakiDslEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_KEI_NO));
					hikiSakiOpSvcKeiStatListB002.add(retHikiSakiDslEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_KEI_STAT));
				}
			}
		}

		int opSvcKeiB001Index = 0;
		int opSvcKeiB002Index = 0;
		// ■■■引継先オプションサービスチェック■■■

		// IT2-2012-0001485 2012/08/23 start
		// ファミリーパック有無
		boolean famiPackAri = false;
		// S-IF：EKK0451B001 割引サービス契約一覧照会
		inputMap = new HashMap<String, Object>();
		inputMap.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		// OM-2014-0000703 2014/03/07 MOD START
//		inputMap.put(EKK0451B030CBSMsg.KEY_SVC_KEI_NO, hikiSakiSvcKeiNo);
		inputMap.put(EKK0451B001CBSMsg.KEY_SVC_KEI_NO, hikiSakiSvcKeiNo);
		// OM-2014-0000703 2014/03/07 MOD END
		// OM-2014-0000703 2014/03/07 DEL START
//		inputMap.put(EKK0451B030CBSMsg.KEY_RSV_APLY_YMD, opeDate);
//		inputMap.put(EKK0451B030CBSMsg.KEY_WRIB_TYPE_CD, WRIB_TYPE_CD_FAMIPA);
		// OM-2014-0000703 2014/03/07 DEL END
		// OM-2014-0000703 2014/03/07 MOD START
//		retMsgs = (CAANMsg[])runSc(handle, param, EKK0451B030, inputMap);
		retMsgs = (CAANMsg[])runSc(handle, param, EKK0451B001, inputMap);
		// OM-2014-0000703 2014/03/07 MOD END
		for(int i=0; i<retMsgs.length; i++)
		{
			// OM-2014-0000703 2014/03/07 MOD START
//			String wribSvcCd = retMsgs[i].getString(EKK0451B030CBSMsg1List.WRIB_SVC_CD);
			String wribSvcCd = retMsgs[i].getString(EKK0451B001CBSMsg1List.WRIB_SVC_CD);
			// OM-2014-0000703 2014/03/07 MOD END
			//ANK-3149-20-00 MOD START
			//if(WRIB_SVC_CD_FP_WRIB.equals(wribSvcCd))
			//famiPackAriでファミリーパック、セキュリティパック、プレミアムパックの引継有無を保持する
			if (WRIB_SVC_CD_FP_WRIB.equals(wribSvcCd) || WRIB_SVC_CD_SP_WRIB.equals(wribSvcCd) || WRIB_SVC_CD_PP_WRIB.equals(wribSvcCd) )
			//ANK-3149-20-00 MOD END
			{
// OM-2015-0002109 2015/09/02 MOD START
//				famiPackAri = true;
				String wribSvcKeiStat = retMsgs[i].getString(EKK0451B001CBSMsg1List.WRIB_SVC_KEI_STAT);
				// ファミリーパック割引の割引サービス契約ステータスが解約済、キャンセル済の場合、
				// ファミリーパック無として扱う
				if(! SVC_KEI_STAT_910.equals(wribSvcKeiStat) && ! SVC_KEI_STAT_920.equals(wribSvcKeiStat)) {
					famiPackAri = true;
				}
// OM-2015-0002109 2015/09/02 MOD END
			}
		}
		// IT2-2012-0001485 2012/08/23 end

		//ANK-3149-08-00 ADD START
		// セキュリティーパック有無
		String secuPackFlg = "0";
		boolean sequPackUm = false;
		if(userData.get("option_pack_choice") == null){
			secuPackFlg = "0";
		}
		else{
			sequPackUm = (Boolean)userData.get("option_pack_choice");
			//選択されたオプションパックを引き継ぐ
			if(sequPackUm == true){
				secuPackFlg = "1";
			}
			else{
				secuPackFlg = "0";
			}
		}
		
		//排他チェック
		//引継元の確定ボタン押下時の最終更新年月日時分秒と検索ボタン押下時の最終更新年月日時分秒を比較し、
		//一致しない場合はエラー
		String hikimoto_last_upd_dtm = retHikiMotoEKK0081A010[0].getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM);
		String hikisaki_last_upd_dtm = retHikiSakiEKK0081A010[0].getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM);
		if (!hikimoto_last_upd_dtm.equals(motoLastUpdDtm) || !hikisaki_last_upd_dtm.equals(sakiLastUpdDtm))
		{
			userData.put("tran_rslt_cd", "1");
			// 例外スローのため、ダミーのSIFエラーを設定
			setExceptionErr(param, (HashMap<String, Object>)userData, "EKK0081A010", "key_svc_kei_no_err");
			// 例外をスロー
			throw new CCException(SC_ERROR_STRING, new Exception());
		}
		//ANK-3149-08-00 ADD END
		// ANK-3149-00-00 ADD START
		//引継元のオプションに対してインターネットサギウォールとノートンファミリープレミア、リモートサポートプラスの存在チェックを行う。
		String inetsgwlTgFlg = "";
		String ntfmlprmTgFlg = "";
		// ANK-4577-00-00 ADD START
		String rmtsprtTgFlg= "0";
		// ANK-4577-00-00 ADD END
		
		// 引継元オプションサービス契約コード
		String HkmtOpSvcCd = "";
		
		// 引継元のオプション数分以下を行う
		for(int opIdx = 0; opIdx < opSvcKeiList.size(); opIdx++){
			// オプションサービスコードがB131(インターネットサギウォール)とB132(ノートンファミリープレミア)の
			// オプションサービス契約ステータスを取得。
			Map<String, Object> opSvcKei = opSvcKeiList.get(opIdx);
			
			// 引継元オプションサービス契約番号取得
			String hikiMotoOpSvcKeiNo = (String)opSvcKei.get("op_svc_kei_no");
			
			// ========================================================== //
			// 引継元オプションサービス契約情報取得                       //
			// ========================================================== //
			HashMap<String, Object> infoMap = getOpSvcKeiInfo(handle, param, hikiMotoOpSvcKeiNo);
			
			// 引継元：オプションサービス契約一意照会
			retHikiMotoEKK0351A010 = (CAANMsg[])infoMap.get(MAP_KEY_OP_SVC);
			
			// 引継元オプションサービスコード
			HkmtOpSvcCd = (String)retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_CD);
			
			//引継元オプションサービスコードがB131(インターネットサギウォール)またはB132(ノートンファミリープレミア)またはB021(リモートサポートプラス)であるか判定
			if (HkmtOpSvcCd.equals("B131")) {
				inetsgwlTgFlg = "1";
			} else if (HkmtOpSvcCd.equals("B132")) {
				ntfmlprmTgFlg = "1";
			// ANK-4577-00-00 ADD START
			} else if (HkmtOpSvcCd.equals("B021")) {
				rmtsprtTgFlg = "1";
			// ANK-4577-00-00 ADD END
			}
		}
		
		// 非課金フラグ
		String sagiHikakinFlg = "0";
		String nortonHikakinFlg = "0";
		
		//インターネットサギウォールまたはノートンファミリープレミアが存在するとき以下を実行する。
		//ANK-3149-08-00 MOD START
		//if( "1".equals(inetsgwlTgFlg) || "1".equals(ntfmlprmTgFlg) ){
		//ANK-4577-00-00 MOD START
		//if( "1".equals(inetsgwlTgFlg) || "1".equals(ntfmlprmTgFlg) || secuPackFlg.equals("1")){
		if( "1".equals(inetsgwlTgFlg) || "1".equals(ntfmlprmTgFlg) || secuPackFlg.equals("1")
				|| "1".equals(rmtsprtTgFlg)){
		//ANK-4577-00-00 MOD END
		//ANK-3149-08-00 MOD END
			// 引継元オプションサービス契約ステータス
			String HkmtOpSvcStat = "";
			
			// 引継元オプションサービス契約ステータス(インターネットサギウォール)
			String HkmtSagiOpSvcStat = "";
			// 引継元オプションサービス契約ステータス(ノートンファミリープレミア)
			String HkmtNortonOpSvcStat = "";
			
			// 適用年月日取得
			String aplyYmd = getAplyYmd(workMap);
			HashMap<String, Object> inMap = new HashMap<String, Object>();
			// サービス終了年月日
			String svcEndYmd = aplyYmd;		// 適用年月日
			// サービス課金終了年月日（適用日−１日）
			String svcChrgEndYmd = addYYYYMMDD(aplyYmd, -1);
			inMap.put("svc_chrg_endymd", svcChrgEndYmd);	// サービス課金終了年月日
			inMap.put("svc_endymd",      svcEndYmd);		// サービス終了年月日
			
			// 引継元のオプション数分以下を行う
			for(int opIdx = 0; opIdx < opSvcKeiList.size(); opIdx++){
				// オプションサービスコードがB131(インターネットサギウォール)とB132(ノートンファミリープレミア)の
				// オプションサービス契約ステータスを取得。
				Map<String, Object> opSvcKei = opSvcKeiList.get(opIdx);
				
				// 引継元オプションサービス契約番号取得
				String hikiMotoOpSvcKeiNo = (String)opSvcKei.get("op_svc_kei_no");
				
				// ========================================================== //
				// 引継元オプションサービス契約情報取得                       //
				// ========================================================== //
				HashMap<String, Object> infoMap = getOpSvcKeiInfo(handle, param, hikiMotoOpSvcKeiNo);
				
				// 引継元：オプションサービス契約一意照会
				retHikiMotoEKK0351A010 = (CAANMsg[])infoMap.get(MAP_KEY_OP_SVC);
				
				// 引継元オプションサービス契約ステータス
				HkmtOpSvcStat = (String)retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
				// 引継元オプションサービスコード
				HkmtOpSvcCd = (String)retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_CD);
				// 引継元のオプションサービス契約ステータスが照査済、締結済、サービス提供中の場合に課金非課金判定を行う
				if(SVC_KEI_STAT_020.equals(HkmtOpSvcStat) || SVC_KEI_STAT_030.equals(HkmtOpSvcStat) || SVC_KEI_STAT_100.equals(HkmtOpSvcStat)){
					// 引継元のオプションサービス契約ステータスを取得
					if(HkmtOpSvcCd.equals(OP_SVC_CD_SAGIWALL)){
						HkmtSagiOpSvcStat = (String)retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
					}
					else if(HkmtOpSvcCd.equals(OP_SVC_CD_NORTON)){
						HkmtNortonOpSvcStat = (String)retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
					}
					
					// ******************************************************* //
					// 非課金判定部品実行処理＜オプション＞                    //
					// ******************************************************* //
					// ※「解約時課金フラグ」について
					// 　　オプション、サブオプションごとに非課金判定部品を実行し、
					// 　　各々の解約時課金フラグを設定する。
					HashMap<String, Object> jdgHiChrgMapOpSvcKei =
						runHiChrgJdgUtil(
								handle,
								param,
								inMap,
								retHikiMotoEKK0081A010[0],
								null,
								retHikiMotoEKK0351A010[0],
								null,
								DSL_SBT_FLG_OP_SVC_KEI_DSL
						);
					// 課金フラグ(1：課金、0：非課金)
					String ChrgFlg = "0";
					
					if(!SVC_KEI_STAT_020.equals(HkmtOpSvcStat)){
						if(jdgHiChrgMapOpSvcKei != null){
							ChrgFlg = (String)jdgHiChrgMapOpSvcKei.get("chrgFlg");
						}
					}
					
					// インターネットサギウォールとノートンファミリープレミアの非課金フラグを設定(1：課金、2：非課金)
					//IT1-2017-0000043 MOD START
					//if("0" == ChrgFlg)
					if("0".equals(ChrgFlg))
					//IT1-2017-0000043 MOD END
					{
						if(HkmtOpSvcCd.equals(OP_SVC_CD_SAGIWALL)){
							sagiHikakinFlg = "2";
						}
						if(HkmtOpSvcCd.equals(OP_SVC_CD_NORTON)){
							nortonHikakinFlg = "2";
						}
					}else{
						if(HkmtOpSvcCd.equals(OP_SVC_CD_SAGIWALL)){
							sagiHikakinFlg = "1";
						}
						if(HkmtOpSvcCd.equals(OP_SVC_CD_NORTON)){
							nortonHikakinFlg = "1";
						}
					}
				}
			}
			
			String HikiSakiSvcStat = (String)retHikiSakiEKK0081A010[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
			//引継先のサービス契約ステータスが照査済、締結済、サービス提供中のいずれかであり、
			//かつ引継元のインターネットサギウォールまたはノートンファミリープレミアのオプションサービス契約ステータスが
			//照査済、締結済、サービス提供中である場合以下を実行する。
			//ANK-3149-08-00 MOD START
			//if( (HikiSakiSvcStat.equals(SVC_KEI_STAT_020) || HikiSakiSvcStat.equals(SVC_KEI_STAT_030) || HikiSakiSvcStat.equals(SVC_KEI_STAT_100) )
			//&& (HkmtSagiOpSvcStat.equals(SVC_KEI_STAT_020) || HkmtSagiOpSvcStat.equals(SVC_KEI_STAT_030) ||HkmtSagiOpSvcStat.equals(SVC_KEI_STAT_100) ) 
			//	|| (HkmtNortonOpSvcStat.equals(SVC_KEI_STAT_020) || HkmtNortonOpSvcStat.equals(SVC_KEI_STAT_030) ||HkmtNortonOpSvcStat.equals(SVC_KEI_STAT_100) ) ){
			//IT1-2017-0000043 MOD START
			//if( (HikiSakiSvcStat.equals(SVC_KEI_STAT_020) || HikiSakiSvcStat.equals(SVC_KEI_STAT_030) || HikiSakiSvcStat.equals(SVC_KEI_STAT_100) )
			//&& (HkmtSagiOpSvcStat.equals(SVC_KEI_STAT_020) || HkmtSagiOpSvcStat.equals(SVC_KEI_STAT_030) ||HkmtSagiOpSvcStat.equals(SVC_KEI_STAT_100) ) 
			//	|| (HkmtNortonOpSvcStat.equals(SVC_KEI_STAT_020) || HkmtNortonOpSvcStat.equals(SVC_KEI_STAT_030) ||HkmtNortonOpSvcStat.equals(SVC_KEI_STAT_100) ) ){
			// ANK-4577-00-00 MOD START
			//if( secuPackFlg.equals("1") || ( (HikiSakiSvcStat.equals(SVC_KEI_STAT_020) || HikiSakiSvcStat.equals(SVC_KEI_STAT_030) || HikiSakiSvcStat.equals(SVC_KEI_STAT_100) )
			//	&& ( (HkmtSagiOpSvcStat.equals(SVC_KEI_STAT_020) || HkmtSagiOpSvcStat.equals(SVC_KEI_STAT_030) || HkmtSagiOpSvcStat.equals(SVC_KEI_STAT_100)) 
			//	|| (HkmtNortonOpSvcStat.equals(SVC_KEI_STAT_020) || HkmtNortonOpSvcStat.equals(SVC_KEI_STAT_030) || HkmtNortonOpSvcStat.equals(SVC_KEI_STAT_100)) ) ) ){
			if( secuPackFlg.equals("1") || rmtsprtTgFlg.equals("1")
					|| ( (HikiSakiSvcStat.equals(SVC_KEI_STAT_020) || HikiSakiSvcStat.equals(SVC_KEI_STAT_030) || HikiSakiSvcStat.equals(SVC_KEI_STAT_100) )
					&& ( (HkmtSagiOpSvcStat.equals(SVC_KEI_STAT_020) || HkmtSagiOpSvcStat.equals(SVC_KEI_STAT_030) || HkmtSagiOpSvcStat.equals(SVC_KEI_STAT_100)) 
					|| (HkmtNortonOpSvcStat.equals(SVC_KEI_STAT_020) || HkmtNortonOpSvcStat.equals(SVC_KEI_STAT_030) || HkmtNortonOpSvcStat.equals(SVC_KEI_STAT_100)) ) ) ){
			// ANK-4577-00-00 MOD END
			//IT1-2017-0000043 MOD END
			//ANK-3149-08-00 MOD END
				// ========================================================== //
				// JKKSecurityPackOperateCCの処理                             //
				// ========================================================== //
				// オプションサービスコードがB131(インターネットサギウォール)とB132(ノートンファミリープレミア)、B021(リモートサポートプラス)の
				// オプションに対して引継処理を行う。
				
				HashMap<String, Object> seqpackTrgtData = new HashMap<String, Object>();
				//機能コード
				seqpackTrgtData.put(JKKSecurityPackOperateCC.KEY_FUNC_CD, "1");
				//引継有無
				seqpackTrgtData.put(JKKSecurityPackOperateCC.KEY_HIKITUGI_UM,"1");
				//異動区分
				seqpackTrgtData.put(JKKSecurityPackOperateCC.KEY_IDO_DIV,getIdoDiv(workMap));
				//登録用情報リスト
				ArrayList list1 = new ArrayList();
				HashMap childMap1 = new HashMap();
				
				//SYSID(先)
				childMap1.put(JKKSecurityPackOperateCC.KEY_SYSID_ADD,(String)retHikiSakiEKK0081A010[0].getString(EKK0081A010CBSMsg1List.SYSID));
				//サービス契約番号(先)
				childMap1.put(JKKSecurityPackOperateCC.KEY_SVC_KEI_NO_ADD,(String)retHikiSakiEKK0081A010[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
				//申込明細番号(先)
				childMap1.put(JKKSecurityPackOperateCC.KEY_MSKM_DTL_NO_ADD,mskmDtlNo);
				//更新年月日時分秒（サービス契約）(先)
				childMap1.put(JKKSecurityPackOperateCC.KEY_UPD_DTM_BF_ADD,(String)retHikiSakiEKK0081A010[0].getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM));
				//セキュリティーパック対象フラグ
				//ANK-3149-08-00 MOD START
				//childMap1.put(JKKSecurityPackOperateCC.KEY_SECURITY_PACK_TG_FLG_ADD,"0");
				childMap1.put(JKKSecurityPackOperateCC.KEY_SECURITY_PACK_TG_FLG_ADD, secuPackFlg);
				//ANK-3149-08-00 MOD END
				//プレミアムパック対象フラグ
				childMap1.put(JKKSecurityPackOperateCC.KEY_PREMIUM_PACK_TG_FLG_ADD,"0");
				//インターネットサギウォール対象フラグ(1:有　0:無)
				//インターネットサギウォール利用開始希望日
				if("1".equals(inetsgwlTgFlg)){
					childMap1.put(JKKSecurityPackOperateCC.KEY_INETSGWL_TG_FLG_ADD, "1");
					childMap1.put(JKKSecurityPackOperateCC.KEY_INETSGWL_START_YMD_ADD,getAplyYmd(workMap));
				}else{
					childMap1.put(JKKSecurityPackOperateCC.KEY_INETSGWL_TG_FLG_ADD,"0");
					childMap1.put(JKKSecurityPackOperateCC.KEY_INETSGWL_START_YMD_ADD,null);
				}
				//ノートンファミリープレミア対象フラグ
				//ノートンファミリープレミア利用開始希望日
				if("1".equals(ntfmlprmTgFlg)){
					childMap1.put(JKKSecurityPackOperateCC.KEY_NTFMLPRM_TG_FLG_ADD, "1");
					childMap1.put(JKKSecurityPackOperateCC.KEY_NTFMLPRM_START_YMD_ADD,getAplyYmd(workMap));
				}else{
					childMap1.put(JKKSecurityPackOperateCC.KEY_NTFMLPRM_TG_FLG_ADD,"0");
					childMap1.put(JKKSecurityPackOperateCC.KEY_NTFMLPRM_START_YMD_ADD,null);
				}
				// ANK-4577-00-00 ADD START
				//リモートサポートプラス対象フラグ(1:有　0:無)
				childMap1.put(JKKSecurityPackOperateCC.KEY_RMTSPRT_TG_FLG_ADD, rmtsprtTgFlg);
				// ANK-4577-00-00 ADD END
				
				list1.add(childMap1);
				seqpackTrgtData.put(JKKSecurityPackOperateCC.KEY_ADD_INFO_LIST, list1);
				
				//解約用情報リスト
				ArrayList list2 = new ArrayList();
				HashMap childMap2 = new HashMap();
				//SYSID(元)
				childMap2.put(JKKSecurityPackOperateCC.KEY_SYSID_CANCEL,(String)retHikiMotoEKK0081A010[0].getString(EKK0081A010CBSMsg1List.SYSID));
				//サービス契約番号(元)
				childMap2.put(JKKSecurityPackOperateCC.KEY_SVC_KEI_NO_CANCEL,(String)retHikiMotoEKK0081A010[0].getString(EKK0081A010CBSMsg1List.SVC_KEI_NO));
				//申込明細番号(元)
				// IT1-2017-0000043 MOD START
				//childMap2.put(JKKSecurityPackOperateCC.KEY_MSKM_DTL_NO_CANCEL,(String)retHikiMotoEKK0081A010[0].getString(EKK0081A010CBSMsg1List.MSKM_DTL_NO));
				childMap2.put(JKKSecurityPackOperateCC.KEY_MSKM_DTL_NO_CANCEL,mskmDtlNo);
				// IT1-2017-0000043 MOD END
				//更新年月日時分秒（サービス契約）(元)
				childMap2.put(JKKSecurityPackOperateCC.KEY_UPD_DTM_BF_CANCEL,(String)retHikiMotoEKK0081A010[0].getString(EKK0081A010CBSMsg1List.LAST_UPD_DTM));
				//セキュリティーパック対象フラグ
				//ANK-3149-08-00 MOD START
				//childMap2.put(JKKSecurityPackOperateCC.KEY_SECURITY_PACK_TG_FLG_CANCEL,"0");
				childMap2.put(JKKSecurityPackOperateCC.KEY_SECURITY_PACK_TG_FLG_CANCEL, secuPackFlg);
				//ANK-3149-08-00 MOD END
				//セキュリティーパック課金非課金コード
				childMap2.put(JKKSecurityPackOperateCC.KEY_SECURITY_PACK_CHRG_HICHRG_CD_CANCEL,"");
				//プレミアムパック対象フラグ
				childMap2.put(JKKSecurityPackOperateCC.KEY_PREMIUM_PACK_TG_FLG_CANCEL,"0");
				//プレミアムパック課金非課金コード
				childMap2.put(JKKSecurityPackOperateCC.KEY_PREMIUM_PACK_CHRG_HICHRG_CD_CANCEL,"");
				
				//インターネットサギウォール対象フラグ(1:有　0:無)
				//インターネットサギウォール課金非課金コード(1:課金　2:非課金)
				if("1".equals(inetsgwlTgFlg)){
					childMap2.put(JKKSecurityPackOperateCC.KEY_INETSGWL_TG_FLG_CANCEL,"1");
					childMap2.put(JKKSecurityPackOperateCC.KEY_INETSGWL_CHRG_HICHRG_CD_CANCEL, sagiHikakinFlg);
				}else{
					childMap2.put(JKKSecurityPackOperateCC.KEY_INETSGWL_TG_FLG_CANCEL,"0");
					childMap2.put(JKKSecurityPackOperateCC.KEY_INETSGWL_CHRG_HICHRG_CD_CANCEL, "");
				}
				//ノートンファミリープレミア対象フラグ(1:有　0:無)
				//ノートンファミリープレミア課金非課金コード(1:課金　2:非課金)
				if("1".equals(ntfmlprmTgFlg)){
					childMap2.put(JKKSecurityPackOperateCC.KEY_NTFMLPRM_TG_FLG_CANCEL, "1");
					childMap2.put(JKKSecurityPackOperateCC.KEY_NTFMLPRM_CHRG_HICHRG_CD_CANCEL, nortonHikakinFlg);
				}else{
					childMap2.put(JKKSecurityPackOperateCC.KEY_NTFMLPRM_TG_FLG_CANCEL, "0");
					childMap2.put(JKKSecurityPackOperateCC.KEY_NTFMLPRM_CHRG_HICHRG_CD_CANCEL, "");
				}
				// ANK-4577-00-00 ADD START
				//リモートサポートプラス対象フラグ(1:有　0:無)
				childMap2.put(JKKSecurityPackOperateCC.KEY_RMTSPRT_TG_FLG_CANCEL, rmtsprtTgFlg);
				// ANK-4577-00-00 ADD END
				
				list2.add(childMap2);
				seqpackTrgtData.put(JKKSecurityPackOperateCC.KEY_CANCEL_INFO_LIST,list2);
				
				param.setData("seqpackTrgtData", seqpackTrgtData);
				
				// JKKSecurityPackOperateCC呼出
				JKKSecurityPackOperateCC seqpackcc = new JKKSecurityPackOperateCC();
				seqpackcc.execute(handle, param, "seqpackTrgtData");
				
				// ユーザデータ取得
				Map<String, Object> UserData = (HashMap<String, Object>)param.getData("seqpackTrgtData");
				
				// 排他用更新日時時分秒をセット
				ArrayList list3 = new ArrayList();
				list3 = (ArrayList)UserData.get(JKKSecurityPackOperateCC.KEY_CANCEL_INFO_LIST);
				HashMap childMap = (HashMap)list3.get(0);
				motoLastUpdDtm = (String)childMap.get("upd_dtm_af");
				ArrayList list4 = new ArrayList();
				list4 = (ArrayList)UserData.get(JKKSecurityPackOperateCC.KEY_ADD_INFO_LIST);
				HashMap childMap4 = (HashMap)list4.get(0);
				sakiLastUpdDtm = (String)childMap4.get("upd_dtm_af");
			}
		}
		// ANK-3149-00-00 ADD END
		//20131110 OM-2013-0003488 ADD START
		// 引継元SYSID取得
		String hikiMotoSysid = getHikiMotoSysid(workMap);
		// 引継先SYSID取得
		String hikiSakiSysid = getHikiSakiSysid(workMap);
		//20131110 OM-2013-0003488 ADD END
		// 引継先に対し、指定されたオプション数分以下を行う
		for(int opIdx = 0; opIdx < opSvcKeiList.size(); opIdx++)
		{
			Map<String, Object> opSvcKei = opSvcKeiList.get(opIdx);

			// 引継元オプションサービス契約番号取得
			String hikiMotoOpSvcKeiNo = (String)opSvcKei.get("op_svc_kei_no");
			setHikiMotoOpSvcKeiNo(workMap, hikiMotoOpSvcKeiNo);

			// ========================================================== //
			// 引継元オプションサービス契約情報取得                       //
			// ========================================================== //
			HashMap<String, Object> infoMap = getOpSvcKeiInfo(handle, param, hikiMotoOpSvcKeiNo);

			// 引継元：オプションサービス契約一意照会
			retHikiMotoEKK0351A010 = (CAANMsg[])infoMap.get(MAP_KEY_OP_SVC);
			// 引継元：オプションサービス契約＜ISP＞一意照会
			retHikiMotoEKK0361A010 = (CAANMsg[])infoMap.get(MAP_KEY_OP_SVC_ISP);
			// 引継元：サブオプションサービス契約一覧照会
			retHikiMotoEKK0401B001 = (CAANMsg[])infoMap.get(MAP_KEY_SBOP_SVC);

			// 引継元オプションサービス契約ステータス取得
			String hikiMotoOpSvcKeiStat = retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
			setHikiMotoOpSvcKeiStat(workMap, hikiMotoOpSvcKeiNo, hikiMotoOpSvcKeiStat);
			// 引継元オプションサービスコード取得
			String hikiMotoOpSvcCd = retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_CD);
			setHikiMotoOpSvcCd(workMap, hikiMotoOpSvcKeiNo, hikiMotoOpSvcCd);

			String hikiSakiOpSvcKeiNo   = null;		// 引継先オプションサービス契約番号

			// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 DEL START ▼▼▼▼▼
//			String hikiSakiGeneAddDtm   = null;		// 引継先オプションサービス契約世代登録年月日
			// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 DEL E N D ▲▲▲▲▲

			// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
//			String[] hikiSakiSbOpSvcKeiNo = new String[retHikiMotoEKK0401B001.length];
//			String[] hikiSakiSbOpSvcCd    = new String[retHikiMotoEKK0401B001.length];
			List hikiSakiSbOpSvcKeiNoList = new ArrayList<String>();
			List hikiSakiSbOpSvcCdList    = new ArrayList<String>();
			// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END

			// ANK-3149-00-00 ADD START
			// ANK-4577-00-00 MOD START
			//インターネットサギウォールとノートンファミリープレミア、リモートサポートプラスの場合は処理しない
//			if( OP_SVC_CD_SAGIWALL.equals(hikiMotoOpSvcCd) || OP_SVC_CD_NORTON.equals(hikiMotoOpSvcCd) ){
//				
//			}
			if( OP_SVC_CD_SAGIWALL.equals(hikiMotoOpSvcCd) || OP_SVC_CD_NORTON.equals(hikiMotoOpSvcCd) 
					|| JKKStrConst.OP_SVC_CD_RMTSPRT_PLUS.equals(hikiMotoOpSvcCd) ){
				
			}
			// ANK-4577-00-00 MOD END
			else{
			// ANK-3149-00-00 ADD END
				// ========================================================== //
				// 引継元オプション解約処理                                   //
				// ========================================================== //
				// 引継元：オプションサービス契約キャンセル・解約
				opSvkeiSodInfo = dslOption(
						handle,
						param,
						retHikiMotoEKK0081A010,
						retHikiMotoEKK0351A010,
						retHikiMotoEKK0361A010,
						retHikiMotoEKK0401B001,
						mskmDtlNo,
						true,						// 引継元解約
						AGING_EXEC_KBN_KIHK,		// エイジング回復
						opSvkeiSodInfo,
						workMap
				);
	
				// Ｍｙホームページのみ、解約されると
				// 新しいＭｙホームページオプションを作成する
				if(OP_SVC_CD_MYHOMEPAGE.equals(hikiMotoOpSvcCd))
				{
					addMyHomePage(
							handle,
							param,
							retHikiMotoEKK0081A010,
							retHikiMotoEKK0351A010,
							retHikiMotoEKK0361A010,
							retHikiMotoMyHpEKK0361B001,
							hikiMotoSeikyKeiNo,
							mskmDtlNo,
							workMap,
							hikiMotoOpSvcKeiNo           // OM-2014-0001247 2014/04/02 add
					);
				}
	
				// ========================================================== //
				// 引継先オプション解約処理                                   //
				// ========================================================== //
				if(OP_SVC_CD_EMAIL.equals(hikiMotoOpSvcCd))
				{
					if (opSvcKeiB001Index < hikiSakiOpSvcKeiListB001.size())
					{
						// 引継先解約
						hikisakiDslOption(handle, param, retHikiSakiEKK0081A010, hikiSakiOpSvcKeiListB001.get(opSvcKeiB001Index), mskmDtlNo, opSvkeiSodInfo, workMap);
						opSvcKeiB001Index++;
					}
				}
				else if(OP_SVC_CD_MYHOMEPAGE.equals(hikiMotoOpSvcCd))
				{
					if (opSvcKeiB002Index < hikiSakiOpSvcKeiListB002.size())
					{
						// 引継先解約
						hikisakiDslOption(handle, param, retHikiSakiEKK0081A010, hikiSakiOpSvcKeiListB002.get(opSvcKeiB002Index), mskmDtlNo, opSvkeiSodInfo, workMap);
	
						// ▼▼▼▼▼ 2013/08/20 UPD START ▼▼▼▼▼
						// 引継先解約オプションサービス契約ステータス取得
						String hikiSakiDslOpSvcKeiStat = hikiSakiOpSvcKeiStatListB002.get(opSvcKeiB002Index);
	
						// ステータスが「受付済」以外の場合
						if (! SVC_KEI_STAT_010.equals(hikiSakiDslOpSvcKeiStat))
						{
							// 指示書用にオプションサービス契約番号を保持
							hikiSakiDslOpSvcKeiB002Sjisho.add(hikiSakiOpSvcKeiListB002.get(opSvcKeiB002Index));
						}
						// ▲▲▲▲▲ 2013/08/20 UPD E N D ▲▲▲▲▲
	
						opSvcKeiB002Index++;
					}
				}
	
				// ========================================================== //
				// 引継先オプション登録処理                                   //
				// ========================================================== //
				// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
	//			addOption(
				List<Map<String, Object>> addSodList = addOption(
				// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
						handle,
						param,
						retHikiMotoEKK0351A010,
						retHikiMotoEKK0361A010,
						retHikiMotoEKK0401B001,
						hikiSakiSeikyKeiNo,
						mskmDtlNo,
						hikiMotoOpSvcKeiNo,
						famiPackAri,
						opSvkeiSodInfo,
						// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
	//					hikiSakiSbOpSvcKeiNo,
	//					hikiSakiSbOpSvcCd,
						hikiSakiSbOpSvcKeiNoList,
						hikiSakiSbOpSvcCdList,
						// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
						sodCcInputList,
						workMap
				);

				// 新規オプションサービス契約番号取得
				hikiSakiOpSvcKeiNo = getHikiSakiOpSvcKeiNo(workMap, hikiMotoOpSvcKeiNo);
	
				// ▼▼▼▼▼ 2013/08/20 UPD START ▼▼▼▼▼
				if(OP_SVC_CD_EMAIL.equals(hikiMotoOpSvcCd))
				{
					// Ｅメールのオプションサービス契約番号を保持
					if (! SVC_KEI_STAT_010.equals(hikiMotoOpSvcKeiStat))
					{
						hikiMotoOpSvcKeiB001Sjisho.add(hikiMotoOpSvcKeiNo);
					}
					// ※引継先に関しては、サービス契約ステータスを参照
					//   作成時点では「受付済」にしかならないため。
					if(! SVC_KEI_STAT_010.equals(hikiSakiSvcKeiStat))
					{
						hikiSakiOpSvcKeiB001Sjisho.add(hikiSakiOpSvcKeiNo);
					}
				}
				else if(OP_SVC_CD_MYHOMEPAGE.equals(hikiMotoOpSvcCd))
				{
					// マイホームページのオプションサービス契約番号を保持
					if (! SVC_KEI_STAT_010.equals(hikiMotoOpSvcKeiStat))
					{
						hikiMotoOpSvcKeiB002Sjisho.add(hikiMotoOpSvcKeiNo);
					}
					// ※引継先に関しては、サービス契約ステータスを参照
					//   作成時点では「受付済」にしかならないため。
					if(! SVC_KEI_STAT_010.equals(hikiSakiSvcKeiStat))
					{
						hikiSakiOpSvcKeiB002Sjisho.add(hikiSakiOpSvcKeiNo);
					}
				}
				// ▲▲▲▲▲ 2013/08/20 UPD E N D ▲▲▲▲▲
	
				//20131110 OM-2013-0003488 ADD START
				// オプトインメール受信設定
				if (hikiMotoSysid.equals(hikiSakiSysid))
				{
					// 引継元と引継先が同一SYSIDであれば引継先の無効化されているオプトインメール受信設定を回復
					kaihkOptinm(handle, param, this.fixedText, retHikiMotoEKK0351A010, retHikiMotoEKK0361A010, workMap);
				} else {
					// 引継元と引継先が異なるSYSIDであればオプトインメール受信設定を新規登録
					addOptinm(handle, param, this.fixedText, retHikiMotoEKK0351A010, retHikiMotoEKK0361A010, workMap);
					// 引継元と引継先が異なるSYSIDであれば引継元の有効なオプトインメール受信設定を無効化
					dslOptinm(handle, param, this.fixedText, retHikiMotoEKK0351A010, retHikiMotoEKK0361A010, workMap);
				}
				//20131110 OM-2013-0003488 ADD END
	
				// 20130810 オーダ設定登録処理を追加 ADD START
				addOdrSet(handle, param, workMap, hikiSakiSvcKeiNo, hikiSakiOpSvcKeiNo, hikiMotoOpSvcCd, retHikiMotoEKK0361A010[0].getString(EKK0361A010CBSMsg1List.MLAD));
				// 20130810 オーダ設定登録処理を追加 ADD END
	
				boolean sodParamFlg = false;
				// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
				// addOptionメソッドでファミリーパックに付随するウイルスチェックを含めたサブオプション情報を設定するため、再検索、配列の再作成は不要
	//			// OM-2014-0000703 2014/03/07 ADD START
	//			// ファミリーパックが保持かつ元々hikiSakiSbOpSvcKeiNo[]が空の場合
	//			if (famiPackAri && hikiSakiSbOpSvcKeiNo.length == 0 && hikiSakiSbOpSvcCd.length ==0) {
	//				// 再度サブオプションの検索を行う
	//				inputMap = new HashMap<String, Object>();
	//				inputMap.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
	//				inputMap.put(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO, hikiSakiOpSvcKeiNo);
	//				retMsgs = (CAANMsg[])runSc(handle, param, EKK0401B001, inputMap);
	//				
	//				// ウィルスチェックのサブオプション情報をここで初期化する
	//				hikiSakiSbOpSvcKeiNo = new String[retMsgs.length]; 
	//				hikiSakiSbOpSvcCd    = new String[retMsgs.length];
	//				
	//				for(int i=0; i<retMsgs.length; i++)
	//				{
	//					String sbopSvcKeiNo = retMsgs[i].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO);
	//					String sbopSvcCd = retMsgs[i].getString(EKK0401B001CBSMsg1List.SBOP_SVC_CD);
	//					String sbopSvcKeiStat = retMsgs[i].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
	//					// ウィルスチェック確定できた場合、再度代入
	//					if(SBOP_SVC_CD_MAIL_VIRUS_CHK.equals(sbopSvcCd) && SVC_KEI_STAT_010.equals(sbopSvcKeiStat))
	//					{
	//						// 引継先サブオプションサービス契約番号
	//						hikiSakiSbOpSvcKeiNo[i] = sbopSvcKeiNo;
	//						// 引継先サブオプションサービスコード
	//						hikiSakiSbOpSvcCd[i]    = sbopSvcCd;
	//					}
	//				}
	//				
	//			}
	//			else if (famiPackAri && hikiSakiSbOpSvcKeiNo.length != 0 && hikiSakiSbOpSvcCd.length !=0) {
	//				// 他のサブオプションが存在する可能性があるため検索
	//				boolean ulsCheckNotFund = true ;
	//				
	//				for (int i = 0 ; i < hikiSakiSbOpSvcKeiNo.length ; i ++) {
	//					String sbopSvcKeiNo = hikiSakiSbOpSvcKeiNo[i];
	//					String sbopSvcCd = hikiSakiSbOpSvcCd[i];
	//					// ウィルスチェックが存在しないことを確認
	//					if ("D03".equals(sbopSvcCd)) {
	//						ulsCheckNotFund = false;
	//					}
	//				}
	//				
	//				// 他のサブオプションが存在しているが、ウィルスチェックが存在しない場合
	//				if (ulsCheckNotFund) {
	//					// 再度サブオプションの検索を行う
	//					inputMap = new HashMap<String, Object>();
	//					inputMap.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
	//					inputMap.put(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO, hikiSakiOpSvcKeiNo);
	//					retMsgs = (CAANMsg[])runSc(handle, param, EKK0401B001, inputMap);
	//					
	//					String[] hikiSakiSbOpSvcKeiNo2 = new String[hikiSakiSbOpSvcKeiNo.length+retMsgs.length];
	//					String[] hikiSakiSbOpSvcCd2 = new String[hikiSakiSbOpSvcKeiNo.length+retMsgs.length];
	//					
	//					if (retMsgs.length > 0) {
	//						// コピー
	//						for (int i = 0 ; i < hikiSakiSbOpSvcKeiNo2.length ; i ++) {
	//							if (i <= hikiSakiSbOpSvcKeiNo.length-1) {
	//								hikiSakiSbOpSvcKeiNo2[i] = hikiSakiSbOpSvcKeiNo[i];
	//								hikiSakiSbOpSvcCd2[i] = hikiSakiSbOpSvcCd[i];
	//							// 元の並列を超えたとき、追加したウィルスチックを挿入する
	//							}
	//							else if (i > hikiSakiSbOpSvcKeiNo.length-1) {
	//								for(int a=0; a<retMsgs.length; a++)
	//								{
	//									String sbopSvcKeiNo = retMsgs[a].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO);
	//									String sbopSvcCd = retMsgs[a].getString(EKK0401B001CBSMsg1List.SBOP_SVC_CD);
	//									String sbopSvcKeiStat = retMsgs[a].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
	//									// ウィルスチェック確定できた場合、再度代入
	//									if(SBOP_SVC_CD_MAIL_VIRUS_CHK.equals(sbopSvcCd) && SVC_KEI_STAT_010.equals(sbopSvcKeiStat))
	//									{
	//										// 引継先サブオプションサービス契約番号
	//										hikiSakiSbOpSvcKeiNo2[i+a] = sbopSvcKeiNo;
	//										// 引継先サブオプションサービスコード
	//										hikiSakiSbOpSvcCd2[i+a]    = sbopSvcCd;
	//									}
	//								}
	//								break;
	//							}
	//						}
	//						
	//						// 元の配列を初期化
	//						hikiSakiSbOpSvcKeiNo =  new String[hikiSakiSbOpSvcKeiNo.length+retMsgs.length];
	//						hikiSakiSbOpSvcCd =  new String[hikiSakiSbOpSvcCd.length+retMsgs.length];
	//						
	//						// 再度コピーで挿入
	//						for (int i = 0 ; i < hikiSakiSbOpSvcKeiNo.length ; i ++) {
	//							hikiSakiSbOpSvcKeiNo[i] = hikiSakiSbOpSvcKeiNo2[i];
	//							hikiSakiSbOpSvcCd[i] = hikiSakiSbOpSvcKeiNo2[i];
	//						}
	//					}
	//				}
	//			}
	//			// OM-2014-0000703 2014/03/07 ADD END
	
				// Listから配列に変換
				String[] hikiSakiSbOpSvcKeiNo = (String[])hikiSakiSbOpSvcKeiNoList.toArray(new String[0]);
				String[] hikiSakiSbOpSvcCd = (String[])hikiSakiSbOpSvcCdList.toArray(new String[0]);
				// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
	
				// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 UPD START ▼▼▼▼▼
				// ========================================================== //
				// オプションサービス契約ステータスアップ                     //
				// ========================================================== //
				sodParamFlg = opSvcKeiStatUp(
						handle,
						param,
						hikiMotoOpSvcKeiNo,
						retHikiMotoEKK0361A010,
						hikiSakiSbOpSvcKeiNo,
						hikiSakiSbOpSvcCd,
						famiPackAri,
						workMap
				);
				// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 UPD E N D ▲▲▲▲▲
	
				// ========================================================== //
				// オプションサービス契約開始処理                             //
				// ========================================================== //
				if(SVC_KEI_STAT_100.compareTo(hikiSakiSvcKeiStat) <= 0)
				{
					// オプションサービス契約＜ISP＞開始
					inputMap = this.mapper.editInMsgEKK0361C040(
							param,
							retHikiMotoEKK0361A010[0],
							hikiSakiOpSvcKeiNo,
							getIdoDiv(workMap),
							sakiLastUpdDtm
					);
	
					inputMap.put("op_hktgi_sk_svc_kei_no", hikiSakiSvcKeiNo);
	
					if (isSokujitsu)
					{
						inputMap.put("skj_ykgt", "01");
					}
					else
					{
						inputMap.put("skj_ykgt", "02");
					}
	
					retMsg = (CAANMsg)runSc(handle, param, EKK0361C040, inputMap);
	
					sakiLastUpdDtm     = retMsg.getString(EKK0361C040CBSMsg.UPD_DTM);
	
					// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 ADD START ▼▼▼▼▼
					String hikiSakiGeneAddDtm = retMsg.getString(EKK0361C040CBSMsg.KK0351_GENE_ADD_DTM);
	
					// 引継先オプションサービス契約世代登録年月日セット
					setHikiSakiOpSvKeiGeneAddDtm(workMap, hikiMotoOpSvcKeiNo, hikiSakiGeneAddDtm);
					// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 ADD E N D ▲▲▲▲▲
	
					for(int i = 0; i < hikiSakiSbOpSvcKeiNo.length; i++)
					{
						String sbOpSvcKeiNo = hikiSakiSbOpSvcKeiNo[i];
						String sbOpSvcCd    = hikiSakiSbOpSvcCd[i];
	
						if (sbOpSvcKeiNo == null || "".equals(sbOpSvcKeiNo))
						{
							continue;
						}
	// OM-2014-0000703 2014/03/07 DEL START
	//					// IT2-2012-0001485 2012/08/23 start
	//					// ファミリーパック有りの場合、ウィルスチェックの引継ぎ処理をしない（バッチで付くので）
	//					if (famiPackAri && SBOP_SVC_CD_MAIL_VIRUS_CHK.equals(sbOpSvcCd)
	//					)
	//					{
	//						continue;
	//					}
	//					// IT2-2012-0001485 2012/08/23 end
	// OM-2014-0000703 2014/03/07 DEL END
	
						// サブオプションサービス契約＜ISP＞使用開始
						inputMap = this.mapper.editInMsgEKK0411C050(param, hikiSakiOpSvcKeiNo, sbOpSvcKeiNo, sakiLastUpdDtm, getIdoDiv(workMap));
						inputMap.put("skj_ykgt", "01");
	
						retMsg = (CAANMsg)runSc(handle, param, EKK0411C050, inputMap);
	
						sakiLastUpdDtm = retMsg.getString("upd_dtm");
					}
	
					sodParamFlg = true;
				}
	
				// IT1-2013-0000004 2013/01/03 start
				if(sodParamFlg)
				{
					// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 UPD START ▼▼▼▼▼
					sodCcInputList = createSODParam(
							hikiMotoOpSvcKeiNo,
							opSvkeiSodInfo,
							// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
							addSodList,
							// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
							sodCcInputList,
							workMap
					);
					// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 UPD E N D ▲▲▲▲▲
				}
				// IT1-2013-0000004 2013/01/03 end
			// IT1-2017-0000094 ADD START
			}
			// IT1-2017-0000094 ADD END
		}
	
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
		// 住所変更時もサービスオーダ発行部品を使用するよう変更。ただし、サブオプションのみを処理対象とする。
		// オプションについては、住変用サービスオーダ発行部品により処理する（従来通り）。
//		if(!"00019".equals(getIdoDiv(workMap)))
//		{
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
		if (sodCcInputList.size() > 0)
		{
			// SOD対象データマップ
			HashMap<String, Object> sodTrgtData = new HashMap<String, Object>();
			sodTrgtData.put(SODCC_FIXED_TEXT, sodCcInputList);
			sodTrgtData.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
			param.setData("sodTrgtData", sodTrgtData);

			// SODCC呼出
			JKKHakkoSODCC sodcc = new JKKHakkoSODCC();
			sodcc.hakkoSOD(handle, param, "sodTrgtData");
		}
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
//		}
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
		
		
		if(hikiSakiOpSvcKeiB001Sjisho.size() > 0 || hikiSakiOpSvcKeiB002Sjisho.size() > 0)
		{
			// 指示書CC呼出
			sjishoCC(
					handle,
					param,
					hikiMotoOpSvcKeiB001Sjisho,
					hikiSakiOpSvcKeiB001Sjisho,
					hikiMotoOpSvcKeiB002Sjisho,
					hikiSakiOpSvcKeiB002Sjisho,
					hikiSakiDslOpSvcKeiB002Sjisho,
					workMap
			);
		}
		
// OM-2013-0005075対応 20131219 星野 ADD START
		// 異動区分「住所変更・登録」は工事依頼時にオプション引継ぎフラグを立てているので対象外
		if(!"00019".equals(getIdoDiv(workMap)))
		{
			if( retHikiSakiEKK0081A010 != null && retHikiSakiEKK0081A010.length > 0 ){
				String hikiSakiPrcGrpCd = retHikiSakiEKK0081A010[0].getString(EKK0081A010CBSMsg1List.PRC_GRP_CD);
				// 引継先サービスがモバイルの場合、工事がないので対象外
				if( !StringUtils.isEmpty(hikiSakiPrcGrpCd)
					&& !JKKSvcConst.PRC_GRP_CD_MOB_WIFI.equals(hikiSakiPrcGrpCd) 
					&& !JKKSvcConst.PRC_GRP_CD_MOB_EM.equals(hikiSakiPrcGrpCd)
					&& !JKKSvcConst.PRC_GRP_CD_MOB_UQ.equals(hikiSakiPrcGrpCd)
					&& !"16".equals(hikiSakiPrcGrpCd)
				){
					// 工事案件一覧照会（複合検索）
					inputMap = this.mapper.editInMsgEKU0011B030(param, getHikiSakiSvcKeiNo(workMap));

					CAANMsg[] retEKU0011B030 = (CAANMsg[])runSc(handle, param, EKU0011B030, inputMap);
					
					// 有効な工事が存在する場合、工事案件ＣＣを呼び出して諸変更SIFを実行
					// 工事案件のオプション引継ぎフラグを更新する
					if( retEKU0011B030 != null && retEKU0011B030.length > 0 ){
						
						// 申込明細一意照会
						inputMap = this.mapper.editInMsgEKK0021A010(param, mskmDtlNo);
						CAANMsg[] retEKK0021A010 = (CAANMsg[])runSc(handle, param, EKK0021A010, inputMap);
						if( retEKK0021A010 != null && retEKK0021A010.length > 0 ){
							
							String mskmNo = retEKK0021A010[0].getString(EKK0021A010CBSMsg1List.MSKM_NO);
							
							HashMap targetMap = createKojiakParam(param, workMap, hikiSakiSvcKeiNo, hikiSakiSysid, mskmNo, mskmDtlNo);
							param.setData("kojiakTrgtData", targetMap);
							// 工事案件ＣＣ実行
							JKKKojiAnkenCC kojiakCC = new JKKKojiAnkenCC();
							kojiakCC.executeKojiAnken(handle, param, "kojiakTrgtData");
						}
					}
				}
			}
		}
//OM-2013-0005075対応 20131219 星野 ADD END
		// IT1-2017-0000094 DEL START
//		// ANK-3149-00-00 ADD START
//		}
//		// ANK-3149-00-00 ADD END
		// IT1-2017-0000094 DEL END
	}

// OM-2013-0005075対応 20131219 星野 ADD START
	private HashMap createKojiakParam(
		IRequestParameterReadWrite param,
		HashMap<String, Object> workMap, 
		String hikiSakiSvcKeiNo,
		String hikiSakiSysid, 
		String mskmNo, 
		String mskmDtlNo
	) throws RequestParameterException 
	{
		HashMap targetMap = new HashMap<String, Object>();
		// 工事受付コード（内容変更）
		targetMap.put(JKKKojiAnkenConstCC.KOJI_UK_CD, "070");
		
		// 工事受付詳細コード（サービス内容変える）
		targetMap.put(JKKKojiAnkenConstCC.KOJI_UK_DTL_CD, "A2");
		
		// SYSID
		targetMap.put(JKKKojiAnkenConstCC.SYSID, hikiSakiSysid);
		
		// 申込番号
		targetMap.put(JKKKojiAnkenConstCC.MSKM_NO, mskmNo);
		
		// 申込明細番号
		targetMap.put(JKKKojiAnkenConstCC.MSKM_DTL_NO, mskmDtlNo);
		
		// サービス契約番号
		targetMap.put(JKKKojiAnkenConstCC.SVC_KEI_NO, hikiSakiSvcKeiNo);
	
		// 異動区分
		targetMap.put( JKKKojiAnkenConstCC.IDO_DIV, getIdoDiv(workMap) );
		
		return targetMap;
	}
//OM-2013-0005075対応 20131219 星野 ADD END

	//20131110 OM-2013-0003488 ADD START
	/**
	 * オプトインメール受信設定回復処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param retHikiMotoEKK0351A010 引継元：オプションサービス契約一意照会
	 * @param retHikiMotoEKK0361A010 引継元：オプションサービス契約＜ISP＞一意照会
	 * @param workMap (I) 作業用マップ
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private void kaihkOptinm(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, CAANMsg[] retHikiMotoEKK0351A010, CAANMsg[] retHikiMotoEKK0361A010, HashMap<String, Object> workMap) throws Exception
	{
		// オプションサービスコード取得
		String	op_svc_cd = retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_CD);
		
		// オプションサービスコードが"Ｅメール"で無い場合は処理しない
		if(!(OP_SVC_CD_EMAIL.equals(op_svc_cd)))
		{
			return;
		}
		
		// 運用年月日を取得
		opeDate = JCCBPCommon.getOpeDate(null);
// OM-2017-0000754 2017/08/21 DEL START
//		String unyoDtm = JCCBPCommon.getOpeDateTimeStamp(null);
//		String sysDtm = JCCBPCommon.getSysDateTimeStamp();
// OM-2017-0000754 2017/08/21 DEL END

		// 即日反映の場合にのみ実行
// OM-2017-0000754 2017/08/21 MOD START
//		if(!(unyoDtm.equals(sysDtm)))
		if(!isSokujitsu)
// OM-2017-0000754 2017/08/21 MOD END
		{
			return;
		}
		
		// メールアドレス
		String mlad = retHikiMotoEKK0361A010[0].getString(EKK0361A010CBSMsg1List.MLAD);
		// 引継先SYSIDを取得
		String hikiSakiSysid = getHikiSakiSysid(workMap);
		// オプトインメール受信設定一覧照会(SYSID)２(SYSIDとmladよりカレントを取得)
		HashMap<String, Object> eck0141B005_map = getECK0141B005Map(handle, param, fixedText, hikiSakiSysid, mlad);
		// 作業マップに退避
		workMap.put("eck0141B005_map", eck0141B005_map);
		
		// オプトインメール受信設定が登録されていない場合、登録を行う
		if(eck0141B005_map == null || eck0141B005_map.get("ECK0141B005CBSMsg1List") == null)
		{
			addOptinm(handle, param, fixedText, retHikiMotoEKK0351A010, retHikiMotoEKK0361A010, workMap);
			return;
		}
		
		ArrayList eck0141B005_list = (ArrayList)eck0141B005_map.get("ECK0141B005CBSMsg1List");
		HashMap<String, Object> eck0141B005_sub_map = null;
		String optinm_rcv_sette_stat = null;
		HashMap<String, Object> eck0011A010_map = null;
		for(int i = 0; i < eck0141B005_list.size(); i++)
		{
			eck0141B005_sub_map = (HashMap)eck0141B005_list.get(i);

			// オプトインメール受信設定一意照会
			HashMap<String, Object> eck0141A010_map = getECK0141A010Map(handle, param, fixedText, eck0141B005_sub_map, hikiSakiSysid, mlad);
			// 作業マップに退避
			workMap.put("eck0141A010_map", eck0141A010_map);
			
			if(null == eck0141A010_map || null == eck0141A010_map.get("optinm_rcv_sette_stat") || "".equals(eck0141A010_map.get("optinm_rcv_sette_stat")))
			{
				continue;
			}
			
			optinm_rcv_sette_stat = (String)eck0141A010_map.get("optinm_rcv_sette_stat");
			
			// オプトインメール受信設定ステータスが"無効"のオプトインメール受信設定データを"有効"にする(＝回復する)
			if(OPTINM_RCV_SETTE_STAT_MK.equals(optinm_rcv_sette_stat))
			{
				// お客様一意照会
				eck0011A010_map = getECK0011A010Map(handle, param, fixedText, hikiSakiSysid);
				workMap.put("eck0011A010_map", eck0011A010_map);
				
				// オプトインメール受信設定回復
				HashMap<String, Object> eck0141C040_map = getECK0141C040Map(handle, param, fixedText, eck0011A010_map, eck0141A010_map);
				// 作業マップに退避
				workMap.put("eck0141C040_map", eck0141C040_map);
			}
		}
	}

	/**
	 * オプトインメール受信設定登録処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param retHikiMotoEKK0351A010 引継元：オプションサービス契約一意照会
	 * @param retHikiMotoEKK0361A010 引継元：オプションサービス契約＜ISP＞一意照会
	 * @param workMap (I) 作業用マップ
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private void addOptinm(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, CAANMsg[] retHikiMotoEKK0351A010, CAANMsg[] retHikiMotoEKK0361A010, HashMap<String, Object> workMap) throws Exception
	{
		// オプションサービスコード取得
		String	op_svc_cd = retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_CD);
		
		// オプションサービスコードが"Ｅメール"で無い場合は処理しない
		if(!(OP_SVC_CD_EMAIL.equals(op_svc_cd)))
		{
			return;
		}
		
		// 運用年月日を取得
		opeDate = JCCBPCommon.getOpeDate(null);
// OM-2017-0000754 2017/08/21 DEL START
//		String unyoDtm = JCCBPCommon.getOpeDateTimeStamp(null);
//		String sysDtm = JCCBPCommon.getSysDateTimeStamp();
// OM-2017-0000754 2017/08/21 DEL END

		// 即日反映の場合にのみ実行
// OM-2017-0000754 2017/08/21 MOD START
//		if(!(unyoDtm.equals(sysDtm)))
		if(!isSokujitsu)
// OM-2017-0000754 2017/08/21 MOD END
		{
			return;
		}
		
		// メールアドレス
		String mlad = retHikiMotoEKK0361A010[0].getString(EKK0361A010CBSMsg1List.MLAD);
		// 引継先SYSIDを取得
		String hikiSakiSysid = getHikiSakiSysid(workMap);
		// オプトインメール受信設定一覧照会(SYSID)２(SYSIDとmladよりカレントを取得)
		HashMap<String, Object> eck0141B005_map = getECK0141B005Map(handle, param, fixedText, hikiSakiSysid, mlad);
		// 作業マップに退避
		workMap.put("eck0141B005_map", eck0141B005_map);
		
		// オプトインメール受信設定が登録されている場合、回復を行う
		if(eck0141B005_map != null && eck0141B005_map.get("ECK0141B005CBSMsg1List") != null)
		{
			kaihkOptinm(handle, param, fixedText, retHikiMotoEKK0351A010, retHikiMotoEKK0361A010, workMap);
			return;
		}
		
		// オプトインメール一覧照会(マスタに登録されているオプトインメールをすべて取得)
		HashMap<String, Object> eck0141B002_map = getECK0141B002Map(handle, param, opeDate);
		// 作業マップに退避
		workMap.put("eck0141B002_map", eck0141B002_map);
		
		// オプトインメールが登録されていない場合、処理を終了する
		if(eck0141B002_map == null || eck0141B002_map.get("ECK0141B002CBSMsg1List") == null)
		{
			return;
		}
		
		ArrayList eck0141B002_list = (ArrayList)eck0141B002_map.get("ECK0141B002CBSMsg1List");
		HashMap<String, Object> eck0141B002_sub_map = null;
		HashMap<String, Object> eck0011A010_map = null;
		for(int i = 0; i < eck0141B002_list.size(); i++)
		{
			eck0141B002_sub_map = (HashMap)eck0141B002_list.get(i);

			// オプトインメール受信設定一意照会
			HashMap<String, Object> eck0141A010_map = getECK0141A010Map(handle, param, fixedText, eck0141B002_sub_map, hikiSakiSysid, mlad);
			// 作業マップに退避
			workMap.put("eck0141A010_map", eck0141A010_map);
			
			if(!(null == eck0141A010_map || (null == eck0141A010_map.get("optinm_rcv_sette_stat") || ("".equals(eck0141A010_map.get("optinm_rcv_sette_stat"))))))
			{
				continue;
			}
			
			// お客様一意照会
			eck0011A010_map = getECK0011A010Map(handle, param, fixedText, hikiSakiSysid);
			workMap.put("eck0011A010_map", eck0011A010_map);
			
			// オプトインメール受信設定登録
			HashMap<String, Object> eck0141D010_map = getECK0141D010Map(handle, param, fixedText, eck0011A010_map, eck0141B002_sub_map, hikiSakiSysid, mlad, opeDate);
			// 作業マップに退避
			workMap.put("eck0141D010_map", eck0141D010_map);
		}
	}

	/**
	 * オプトインメール受信設定解約処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param retHikiMotoEKK0351A010 引継元：オプションサービス契約一意照会
	 * @param retHikiMotoEKK0361A010 引継元：オプションサービス契約＜ISP＞一意照会
	 * @param workMap (I) 作業用マップ
	 * @exception RequestParameterExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private void dslOptinm(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, CAANMsg[] retHikiMotoEKK0351A010, CAANMsg[] retHikiMotoEKK0361A010, HashMap<String, Object> workMap) throws Exception
	{
		// オプションサービスコード取得
		String	op_svc_cd = retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_CD);
		
		// オプションサービスコードが"Ｅメール"で無い場合は処理しない
		if(!(OP_SVC_CD_EMAIL.equals(op_svc_cd)))
		{
			return;
		}
		
		// 運用年月日を取得
		opeDate = JCCBPCommon.getOpeDate(null);
// OM-2017-0000754 2017/08/21 DEL START
//		String unyoDtm = JCCBPCommon.getOpeDateTimeStamp(null);
//		String sysDtm = JCCBPCommon.getSysDateTimeStamp();
// OM-2017-0000754 2017/08/21 DEL END

		// 即日反映の場合にのみ実行
// OM-2017-0000754 2017/08/21 MOD START
//		if(!(unyoDtm.equals(sysDtm)))
		if(!isSokujitsu)
// OM-2017-0000754 2017/08/21 MOD END
		{
			return;
		}
		
		// メールアドレス
		String mlad = retHikiMotoEKK0361A010[0].getString(EKK0361A010CBSMsg1List.MLAD);
		// 引継元SYSIDを取得
		String hikiMotoSysid = getHikiMotoSysid(workMap);
		// オプトインメール受信設定一覧照会(SYSID)２(SYSIDとmladよりカレントを取得)
		HashMap<String, Object> eck0141B005_map = getECK0141B005Map(handle, param, fixedText, hikiMotoSysid, mlad);
		// 作業マップに退避
		workMap.put("eck0141B005_map", eck0141B005_map);
		
		// オプトインメール受信設定が登録されていない場合、何も行わない
		if(eck0141B005_map == null || eck0141B005_map.get("ECK0141B005CBSMsg1List") == null)
		{
			return;
		}
		
		ArrayList eck0141B005_list = (ArrayList)eck0141B005_map.get("ECK0141B005CBSMsg1List");
		HashMap<String, Object> eck0141B005_sub_map = null;
		String optinm_rcv_sette_stat = null;
		HashMap<String, Object> eck0011A010_map = null;
		for(int i = 0; i < eck0141B005_list.size(); i++)
		{
			eck0141B005_sub_map = (HashMap)eck0141B005_list.get(i);

			// オプトインメール受信設定一意照会
			HashMap<String, Object> eck0141A010_map = getECK0141A010Map(handle, param, fixedText, eck0141B005_sub_map, hikiMotoSysid, mlad);
			// 作業マップに退避
			workMap.put("eck0141A010_map", eck0141A010_map);
			
			if(null == eck0141A010_map || null == eck0141A010_map.get("optinm_rcv_sette_stat") || "".equals(eck0141A010_map.get("optinm_rcv_sette_stat")))
			{
				continue;
			}
			
			optinm_rcv_sette_stat = (String)eck0141A010_map.get("optinm_rcv_sette_stat");
			
			// オプトインメール受信設定ステータスが"有効"のオプトインメール受信設定データを"無効"にする
			if(OPTINM_RCV_SETTE_STAT_UK.equals(optinm_rcv_sette_stat))
			{
				// お客様一意照会
				eck0011A010_map = getECK0011A010Map(handle, param, fixedText, hikiMotoSysid);
				workMap.put("eck0011A010_map", eck0011A010_map);
				
				// オプトインメール受信設定無効
				HashMap<String, Object> eck0141C030_map = getECK0141C030Map(handle, param, fixedText, eck0011A010_map, eck0141A010_map);
				// 作業マップに退避
				workMap.put("eck0141C030_map", eck0141C030_map);
			}
		}
	}

	/**
	 * オプトインメール一覧照会呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param  業務データ取得用I/F
	 * @param opeYmd 運用年月日
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	private HashMap<String, Object> getECK0141B002Map(SessionHandle handle, IRequestParameterReadWrite param, String opeYmd) throws Exception
	{
		/* ◇上りマッピング処理 */
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = this.mapper.editInMsgECK0141B002(param, opeYmd);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);

		/* ◇下りマッピング処理 */
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap = editResultRPECK0141B002(result, param, fixedText);

		return resultMap;
	}

	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * <br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRPECK0141B002(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
	throws Exception
	{

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域の取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = new HashMap();
		ArrayList dataList = null;

		templateArray = parentTemplate.getCAANMsgList(ECK0141B002CBSMsg.ECK0141B002CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("ECK0141B002CBSMsg1List");
		  
		if (dataList == null) {
			dataList = new ArrayList();
		}

		if (templateArray != null && 0 < templateArray.length) {
			for (int i = 0; i < templateArray.length; i++) {
				CAANMsg childTemplate = templateArray[i];
				if ( i >= dataList.size()) {
					dataList.add(new HashMap());
				}
				HashMap childMap = (HashMap)dataList.get(i);
				
				// オプトインメール一覧照会マップ.オプトインメール一覧照会明細.オプトインメール番号 ← オプトインメール一覧照会明細.オプトインメール番号
				if (childTemplate.isNull(ECK0141B002CBSMsg1List.OPTINM_NO)) {
					childMap.put("optinm_no", new String());
				} else {
					childMap.put("optinm_no", childTemplate.getString(ECK0141B002CBSMsg1List.OPTINM_NO));
				}
				
				// オプトインメール一覧照会マップ.オプトインメール一覧照会明細.初期値フラグ ← オプトインメール一覧照会明細.初期値フラグ
				if (childTemplate.isNull(ECK0141B002CBSMsg1List.SHK_VALUE_FLG)) {
					childMap.put("shk_value_flg", new String());
				} else {
					childMap.put("shk_value_flg", childTemplate.getString(ECK0141B002CBSMsg1List.SHK_VALUE_FLG));
				}
			}
			dataMap.put("ECK0141B002CBSMsg1List", dataList);
		} else {
			dataMap.put("ECK0141B002CBSMsg1List", null);
		}
		
		
        // エラー情報の設定
		param = editErrorInfoECK0141B002(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定 */
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}

		return dataMap;
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 * @since 2013.11.10
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoECK0141B002(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
	throws RequestParameterException
	{
		
		CAANMsg template = templates[0];
		setControlMap(param, templates, returnCode, ECK0141B002CBSMsg.STATUS);
		
		HashMap inMap = null;
		
		// 作業項目領域
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null)
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}

		// オプトインメール一覧照会マップ.ＫＥＹ＿ＯＰＥ＿ＹＭＤ → ＫＥＹ＿ＯＰＥ＿ＹＭＤ のエラー情報返却
		if (!template.isNull(ECK0141B002CBSMsg.KEY_OPE_YMD_ERR)) {
			if (!inMap.containsKey("key_ope_ymd_err")) {
				inMap.put("key_ope_ymd_err", template.getString(ECK0141B002CBSMsg.KEY_OPE_YMD_ERR));
			}
		}
		return param;
	}

	/**
	 * オプトインメール受信設定一覧照会(SYSID)２呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param  業務データ取得用I/F
	 * @param fixedText ユーザ任意文字列
	 * @param hikiSakiSysid 引継先SYSID
	 * @param mlad メールアドレス
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	private HashMap<String, Object> getECK0141B005Map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, String hikiSakiSysid, String mlad) throws Exception
	{
		/* ◇上りマッピング処理 */
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = this.mapper.editInMsgECK0141B005(param, fixedText, hikiSakiSysid, mlad);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);

		/* ◇下りマッピング処理 */
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap = editResultRPECK0141B005(result, param, fixedText);

		return resultMap;
	}

	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * <br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRPECK0141B005(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
	throws Exception
	{

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域の取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = new HashMap();
		ArrayList dataList = null;

		templateArray = parentTemplate.getCAANMsgList(ECK0141B005CBSMsg.ECK0141B005CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("ECK0141B005CBSMsg1List");
		  
		if (dataList == null) {
			dataList = new ArrayList();
		}

		if (templateArray != null && 0 < templateArray.length) {
			for (int i = 0; i < templateArray.length; i++) {
				CAANMsg childTemplate = templateArray[i];
				if ( i >= dataList.size()) {
					dataList.add(new HashMap());
				}
				HashMap childMap = (HashMap)dataList.get(i);
				
				// オプトインメール受信設定一覧照会(SYSID)２マップ.オプトインメール受信設定一覧照会(SYSID)２明細.オプトインメール番号 ← オプトインメール受信設定一覧照会(SYSID)２明細.オプトインメール番号
				if (childTemplate.isNull(ECK0141B005CBSMsg1List.OPTINM_NO)) {
					childMap.put("optinm_no", new String());
				} else {
					childMap.put("optinm_no", childTemplate.getString(ECK0141B005CBSMsg1List.OPTINM_NO));
				}
				
				// オプトインメール受信設定一覧照会(SYSID)２マップ.オプトインメール受信設定一覧照会(SYSID)２明細.ＳＹＳＩＤ ← オプトインメール受信設定一覧照会(SYSID)２明細.ＳＹＳＩＤ
				if (childTemplate.isNull(ECK0141B005CBSMsg1List.SYSID)) {
					childMap.put("sysid", new String());
				} else {
					childMap.put("sysid", childTemplate.getString(ECK0141B005CBSMsg1List.SYSID));
				}
				
				// オプトインメール受信設定一覧照会(SYSID)２マップ.オプトインメール受信設定一覧照会(SYSID)２明細.メールアドレス ← オプトインメール受信設定一覧照会(SYSID)２明細.メールアドレス
				if (childTemplate.isNull(ECK0141B005CBSMsg1List.MLAD)) {
					childMap.put("mlad", new String());
				} else {
					childMap.put("mlad", childTemplate.getString(ECK0141B005CBSMsg1List.MLAD));
				}
				
				// オプトインメール受信設定一覧照会(SYSID)２マップ.オプトインメール受信設定一覧照会(SYSID)２明細.オプトインメール受信設定ステータス ← オプトインメール受信設定一覧照会(SYSID)２明細.オプトインメール受信設定ステータス
				if (childTemplate.isNull(ECK0141B005CBSMsg1List.OPTINM_RCV_SETTE_STAT)) {
					childMap.put("optinm_rcv_sette_stat", new String());
				} else {
					childMap.put("optinm_rcv_sette_stat", childTemplate.getString(ECK0141B005CBSMsg1List.OPTINM_RCV_SETTE_STAT));
				}
				
				// オプトインメール受信設定一覧照会(SYSID)２マップ.オプトインメール受信設定一覧照会(SYSID)２明細.更新年月日時分秒 ← オプトインメール受信設定一覧照会(SYSID)２明細.更新年月日時分秒
				if (childTemplate.isNull(ECK0141B005CBSMsg1List.UPD_DTM)) {
					childMap.put("upd_dtm", new String());
				} else {
					childMap.put("upd_dtm", childTemplate.getString(ECK0141B005CBSMsg1List.UPD_DTM));
				}
			}
			dataMap.put("ECK0141B005CBSMsg1List", dataList);
		} else {
			dataMap.put("ECK0141B005CBSMsg1List", null);
		}
		
        // エラー情報の設定
		param = editErrorInfoECK0141B005(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定 */
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}

		return dataMap;
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 * @since 2013.11.10
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoECK0141B005(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
	throws RequestParameterException
	{
		
		CAANMsg template = templates[0];
		setControlMap(param, templates, returnCode, ECK0141B005CBSMsg.STATUS);
		
		HashMap inMap = null;
		
		// 作業項目領域
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null)
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}

		// オプトインメール受信設定一覧照会(SYSID)２マップ.ＫＥＹ＿ＳＹＳＩＤ → ＫＥＹ＿ＳＹＳＩＤ のエラー情報返却
		if (!template.isNull(ECK0141B005CBSMsg.KEY_SYSID_ERR)) {
			if (!inMap.containsKey("key_sysid_err")) {
				inMap.put("key_sysid_err", template.getString(ECK0141B005CBSMsg.KEY_SYSID_ERR));
			}
		}
		// オプトインメール受信設定一覧照会(SYSID)２マップ.ＫＥＹ＿メールアドレス → ＫＥＹ＿メールアドレス のエラー情報返却
		if (!template.isNull(ECK0141B005CBSMsg.KEY_MLAD_ERR)) {
			if (!inMap.containsKey("key_mlad_err")) {
				inMap.put("key_mlad_err", template.getString(ECK0141B005CBSMsg.KEY_MLAD_ERR));
			}
		}
		return param;
	}

	/**
	 * お客様一意照会呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param hikiSakiSysid (I) 引継先SYSID
	 * @param workMap (I) 作業用マップ
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> getECK0011A010Map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, String hikiSakiSysid) throws Exception
	{

		/* ◇上りマッピング処理 */
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = this.mapper.editInMsgECK0011A010(param, fixedText, hikiSakiSysid);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		/* ◇下りマッピング処理 */
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap = editResultRPECK0011A010(result, param, fixedText);
		
		return resultMap;
	}		

	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * <br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRPECK0011A010(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
	throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = new HashMap();
		
		templateArray = parentTemplate.getCAANMsgList(ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST);

		if (templateArray != null && 0 < templateArray.length) 
		{
			// お客様一意照会マップ.お客様一意照会明細.最終更新年月日時分秒 ← お客様一意照会明細.最終更新年月日時分秒
			dataMap.put("last_upd_dtm", JPCBPCommon.getSCListValueString(parentTemplate, 
					ECK0011A010CBSMsg.ECK0011A010CBSMSG1LIST , 0 , ECK0011A010CBSMsg1List.LAST_UPD_DTM));
		}
		
        // エラー情報の設定
		param = editErrorInfoECK0011A010(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		

		/* ◇処理結果の判定 */
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
		
		return dataMap;	
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 * @since 2013.11.10
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoECK0011A010(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, 
			String fixedText) throws RequestParameterException 
	{
		
		CAANMsg template = templates[0];
		// エラー共通部の設定
		setControlMap(param, templates, returnCode, ECK0011A010CBSMsg.STATUS);
		
		HashMap inMap = null;
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null) 
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}

		// お客様一意照会マップ.ＫＥＹ＿ＳＹＳＩＤ → ＫＥＹ＿ＳＹＳＩＤ のエラー情報返却
		if (!template.isNull(ECK0011A010CBSMsg.KEY_SYSID_ERR)) {
			if (!inMap.containsKey("key_sysid_err")) {
				inMap.put("key_sysid_err", template.getString(ECK0011A010CBSMsg.KEY_SYSID_ERR));
			}
		}
		// お客様一意照会マップ.ＫＥＹ＿世代登録年月日時分秒 → ＫＥＹ＿世代登録年月日時分秒 のエラー情報返却
		if (!template.isNull(ECK0011A010CBSMsg.KEY_GENE_ADD_DTM_ERR)) {
			if (!inMap.containsKey("key_gene_add_dtm_err")) {
				inMap.put("key_gene_add_dtm_err", template.getString(ECK0011A010CBSMsg.KEY_GENE_ADD_DTM_ERR));
			}
		}
		// お客様一意照会マップ.ＫＥＹ＿予約適用年月日 → ＫＥＹ＿予約適用年月日 のエラー情報返却
		if (!template.isNull(ECK0011A010CBSMsg.KEY_RSV_APLY_YMD_ERR)) {
			if (!inMap.containsKey("key_rsv_aply_ymd_err")) {
				inMap.put("key_rsv_aply_ymd_err", template.getString(ECK0011A010CBSMsg.KEY_RSV_APLY_YMD_ERR));
			}
		}
		return param;
	}

	/**
	 * オプトインメール受信設定一意照会呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param  業務データ取得用I/F
	 * @param fixedText ユーザ任意文字列
	 * @param eck0141B002_sub_map オプトインメール受信設定一覧照会マップ
	 * @param sysid SYSID
	 * @param mlad メールアドレス
	 * @param childMap 作業用マップ
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	private HashMap<String, Object> getECK0141A010Map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, HashMap<String, Object> eck0141B002_sub_map, String sysid, String mlad) throws Exception
	{
		/* ◇上りマッピング処理 */
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = this.mapper.editInMsgECK0141A010(param, fixedText, eck0141B002_sub_map, sysid, mlad);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);

		/* ◇下りマッピング処理 */
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap = editResultRPECK0141A010(result, param, fixedText);

		return resultMap;
	}

	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * <br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRPECK0141A010(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
	throws Exception
	{

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域の取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = new HashMap();
		ArrayList dataList = null;

		templateArray = parentTemplate.getCAANMsgList(ECK0141A010CBSMsg.ECK0141A010CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("ECK0141A010CBSMsg1List");
		  
		if (dataList == null) {
			dataList = new ArrayList();
		}

		if (templateArray != null && 0 < templateArray.length)
		{
			CAANMsg childTemplate = templateArray[0];
				
			// オプトインメール受信設定一意照会マップ.オプトインメール受信設定一意照会明細.オプトインメール番号 ← オプトインメール受信設定一意照会明細.オプトインメール番号
			if (childTemplate.isNull(ECK0141A010CBSMsg1List.OPTINM_NO)) {
				dataMap.put("optinm_no", new String());
			} else {
				dataMap.put("optinm_no", childTemplate.getString(ECK0141A010CBSMsg1List.OPTINM_NO));
			}
			
			// オプトインメール受信設定一意照会マップ.オプトインメール受信設定一意照会明細.ＳＹＳＩＤ ← オプトインメール受信設定一意照会明細.ＳＹＳＩＤ
			if (childTemplate.isNull(ECK0141A010CBSMsg1List.SYSID)) {
				dataMap.put("sysid", new String());
			} else {
				dataMap.put("sysid", childTemplate.getString(ECK0141A010CBSMsg1List.SYSID));
			}
			
			// オプトインメール受信設定一意照会マップ.オプトインメール受信設定一意照会明細.メールアドレス ← オプトインメール受信設定一意照会明細.メールアドレス
			if (childTemplate.isNull(ECK0141A010CBSMsg1List.MLAD)) {
				dataMap.put("mlad", new String());
			} else {
				dataMap.put("mlad", childTemplate.getString(ECK0141A010CBSMsg1List.MLAD));
			}
			
			// オプトインメール受信設定一意照会マップ.オプトインメール受信設定一意照会明細.オプトインメール受信設定ステータス ← オプトインメール受信設定一意照会明細.オプトインメール受信設定ステータス
			if (childTemplate.isNull(ECK0141A010CBSMsg1List.OPTINM_RCV_SETTE_STAT)) {
				dataMap.put("optinm_rcv_sette_stat", new String());
			} else {
				dataMap.put("optinm_rcv_sette_stat", childTemplate.getString(ECK0141A010CBSMsg1List.OPTINM_RCV_SETTE_STAT));
			}
		}
		
        // エラー情報の設定
		param = editErrorInfoECK0141A010(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定 */
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}

		return dataMap;
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 * @since 2013.11.10
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoECK0141A010(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
	throws RequestParameterException
	{
		
		CAANMsg template = templates[0];
		setControlMap(param, templates, returnCode, ECK0141A010CBSMsg.STATUS);
		
		HashMap inMap = null;
		
		// 作業項目領域
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null)
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}

		// オプトインメール受信設定一意照会マップ.ＫＥＹ＿オプトインメール番号 → ＫＥＹ＿オプトインメール番号 のエラー情報返却
		if (!template.isNull(ECK0141A010CBSMsg.KEY_OPTINM_NO_ERR)) {
			if (!inMap.containsKey("key_optinm_no")) {
				inMap.put("key_optinm_no_err", template.getString(ECK0141A010CBSMsg.KEY_OPTINM_NO_ERR));
			}
		}
		// オプトインメール受信設定一意照会マップ.ＫＥＹ＿ＳＹＳＩＤ → ＫＥＹ＿ＳＹＳＩＤ のエラー情報返却
		if (!template.isNull(ECK0141A010CBSMsg.KEY_SYSID_ERR)) {
			if (!inMap.containsKey("key_sysid_err")) {
				inMap.put("key_sysid_err", template.getString(ECK0141A010CBSMsg.KEY_SYSID_ERR));
			}
		}
		// オプトインメール受信設定一意照会マップ.ＫＥＹ＿メールアドレス → ＫＥＹ＿メールアドレス のエラー情報返却
		if (!template.isNull(ECK0141A010CBSMsg.KEY_MLAD_ERR)) {
			if (!inMap.containsKey("key_mlad_err")) {
				inMap.put("key_mlad_err", template.getString(ECK0141A010CBSMsg.KEY_MLAD_ERR));
			}
		}
		return param;
	}

	/**
	 * オプトインメール受信設定無効呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param eck0011A010_map (I) お客様一意照会マップ
	 * @param eck0141A010_map (I) オプトインメール受信設定一意照会マップ
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> getECK0141C030Map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, HashMap<String, Object> eck0011A010_map, HashMap<String, Object> eck0141A010_map) throws Exception
	{

		/* ◇上りマッピング処理 */
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = this.mapper.editInMsgECK0141C030(param, fixedText, eck0011A010_map, eck0141A010_map);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		/* ◇下りマッピング処理 */
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap = editResultRPECK0141C030(result, param, fixedText);
		
		return resultMap;
	}		

	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * <br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRPECK0141C030(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
	throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = new HashMap();
		
		// オプトインメール受信設定無効マップ.世代登録年月日時分秒 ← 世代登録年月日時分秒
		if(parentTemplate.isNull(ECK0141C030CBSMsg.GENE_ADD_DTM)) 
		{
			dataMap.put("gene_add_dtm", new String());
		} 
		else 
		{
			dataMap.put("gene_add_dtm", parentTemplate.getString(ECK0141C030CBSMsg.GENE_ADD_DTM));
		}

		// オプトインメール受信設定無効マップ.オプトインメール受信設定ステータス ← オプトインメール受信設定ステータス
		if(parentTemplate.isNull(ECK0141C030CBSMsg.OPTINM_RCV_SETTE_STAT)) 
		{
			dataMap.put("optinm_rcv_sette_stat", new String());
		} 
		else 
		{
			dataMap.put("optinm_rcv_sette_stat", parentTemplate.getString(ECK0141C030CBSMsg.OPTINM_RCV_SETTE_STAT));
		}

		// オプトインメール受信設定無効マップ.オプトインメール受信設定無効年月日 ← オプトインメール受信設定無効年月日
		if(parentTemplate.isNull(ECK0141C030CBSMsg.OPTINM_RCV_SETTE_MK_YMD)) 
		{
			dataMap.put("optinm_rcv_sette_mk_ymd", new String());
		} 
		else 
		{
			dataMap.put("optinm_rcv_sette_mk_ymd", parentTemplate.getString(ECK0141C030CBSMsg.OPTINM_RCV_SETTE_MK_YMD));
		}

		// オプトインメール受信設定無効マップ.登録年月日時分秒 ← 登録年月日時分秒
		if(parentTemplate.isNull(ECK0141C030CBSMsg.ADD_DTM)) 
		{
			dataMap.put("add_dtm", new String());
		} 
		else 
		{
			dataMap.put("add_dtm", parentTemplate.getString(ECK0141C030CBSMsg.ADD_DTM));
		}

		// オプトインメール受信設定無効マップ.登録オペレータアカウント ← 登録オペレータアカウント
		if(parentTemplate.isNull(ECK0141C030CBSMsg.ADD_OPEACNT)) 
		{
			dataMap.put("add_opeacnt", new String());
		} 
		else 
		{
			dataMap.put("add_opeacnt", parentTemplate.getString(ECK0141C030CBSMsg.ADD_OPEACNT));
		}

		// オプトインメール受信設定無効マップ.更新年月日時分秒 ← 更新年月日時分秒
		if(parentTemplate.isNull(ECK0141C030CBSMsg.UPD_DTM)) 
		{
			dataMap.put("upd_dtm", new String());
		} 
		else 
		{
			dataMap.put("upd_dtm", parentTemplate.getString(ECK0141C030CBSMsg.UPD_DTM));
		}

		// オプトインメール受信設定無効マップ.更新オペレータアカウント ← 更新オペレータアカウント
		if(parentTemplate.isNull(ECK0141C030CBSMsg.UPD_OPEACNT)) 
		{
			dataMap.put("upd_opeacnt", new String());
		} 
		else 
		{
			dataMap.put("upd_opeacnt", parentTemplate.getString(ECK0141C030CBSMsg.UPD_OPEACNT));
		}

		// オプトインメール受信設定無効マップ.無効フラグ ← 無効フラグ
		if(parentTemplate.isNull(ECK0141C030CBSMsg.MK_FLG)) 
		{
			dataMap.put("mk_flg", new String());
		} 
		else 
		{
			dataMap.put("mk_flg", parentTemplate.getString(ECK0141C030CBSMsg.MK_FLG));
		}
		
		// エラー情報の設定
		param = editErrorInfoECK0141C030(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		

		/* ◇処理結果の判定 */
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
		
		return dataMap;		
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 * @since 2013.11.10
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoECK0141C030(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, 
			String fixedText) throws RequestParameterException 
	{
		CAANMsg template = templates[0];
		// エラー共通部の設定
		setControlMap(param, templates, returnCode, ECK0141C030CBSMsg.STATUS);
		
		HashMap inMap = null;
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null) 
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}

		// オプトインメール受信設定無効マップ.オプトインメール番号 → オプトインメール番号 のエラー情報返却
		if (!template.isNull(ECK0141C030CBSMsg.OPTINM_NO_ERR)) {
			if (!inMap.containsKey("optinm_no_err")) {
				inMap.put("optinm_no_err", template.getString(ECK0141C030CBSMsg.OPTINM_NO_ERR));
			}
		}
		// オプトインメール受信設定無効マップ.ＳＹＳＩＤ → ＳＹＳＩＤ のエラー情報返却
		if (!template.isNull(ECK0141C030CBSMsg.SYSID_ERR)) {
			if (!inMap.containsKey("sysid_err")) {
				inMap.put("sysid_err", template.getString(ECK0141C030CBSMsg.SYSID_ERR));
			}
		}
		// オプトインメール受信設定無効マップ.メールアドレス → メールアドレス のエラー情報返却
		if (!template.isNull(ECK0141C030CBSMsg.MLAD_ERR)) {
			if (!inMap.containsKey("mlad_err")) {
				inMap.put("mlad_err", template.getString(ECK0141C030CBSMsg.MLAD_ERR));
			}
		}
		// オプトインメール受信設定無効マップ.更新年月日時分秒（更新前） → 更新年月日時分秒（更新前） のエラー情報返却
		if (!template.isNull(ECK0141C030CBSMsg.UPD_DTM_BF_ERR)) {
			if (!inMap.containsKey("upd_dtm_bf_err")) {
				inMap.put("upd_dtm_bf_err", template.getString(ECK0141C030CBSMsg.UPD_DTM_BF_ERR));
			}
		}
		return param;
	}		

	/**
	 * オプトインメール受信設定回復呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @param eck0011A010_map (I) お客様一意照会マップ
	 * @param eck0141A010_map (I) オプトインメール受信設定一意照会マップ
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 */
	private HashMap<String, Object> getECK0141C040Map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, HashMap<String, Object> eck0011A010_map, HashMap<String, Object> eck0141A010_map) throws Exception
	{

		/* ◇上りマッピング処理 */
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = this.mapper.editInMsgECK0141C040(param, fixedText, eck0011A010_map, eck0141A010_map);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);
		
		/* ◇下りマッピング処理 */
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap = editResultRPECK0141C040(result, param, fixedText);
		
		return resultMap;
	}		

	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * <br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRPECK0141C040(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
	throws Exception
	{
		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = new HashMap();
		
		// オプトインメール受信設定無効マップ.世代登録年月日時分秒 ← 世代登録年月日時分秒
		if(parentTemplate.isNull(ECK0141C040CBSMsg.GENE_ADD_DTM)) 
		{
			dataMap.put("gene_add_dtm", new String());
		} 
		else 
		{
			dataMap.put("gene_add_dtm", parentTemplate.getString(ECK0141C040CBSMsg.GENE_ADD_DTM));
		}

		// オプトインメール受信設定回復マップ.オプトインメール受信設定ステータス ← オプトインメール受信設定ステータス
		if(parentTemplate.isNull(ECK0141C040CBSMsg.OPTINM_RCV_SETTE_STAT)) 
		{
			dataMap.put("optinm_rcv_sette_stat", new String());
		} 
		else 
		{
			dataMap.put("optinm_rcv_sette_stat", parentTemplate.getString(ECK0141C040CBSMsg.OPTINM_RCV_SETTE_STAT));
		}

		// オプトインメール受信設定回復マップ.オプトインメール受信設定回復年月日 ← オプトインメール受信設定回復年月日
		if(parentTemplate.isNull(ECK0141C040CBSMsg.OPTINM_RCV_SETTE_KAIHK_YMD)) 
		{
			dataMap.put("optinm_rcv_sette_kaihk_ymd", new String());
		} 
		else 
		{
			dataMap.put("optinm_rcv_sette_kaihk_ymd", parentTemplate.getString(ECK0141C040CBSMsg.OPTINM_RCV_SETTE_KAIHK_YMD));
		}

		// オプトインメール受信設定回復マップ.登録年月日時分秒 ← 登録年月日時分秒
		if(parentTemplate.isNull(ECK0141C040CBSMsg.ADD_DTM)) 
		{
			dataMap.put("add_dtm", new String());
		} 
		else 
		{
			dataMap.put("add_dtm", parentTemplate.getString(ECK0141C040CBSMsg.ADD_DTM));
		}

		// オプトインメール受信設定回復マップ.登録オペレータアカウント ← 登録オペレータアカウント
		if(parentTemplate.isNull(ECK0141C040CBSMsg.ADD_OPEACNT)) 
		{
			dataMap.put("add_opeacnt", new String());
		} 
		else 
		{
			dataMap.put("add_opeacnt", parentTemplate.getString(ECK0141C040CBSMsg.ADD_OPEACNT));
		}

		// オプトインメール受信設定回復マップ.更新年月日時分秒 ← 更新年月日時分秒
		if(parentTemplate.isNull(ECK0141C040CBSMsg.UPD_DTM)) 
		{
			dataMap.put("upd_dtm", new String());
		} 
		else 
		{
			dataMap.put("upd_dtm", parentTemplate.getString(ECK0141C040CBSMsg.UPD_DTM));
		}

		// オプトインメール受信設定回復マップ.更新オペレータアカウント ← 更新オペレータアカウント
		if(parentTemplate.isNull(ECK0141C040CBSMsg.UPD_OPEACNT)) 
		{
			dataMap.put("upd_opeacnt", new String());
		} 
		else 
		{
			dataMap.put("upd_opeacnt", parentTemplate.getString(ECK0141C040CBSMsg.UPD_OPEACNT));
		}

		// オプトインメール受信設定回復マップ.無効フラグ ← 無効フラグ
		if(parentTemplate.isNull(ECK0141C040CBSMsg.MK_FLG)) 
		{
			dataMap.put("mk_flg", new String());
		} 
		else 
		{
			dataMap.put("mk_flg", parentTemplate.getString(ECK0141C040CBSMsg.MK_FLG));
		}
		
		// エラー情報の設定
		param = editErrorInfoECK0141C040(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		

		/* ◇処理結果の判定 */
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}
		
		return dataMap;		
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 * @since 2013.11.10
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoECK0141C040(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, 
			String fixedText) throws RequestParameterException 
	{
		CAANMsg template = templates[0];
		// エラー共通部の設定
		setControlMap(param, templates, returnCode, ECK0141C040CBSMsg.STATUS);
		
		HashMap inMap = null;
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null) 
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}

		// オプトインメール受信設定回復マップ.オプトインメール番号 → オプトインメール番号 のエラー情報返却
		if (!template.isNull(ECK0141C040CBSMsg.OPTINM_NO_ERR)) {
			if (!inMap.containsKey("optinm_no_err")) {
				inMap.put("optinm_no_err", template.getString(ECK0141C040CBSMsg.OPTINM_NO_ERR));
			}
		}
		// オプトインメール受信設定回復マップ.ＳＹＳＩＤ → ＳＹＳＩＤ のエラー情報返却
		if (!template.isNull(ECK0141C040CBSMsg.SYSID_ERR)) {
			if (!inMap.containsKey("sysid_err")) {
				inMap.put("sysid_err", template.getString(ECK0141C040CBSMsg.SYSID_ERR));
			}
		}
		// オプトインメール受信設定回復マップ.メールアドレス → メールアドレス のエラー情報返却
		if (!template.isNull(ECK0141C040CBSMsg.MLAD_ERR)) {
			if (!inMap.containsKey("mlad_err")) {
				inMap.put("mlad_err", template.getString(ECK0141C040CBSMsg.MLAD_ERR));
			}
		}
		// オプトインメール受信設定回復マップ.更新年月日時分秒（更新前） → 更新年月日時分秒（更新前） のエラー情報返却
		if (!template.isNull(ECK0141C040CBSMsg.UPD_DTM_BF_ERR)) {
			if (!inMap.containsKey("upd_dtm_bf_err")) {
				inMap.put("upd_dtm_bf_err", template.getString(ECK0141C040CBSMsg.UPD_DTM_BF_ERR));
			}
		}
		return param;
	}		

	/**
	 * オプトインメール受信設定登録呼出処理。<br>
	 * <br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param  業務データ取得用I/F
	 * @param fixedText ユーザ任意文字列
	 * @param eck0011A010_map お客様一意照会マップ
	 * @param eck0141B002_sub_map オプトインメール一覧照会サブマップ
	 * @param hikiSakiSysid 引継先SYSID
	 * @param mlad メールアドレス
	 * @param opeDate 運用日
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	private HashMap<String, Object> getECK0141D010Map(SessionHandle handle, IRequestParameterReadWrite param, 
			String fixedText, HashMap<String, Object> eck0011A010_map, HashMap<String, Object> eck0141B002_sub_map, String hikiSakiSysid, String mlad, String opeDate) throws Exception
	{
		/* ◇上りマッピング処理 */
		// 上りマッピングの処理結果を取得するためのマップを生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// リクエストパラメータを引数に上りマッピング処理メソッドを実行
		paramMap = this.mapper.editInMsgECK0141D010(param, fixedText, eck0011A010_map, eck0141B002_sub_map, hikiSakiSysid, mlad, opeDate);

		/* ◇ＳＣ呼出実行 */
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない。
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		Map<?, ?> result = scCall.run(paramMap, handle);

		/* ◇下りマッピング処理 */
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap = editResultRPECK0141D010(result, param, fixedText);

		return resultMap;
	}

	/**
	 * IRequestParameterReadWriteに必要なデータをマッピングします。<br>
	 * <br>
	 * @param msgList (I) CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Exceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> editResultRPECK0141D010(Map<?, ?> msgList, IRequestParameterReadWrite param, String fixedText)
	throws Exception
	{

		// SCからの戻り値からCAANMsgを取得する。
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];
		CAANMsg[] templateArray = null;

		// リターンコード取得
		Object return_code = msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// 作業領域の取得
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		// 結果を詰めるマップを取得。
		HashMap dataMap = new HashMap();
		ArrayList dataList = null;

		templateArray = parentTemplate.getCAANMsgList(ECK0141A010CBSMsg.ECK0141A010CBSMSG1LIST);
		dataList = (ArrayList)dataMap.get("ECK0141A010CBSMsg1List");
		  
		if (dataList == null) {
			dataList = new ArrayList();
		}

		if (templateArray != null && 0 < templateArray.length)
		{
			CAANMsg childTemplate = templateArray[0];
				
			// オプトインメール受信設定一意照会マップ.オプトインメール受信設定一意照会明細.オプトインメール番号 ← オプトインメール受信設定一意照会明細.オプトインメール番号
			if (childTemplate.isNull(ECK0141A010CBSMsg1List.OPTINM_NO)) {
				dataMap.put("optinm_no", new String());
			} else {
				dataMap.put("optinm_no", childTemplate.getString(ECK0141A010CBSMsg1List.OPTINM_NO));
			}
			
			// オプトインメール受信設定一意照会マップ.オプトインメール受信設定一意照会明細.ＳＹＳＩＤ ← オプトインメール受信設定一意照会明細.ＳＹＳＩＤ
			if (childTemplate.isNull(ECK0141A010CBSMsg1List.SYSID)) {
				dataMap.put("sysid", new String());
			} else {
				dataMap.put("sysid", childTemplate.getString(ECK0141A010CBSMsg1List.SYSID));
			}
			
			// オプトインメール受信設定一意照会マップ.オプトインメール受信設定一意照会明細.メールアドレス ← オプトインメール受信設定一意照会明細.メールアドレス
			if (childTemplate.isNull(ECK0141A010CBSMsg1List.MLAD)) {
				dataMap.put("mlad", new String());
			} else {
				dataMap.put("mlad", childTemplate.getString(ECK0141A010CBSMsg1List.MLAD));
			}
			
			// オプトインメール受信設定一意照会マップ.オプトインメール受信設定一意照会明細.オプトインメール受信設定ステータス ← オプトインメール受信設定一意照会明細.オプトインメール受信設定ステータス
			if (childTemplate.isNull(ECK0141A010CBSMsg1List.OPTINM_RCV_SETTE_STAT)) {
				dataMap.put("optinm_rcv_sette_stat", new String());
			} else {
				dataMap.put("optinm_rcv_sette_stat", childTemplate.getString(ECK0141A010CBSMsg1List.OPTINM_RCV_SETTE_STAT));
			}
		}
		
        // エラー情報の設定
		param = editErrorInfoECK0141D010(param, templates, (Integer)return_code, fixedText);

		//エラー情報のマップを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if(errList == null)
		{
			errList = new ArrayList<Object>();
		}
		// コントロールマップに設定
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, TemplateErrorUtil.getErrorInfo(msgList, errList));
		
		/* ◇処理結果の判定 */
		// 取得したリターンコード、ステータスの内容を見て異常かどうかの判断をする。
		String rtnCode = return_code.toString();
		int status = parentTemplate.getInt(JCMConstants.STATUS_INT_KEY);

		// 異常の場合、SCCallExceptionを生成してスローする
		if(!("0".equals(rtnCode) && 0 == status))
		{
			SCCallException scCallEx = new SCCallException("戻り値不正", rtnCode, status);
			throw scCallEx;
		}

		return dataMap;
	}

	/**
	 *<DL>
	 *<DT>処理概要:
	 *<DD>サービスコンポーネント実行後に、IRequestParameterReadWriteにエラー情報をマッピングする
	 *</DL>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param fixedText (I) ユーザ定義文字列
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 * @since 2013.11.10
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoECK0141D010(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, String fixedText)
	throws RequestParameterException
	{
		
		CAANMsg template = templates[0];
		setControlMap(param, templates, returnCode, ECK0141A010CBSMsg.STATUS);
		
		HashMap inMap = null;
		
		// 作業項目領域
		Map workMap = param.getMappingWorkArea();
		if (workMap == null)
		{
			workMap = new HashMap();
			param.setMappingWorkArea(workMap);
		}
		
		/* ユーザデータ情報 */
		inMap = (HashMap)param.getData(fixedText);
		if (inMap == null)
		{
			inMap = new HashMap();
			param.setData(fixedText, inMap);
		}

		// オプトインメール受信設定一意照会マップ.ＫＥＹ＿オプトインメール番号 → ＫＥＹ＿オプトインメール番号 のエラー情報返却
		if (!template.isNull(ECK0141A010CBSMsg.KEY_OPTINM_NO_ERR)) {
			if (!inMap.containsKey("key_optinm_no")) {
				inMap.put("key_optinm_no_err", template.getString(ECK0141A010CBSMsg.KEY_OPTINM_NO_ERR));
			}
		}
		// オプトインメール受信設定一意照会マップ.ＫＥＹ＿ＳＹＳＩＤ → ＫＥＹ＿ＳＹＳＩＤ のエラー情報返却
		if (!template.isNull(ECK0141A010CBSMsg.KEY_SYSID_ERR)) {
			if (!inMap.containsKey("key_sysid_err")) {
				inMap.put("key_sysid_err", template.getString(ECK0141A010CBSMsg.KEY_SYSID_ERR));
			}
		}
		// オプトインメール受信設定一意照会マップ.ＫＥＹ＿メールアドレス → ＫＥＹ＿メールアドレス のエラー情報返却
		if (!template.isNull(ECK0141A010CBSMsg.KEY_MLAD_ERR)) {
			if (!inMap.containsKey("key_mlad_err")) {
				inMap.put("key_mlad_err", template.getString(ECK0141A010CBSMsg.KEY_MLAD_ERR));
			}
		}
		return param;
	}

	/**
	 * エラー共通部の設定。<br>
	 * <br>
	 * @param param (I) 業務データ取得・書込用I/F
	 * @param templates (I) CAANMsgクラス配列
	 * @param returnCode (I) リターンコード
	 * @param status (I) ステータス
	 * @return 業務データ取得・書込用I/F
	 * @exception RequestParameterExceptionがスローされます。
	 * @since 2013.11.10
	 */
	private IRequestParameterReadWrite setControlMap(IRequestParameterReadWrite param, CAANMsg[] templates, int returnCode, 
			String status) throws RequestParameterException 
	{
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(status);
		if (returnCode != 0) 
		{
			templateStatus = 9000;
		}
		if (JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)) == null)
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null) 
		{
			bpStatus = -1;
		}
		else 
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}

		if (templateStatus > bpStatus) 
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}	
		
		return param;
	}
	//20131110 OM-2013-0003488 ADD END

	/**
	 * <pre>
	 * オプションキャンセル・解約処理
	 * </pre>
	 * @param	handle				
	 * @param	param				
	 * @param	msgsEKK0081A010		サービス契約一意照会
	 * @param	msgsEKK0351A010		オプションサービス契約一意照会
	 * @param	msgsEKK0361A010		オプションサービス契約＜ＩＳＰ＞一意照会
	 * @param	msgsEKK0401B001		サブオプションサービス契約一覧照会
	 * @param	mskmDtlNo			申込明細番号
	 * @param	isHikiMoto			
	 * @param	kihkFlg				
	 * @param	opSvkeiSodInfo		
	 * @param	workMap				
	 * @return	
	 * @throws	Throwable
	 */
	@SuppressWarnings("unchecked")
	private Map<String, Object> dslOption(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			CAANMsg[] msgsEKK0081A010,
			CAANMsg[] msgsEKK0351A010,
			CAANMsg[] msgsEKK0361A010,
			CAANMsg[] msgsEKK0401B001,
			String mskmDtlNo,
			boolean isHikimoto,
			String execKbn,
			Map<String, Object> opSvkeiSodInfo,
			HashMap<String, Object> workMap
	) throws Throwable
	{
		Map<String, Object> inputMap = new HashMap<String, Object>();

		CAANMsg retMsg = null;
		CAANMsg[] retEKK0401A010 = null;
		CAANMsg[] retEKK0411A010 = null;

		// 更新年月日時分秒
		String updDtm = null;

		// 引継先サービス契約番号取得
		String hikiSakiSvcKeiNo = getHikiSakiSvcKeiNo(workMap);
		// 異動区分取得
		String idoDiv = getIdoDiv(workMap);
		// 適用年月日取得
		String aplyYmd = getAplyYmd(workMap);

		// 解約オプションサービス契約番号取得
		String dslOpSvcKeiNo   = msgsEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_NO);
		// 解約オプションサービス契約ステータス取得
		String dslOpSvcKeiStat = msgsEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);

		// 更新年月日取得
		if (isHikimoto == true)
		{
			updDtm = motoLastUpdDtm;
		}
		else
		{
			updDtm = sakiLastUpdDtm;
		}

		// =========================================================== //
		// オプションサービス契約ステータスが「010:受付済」            //
		// オプションサービス契約ステータスが「020:照査済」            //
		// =========================================================== //
		if(
				SVC_KEI_STAT_010.equals(dslOpSvcKeiStat)
				|| SVC_KEI_STAT_020.equals(dslOpSvcKeiStat)
		)
		{
			// ******************************************************* //
			// オプションサービス契約キャンセル                        //
			// ******************************************************* //
			inputMap = this.mapper.editInMsgEKK0351C220(param, dslOpSvcKeiNo, mskmDtlNo, updDtm, idoDiv);
			retMsg = (CAANMsg)runSc(handle, param, EKK0351C220, inputMap);

			// 更新年月日時分秒（更新後）取得
			updDtm = retMsg.getString(EKK0351C220CBSMsg.UPD_DTM);

			// オプションサービス契約番号
			opSvkeiSodInfo.put("chbf_opsvkei_no",           dslOpSvcKeiNo);
			// オプションサービス契約世代登録年月日時分秒
			opSvkeiSodInfo.put("chbf_opsvkei_gene_add_dtm", retMsg.getString(EKK0351C220CBSMsg.GENE_ADD_DTM));

			for(int i = 0; i < msgsEKK0401B001.length; i++)
			{
				// 解約サブオプションサービス契約ステータス取得
				// OM-2014-0001082 2014/03/14 MOD START
//				String dslSbOpSvcKeiStat = msgsEKK0401B001[0].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
				String dslSbOpSvcKeiStat = msgsEKK0401B001[i].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
				// OM-2014-0001082 2014/03/14 MOD END
				
				// ============================================================= //
				// サブオプションサービス契約ステータスが「010:受付済」          //
				// サブオプションサービス契約ステータスが「020:照査済」          //
				// ============================================================= //
				if(
						SVC_KEI_STAT_010.equals(dslSbOpSvcKeiStat)
						|| SVC_KEI_STAT_020.equals(dslSbOpSvcKeiStat)
				)
				{
					// ******************************************************* //
					// サブオプションサービス契約キャンセル                    //
					// ******************************************************* //
					inputMap = this.mapper.editInMsgEKK0401C150(
							param,
							dslOpSvcKeiNo,
							msgsEKK0401B001[i],
							mskmDtlNo,
							updDtm,
							idoDiv
					);
					retMsg = (CAANMsg)runSc(handle, param, EKK0401C150, inputMap);

					// 更新年月日時分秒（更新後）取得
					updDtm = retMsg.getString(EKK0401C150CBSMsg.UPD_DTM);
				}
			}

			// ******************************************************* //
			// エイジング使用終了　ＯＲ　回復処理                      //
			// ******************************************************* //
			updateAging(handle, param, msgsEKK0351A010[0], msgsEKK0361A010[0], msgsEKK0401B001, execKbn);
		}
		// =========================================================== //
		// オプションサービス契約ステータスが「030:締結済」            //
		// オプションサービス契約ステータスが「100:サービス提供中」    //
		// オプションサービス契約ステータスが「210:休止・中断中」      //
		// =========================================================== //
		else if(
				SVC_KEI_STAT_030.equals(dslOpSvcKeiStat)
				|| SVC_KEI_STAT_100.equals(dslOpSvcKeiStat)
				|| SVC_KEI_STAT_210.equals(dslOpSvcKeiStat)
		)
		{
			HashMap<String, Object> inMap = new HashMap<String, Object>();

			// サービス終了年月日
			String svcEndYmd = null;
// 20130724 IT1-2013-0001434 DEL START
//			if (isIdoRsvHanei)
//			{
//				// 異動予約反映の場合
//				svcEndYmd = opeDate;		// 運用日
//			}
//			else
// 20130724 IT1-2013-0001434 DEL END
			{
				svcEndYmd = aplyYmd;		// 適用年月日
			}
			// サービス課金終了年月日（適用日−１日）
			String svcChrgEndYmd = addYYYYMMDD(aplyYmd, -1);

			inMap.put("svc_chrg_endymd", svcChrgEndYmd);	// サービス課金終了年月日
			inMap.put("svc_endymd",      svcEndYmd);		// サービス終了年月日

			// ▼▼▼▼▼ 2013/09/11 OM-2013-0001096 UPD START ▼▼▼▼▼
			// ******************************************************* //
			// 非課金判定部品実行処理＜オプション＞                    //
			// ******************************************************* //
			// ※「解約時課金フラグ」について
			// 　　オプション、サブオプションごとに非課金判定部品を実行し、
			// 　　各々の解約時課金フラグを設定する。
			HashMap<String, Object> jdgHiChrgMapOpSvcKei =
				runHiChrgJdgUtil(
						handle,
						param,
						inMap,
						msgsEKK0081A010[0],
						null,
						msgsEKK0351A010[0],
						null,
						DSL_SBT_FLG_OP_SVC_KEI_DSL
				);
			// ▲▲▲▲▲ 2013/09/11 OM-2013-0001096 UPD E N D ▲▲▲▲▲

			// ******************************************************* //
			// オプションサービス契約解約                              //
			// ******************************************************* //
			inputMap = this.mapper.editInMsgEKK0351C240(
					param,
					dslOpSvcKeiNo,
					msgsEKK0351A010[0],
					mskmDtlNo,
					aplyYmd,
					svcEndYmd,
					svcChrgEndYmd,
					updDtm,
					idoDiv,
					SVC_DLRE_CD_HKTG,
					jdgHiChrgMapOpSvcKei
			);
			inputMap.put("op_hktgi_sk_svc_kei_no", hikiSakiSvcKeiNo);
			retMsg = (CAANMsg)runSc(handle, param, EKK0351C240, inputMap);

			// 更新年月日時分秒（更新後）取得
			updDtm = retMsg.getString(EKK0351C240CBSMsg.UPD_DTM);

			// ******************************************************* //
			// オプションサービス契約解約確定                          //
			// ******************************************************* //
			inputMap = this.mapper.editInMsgEKK0351C250(
					param,
					dslOpSvcKeiNo,
					msgsEKK0351A010[0],
					svcEndYmd,
					svcChrgEndYmd,
					updDtm,
					idoDiv,
					SVC_DLRE_CD_HKTG,
					jdgHiChrgMapOpSvcKei
			);
			retMsg = (CAANMsg)runSc(handle, param, EKK0351C250, inputMap);

			// 更新年月日時分秒（更新後）取得
			updDtm = retMsg.getString(EKK0351C250CBSMsg.UPD_DTM);

			// LT-2013-0000487 オプション引継の固定グローバルIP引継時、引継元に発行されるSODが誤っている 2013/07/14 START
			// オプションサービス契約番号
			opSvkeiSodInfo.put("chbf_opsvkei_no",           dslOpSvcKeiNo);
			// オプションサービス契約世代登録年月日時分秒
			opSvkeiSodInfo.put("chbf_opsvkei_gene_add_dtm", retMsg.getString("gene_add_dtm"));
			// LT-2013-0000487 オプション引継の固定グローバルIP引継時、引継元に発行されるSODが誤っている 2013/07/14 START

			for(int i = 0; i < msgsEKK0401B001.length; i++)
			{
				// 解約サブオプションサービス契約ステータス取得
				// OM-2014-0001082 2014/03/14 MOD START
//				String dslSbOpSvcKeiStat = msgsEKK0401B001[0].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
				String dslSbOpSvcKeiStat = msgsEKK0401B001[i].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
				// OM-2014-0001082 2014/03/14 MOD END
				
				// ============================================================= //
				// サブオプションサービス契約ステータスが「030:締結済」          //
				// サブオプションサービス契約ステータスが「100:サービス提供中」  //
				// サブオプションサービス契約ステータスが「210:休止・中断中」    //
				// ============================================================= //
				if(
						SVC_KEI_STAT_030.equals(dslSbOpSvcKeiStat)
						|| SVC_KEI_STAT_100.equals(dslSbOpSvcKeiStat)
						|| SVC_KEI_STAT_210.equals(dslSbOpSvcKeiStat)
				)
				{
					// ▼▼▼▼▼ 2013/09/11 OM-2013-0001096 UPD START ▼▼▼▼▼
					// ******************************************************* //
					// 非課金判定部品実行処理＜サブオプション＞                //
					// ******************************************************* //
					// ※「解約時課金フラグ」について
					// 　　オプション、サブオプションごとに非課金判定部品を実行し、
					// 　　各々の解約時課金フラグを設定する。
					HashMap<String, Object> jdgHiChrgMapSbopSvcKei =
						runHiChrgJdgUtil(
								handle,
								param,
								inMap,
								msgsEKK0081A010[0],
								null,
								null,
								msgsEKK0401B001[i],
								DSL_SBT_FLG_SBOP_SVC_KEI_DSL
						);
					// ▲▲▲▲▲ 2013/09/11 OM-2013-0001096 UPD E N D ▲▲▲▲▲

					// ******************************************************* //
					// サブオプションサービス契約解約                          //
					// ******************************************************* //
					inputMap = this.mapper.editInMsgEKK0401C170(
							param,
							dslOpSvcKeiNo,
							msgsEKK0401B001[i],
							mskmDtlNo,
							aplyYmd,
							svcEndYmd,
							svcChrgEndYmd,
							updDtm,
							idoDiv,
							jdgHiChrgMapSbopSvcKei
					);
					inputMap.put("op_hktgi_sk_svc_kei_no", hikiSakiSvcKeiNo);
					retMsg = (CAANMsg)runSc(handle, param, EKK0401C170, inputMap);

					// 更新年月日時分秒（更新後）取得
					updDtm = retMsg.getString(EKK0401C170CBSMsg.UPD_DTM);

					// ******************************************************* //
					// サブオプションサービス契約解約確定                      //
					// ******************************************************* //
					inputMap = this.mapper.editInMsgEKK0401C180(
							param,
							dslOpSvcKeiNo,
							msgsEKK0401B001[i],
							svcEndYmd,
							svcChrgEndYmd,
							updDtm,
							idoDiv,
							jdgHiChrgMapSbopSvcKei
					);
					retMsg = (CAANMsg)runSc(handle, param, EKK0401C180, inputMap);

					// 更新年月日時分秒（更新後）取得
					updDtm = retMsg.getString(EKK0401C180CBSMsg.UPD_DTM);
				}
			}

			// ******************************************************* //
			// エイジング使用終了　ＯＲ　回復処理                      //
			// ******************************************************* //
			updateAging(handle, param, msgsEKK0351A010[0], msgsEKK0361A010[0], msgsEKK0401B001, execKbn);
		}
		// =========================================================== //
		// オプションサービス契約ステータスが「910:解約済」            //
		// =========================================================== //
		else if(SVC_KEI_STAT_910.equals(dslOpSvcKeiStat))
		{
			// OM-2014-0000761 オプション引継後の引継元メールオプションが課金されない 2014/03/20 START
			// 登録ではなく更新を行うS-IFに変更
//			// ******************************************************* //
//			// オプションサービス契約＜ＩＳＰ＞情報変更                //
//			// ******************************************************* //
//			inputMap = this.mapper.editInMsgEKK0361C050(
//					param,
//					dslOpSvcKeiNo,
//					msgsEKK0351A010[0],
//					msgsEKK0361A010[0],
//					mskmDtlNo,
//					updDtm,
//					idoDiv
//			);
//			retMsg = (CAANMsg)runSc(handle, param, EKK0361C050, inputMap);
//
//			// 更新年月日時分秒（更新後）取得
//			updDtm = retMsg.getString(EKK0361C050CBSMsg.UPD_DTM);

			// ******************************************************* //
			// オプションサービス契約＜ISP＞情報変更（更新）           //
			// ******************************************************* //
			inputMap = this.mapper.editInMsgEKK0361C051(
					param,
					dslOpSvcKeiNo,
					msgsEKK0351A010[0],
					msgsEKK0361A010[0],
					mskmDtlNo,
					updDtm
			);
			retMsg = (CAANMsg)runSc(handle, param, EKK0361C051, inputMap);

			// 更新年月日時分秒（更新後）取得
			updDtm = retMsg.getString(EKK0361C051CBSMsg.UPD_DTM);
			// OM-2014-0000761 オプション引継後の引継元メールオプションが課金されない 2014/03/20 END

			// オプションサービス契約番号
			opSvkeiSodInfo.put("chbf_opsvkei_no",           dslOpSvcKeiNo);
			// オプションサービス契約世代登録年月日時分秒
			opSvkeiSodInfo.put("chbf_opsvkei_gene_add_dtm", retMsg.getString("gene_add_dtm"));

			for(int i = 0; i < msgsEKK0401B001.length; i++)
			{
				// ******************************************************* //
				// サブオプションサービス契約一意照会                      //
				// ******************************************************* //
				inputMap = new HashMap<String, Object>();
				inputMap.put(JCMConstants.FUNC_CODE_KEY,            JPCModelConstant.FUNC_CD_2);
				inputMap.put(EKK0401A010CBSMsg.KEY_OP_SVC_KEI_NO,   msgsEKK0401B001[i].getString(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO));
				inputMap.put(EKK0401A010CBSMsg.KEY_RSV_APLY_YMD,    opeDate);
				inputMap.put(EKK0401A010CBSMsg.KEY_SBOP_SVC_KEI_NO, msgsEKK0401B001[i].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO));
				retEKK0401A010 = (CAANMsg[])runSc(handle, param, EKK0401A010, inputMap);

				// ******************************************************* //
				// サブオプションサービス契約＜ＩＳＰ＞一意照会            //
				// ******************************************************* //
				inputMap = new HashMap<String, Object>();
				inputMap.put(JCMConstants.FUNC_CODE_KEY,            JPCModelConstant.FUNC_CD_2);
				inputMap.put(EKK0401A010CBSMsg.KEY_OP_SVC_KEI_NO,   msgsEKK0401B001[i].getString(EKK0401B001CBSMsg1List.OP_SVC_KEI_NO));
				inputMap.put(EKK0401A010CBSMsg.KEY_SBOP_SVC_KEI_NO, msgsEKK0401B001[i].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO));
				retEKK0411A010 = (CAANMsg[])runSc(handle, param, EKK0411A010, inputMap);

				// OM-2014-0000761 オプション引継後の引継元メールオプションが課金されない 2014/03/20 START
				// 登録ではなく更新を行うS-IFに変更
//				// ******************************************************* //
//				// サブオプションサービス契約＜ＩＳＰ＞情報変更            //
//				// ******************************************************* //
//				inputMap = this.mapper.editInMsgEKK0411C010(
//						param,
//						dslOpSvcKeiNo,
//						retEKK0401A010[0],
//						retEKK0411A010[0],
//						mskmDtlNo,
//						updDtm,
//						idoDiv
//				);
//				retMsg = (CAANMsg)runSc(handle, param, EKK0411C010, inputMap);
//
//				// 更新年月日時分秒（更新後）取得
//				updDtm = retMsg.getString(EKK0411C010CBSMsg.UPD_DTM);

				// ******************************************************* //
				// サブオプションサービス契約<ISP>変更（更新）             //
				// ******************************************************* //
				inputMap = this.mapper.editInMsgEKK0411C011(
						param,
						dslOpSvcKeiNo,
						retEKK0401A010[0],
						retEKK0411A010[0],
						mskmDtlNo,
						updDtm
				);
				retMsg = (CAANMsg)runSc(handle, param, EKK0411C011, inputMap);

				// 更新年月日時分秒（更新後）取得
				updDtm = retMsg.getString(EKK0411C011CBSMsg.UPD_DTM);
				// OM-2014-0000761 オプション引継後の引継元メールオプションが課金されない 2014/03/20 END
			}

			// ******************************************************* //
			// エイジング使用終了　ＯＲ　回復処理                      //
			// ******************************************************* //
			updateAging(handle, param, msgsEKK0351A010[0], msgsEKK0361A010[0], msgsEKK0401B001, execKbn);
		}

		if (isHikimoto)
		{
			motoLastUpdDtm = updDtm;
		}
		else
		{
			sakiLastUpdDtm = updDtm;
		}

		return opSvkeiSodInfo;
	}


	/**
	 * <pre>
	 * 引継先キャンセル・解約処理
	 * </pre>
	 * @param	handle
	 * @param	param
	 * @param	retEKK0081A010	
	 * @param	opSvcKeiNo		引継先オプションサービス契約番号
	 * @param	mskmDtlNo		申込明細番号
	 * @param	workMap			
	 * @return	
	 * @throws	Throwable
	 */
	private void hikisakiDslOption(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			CAANMsg[] retEKK0081A010,
			String opSvcKeiNo,
			String mskmDtlNo,
			Map<String, Object> opSvkeiSodInfo,
			HashMap<String, Object> workMap
	) throws Throwable
	{
		CAANMsg[] retEKK0361A010 = null;
		CAANMsg[] retEKK0351A010 = null;
		CAANMsg[] retEKK0401B001 = null;

		HashMap<String, Object> infoMap = getOpSvcKeiInfo(handle, param, opSvcKeiNo);

		// 引継先：オプションサービス契約一意照会
		retEKK0351A010 = (CAANMsg[])infoMap.get(MAP_KEY_OP_SVC);

		// 引継先：オプションサービス契約＜ＩＳＰ＞一意照会
		retEKK0361A010 = (CAANMsg[])infoMap.get(MAP_KEY_OP_SVC_ISP);

		// 引継先：サブオプションサービス契約一覧照会
		retEKK0401B001 = (CAANMsg[])infoMap.get(MAP_KEY_SBOP_SVC);

		// 引継先：オプションサービス契約キャンセル・解約
		dslOption(
				handle,
				param,
				retEKK0081A010,
				retEKK0351A010,
				retEKK0361A010,
				retEKK0401B001,
				mskmDtlNo,
				false,
				AGING_EXEC_KBN_END,
				opSvkeiSodInfo,
				workMap
		);
	}
	
	/**
	 * <pre>
	 * SODパラメータ作成
	 * 
	 * </pre>
	 * @param hikiMotoOpSvcKeiNo 
	 * @param chbfMap
	 * @param addSodList 登録SOD情報のリスト
	 * @param sodCcInputList
	 * @param workMap 
	 * @return サービスオーダ発行部品へのパラメータ
	 * @throws Throwable
	 */
	private List<Map<String, Object>> createSODParam(
			String hikiMotoOpSvcKeiNo,
			Map<String, Object> chbfMap,
			// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
			List<Map<String, Object>> addSodList,
			// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
			List<Map<String, Object>> sodCcInputList,
			HashMap<String, Object> workMap
	)
	{
		// 引継先SYSID取得
		String hikiSakiSysid = getHikiSakiSysid(workMap);
		// 引継先サービス契約番号取得
		String hikiSakiSvcKeiNo = getHikiSakiSvcKeiNo(workMap);

		// 引継元サービス契約番号取得
		String hikiMotoSvcKeiNo = getHikiMotoSvcKeiNo(workMap);
		// 引継元オプションサービス契約ステータス
		String hikiMotoOpSvcKeiStat = getHikiMotoOpSvcKeiStat(workMap, hikiMotoOpSvcKeiNo);
		// 引継元オプションサービスコード
		String hikiMotoOpSvcCd = getHikiMotoOpSvcCd(workMap, hikiMotoOpSvcKeiNo);

		// 引継先オプションサービス契約番号
		String hikiSakiOpSvcKeiNo = getHikiSakiOpSvcKeiNo(workMap, hikiMotoOpSvcKeiNo);
		
		// 20130716 LT-2013-0000487 motoSvkeiGeneAddDtmを追加 ADD START
		// 引継元サービス契約世代登録年月日時分秒
		String hikiMotoSvkeiGeneAddDtm = getHikiMotoSvkeiGeneAddDtm(workMap);
		// 20130716 LT-2013-0000487 motoSvkeiGeneAddDtmを追加 ADD END

		// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 ADD START ▼▼▼▼▼
		// 引継先オプションサービス契約世代登録年月日
		String hikiSakiOpSvKeiGeneAddDtm = getHikiSakiOpSvKeiGeneAddDtm(workMap, hikiMotoOpSvcKeiNo);
		// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 ADD E N D ▲▲▲▲▲

		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
		// 住所変更時、オプションのSODについては住変用サービスオーダ発行部品により処理するためパラメータを設定しない
		if (!JKKSvcConst.IDO_DIV_ADCHGADD.equals(getIdoDiv(workMap)))
		{
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
			// SODCC INPUT生成処理
			// 20130716 LT-2013-0000487追加対応分 motoSvkeiGeneAddDtmを追加 MOD START
	//		Map<String, Object> sodMap = createSodMap(hikiSakiSvcKeiNo, hikiMotoSvcKeiNo, hikiSakiSysid, "00003");
			Map<String, Object> sodMap = createSodMap(hikiSakiSvcKeiNo, hikiMotoSvcKeiNo, hikiSakiSysid, "00003", hikiMotoSvkeiGeneAddDtm);
			// 20130716 LT-2013-0000487追加対応分 motoSvkeiGeneAddDtmを追加 MOD END
			Map<String, Object> opSvkeiInfo = new HashMap<String, Object>();
	
			if(OP_SVC_CD_KOTEI_IP.equals(hikiMotoOpSvcCd))
			{
				// ******************************************** //
				// 固定グローバルIPの引継の場合                 //
				// ******************************************** //
				// 引継元オプションサービス契約番号
				opSvkeiInfo.put("chbf_opsvkei_no", chbfMap.get("chbf_opsvkei_no"));
				// 引継元オプションサービス契約世代登録年月日時分秒
				opSvkeiInfo.put("chbf_opsvkei_gene_add_dtm", chbfMap.get("chbf_opsvkei_gene_add_dtm"));
				// 引継先オプションサービス契約番号
				opSvkeiInfo.put("chaf_opsvkei_no", hikiSakiOpSvcKeiNo);
	
				// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 UPD START ▼▼▼▼▼
				// 引継先オプションサービス契約世代登録年月日時分秒
				opSvkeiInfo.put("chaf_opsvkei_gene_add_dtm", hikiSakiOpSvKeiGeneAddDtm);
				// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 UPD E N D ▲▲▲▲▲
			}
			else
			{
				// ******************************************** //
				// 固定グローバルIP以外の引継の場合             //
				// ******************************************** //
				if(SVC_KEI_STAT_910.equals(hikiMotoOpSvcKeiStat))
				{
					// ******************************************** //
					// 回復の場合                                   //
					// ******************************************** //
					// 引継先オプションサービス契約番号
					opSvkeiInfo.put("chaf_opsvkei_no", hikiSakiOpSvcKeiNo);
	
					// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 UPD START ▼▼▼▼▼
					// 引継先オプションサービス契約世代登録年月日時分秒
					opSvkeiInfo.put("chaf_opsvkei_gene_add_dtm", hikiSakiOpSvKeiGeneAddDtm);
					// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 UPD E N D ▲▲▲▲▲
				}
			}
	
			if(opSvkeiInfo.size() > 0)
			{
				sodMap.put("opsvkei_info", opSvkeiInfo);
				sodCcInputList.add(sodMap);
			}
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
		}
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END

		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
		if (null != addSodList)
		{
			for (Map<String, Object> addSodMap : addSodList)
			{
				Map<String, Object> sbSodMap = createSodMap(hikiSakiSvcKeiNo, hikiMotoSvcKeiNo, hikiSakiSysid, "00003", hikiMotoSvkeiGeneAddDtm);
				Map<String, Object> sbOpSvkeiInfo = new HashMap<String, Object>();
				// 引継先オプションサービス契約番号
				sbOpSvkeiInfo.put("chaf_opsvkei_no", hikiSakiOpSvcKeiNo);
				// 引継先オプションサービス契約世代登録年月日時分秒
				sbOpSvkeiInfo.put("chaf_opsvkei_gene_add_dtm", hikiSakiOpSvKeiGeneAddDtm);
				// 引継先サブオプションサービス契約番号
				sbOpSvkeiInfo.put("chaf_sbopsvkei_no", (String)addSodMap.get("chaf_sbopsvkei_no"));
				// 引継先サブオプションサービス契約世代登録年月日時分秒
				sbOpSvkeiInfo.put("chaf_sbopsvkei_gene_add_dtm", (String)addSodMap.get("chaf_sbopsvkei_gene_add_dtm"));

				sbSodMap.put("opsvkei_info", sbOpSvkeiInfo);
				sodCcInputList.add(sbSodMap);
			}
		}
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END

		return sodCcInputList;
	}
// IT1-2012-0000585 2012/06/14 add end

	// SEP-0020-00-00 現行ICS指摘対応：337 ADD START
	/**
	 * 非課金判定部品実行処理
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param inMap 入力パラメータ
	 * @param msgEKK0081A010 サービス契約一意照会結果
	 * @param msgEKK0161A010 サービス契約内訳一意照会結果
	 * @param msgEKK0351A010 オプションサービス契約一意照会結果
	 * @param msgEKK0401A010 サブオプションサービス契約一意照会結果
	 * @param dslSbtFlg 解約種別フラグ
	 * @throws Throwable 
	 */
	private HashMap<String, Object> runHiChrgJdgUtil(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> inMap,
			CAANMsg msgEKK0081A010,
			CAANMsg msgEKK0161A010,
			CAANMsg msgEKK0351A010,
			CAANMsg msgEKK0401A010,
			String dslSbtFlg
	) throws Throwable
	{
		// 引数チェック
		if(dslSbtFlg == null)
		{
			throw new IllegalArgumentException("解約種別フラグが設定されていません");
		}
		else if(msgEKK0081A010 == null)
		{
			throw new IllegalArgumentException("サービス契約一意照会結果が設定されていません");
		}
		// サポート外の解約種別フラグを選択された場合、エラー
		else if(!DSL_SBT_FLG_SVC_KEI_DSL.equals(dslSbtFlg) && !DSL_SBT_FLG_OP_SVC_KEI_DSL.equals(dslSbtFlg) && !DSL_SBT_FLG_SBOP_SVC_KEI_DSL.equals(dslSbtFlg))
		{
			throw new IllegalArgumentException("不正な解約種別フラグが選択されました。");
		}
		// 指定した解約種別フラグに対応した結果オブジェクトが設定されていない場合、エラー
		else if(
				(DSL_SBT_FLG_OP_SVC_KEI_DSL.equals(dslSbtFlg) && (msgEKK0351A010 == null))
				|| (DSL_SBT_FLG_SBOP_SVC_KEI_DSL.equals(dslSbtFlg) && (msgEKK0401A010 == null))
		)
		{
			throw new IllegalArgumentException("指定した解約種別フラグに応じた結果オブジェクトが設定されていません");
		}

		// ▼▼▼▼▼ 2012/11/16 IT1-2012-0002095 DEL START ▼▼▼▼▼
		// ワーク領域に存在する場合、ワーク領域から削除する
		if(getWorkjdgHiChrgJdgUtil(param) != null)
		{
			delWorkJdgHiChrgJdgUtil(param);
		}
		// ▲▲▲▲▲ 2012/11/16 IT1-2012-0002095 DEL E N D ▲▲▲▲▲

		HashMap<String, Object> trgtData = null;
		HashMap<String, Object> resultMap = null;

		// 必要な情報をマッピングする
		trgtData = editMapHiChrgJdgUtil(inMap, msgEKK0081A010, msgEKK0161A010, msgEKK0351A010, msgEKK0401A010, dslSbtFlg);

		// マッピングがNULLの場合は実行しない
		if(trgtData != null)
		{
			// ▼▼▼▼▼ 2013/09/11 OM-2013-0001096 UPD START ▼▼▼▼▼
			resultMap = JKKBpCommon.jdgHiChrgKK(handle, param, trgtData, dslSbtFlg);
			// ▲▲▲▲▲ 2013/09/11 OM-2013-0001096 UPD E N D ▲▲▲▲▲

			// ▼▼▼▼▼ 2012/11/16 IT1-2012-0002095 DEL START ▼▼▼▼▼
			// 結果をワーク領域に保持する
			if(resultMap != null)
			{
				setWorkJdgHiChrgJdgUtil(param, resultMap);
			}
			// ▲▲▲▲▲ 2012/11/16 IT1-2012-0002095 DEL E N D ▲▲▲▲▲
		}

		return resultMap;
	}
	
	/**
	 * 非課金判定部品実行結果登録処理
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param inMap 入力パラメータ
	 * @param HiChrgJdgResultMap 非課金判定部品実行結果
	 * @throws RequestParameterException 
	 * @throws Throwable 
	 */
	private void setWorkJdgHiChrgJdgUtil(IRequestParameterReadWrite param, HashMap<String, Object> jdgHiChrgJdgResultMap) throws RequestParameterException
	{
		param.setData("jdgHiChrgJdgMap", jdgHiChrgJdgResultMap);
	}
	
	/**
	 * 非課金判定部品実行結果取得処理
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @return 非課金判定部品実行結果
	 * @throws RequestParameterException 
	 * @throws Throwable 
	 */
	private Object getWorkjdgHiChrgJdgUtil(IRequestParameterReadWrite param) throws RequestParameterException
	{
		return param.getData("jdgHiChrgJdgMap");
	}
	
	/**
	 * 非課金判定部品実行結果削除処理
	 * 
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param inMap 入力パラメータ
	 * @param HiChrgJdgResultMap 非課金判定部品実行結果
	 * @throws RequestParameterException 
	 * @throws Throwable 
	 */
	private void delWorkJdgHiChrgJdgUtil(IRequestParameterReadWrite param) throws RequestParameterException
	{
		param.removeData("jdgHiChrgJdgMap");
	}

	/**
	 *<DL>
	 *<DT>処理概要:非課金判定部品のマッピング処理
	 *<DD>サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 *<DT>入力パラメータ説明:
	 *<DD>特になし
	 *<DT>入力パラメータ説明：
	 *<DD>特になし
	 *<DT>出力パラメータ説明:
	 *<DD>特になし
	 *</DL>
	 * @param	inMap			業務情報を保持するマップ
	 * @param	msgEKK0081A010	サービス契約一意照会結果
	 * @param	msgEKK0161A010	サービス契約内訳一意照会結果
	 * @param	msgEKK0351A010	オプションサービス契約一意照会結果
	 * @param	msgEKK0401A010	サブオプションサービス契約一意照会結果
	 * @param	dslSbtFlg		解約対象フラグ
	 * @throws	RequestParameterException
	 * @since	2011.06.07
	 */
	@SuppressWarnings("unchecked")
	public HashMap<String, Object> editMapHiChrgJdgUtil(
			HashMap<String, Object> inMap,
			CAANMsg msgEKK0081A010,
			CAANMsg msgEKK0161A010,
			CAANMsg msgEKK0351A010,
			CAANMsg msgEKK0401A010,
			String dslSbtFlg
	) throws RequestParameterException 
	{
		HashMap<String, Object> workMap = new HashMap<String, Object>();
		JKKDslRunMapperCC dslRunMapper = new JKKDslRunMapperCC();

		// ▼▼▼▼▼ 2013/09/11 OM-2013-0001096 UPD START ▼▼▼▼▼
		// 解約種別に応じて、処理を変える
		// ======================================================================= //
		// サービス契約解約＆オプションサービス契約                                //
		// ======================================================================= //
		if(
				JKKDslRun.DSL_SBT_FLG_SVC_KEI_DSL.equals(dslSbtFlg)
				|| JKKDslRun.DSL_SBT_FLG_OP_SVC_KEI_DSL.equals(dslSbtFlg)
		)
		{
			workMap.put("svcKeiChrgEndYmd", inMap.get("svc_chrg_endymd"));
		}

		// ======================================================================= //
		// オプションサービス契約解約                                              //
		// ======================================================================= //
		if(JKKDslRun.DSL_SBT_FLG_OP_SVC_KEI_DSL.equals(dslSbtFlg))
		{
			workMap.put("opSvcUseEndYmd", inMap.get("svc_endymd"));
		}

		// ======================================================================= //
		// サブオプションサービス契約解約                                          //
		// ======================================================================= //
		if(JKKDslRun.DSL_SBT_FLG_SBOP_SVC_KEI_DSL.equals(dslSbtFlg))
		{
			workMap.put("subOpSvcUseEndYmd", inMap.get("svc_endymd"));
		}
		// ▲▲▲▲▲ 2013/09/11 OM-2013-0001096 UPD E N D ▲▲▲▲▲

		// 解約CCマッパーの非課金判定情報設定処理を共通化
		return dslRunMapper.editMapHiChrgJdgUtil(
				inMap,
				msgEKK0081A010,
				msgEKK0161A010,
				msgEKK0351A010,
				msgEKK0401A010,
				dslSbtFlg,
				workMap
			);
	}
	// SEP-0020-00-00 ADD END

	// ▼▼▼▼▼ 2012/12/13 IT1-2012-0002332 ADD START ▼▼▼▼▼
	private void updateAging(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			CAANMsg msgEKK0351A010,
			CAANMsg msgEKK0361A010,
			CAANMsg[] msgsEKK0401B001,
			String execKbn
	) throws Throwable
	{
		// オプションサービスコード
		String opSvcCd = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.OP_SVC_CD);

		// Ｅメール、Ｍｙホームページ、メーリングリスト、固定グローバルＩＰアドレス、マルチセッションではない場合は処理しない
		if(
				!OP_SVC_CD_EMAIL.equals(opSvcCd)
				&& !OP_SVC_CD_MYHOMEPAGE.equals(opSvcCd)
				&& !OP_SVC_CD_MAILINGLIST.equals(opSvcCd)
				&& !OP_SVC_CD_KOTEI_IP.equals(opSvcCd)
				&& !OP_SVC_CD_MLTISE.equals(opSvcCd))
		{
			return;
		}

		// エイジング処理用マップ
		HashMap<String, Object> agingMap = new HashMap<String, Object>();
		// 
		HashMap<String, Object> inputMap = new HashMap<String, Object>();

		// オプションサービス契約番号
		String opSvcKeiNo    = msgEKK0351A010.getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_NO);

		// エイジング対象データの取得
		String tmpIp         = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.KOTEI_IP_AD);
		String tmpUrlDomain  = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.URL_DOMAIN);
		String tmpUrlAccount = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.URL_ACCOUNT);
		String tmpWebId      = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.WEB_ID);
		String tmpPopId      = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.POP_ID);
		String tmpMlad       = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.MLAD);
		String tmpMllist     = msgEKK0361A010.getString(EKK0361A010CBSMsg1List.MLLIST_NM);

		// ＩＰアドレス
		if (tmpIp != null && ! "".equals(tmpIp))
		{
			agingMap.clear();
			agingMap.put(AGING_MAP_KEY_AGING_SBT_CD, AGING_SBT_CD_IP);
			agingMap.put(AGING_MAP_KEY_AGING_TG_VALUE, tmpIp);

			if (AGING_EXEC_KBN_ADD.equals(execKbn))
			{
				useAddAging(handle, param, agingMap);
			}
			else if (AGING_EXEC_KBN_KIHK.equals(execKbn))
			{
				useKihkAging(handle, param, agingMap);
			}
			else
			{
				useEndAging(handle, param, agingMap);
			}
		}

		// ＵＲＬ
		if (
				(tmpUrlDomain  != null && ! "".equals(tmpUrlDomain)) || 
				(tmpUrlAccount != null && ! "".equals(tmpUrlAccount))
		)
		{
			agingMap.clear();
			agingMap.put(AGING_MAP_KEY_AGING_SBT_CD, AGING_SBT_CD_URL);
			agingMap.put(AGING_MAP_KEY_AGING_TG_VALUE, tmpUrlDomain + tmpUrlAccount);

			if (AGING_EXEC_KBN_ADD.equals(execKbn))
			{
				useAddAging(handle, param, agingMap);
			}
			else if (AGING_EXEC_KBN_KIHK.equals(execKbn))
			{
				useKihkAging(handle, param, agingMap);
			}
			else
			{
				useEndAging(handle, param, agingMap);
			}
		}

		// ＷｅｂＩＤ
		if (tmpWebId != null && ! "".equals(tmpWebId))
		{
			agingMap.clear();
			agingMap.put(AGING_MAP_KEY_AGING_SBT_CD, AGING_SBT_CD_WEB_ID);
			agingMap.put(AGING_MAP_KEY_AGING_TG_VALUE, tmpWebId);

			if (AGING_EXEC_KBN_ADD.equals(execKbn))
			{
				useAddAging(handle, param, agingMap);
			}
			else if (AGING_EXEC_KBN_KIHK.equals(execKbn))
			{
				useKihkAging(handle, param, agingMap);
			}
			else
			{
				useEndAging(handle, param, agingMap);
			}
		}

		// ＰｏｐＩＤ
		if (tmpPopId != null && ! "".equals(tmpPopId))
		{
			agingMap.clear();
			agingMap.put(AGING_MAP_KEY_AGING_SBT_CD, AGING_SBT_CD_POP_ID);
			agingMap.put(AGING_MAP_KEY_AGING_TG_VALUE, tmpPopId);

			if (AGING_EXEC_KBN_ADD.equals(execKbn))
			{
				useAddAging(handle, param, agingMap);
			}
			else if (AGING_EXEC_KBN_KIHK.equals(execKbn))
			{
				useKihkAging(handle, param, agingMap);
			}
			else
			{
				useEndAging(handle, param, agingMap);
			}
		}

		// メールアドレス
		if (tmpMlad != null && ! "".equals(tmpMlad))
		{
			agingMap.clear();
			agingMap.put(AGING_MAP_KEY_AGING_SBT_CD, AGING_SBT_CD_MLAD);
			agingMap.put(AGING_MAP_KEY_AGING_TG_VALUE, tmpMlad);

			if (AGING_EXEC_KBN_ADD.equals(execKbn))
			{
				useAddAging(handle, param, agingMap);
			}
			else if (AGING_EXEC_KBN_KIHK.equals(execKbn))
			{
				useKihkAging(handle, param, agingMap);
			}
			else
			{
				useEndAging(handle, param, agingMap);
			}
		}

		// メーリングリスト
		if (tmpMllist != null && ! "".equals(tmpMllist))
		{
			// 業務パラメータ管理一意照会実行処理
			HashMap<String, Object> mapEZM0321A010 = this.mapper.editInMsgEZM0321A010(WORK_PARAM_ID_MLLIST_NM_DOMAIN);
			CAANMsg[] msgsEZM0321A010 = (CAANMsg[])runSc(handle, param, EZM0321A010, mapEZM0321A010);

			// メーリングリストドメイン取得
			String domain =  msgsEZM0321A010[0].getString(EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);

			agingMap.clear();
			agingMap.put(AGING_MAP_KEY_AGING_SBT_CD, AGING_SBT_CD_MLLIST);
			agingMap.put(AGING_MAP_KEY_AGING_TG_VALUE, tmpMllist + "@" + domain);

			if (AGING_EXEC_KBN_ADD.equals(execKbn))
			{
				useAddAging(handle, param, agingMap);
			}
			else if (AGING_EXEC_KBN_KIHK.equals(execKbn))
			{
				useKihkAging(handle, param, agingMap);
			}
			else
			{
				useEndAging(handle, param, agingMap);
			}
		}

		for (int i = 0; i < msgsEKK0401B001.length; i++)
		{
			// サブオプションサービス契約番号
			String sbOpSvcKeiNo = msgsEKK0401B001[i].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO);

			inputMap = new HashMap<String, Object>();
			inputMap.put(JCMConstants.FUNC_CODE_KEY,            JPCModelConstant.FUNC_CD_2);
			inputMap.put(EKK0411A010CBSMsg.KEY_OP_SVC_KEI_NO,   opSvcKeiNo);
			inputMap.put(EKK0411A010CBSMsg.KEY_SBOP_SVC_KEI_NO, sbOpSvcKeiNo);

			CAANMsg[] retEKK0411A010 = (CAANMsg[])runSc(handle, param, EKK0411A010, inputMap);

			// エイジング対象データの取得
			String tmpAlias = retEKK0411A010[0].getString(EKK0411A010CBSMsg1List.ALIAS);

			// メールエイリアス
			if (tmpAlias != null && ! "".equals(tmpAlias))
			{
				
				// 2013/05/24 ST3-2013-0000919 START
				// メールアドレスのドメイン部を取得する
				String[] spritMlad = tmpMlad.split(AT_MARK);
				if(spritMlad != null && spritMlad.length > 0)
				{
					// ドメインを、メールエイリアスに追加する
					tmpAlias += AT_MARK + spritMlad[1];
				}
				// 2013/05/24 ST3-2013-0000919 END
				agingMap.clear();
				agingMap.put(AGING_MAP_KEY_AGING_SBT_CD, AGING_SBT_CD_ALIAS);
				agingMap.put(AGING_MAP_KEY_AGING_TG_VALUE, tmpAlias);

				if (AGING_EXEC_KBN_ADD.equals(execKbn))
				{
					useAddAging(handle, param, agingMap);
				}
				else if (AGING_EXEC_KBN_KIHK.equals(execKbn))
				{
					useKihkAging(handle, param, agingMap);
				}
				else
				{
					useEndAging(handle, param, agingMap);
				}
			}

		}

	}

	private CAANMsg useAddAging(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> agingMap
	) throws Throwable
	{
		HashMap<String, Object> inputMap = null;
		CAANMsg[] msgsEZM0111B030 = null;
		CAANMsg retMsg = null;

		inputMap = this.mapper.editInMsgEZM0111B030(agingMap);
		msgsEZM0111B030 = (CAANMsg[])runSc(handle, param, EZM0111B030, inputMap);

		if (null == msgsEZM0111B030)
		{
			inputMap = this.mapper.editInMsgEZM0111D010(agingMap);
			retMsg = (CAANMsg)runSc(handle, param, EZM0111D010, inputMap);
		}

		return retMsg;
	}

	private CAANMsg useEndAging(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> agingMap
	) throws Throwable
	{
		HashMap<String, Object> inputMap = null;
		CAANMsg[] msgsEZM0111B030 = null;
		CAANMsg retMsg = null;

		inputMap = this.mapper.editInMsgEZM0111B030(agingMap);
		msgsEZM0111B030 = (CAANMsg[])runSc(handle, param, EZM0111B030, inputMap);

		if (null != msgsEZM0111B030 && 0 < msgsEZM0111B030.length)
		{
			CAANMsg msgEZM0111B030 = msgsEZM0111B030[0];

			// エイジングステータス取得
			String agingStat = (String)msgEZM0111B030.getString(EZM0111B030CBSMsg1List.AGING_STAT);

			if (AGING_STAT_USE.equals(agingStat))
			{
				inputMap = this.mapper.editInMsgEZM0111C010(agingMap, msgEZM0111B030);
				retMsg = (CAANMsg)runSc(handle, param, EZM0111C010, inputMap);
			}
		}

		return retMsg;
	}

	private CAANMsg useKihkAging(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> agingMap
	) throws Throwable
	{
		HashMap<String, Object> inputMap = null;
		CAANMsg[] msgsEZM0111B030 = null;
		CAANMsg retMsg = null;

		inputMap = this.mapper.editInMsgEZM0111B030(agingMap);
		msgsEZM0111B030 = (CAANMsg[])runSc(handle, param, EZM0111B030, inputMap);

		if (null != msgsEZM0111B030 && 0 < msgsEZM0111B030.length)
		{
			CAANMsg msgEZM0111B030 = msgsEZM0111B030[0];

			// エイジングステータス取得
			String agingStat = (String)msgEZM0111B030.getString(EZM0111B030CBSMsg1List.AGING_STAT);

			if (AGING_STAT_KIHK_OK.equals(agingStat))
			{
				inputMap = this.mapper.editInMsgEZM0111C020(agingMap, msgEZM0111B030);
				retMsg = (CAANMsg)runSc(handle, param, EZM0111C020, inputMap);
			}
		}

		return retMsg;
	}

	/**
	 * オプションサービス契約情報取得<br>
	 * <br>
	 * @param	handle		
	 * @param	param		
	 * @param	opSvcKeiNo	
	 * @return	
	 * @throws	Throwable
	 */
	private HashMap<String, Object> getOpSvcKeiInfo(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String opSvcKeiNo
	) throws Throwable
	{
		HashMap<String, Object> retMap   = new HashMap<String, Object>();

		HashMap<String, Object> inputMap = new HashMap<String, Object>();
	
		// オプションサービス契約一意照会
		inputMap = new HashMap<String, Object>();
		inputMap.put(JCMConstants.FUNC_CODE_KEY,          JPCModelConstant.FUNC_CD_2);
		inputMap.put(EKK0351A010CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo);
		inputMap.put(EKK0351A010CBSMsg.KEY_RSV_APLY_YMD,  opeDate);
		CAANMsg[] retEKK0351A010 = (CAANMsg[])runSc(handle, param, EKK0351A010, inputMap);

		// オプションサービス契約＜ＩＳＰ＞一意照会
		inputMap = new HashMap<String, Object>();
		inputMap.put(JCMConstants.FUNC_CODE_KEY,          JPCModelConstant.FUNC_CD_2);
		inputMap.put(EKK0361A010CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo);
		CAANMsg[] retEKK0361A010 = (CAANMsg[])runSc(handle, param, EKK0361A010, inputMap);

		// サブオプションサービス契約一覧照会
		inputMap = new HashMap<String, Object>();
		inputMap.put(JCMConstants.FUNC_CODE_KEY,          JPCModelConstant.FUNC_CD_1);
		inputMap.put(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo);
		CAANMsg[] retEKK0401B001 = (CAANMsg[])runSc(handle, param, EKK0401B001, inputMap);

		retMap.put(MAP_KEY_OP_SVC,     retEKK0351A010);
		retMap.put(MAP_KEY_OP_SVC_ISP, retEKK0361A010);
		retMap.put(MAP_KEY_SBOP_SVC,   retEKK0401B001);

		return retMap;
	}

	/**
	 * サブオプションサービス契約情報取得<br>
	 * <br>
	 * @param	handle		
	 * @param	param		
	 * @param	opSvcKeiNo	
	 * @param	sbOpSvcKiNo	
	 * @return	
	 * @throws	Throwable
	 */
	private HashMap<String, Object> getSbOpSvcKeiInfo(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String opSvcKeiNo,
			String sbOpSvcKiNo
	) throws Throwable
	{
		HashMap<String, Object> retMap   = new HashMap<String, Object>();

		HashMap<String, Object> inputMap = new HashMap<String, Object>();

		// サブオプションサービス契約一意照会
		inputMap = new HashMap<String, Object>();
		inputMap.put(JCMConstants.FUNC_CODE_KEY,            JPCModelConstant.FUNC_CD_2);
		inputMap.put(EKK0401A010CBSMsg.KEY_OP_SVC_KEI_NO,   opSvcKeiNo);
		inputMap.put(EKK0401A010CBSMsg.KEY_RSV_APLY_YMD,    opeDate);
		inputMap.put(EKK0401A010CBSMsg.KEY_SBOP_SVC_KEI_NO, sbOpSvcKiNo);
		CAANMsg[] retEKK0401A010 = (CAANMsg[])runSc(handle, param, EKK0401A010, inputMap);

		// サブオプションサービス契約＜ISP＞一意照会
		inputMap = new HashMap<String, Object>();
		inputMap.put(JCMConstants.FUNC_CODE_KEY,            JPCModelConstant.FUNC_CD_2);
		inputMap.put(EKK0411A010CBSMsg.KEY_OP_SVC_KEI_NO,   opSvcKeiNo);
		inputMap.put(EKK0411A010CBSMsg.KEY_SBOP_SVC_KEI_NO, sbOpSvcKiNo);
		CAANMsg[] retEKK0411A010 = (CAANMsg[])runSc(handle, param, EKK0411A010, inputMap);

		retMap.put(MAP_KEY_SBOP_SVC,     retEKK0401A010);
		retMap.put(MAP_KEY_SBOP_SVC_ISP, retEKK0411A010);

		return retMap;
	}

	/**
	 * オプション登録処理<br>
	 * <br>
	 * @param	handle					
	 * @param	param					
	 * @param	retHikiMotoEKK0351A010	
	 * @param	retHikiMotoEKK0361A010	
	 * @param	retHikiMotoEKK0401B001	
	 * @param	hikiSakiSeikyKeiNo		
	 * @param	mskmDtlNo				
	 * @param	hikiMotoOpSvcKeiNo		
	 * @param	famiPackAri				
	 * @param	opSvkeiSodInfo			
	 * @param	hikiSakiSbOpSvcKeiNo	
	 * @param	hikiSakiSbOpSvcCd		
	 * @param	sodCcInputList			
	 * @param	workMap					
	 * @return 登録SOD情報のリスト
	 * @throws	Throwable
	 */
	// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
//	private void addOption(
	private List<Map<String, Object>> addOption(
	// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
			SessionHandle handle,
			IRequestParameterReadWrite param,
			CAANMsg[] retHikiMotoEKK0351A010,
			CAANMsg[] retHikiMotoEKK0361A010,
			CAANMsg[] retHikiMotoEKK0401B001,
			String hikiSakiSeikyKeiNo,
			String mskmDtlNo,
			String hikiMotoOpSvcKeiNo,
			Boolean famiPackAri,
			Map<String, Object> opSvkeiSodInfo,
			// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
//			String[] hikiSakiSbOpSvcKeiNo,
//			String[] hikiSakiSbOpSvcCd,
			List<String> hikiSakiSbOpSvcKeiNo,
			List<String> hikiSakiSbOpSvcCd,
			// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
			List<Map<String, Object>> sodCcInputList,
			HashMap<String, Object> workMap
	) throws Throwable
	{
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
		List<Map<String, Object>> addSodList = new ArrayList<Map<String,Object>>();
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END

		HashMap<String, Object> inputMap = new HashMap<String, Object>();

		String hikiSakiGeneAddDtm = null;

		CAANMsg[] retHikiMotoEKK0401A010 = null;
		CAANMsg[] retHikiMotoEKK0411A010 = null;

		// 引継元オプションサービスコード
		String hikiMotoOpSvcCd = getHikiMotoOpSvcCd(workMap, hikiMotoOpSvcKeiNo);

		// 引継先SYSID
		String hikiSakiSysid = getHikiSakiSysid(workMap);
		// 引継先サービス契約番号
		String hikiSakiSvcKeiNo = getHikiSakiSvcKeiNo(workMap);
		// 引継先サービス契約ステータス
		String hikiSakiSvcKeiStat = getHikiSakiSvcKeiStat(workMap);
		// 引継先サービス契約内訳番号
		String hikiSakiSvcKeiUcwkNo = getHikiSakiSvcKeiUcwkNo(workMap);
		// 異動区分
		String idoDiv = getIdoDiv(workMap);
		// 適用年月日
		String rsvAplyYmd = getAplyYmd(workMap);

		// ******************************************************* //
		// オプションサービス契約＜ＩＳＰ＞登録処理                //
		// ******************************************************* //

		// 引継元情報をセット
		inputMap = this.mapper.editInMsgEKK0361D010(param, retHikiMotoEKK0351A010[0], retHikiMotoEKK0361A010[0], getIdoDiv(workMap));

		// 引継先情報をセット
		inputMap.put(EKK0361D010CBSMsg.SVC_KEI_NO,           hikiSakiSvcKeiNo);		// サービス契約番号
		inputMap.put(EKK0361D010CBSMsg.SYSID,                hikiSakiSysid);		// ＳＹＳＩＤ
		inputMap.put(EKK0361D010CBSMsg.SEIKY_KEI_NO,         hikiSakiSeikyKeiNo);	// 請求契約番号
		inputMap.put(EKK0361D010CBSMsg.MSKM_DTL_NO,          mskmDtlNo);			// 申込明細番号

		inputMap.put(EKK0361D010CBSMsg.UPD_DTM_BF,           sakiLastUpdDtm);		// 更新年月日時分秒（更新前）
		inputMap.put(EKK0361D010CBSMsg.SVC_USE_STA_KIBO_YMD, rsvAplyYmd);			// 
		inputMap.put(EKK0361D010CBSMsg.DSP_SVCTK_STAYMD,     rsvAplyYmd);			// 
		inputMap.put(EKK0361D010CBSMsg.RSV_TSTA_KIBO_YMD,    rsvAplyYmd);			// 

		if(OP_SVC_CD_KOTEI_IP.equals(hikiMotoOpSvcCd))
		{
			// 固定IPアドレスの場合、サービス契約内訳番号を設定
			inputMap.put(EKK0361D010CBSMsg.SVC_KEI_UCWK_NO, hikiSakiSvcKeiUcwkNo);
		}

		CAANMsg retOptionMsg = (CAANMsg)runSc(handle, param, EKK0361D010, inputMap);

		sakiLastUpdDtm     = retOptionMsg.getString(EKK0361D010CBSMsg.UPD_DTM);

		// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 ADD START ▼▼▼▼▼
		hikiSakiGeneAddDtm = retOptionMsg.getString(EKK0361D010CBSMsg.KK0351_GENE_ADD_DTM);

		// 引継先オプションサービス契約世代登録年月日セット
		setHikiSakiOpSvKeiGeneAddDtm(workMap, hikiMotoOpSvcKeiNo, hikiSakiGeneAddDtm);
		// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 ADD E N D ▲▲▲▲▲

		// 引継先オプションサービス契約番号取得
		setHikiSakiOpSvcKeiNo(workMap, hikiMotoOpSvcKeiNo, retOptionMsg.getString(EKK0361D010CBSMsg.OP_SVC_KEI_NO));
		// 引継先オプションサービス契約ステータス取得
		setHikiSakiOpSvcKeiStat(workMap, hikiMotoOpSvcKeiNo, retOptionMsg.getString(EKK0361D010CBSMsg.OP_SVC_KEI_STAT));

		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
		// ファミリーパックに付随するメールウイルスチェックの登録要否は、既存の引継処理後に判定するため、以下コメントアウト
		// OM-2014-0000703 2014/03/07 ADD START
//		// ウィルスチェックの有無判定
//		boolean ulsCheckopFlg = false;
//		
//		// 引継ぎ先にファミリーパックが保持している場合はサブオプション「ウィルスチェック」を登録、元々引き継ぐ元にある場合は不要
//		for(int sbOpIdx = 0; sbOpIdx < retHikiMotoEKK0401B001.length; sbOpIdx++)
//		{
//			// サブオプションサービス契約番号
//			String hikiMotoSbOpSvcKeiNo   = retHikiMotoEKK0401B001[sbOpIdx].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO);
//			// サブオプションサービスコード
//			String hikiMotoSbOpSvcCd      = retHikiMotoEKK0401B001[sbOpIdx].getString(EKK0401B001CBSMsg1List.SBOP_SVC_CD);
//			
//			// ウィルスチェックの有無を確認
//			if (SBOP_SVC_CD_MAIL_VIRUS_CHK.equals(hikiMotoSbOpSvcCd)) {
//				ulsCheckopFlg = true;
//			}
//		}
//		
//		// サブオプション存在するかどうかを判断（サブオプションが１件もないまたはウィルスチェックは保持していない）
//		if (retHikiMotoEKK0401B001 == null || retHikiMotoEKK0401B001.length == 0 || !ulsCheckopFlg) {
//			// ファミリパック存在時のみ下記を実施
//			if (famiPackAri)
//			{
//				// サブオプションウィルスチェックを登録
//				inputMap = this.mapper.editInMsgEKK0411D010(
//									param,
//									getHikiSakiOpSvcKeiNo(workMap, hikiMotoOpSvcKeiNo),
//									mskmDtlNo,
//									hikiSakiSeikyKeiNo,
//									sakiLastUpdDtm,
//									rsvAplyYmd,
//									idoDiv
//				);
//				
//				CAANMsg retMsg = (CAANMsg)runSc(handle, param, EKK0411D010, inputMap);
//				
//				sakiLastUpdDtm = retMsg.getString(EKK0411D010CBSMsg.UPD_DTM);
//			}
//		}
//		// OM-2014-0000703 2014/03/07 ADD END

		// メールウイルスチェックが引継対象かどうか
		boolean existsVirusCheck = false;
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
	
		for(int sbOpIdx = 0; sbOpIdx < retHikiMotoEKK0401B001.length; sbOpIdx++)
		{
			// サブオプションサービス契約番号
			String hikiMotoSbOpSvcKeiNo   = retHikiMotoEKK0401B001[sbOpIdx].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO);
			// サブオプションサービスコード
			String hikiMotoSbOpSvcCd      = retHikiMotoEKK0401B001[sbOpIdx].getString(EKK0401B001CBSMsg1List.SBOP_SVC_CD);
			// サブオプションサービス契約ステータス
			String hikiMotoSbOpSvcKeiStat = retHikiMotoEKK0401B001[sbOpIdx].getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
			// OM-2014-0000703 2014/03/07 DEL START
			// IT2-2012-0001485 2012/08/23 start
			// ファミリーパック有りの場合かつもともとウィルスチェックなしから上で登録した場合、ウィルスチェックの引継ぎ処理をしない
//			if (famiPackAri && SBOP_SVC_CD_MAIL_VIRUS_CHK.equals(hikiMotoSbOpSvcCd))
//			{
//				continue;
//			}
			// IT2-2012-0001485 2012/08/23 end
			// OM-2014-0000703 2014/03/07 DEL END
			
			// ▼▼▼▼▼ 2013/08/24 OM-2013-0000731 ADD START ▼▼▼▼▼
			boolean hktgChk = true;

			if (
					SVC_KEI_STAT_910.equals(hikiMotoSbOpSvcKeiStat)
					|| SVC_KEI_STAT_920.equals(hikiMotoSbOpSvcKeiStat)
			)
			{
				// 「解約済」「キャンセル済」の場合は、サブオプションの引継ぎを行わない
				// ※ただし、オプションの解約、キャンセルによって
				//   友連れで解約、キャンセルされた分に関しては、引継ぎを行う
				hktgChk = false;

				// 引継元オプションサービス契約ステータス
				String hikiMotoOpSvcKeiStat = getHikiMotoOpSvcKeiStat(workMap, hikiMotoOpSvcKeiNo);

				// オプションとサブオプションのステータスが一致する場合
				if (hikiMotoOpSvcKeiStat.equals(hikiMotoSbOpSvcKeiStat))
				{
					// 申込明細番号（オプションサービス契約）
					String mskmDtlNoAtOpSvcKei   = retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.MSKM_DTL_NO);
					// 申込明細番号（サブオプションサービス契約）
					String mskmDtlNoAtSbOpSvcKei = retHikiMotoEKK0401B001[sbOpIdx].getString(EKK0401B001CBSMsg1List.MSKM_DTL_NO);

					// オプションとサブオプションの申込明細番号が一致する場合
					if (mskmDtlNoAtOpSvcKei.equals(mskmDtlNoAtSbOpSvcKei))
					{
						hktgChk = true;
					}
				}
			}
// ▽▽▽ ANK-4577-00-00 ADD START
			// オプション引継かつ、PCワイドプランかつ、サービス提供中未満の場合、引継をスキップ
			if (JKKSvcConst.IDO_DIV_OPHKTGI.equals(idoDiv) && SBOP_SVC_CD_PC_WIDE_PLAN.equals(hikiMotoSbOpSvcCd) && SVC_KEI_STAT_100.compareTo(hikiMotoSbOpSvcKeiStat) > 0)
			{
				hktgChk = false;
			}
// △△△ ANK-4577-00-00 ADD END

			if (! hktgChk)
			{
				continue;
			}
			// ▲▲▲▲▲ 2013/08/24 OM-2013-0000731 ADD E N D ▲▲▲▲▲

			// サブオプションサービス契約情報取得
			HashMap<String, Object> infoMap = getSbOpSvcKeiInfo(handle, param, hikiMotoOpSvcKeiNo, hikiMotoSbOpSvcKeiNo);

			// 引継元：サブオプションサービス契約一意照会
			retHikiMotoEKK0401A010 = (CAANMsg[])infoMap.get(MAP_KEY_SBOP_SVC);
			// 引継元：サブオプションサービス契約＜ISP＞一意照会
			retHikiMotoEKK0411A010 = (CAANMsg[])infoMap.get(MAP_KEY_SBOP_SVC_ISP);
			
			// OM-2014-0002930対応 20140910 田中 ADD START
			// 引継元のオプションサービスがMyHPの場合
			if (OP_SVC_CD_MYHOMEPAGE.equals(retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_CD))){
				// サブオプションサービス契約に登録する追加容量の取得処理
				int addCapa = this.getAddCapa(handle, param, workMap, retHikiMotoEKK0361A010);

				// ******************************************************* //
				// サブオプションサービス契約＜ＩＳＰ＞登録処理            //
				// ******************************************************* //
				inputMap = this.mapper.editInMsgEKK0411D010MyHp(
						param,
						getHikiSakiOpSvcKeiNo(workMap, hikiMotoOpSvcKeiNo),
						retHikiMotoEKK0401A010[0],
						retHikiMotoEKK0411A010[0],
						mskmDtlNo,
						hikiSakiSeikyKeiNo,
						sakiLastUpdDtm,
						rsvAplyYmd,
						idoDiv,
						addCapa
				);
				
			// 引継元のオプションサービスがMyHPでない場合
			} else {
			// OM-2014-0002930対応 20140910 田中 ADD END
			
				// ******************************************************* //
				// サブオプションサービス契約＜ＩＳＰ＞登録処理            //
				// ******************************************************* //
				inputMap = this.mapper.editInMsgEKK0411D010(
						param,
						getHikiSakiOpSvcKeiNo(workMap, hikiMotoOpSvcKeiNo),
						retHikiMotoEKK0401A010[0],
						retHikiMotoEKK0411A010[0],
						mskmDtlNo,
						hikiSakiSeikyKeiNo,
						sakiLastUpdDtm,
						rsvAplyYmd,
						idoDiv
				);
				
			// OM-2014-0002930対応 20140910 田中 ADD START
			}
			// OM-2014-0002930対応 20140910 田中 ADD END

			CAANMsg retMsg = (CAANMsg)runSc(handle, param, EKK0411D010, inputMap);

			// 更新年月日時分秒
			sakiLastUpdDtm = retMsg.getString(EKK0411D010CBSMsg.UPD_DTM);

			// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
//			// 引継先サブオプションサービス契約番号
//			hikiSakiSbOpSvcKeiNo[sbOpIdx] = retMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_KEI_NO);
//			// 引継先サブオプションサービスコード
//			hikiSakiSbOpSvcCd[sbOpIdx]    = retMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_CD);
			// 引継先サブオプションサービス契約番号
			hikiSakiSbOpSvcKeiNo.add(retMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_KEI_NO));
			// 引継先サブオプションサービスコード
			hikiSakiSbOpSvcCd.add(retMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_CD));

			// メールウイルスチェックを引き継いでいる場合
			if (SBOP_SVC_CD_MAIL_VIRUS_CHK.equals(hikiMotoSbOpSvcCd))
			{
				existsVirusCheck = true;
			}
			// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
		}
		
		// OM-2014-0002930対応 20140910 田中 ADD START
		// サブオプションサービス契約が存在しない場合
		if(retHikiMotoEKK0401B001 == null || retHikiMotoEKK0401B001.length == 0) {
			// ホームページ容量の無料容量超過をチェックし、超過している場合はサブオプションサービス契約を登録する
			addMyHpSubOp(handle, param, workMap, mskmDtlNo, hikiSakiSeikyKeiNo, retHikiMotoEKK0351A010, retHikiMotoEKK0361A010, hikiSakiSbOpSvcKeiNo, hikiSakiSbOpSvcCd);
		}
		// OM-2014-0002930対応 20140910 田中 ADD END
		
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
		// 引継先がファミリーパックありで、メールウイルスチェックが引き継がれていない場合
		if (OP_SVC_CD_EMAIL.equals(hikiMotoOpSvcCd) && famiPackAri && !existsVirusCheck)
		{
			// メールウィルスチェックを登録
			inputMap = this.mapper.editInMsgEKK0411D010(
								param,
								getHikiSakiOpSvcKeiNo(workMap, hikiMotoOpSvcKeiNo),
								mskmDtlNo,
								hikiSakiSeikyKeiNo,
								sakiLastUpdDtm,
								rsvAplyYmd,
								idoDiv
			);

			CAANMsg retMsg = (CAANMsg)runSc(handle, param, EKK0411D010, inputMap);

			// 更新年月日時分秒
			sakiLastUpdDtm = retMsg.getString(EKK0411D010CBSMsg.UPD_DTM);

			// 引継先サブオプションサービス契約番号
			hikiSakiSbOpSvcKeiNo.add(retMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_KEI_NO));
			// 引継先サブオプションサービスコード
			hikiSakiSbOpSvcCd.add(retMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_CD));

			// 登録SOD情報のリストに追加
			Map<String, Object> addSodMap = new HashMap<String, Object>();
			// 引継先サブオプションサービス契約番号
			addSodMap.put("chaf_sbopsvkei_no", retMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_KEI_NO));
			// 引継先サブオプションサービス契約世代登録年月日時分秒
			// ※設定しない

			addSodList.add(addSodMap);
		}
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END

		// 引継先のオプションサービス契約ステータスが「０１０：受付済」の場合のみ
		// ここでＳＯＤ情報のセットを行う
		if(SVC_KEI_STAT_010.equals(hikiSakiSvcKeiStat))
		{
			// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 UPD START ▼▼▼▼▼
			sodCcInputList = createSODParam(
					hikiMotoOpSvcKeiNo,
					opSvkeiSodInfo,
					// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
					null,
					// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
					sodCcInputList,
					workMap
			);
			// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 UPD E N D ▲▲▲▲▲
		}

		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 START
		return addSodList;
		// OM-2014-0001956 オプション引継でファミリーパックありの引継先にウイルスチェックが登録されない 2014/05/27 END
	}
	// ▲▲▲▲▲ 2012/12/13 IT1-2012-0002332 ADD E N D ▲▲▲▲▲

	// ▼▼▼▼▼ 2013/07/12 LT-2013-0000391 ADD START ▼▼▼▼▼
	private static String addYYYYMMDD(String trgtYmd, int addDay) throws Throwable
	{
		// 年月日の抽出
		int year  = Integer.parseInt(trgtYmd.substring(0, 4));
		int month = Integer.parseInt(trgtYmd.substring(4, 6));
		int day   = Integer.parseInt(trgtYmd.substring(6, 8));

		Calendar cal = Calendar.getInstance();
		cal.set(year, month - 1, day);
		// 日付を算出
		cal.add(Calendar.DATE, addDay);

		return String.format("%tY%tm%td", cal, cal, cal);
	}
// 20130724 IT1-2013-0001434 引継元のMyホームページオプションの登録条件見直し DEL START
//	private void addMyHomePage(
//			SessionHandle handle,
//			IRequestParameterReadWrite param,
//			CAANMsg[] retHikiMotoEKK0081A010,
//			CAANMsg[] retHikiMotoEKK0351A010,
//			CAANMsg[] retHikiMotoEKK0361A010,
//			CAANMsg[] retHikiMotoMyHpEKK0361B001,
//			String hikiMotoSeikyKeiNo,
//			String mskmDtlNo,
//			HashMap<String, Object> workMap
//	) throws Throwable
//	{
//		HashMap<String, Object> inputMap = new HashMap<String, Object>();
//
//		CAANMsg retMsg = null;
//
//		// 引継元SYSID
//		String hikiMotoSysid = getHikiMotoSysid(workMap);
//		// 引継元サービス契約番号
//		String hikiMotoSvcKeiNo = getHikiMotoSvcKeiNo(workMap);
//		// 引継元サービス契約ステータス
//		String hikiMotoSvcKeiStat = getHikiMotoSvcKeiStat(workMap);
//		// 異動区分
//		String idoDiv = getIdoDiv(workMap);
//		// 適用年月日
//		String aplyYmd = getAplyYmd(workMap);
//		
//		// 引継元料金コース
//		String hikiMotoPcrsCd = getHikiMotoPcrsCd(workMap);
//		
//		for (int i = 0; i < retHikiMotoMyHpEKK0361B001.length; i++)
//		{
//			// オプションサービス契約番号
//			String opSvcKeiNo = retHikiMotoMyHpEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_KEI_NO);
//			// オプションサービスコード
//			String opSvcCd = retHikiMotoMyHpEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_CD);
//			// オプションサービス契約ステータス
//			String opSvcKeiStat = retHikiMotoMyHpEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_KEI_STAT);
//
//			if(
//					OP_SVC_CD_MYHOMEPAGE.equals(opSvcCd)
//					&& JKKSvcConst.SVC_KEI_STAT_030.equals(opSvcKeiStat)
//			)
//			{
//				// ========================================================== //
//				// オプションサービス契約情報取得                             //
//				// ========================================================== //
//				HashMap<String, Object> infoMap = getOpSvcKeiInfo(handle, param, opSvcKeiNo);
//
//				// オプションサービス契約一意照会
//				CAANMsg[] msgsEKK0351A010 = (CAANMsg[])infoMap.get(MAP_KEY_OP_SVC);
//
//				HashMap<String, Object> inMap = new HashMap<String, Object>();
//
//				// サービス終了年月日
//				String svcEndYmd = null;
//				if (isIdoRsvHanei)
//				{
//					// 異動予約反映の場合
//					svcEndYmd = opeDate;		// 運用日
//				}
//				else
//				{
//					// 画面からの場合
//					svcEndYmd = aplyYmd;		// 適用年月日
//				}
//				// サービス課金終了年月日（適用日−１日）
//				String svcChrgEndYmd = addYYYYMMDD(aplyYmd, -1);
//
//				inMap.put("svc_chrg_endymd", svcChrgEndYmd);	// サービス課金終了年月日
//				inMap.put("svc_endymd",      svcEndYmd);		// サービス終了年月日
//
//				// ******************************************************* //
//				// 非課金判定部品実行処理＜オプション＞                    //
//				// ******************************************************* //
//				// ※「解約時課金フラグ」について
//				// 　　オプション、サブオプションごとに非課金判定部品を実行し、
//				// 　　各々の解約時課金フラグを設定する。
//				HashMap<String, Object> jdgHiChrgMapOpSvcKei =
//					runHiChrgJdgUtil(
//							param,
//							inMap,
//							retHikiMotoEKK0081A010[0],
//							null,
//							msgsEKK0351A010[0],
//							null,
//							DSL_SBT_FLG_OP_SVC_KEI_DSL
//					);
//
//				// ******************************************************* //
//				// オプションサービス契約解約                              //
//				// ******************************************************* //
//				inputMap = this.mapper.editInMsgEKK0351C240(
//						param,
//						opSvcKeiNo,
//						msgsEKK0351A010[0],
//						mskmDtlNo,
//						aplyYmd,
//						svcEndYmd,
//						svcChrgEndYmd,
//						motoLastUpdDtm,
//						idoDiv,
//						SVC_DLRE_CD_HKTG,
//						jdgHiChrgMapOpSvcKei
//				);
//				retMsg = (CAANMsg)runSc(handle, param, EKK0351C240, inputMap);
//
//				// ******************************************************* //
//				// オプションサービス契約解約確定                          //
//				// ******************************************************* //
//				inputMap = this.mapper.editInMsgEKK0351C250(
//						param,
//						opSvcKeiNo,
//						msgsEKK0351A010[0],
//						svcEndYmd,
//						svcChrgEndYmd,
//						motoLastUpdDtm,
//						idoDiv,
//						SVC_DLRE_CD_HKTG,
//						jdgHiChrgMapOpSvcKei
//				);
//				retMsg = (CAANMsg)runSc(handle, param, EKK0351C250, inputMap);
//			}
//		}
//
//		if (isSokujitsu)
//		{
//			// ホームページ容量の初期値取得
//			String capa = getCapa(handle, param, getHikiMotoPcrsCd(workMap), SBOP_SVC_CD_HP_CAPA); 
//			
//			// ******************************************************* //
//			// オプションサービス契約＜ＩＳＰ＞登録処理                //
//			// ******************************************************* //
//
//			// 引継元情報をセット
//			inputMap = this.mapper.editInMsgEKK0361D010New(
//					param,
//					retHikiMotoEKK0361A010[0],
//					hikiMotoSeikyKeiNo,
//					hikiMotoSvcKeiNo,
//					hikiMotoSysid,
//					mskmDtlNo,
//					getIdoDiv(workMap),
//					aplyYmd,
//					capa,
//					motoLastUpdDtm
//			);
//
//			retMsg = (CAANMsg)runSc(handle, param, EKK0361D010, inputMap);
//
//			// オプションサービス契約番号
//			String opSvcKeiNo = retMsg.getString(EKK0361D010CBSMsg.OP_SVC_KEI_NO);
//
//			// ========================================================== //
//			// オプションサービス契約＜ISP＞照査締結                      //
//			// ========================================================== //
//			inputMap = this.mapper.editInMsgEKK0361C030(param, opSvcKeiNo, retHikiMotoEKK0361A010[0], getIdoDiv(workMap), motoLastUpdDtm);
//
//			retMsg = (CAANMsg)runSc(handle, param, EKK0361C030, inputMap);
//
//			// ========================================================== //
//			// オプションサービス契約情報取得                             //
//			// ========================================================== //
//			HashMap<String, Object> infoMap = getOpSvcKeiInfo(handle, param, opSvcKeiNo);
//
//			// オプションサービス契約一意照会
//			CAANMsg[] msgsEKK0351A010 = (CAANMsg[])infoMap.get(MAP_KEY_OP_SVC);
//			// 引継元：オプションサービス契約＜ISP＞一意照会
//			CAANMsg[] msgsEKK0361A010 = (CAANMsg[])infoMap.get(MAP_KEY_OP_SVC_ISP);
//			// 引継元：サブオプションサービス契約一覧照会
//			CAANMsg[] msgsEKK0401B001 = (CAANMsg[])infoMap.get(MAP_KEY_SBOP_SVC);
//
//			// ========================================================== //
//			// エイジング登録                                             //
//			// ========================================================== //
//			updateAging(
//					handle,
//					param,
//					msgsEKK0351A010[0],
//					msgsEKK0361A010[0],
//					msgsEKK0401B001,
//					AGING_EXEC_KBN_ADD
//			);
//
//			if (JKKSvcConst.SVC_KEI_STAT_910.equals(hikiMotoSvcKeiStat))
//			{
//				HashMap<String, Object> inMap = new HashMap<String, Object>();
//
//				// サービス終了年月日
//				String svcEndYmd = null;
//				if (isIdoRsvHanei)
//				{
//					// 異動予約反映の場合
//					svcEndYmd = opeDate;		// 運用日
//				}
//				else
//				{
//					// 画面からの場合
//					svcEndYmd = aplyYmd;		// 適用年月日
//				}
//				// サービス課金終了年月日（適用日−１日）
//				String svcChrgEndYmd = addYYYYMMDD(aplyYmd, -1);
//
//				inMap.put("svc_chrg_endymd", svcChrgEndYmd);	// サービス課金終了年月日
//				inMap.put("svc_endymd",      svcEndYmd);		// サービス終了年月日
//
//				// ******************************************************* //
//				// 非課金判定部品実行処理＜オプション＞                    //
//				// ******************************************************* //
//				// ※「解約時課金フラグ」について
//				// 　　オプション、サブオプションごとに非課金判定部品を実行し、
//				// 　　各々の解約時課金フラグを設定する。
//				HashMap<String, Object> jdgHiChrgMapOpSvcKei =
//					runHiChrgJdgUtil(
//							param,
//							inMap,
//							retHikiMotoEKK0081A010[0],
//							null,
//							msgsEKK0351A010[0],
//							null,
//							DSL_SBT_FLG_OP_SVC_KEI_DSL
//					);
//
//				// ******************************************************* //
//				// オプションサービス契約解約                              //
//				// ******************************************************* //
//				inputMap = this.mapper.editInMsgEKK0351C240(
//						param,
//						opSvcKeiNo,
//						msgsEKK0351A010[0],
//						mskmDtlNo,
//						aplyYmd,
//						svcEndYmd,
//						svcChrgEndYmd,
//						motoLastUpdDtm,
//						idoDiv,
//						SVC_DLRE_CD_NORMAL,
//						jdgHiChrgMapOpSvcKei
//				);
//				retMsg = (CAANMsg)runSc(handle, param, EKK0351C240, inputMap);
//
//				// ******************************************************* //
//				// オプションサービス契約解約確定                          //
//				// ******************************************************* //
//				inputMap = this.mapper.editInMsgEKK0351C250(
//						param,
//						opSvcKeiNo,
//						msgsEKK0351A010[0],
//						svcEndYmd,
//						svcChrgEndYmd,
//						motoLastUpdDtm,
//						idoDiv,
//						SVC_DLRE_CD_NORMAL,
//						jdgHiChrgMapOpSvcKei
//				);
//				retMsg = (CAANMsg)runSc(handle, param, EKK0351C250, inputMap);
//				
//				// ========================================================== //
//				// オプションサービス契約情報取得                             //
//				// ========================================================== //
//				infoMap = getOpSvcKeiInfo(handle, param, opSvcKeiNo);
//
//				// オプションサービス契約一意照会
//				msgsEKK0351A010 = (CAANMsg[])infoMap.get(MAP_KEY_OP_SVC);
//				// 引継元：オプションサービス契約＜ISP＞一意照会
//				msgsEKK0361A010 = (CAANMsg[])infoMap.get(MAP_KEY_OP_SVC_ISP);
//				// 引継元：サブオプションサービス契約一覧照会
//				msgsEKK0401B001 = (CAANMsg[])infoMap.get(MAP_KEY_SBOP_SVC);
//
//				// ========================================================== //
//				// エイジング登録                                             //
//				// ========================================================== //
//				updateAging(
//						handle,
//						param,
//						msgsEKK0351A010[0],
//						msgsEKK0361A010[0],
//						msgsEKK0401B001,
//						AGING_EXEC_KBN_END
//				);
//				
//			}
//		}
//	}
// 20130724 IT1-2013-0001434 引継元のMyホームページオプションの登録条件見直し DEL END


	private boolean opSvcKeiStatUp(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String hikiMotoOpSvcKeiNo,
			CAANMsg[] retHikiMotoEKK0361A010,
			String[] hikiSakiSbOpSvcKeiNo,
			String[] hikiSakiSbOpSvcCd,
			Boolean famiPackAri,
			HashMap<String, Object> workMap
	) throws Throwable
	{
		boolean sodParamFlg = false;

		// インプットマップ（汎用）
		Map<String, Object> inputMap = new HashMap<String, Object>();

		CAANMsg   retMsg = null;

		// 引継先サービス契約ステータス取得
		String hikiSakiSvcKeiStat = getHikiSakiSvcKeiStat(workMap);

		// 引継先オプションサービス契約番号取得
		String hikiSakiOpSvcKeiNo   = getHikiSakiOpSvcKeiNo(workMap, hikiMotoOpSvcKeiNo);
//		// 引継先オプションサービス契約ステータス取得
//		String hikiSakiOpSvcKeiStat = getHikiSakiOpSvcKeiStat(workMap, hikiMotoOpSvcKeiNo);

		if(SVC_KEI_STAT_030.compareTo(hikiSakiSvcKeiStat) <= 0)
		{
			// ******************************************************************* //
			// 引継先サービス契約ステータスが「締結済」以降の場合                  //
			// ******************************************************************* //

			// オプションサービス契約＜ISP＞照査締結
// 20130724 IT1-2013-0001434 retHikiMotoEKK0361A010[0]は不要なため削除 MOD START
			inputMap = this.mapper.editInMsgEKK0361C030(param, hikiSakiOpSvcKeiNo, getIdoDiv(workMap), sakiLastUpdDtm);
// 20130724 IT1-2013-0001434 retHikiMotoEKK0361A010[0]は不要なため削除 MOD END

			retMsg = (CAANMsg)runSc(handle, param, EKK0361C030, inputMap);

			sakiLastUpdDtm     = retMsg.getString(EKK0361C030CBSMsg.UPD_DTM);

			// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 ADD START ▼▼▼▼▼
			String hikiSakiGeneAddDtm = retMsg.getString(EKK0361C030CBSMsg.KK0351_GENE_ADD_DTM);

			// 引継先オプションサービス契約世代登録年月日セット
			setHikiSakiOpSvKeiGeneAddDtm(workMap, hikiMotoOpSvcKeiNo, hikiSakiGeneAddDtm);
			// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 ADD E N D ▲▲▲▲▲

			for (int i = 0; i < hikiSakiSbOpSvcKeiNo.length; i++)
			{
				String sbOpSvcKeiNo = hikiSakiSbOpSvcKeiNo[i];
				String sbOpSvcCd    = hikiSakiSbOpSvcCd[i];

				if (sbOpSvcKeiNo == null || "".equals(sbOpSvcKeiNo))
				{
					continue;
				}

// OM-2014-0000703 2014/03/07 DEL START
//				// IT2-2012-0001485 2012/08/23 start
//				// ファミリーパック有りの場合、ウィルスチェックの引継ぎ処理をしない（バッチで付くので）
//				if (famiPackAri && SBOP_SVC_CD_MAIL_VIRUS_CHK.equals(sbOpSvcCd))
//				{
//					continue;
//				}
//				// IT2-2012-0001485 2012/08/23 end
// OM-2014-0000703 2014/03/07 DEL END

				// サブオプションサービス契約＜ISP＞照査締結
				inputMap = this.mapper.editInMsgEKK0411C040(param, hikiSakiOpSvcKeiNo, sbOpSvcKeiNo, getIdoDiv(workMap), sakiLastUpdDtm);
				retMsg = (CAANMsg)runSc(handle, param, EKK0411C040, inputMap);

				sakiLastUpdDtm = retMsg.getString(EKK0411C040CBSMsg.UPD_DTM);
			}

			sodParamFlg = true;
		}
		else if(SVC_KEI_STAT_020.compareTo(hikiSakiSvcKeiStat) == 0)
		{
			// ******************************************************************* //
			// 引継先サービス契約ステータスが「照査済」の場合                      //
			// ******************************************************************* //

			// オプションサービス契約＜ISP＞照査
			inputMap = this.mapper.editInMsgEKK0361C010(param, hikiSakiOpSvcKeiNo, getIdoDiv(workMap), sakiLastUpdDtm);

			retMsg = (CAANMsg)runSc(handle, param, EKK0361C010, inputMap);

			sakiLastUpdDtm     = retMsg.getString(EKK0361C010CBSMsg.UPD_DTM);

			// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 ADD START ▼▼▼▼▼
			String hikiSakiGeneAddDtm = retMsg.getString(EKK0361C010CBSMsg.KK0351_GENE_ADD_DTM);

			// 引継先オプションサービス契約世代登録年月日セット
			setHikiSakiOpSvKeiGeneAddDtm(workMap, hikiMotoOpSvcKeiNo, hikiSakiGeneAddDtm);
			// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 ADD E N D ▲▲▲▲▲

			for (int i = 0; i < hikiSakiSbOpSvcKeiNo.length; i++)
			{
				String sbOpSvcKeiNo = hikiSakiSbOpSvcKeiNo[i];
				String sbOpSvcCd    = hikiSakiSbOpSvcCd[i];

				if (sbOpSvcKeiNo == null || "".equals(sbOpSvcKeiNo))
				{
					continue;
				}
				
// OM-2014-0000703 2014/03/07 DEL START
//				// IT2-2012-0001485 2012/08/23 start
//				// ファミリーパック有りの場合、ウィルスチェックの引継ぎ処理をしない（バッチで付くので）
//				if (famiPackAri && SBOP_SVC_CD_MAIL_VIRUS_CHK.equals(sbOpSvcCd))
//				{
//					continue;
//				}
//				// IT2-2012-0001485 2012/08/23 end
// OM-2014-0000703 2014/03/07 DEL END
				
				// サブオプションサービス契約＜ISP＞照査
				inputMap = this.mapper.editInMsgEKK0411C020(param, hikiSakiOpSvcKeiNo, sbOpSvcKeiNo, getIdoDiv(workMap), sakiLastUpdDtm);

				retMsg = (CAANMsg)runSc(handle, param, EKK0411C020, inputMap);

				sakiLastUpdDtm = retMsg.getString(EKK0411C020CBSMsg.UPD_DTM);
			}

			sodParamFlg = true;
		}

		return sodParamFlg;
	}

	private CAANMsg[] callEKK0081A010(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String svcKeiNo
	) throws Throwable
	{
		// サービス契約一意照会
		HashMap<String, Object> inputMap = this.mapper.editInMsgEKK0081A010(param, svcKeiNo);
		CAANMsg[] retMsgs = (CAANMsg[])runSc(handle, param, EKK0081A010, inputMap);

		return retMsgs;
	}

	/**
	 * 
	 * @param	handle
	 * @param	param
	 * @param	workMap
	 * @throws	Throwable
	 */
	private void callEKK0161B004(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> workMap
	) throws Throwable
	{
		// 引継先サービス契約番号取得
		String hikiSakiSvcKeiNo = getHikiSakiSvcKeiNo(workMap);

		// 引継先のサービス契約内訳一覧照会
		HashMap<String, Object> inputMap = new HashMap<String, Object>();

		inputMap.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		inputMap.put(EKK0161B004CBSMsg.KEY_SVC_KEI_NO, hikiSakiSvcKeiNo);

		CAANMsg[] retMsgs = (CAANMsg[])runSc(handle, param, EKK0161B004, inputMap);

		if (retMsgs.length > 0)
		{
			setHikiSakiSvcKeiUcwkNo(workMap, retMsgs[0].getString(EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO));
		}
	}

	private void setWorkMap(HashMap<String, Object> workMap, String mapKey, String setData)
	{
		workMap.put(mapKey, setData);
	}

	private String getWorkMap(HashMap<String, Object> workMap, String mapKey)
	{
		return (String)workMap.get(mapKey);
	}

	private void setMapInWorkMap(HashMap<String, Object> workMap, String mapKey, String inMapKey, String infoKey, String setData)
	{
		HashMap<String, Object> inMap = (HashMap<String, Object>)workMap.get(mapKey);
		if (inMap == null)
		{
			inMap = new HashMap<String, Object>();
			workMap.put(mapKey, inMap);
		}

		HashMap<String, Object> infoMap = (HashMap<String, Object>)inMap.get(inMapKey);
		if (infoMap == null)
		{
			infoMap = new HashMap<String, Object>();
			inMap.put(inMapKey, infoMap);
		}

		infoMap.put(infoKey, setData);
		inMap.put(inMapKey, infoMap);
		workMap.put(mapKey, inMap);
	}

	private String getMapInWorkMap(HashMap<String, Object> workMap, String mapKey, String inMapKey, String infoKey)
	{
		HashMap<String, Object> inMap = (HashMap<String, Object>)workMap.get(mapKey);
		if (inMap == null)
		{
			inMap = new HashMap<String, Object>();
			workMap.put(mapKey, inMap);
		}

		HashMap<String, Object> infoMap = (HashMap<String, Object>)inMap.get(inMapKey);
		if (infoMap == null)
		{
			infoMap = new HashMap<String, Object>();
			inMap.put(inMapKey, infoMap);
		}

		return (String)infoMap.get(infoKey);
	}

	/**
	 * 引継元SYSID　セット
	 */
	private void setHikiMotoSysid(HashMap<String, Object> workMap, Map<String, Object> userData)
	{
		setWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_SYSID, (String)userData.get(USER_DATA_KEY_HIKIMOTO_SYSID));
	}

	/**
	 * 引継元SYSID　ゲット
	 */
	private String getHikiMotoSysid(HashMap<String, Object> workMap)
	{
		return getWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_SYSID);
	}

	/**
	 * 引継先SYSID　セット
	 */
	private void setHikiSakiSysid(HashMap<String, Object> workMap, Map<String, Object> userData)
	{
		setWorkMap(workMap, WORK_MAP_KEY_HIKISAKI_SYSID, (String)userData.get(USER_DATA_KEY_HIKISAKI_SYSID));
	}

	/**
	 * 引継先SYSID　ゲット
	 */
	private String getHikiSakiSysid(HashMap<String, Object> workMap)
	{
		return getWorkMap(workMap, WORK_MAP_KEY_HIKISAKI_SYSID);
	}

	/**
	 * 引継元サービス契約番号　セット
	 */
	private void setHikiMotoSvcKeiNo(HashMap<String, Object> workMap, Map<String, Object> userData)
	{
		setWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_SVC_KEI_NO, (String)userData.get(USER_DATA_KEY_HIKIMOTO_SVC_KEI_NO));
	}

	/**
	 * 引継元サービス契約番号　ゲット
	 */
	private String getHikiMotoSvcKeiNo(HashMap<String, Object> workMap)
	{
		return getWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_SVC_KEI_NO);
	}

	/**
	 * 引継元サービス契約ステータス　セット
	 */
	private void setHikiMotoSvcKeiStat(HashMap<String, Object> workMap, String svcKeiStat)
	{
		setWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_SVC_KEI_STAT, svcKeiStat);
	}

	/**
	 * 引継元サービス契約ステータス　ゲット
	 */
	private String getHikiMotoSvcKeiStat(HashMap<String, Object> workMap)
	{
		return getWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_SVC_KEI_STAT);
	}

	/**
	 * 引継先サービス契約番号　セット
	 */
	private void setHikiSakiSvcKeiNo(HashMap<String, Object> workMap, Map<String, Object> userData)
	{
		setWorkMap(workMap, WORK_MAP_KEY_HIKISAKI_SVC_KEI_NO, (String)userData.get(USER_DATA_KEY_HIKISAKI_SVC_KEI_NO));
	}

	/**
	 * 引継先サービス契約番号　ゲット
	 */
	private String getHikiSakiSvcKeiNo(HashMap<String, Object> workMap)
	{
		return getWorkMap(workMap, WORK_MAP_KEY_HIKISAKI_SVC_KEI_NO);
	}

	/**
	 * 引継先サービス契約ステータス　セット
	 */
	private void setHikiSakiSvcKeiStat(HashMap<String, Object> workMap, Map<String, Object> userData)
	{
		setWorkMap(workMap, WORK_MAP_KEY_HIKISAKI_SVC_KEI_STAT, (String)userData.get(USER_DATA_KEY_HIKISAKI_SVC_KEI_STAT));
	}

	/**
	 * 引継先サービス契約ステータス　ゲット
	 */
	private String getHikiSakiSvcKeiStat(HashMap<String, Object> workMap)
	{
		return getWorkMap(workMap, WORK_MAP_KEY_HIKISAKI_SVC_KEI_STAT);
	}

	/**
	 * 異動区分　セット
	 */
	private void setIdoDiv(HashMap<String, Object> workMap, Map<String, Object> userData)
	{
		setWorkMap(workMap, WORK_MAP_KEY_IDO_DIV, (String)userData.get(USER_DATA_KEY_IDO_DIV));
	}

	/**
	 * 異動区分　ゲット
	 */
	private String getIdoDiv(HashMap<String, Object> workMap)
	{
		return getWorkMap(workMap, WORK_MAP_KEY_IDO_DIV);
	}

	/**
	 * 引継先サービス契約内訳番号　セット
	 */
	private void setHikiSakiSvcKeiUcwkNo(HashMap<String, Object> workMap, String hikiSakiSvcKeiUcwkNo)
	{
		setWorkMap(workMap, WORK_MAP_KEY_HIKISAKI_SVC_KEI_UCWK_NO, hikiSakiSvcKeiUcwkNo);
	}

	/**
	 * 引継先サービス契約内訳番号　ゲット
	 */
	private String getHikiSakiSvcKeiUcwkNo(HashMap<String, Object> workMap)
	{
		return getWorkMap(workMap, WORK_MAP_KEY_HIKISAKI_SVC_KEI_UCWK_NO);
	}

	/**
	 * 適用年月日　セット
	 */
	private void setAplyYmd(HashMap<String, Object> workMap, Map<String, Object> userData)
	{
		setWorkMap(workMap, WORK_MAP_KEY_APLY_YMD, (String)userData.get(USER_DATA_KEY_HIKISAKI_APLY_YMD));
	}

	/**
	 * 適用年月日　ゲット
	 */
	private String getAplyYmd(HashMap<String, Object> workMap)
	{
		return getWorkMap(workMap, WORK_MAP_KEY_APLY_YMD);
	}

	/**
	 * 引継元オプションサービス契約番号　セット
	 */
	private void setHikiMotoOpSvcKeiNo(HashMap<String, Object> workMap, String hikiMotoOpSvcKeiNo)
	{
		setMapInWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_LIST, hikiMotoOpSvcKeiNo, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_NO, hikiMotoOpSvcKeiNo);
	}

	/**
	 * 引継元オプションサービス契約ステータス　セット
	 */
	private void setHikiMotoOpSvcKeiStat(HashMap<String, Object> workMap, String hikiMotoOpSvcKeiNo, String hikiMotoOpSvcKeiStat)
	{
		setMapInWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_LIST, hikiMotoOpSvcKeiNo, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_STAT, hikiMotoOpSvcKeiStat);
	}

	/**
	 * 引継元オプションサービス契約ステータス　ゲット
	 */
	private String getHikiMotoOpSvcKeiStat(HashMap<String, Object> workMap, String hikiMotoOpSvcKeiNo)
	{
		return getMapInWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_LIST, hikiMotoOpSvcKeiNo, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_STAT);
	}

	/**
	 * 引継元オプションサービスコード　セット
	 */
	private void setHikiMotoOpSvcCd(HashMap<String, Object> workMap, String hikiMotoOpSvcKeiNo, String hikiMotoOpSvcCd)
	{
		setMapInWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_LIST, hikiMotoOpSvcKeiNo, WORK_MAP_KEY_HIKIMOTO_OP_SVC_CD, hikiMotoOpSvcCd);
	}

	/**
	 * 引継元オプションサービスコード　ゲット
	 */
	private String getHikiMotoOpSvcCd(HashMap<String, Object> workMap, String hikiMotoOpSvcKeiNo)
	{
		return getMapInWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_LIST, hikiMotoOpSvcKeiNo, WORK_MAP_KEY_HIKIMOTO_OP_SVC_CD);
	}

	/**
	 * 引継先オプションサービス契約番号　セット
	 */
	private void setHikiSakiOpSvcKeiNo(HashMap<String, Object> workMap, String hikiMotoOpSvcKeiNo, String hikiSakiOpSvcKeiNo)
	{
		setMapInWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_LIST, hikiMotoOpSvcKeiNo, WORK_MAP_KEY_HIKISAKI_OP_SVC_KEI_NO, hikiSakiOpSvcKeiNo);
	}

	/**
	 * 引継先オプションサービス契約番号　ゲット
	 */
	private String getHikiSakiOpSvcKeiNo(HashMap<String, Object> workMap, String hikiMotoOpSvcKeiNo)
	{
		return getMapInWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_LIST, hikiMotoOpSvcKeiNo, WORK_MAP_KEY_HIKISAKI_OP_SVC_KEI_NO);
	}

	/**
	 * 引継先オプションサービス契約ステータス　セット
	 */
	private void setHikiSakiOpSvcKeiStat(HashMap<String, Object> workMap, String hikiMotoOpSvcKeiNo, String hikiSakiOpSvcKeiStat)
	{
		setMapInWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_LIST, hikiMotoOpSvcKeiNo, WORK_MAP_KEY_HIKISAKI_OP_SVC_KEI_STAT, hikiSakiOpSvcKeiStat);
	}

	/**
	 * 引継先オプションサービス契約ステータス　ゲット
	 */
	private String getHikiSakiOpSvcKeiStat(HashMap<String, Object> workMap, String hikiMotoOpSvcKeiNo)
	{
		return getMapInWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_LIST, hikiMotoOpSvcKeiNo, WORK_MAP_KEY_HIKISAKI_OP_SVC_KEI_STAT);
	}
	
	/**
	 * 引継元料金コースコード　セット
	 */
	private void setHikiMotoPcrsCd(HashMap<String, Object> workMap, String hikiMotoPcrsCd)
	{
		setWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_PCRS_CD, hikiMotoPcrsCd);
	}
	
	/**
	 * 引継元料金コースコード　ゲット
	 */
	private String getHikiMotoPcrsCd(HashMap<String, Object> workMap)
	{
		return getWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_PCRS_CD);
	}

	// ▼▼▼▼▼ 2013/08/28 メール回復オーダ不具合対応 ADD START ▼▼▼▼▼
	/**
	 * 引継先オプションサービス契約世代登録年月日　セット
	 */
	private void setHikiSakiOpSvKeiGeneAddDtm(HashMap<String, Object> workMap, String hikiMotoOpSvcKeiNo, String hikiSakiOpSvKeiGeneAddDtm)
	{
		setMapInWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_LIST, hikiMotoOpSvcKeiNo, WORK_MAP_KEY_HIKISAKI_OPSVKEI_GENE_ADD_DTM, hikiSakiOpSvKeiGeneAddDtm);
	}

	/**
	 * 引継先オプションサービス契約世代登録年月日　ゲット
	 */
	private String getHikiSakiOpSvKeiGeneAddDtm(HashMap<String, Object> workMap, String hikiMotoOpSvcKeiNo)
	{
		return getMapInWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_OP_SVC_KEI_LIST, hikiMotoOpSvcKeiNo, WORK_MAP_KEY_HIKISAKI_OPSVKEI_GENE_ADD_DTM);
	}
	// ▲▲▲▲▲ 2013/08/28 メール回復オーダ不具合対応 ADD E N D ▲▲▲▲▲

	/**
	 * ホームページ容量取得<br>
	 * 料金コース_サブオプションサービスマスタからホームページ容量の初期値を取得します<br>
	 */
	private String getCapa(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String pcrsCd,
			String sbopSvcCd
	) throws Throwable
	{
		String capa = null;
		
		// 料金コース_サブオプションサービス一覧照会
		HashMap<String, Object> inputMap = this.mapper.editInMsgEKK1881B001(param, pcrsCd, sbopSvcCd);
		CAANMsg[] retMsgs = (CAANMsg[])runSc(handle, param, EKK1881B001, inputMap);
		
		if (retMsgs.length > 0)
		{
			// サービス提供物初期値
			capa = retMsgs[0].getString(EKK1881B001CBSMsg1List.SVCTK_BUT_SHK_VALUE);
		}
		else
		{
			throw new CCException("", new SCCallException("ホームページ容量取得取得エラー pcrsCd["+pcrsCd +"]sbopSvcCd["+ sbopSvcCd+"]", String.valueOf(9051), 8011));
		}
		
		return capa;
	}
	
	// ▲▲▲▲▲ 2013/07/12 LT-2013-0000391 ADD E N D ▲▲▲▲▲
	// 20130716 LT-2013-0000487追加対応分 FTTH認証・登録・FTTH認証・消去でサービス契約の世代が必須のため、世代を設定する ADD START
	/**
	 * 引継元サービス契約世代登録年月日時分秒　セット
	 */
	private void setHikiMotoSvkeiGeneAddDtm(HashMap<String, Object> workMap, String geneAddDtm)
	{
		setWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_SVKEI_GENE_ADD_DTM, geneAddDtm);
	}

	/**
	 * 引継元サービス契約世代登録年月日時分秒　ゲット
	 */
	private String getHikiMotoSvkeiGeneAddDtm(HashMap<String, Object> workMap)
	{
		return getWorkMap(workMap, WORK_MAP_KEY_HIKIMOTO_SVKEI_GENE_ADD_DTM);
	}
	// 20130716 LT-2013-0000487追加対応分 FTTH認証・登録・FTTH認証・消去でサービス契約の世代が必須のため、世代を設定する ADD END
// 20130724 IT1-2013-0001434 ADD START
	
	/**
	 *  課金先一覧照会（請求契約番号/サービス契約番号）を呼出し<br>
	 *  指定されたサービス契約番号の請求契約番号を取得します<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param	svcKeiNo サービス契約番号
	 * @throws	Throwable
	 */
	private String getSeikyKeiNo(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String svcKeiNo
	) throws Throwable
	{
		String seikyKeiNo = null;
		
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		inputMap.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		inputMap.put(EKK0321B002CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		runSc(handle, param, EKK0321B002, inputMap);
		CAANMsg[]retMsgs = (CAANMsg[])runSc(handle, param, EKK0321B002, inputMap);
		if (retMsgs.length > 0)
		{
			seikyKeiNo = retMsgs[0].getString(EKK0321B002CBSMsg1List.SEIKY_KEI_NO);
		}
		
		return seikyKeiNo;
	}

	/**
	 *  オプション引継予約処理<br>
	 * 
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param fixedText ユーザ任意文字列
	 * @param mskmDtlNo 申込明細番号
	 * @param workMap ワークマップ
	 * @throws	Throwable
	 */
	private void rsvOpHktgi(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String fixedText,
			String mskmDtlNo,
			HashMap<String, Object> workMap
			
	) throws Throwable
	{
		// ユーザデータ取得
		Map<String, Object> userData = (HashMap<String, Object>)param.getData(this.fixedText);

		// 引継元サービス契約一意照会
		CAANMsg[] retHikiMotoEKK0081A010 = callEKK0081A010(handle, param, (String)userData.get(USER_DATA_KEY_HIKIMOTO_SVC_KEI_NO));
		
		// 排他用引継元サービス契約最終更新年月日時分秒
		motoLastUpdDtm = (String)userData.get(USER_DATA_KEY_HIKIMOTO_LAST_UPD_DTM);
		
		// オプションサービス契約情報取得
		List<Map<String, Object>> opSvcKeiList = (ArrayList<Map<String, Object>>)userData.get(OP_SVC_KEI_LIST);
		
		// 引継対象のオプション数分以下を行う
		for(int opIdx = 0; opIdx < opSvcKeiList.size(); opIdx++)
		{
			Map<String, Object> opSvcKei = opSvcKeiList.get(opIdx);

			// 引継元オプションサービス契約番号
			String hikiMotoOpSvcKeiNo = (String)opSvcKei.get("op_svc_kei_no");
			
			// 引継元オプションサービス契約情報取得
			HashMap<String, Object> infoMap = getOpSvcKeiInfo(handle, param, hikiMotoOpSvcKeiNo);

			// 引継元オプションサービス契約一意照会結果取得
			CAANMsg[] msgsEKK0351A010 = (CAANMsg[])infoMap.get(MAP_KEY_OP_SVC);
			
			// 引継元
			String hikiMotoOpSvcKeiStat = msgsEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_STAT);
			
			// 「030:締結済」「100:サービス提供中」「210:休止・中断中」の場合
			//  ※但し「030:締結済」「210:休止・中断中」は現仕様上発生しない
			if(
				SVC_KEI_STAT_030.equals(hikiMotoOpSvcKeiStat)
					|| SVC_KEI_STAT_100.equals(hikiMotoOpSvcKeiStat)
					|| SVC_KEI_STAT_210.equals(hikiMotoOpSvcKeiStat)
			)
			{
				
				// 適用年月日
				String aplyYmd = (String)userData.get(USER_DATA_KEY_HIKISAKI_APLY_YMD);
				
				// サービス終了年月日
				String svcEndYmd = aplyYmd;
				
				// サービス課金終了年月日
				String svcChrgEndYmd = addYYYYMMDD(aplyYmd, -1);
				
				HashMap<String, Object> inMap = new HashMap<String, Object>();
				inMap.put("svc_chrg_endymd", svcChrgEndYmd);	// サービス課金終了年月日
				inMap.put("svc_endymd",      svcEndYmd);		// サービス終了年月日

				// ▼▼▼▼▼ 2013/09/11 OM-2013-0001096 UPD START ▼▼▼▼▼
				// ******************************************************* //
				// 非課金判定部品実行処理＜オプション＞                    //
				// ******************************************************* //
				// ※「解約時課金フラグ」について
				// 　　オプション、サブオプションごとに非課金判定部品を実行し、
				// 　　各々の解約時課金フラグを設定する。
				HashMap<String, Object> jdgHiChrgMapOpSvcKei =
					runHiChrgJdgUtil(
							handle,
							param,
							inMap,
							retHikiMotoEKK0081A010[0],
							null,
							msgsEKK0351A010[0],
							null,
							DSL_SBT_FLG_OP_SVC_KEI_DSL
					);
				// ▲▲▲▲▲ 2013/09/11 OM-2013-0001096 UPD E N D ▲▲▲▲▲

				// ******************************************************* //
				// オプションサービス契約解約                              //
				// ******************************************************* //
				HashMap<String, Object> mapEKK0351C240 = this.mapper.editInMsgEKK0351C240(
																param,
																hikiMotoOpSvcKeiNo,
																msgsEKK0351A010[0],
																mskmDtlNo,
																aplyYmd,
																svcEndYmd,
																svcChrgEndYmd,
																motoLastUpdDtm,
																getIdoDiv(workMap),
																SVC_DLRE_CD_HKTG,
																jdgHiChrgMapOpSvcKei
														);
				mapEKK0351C240.put("op_hktgi_sk_svc_kei_no", (String)userData.get(USER_DATA_KEY_HIKISAKI_SVC_KEI_NO));
				CAANMsg retMsgEKK0351C240 = (CAANMsg)runSc(handle, param, EKK0351C240, mapEKK0351C240);

				// 更新年月日時分秒（更新後）取得
				motoLastUpdDtm = retMsgEKK0351C240.getString(EKK0351C240CBSMsg.UPD_DTM);
				
				
				// ******************************************************* //
				// オプションサービス契約解約確定                          //
				// ******************************************************* //
				HashMap<String, Object> mapEKK0351C250 = this.mapper.editInMsgEKK0351C250(
																param,
																hikiMotoOpSvcKeiNo,
																msgsEKK0351A010[0],
																svcEndYmd,
																svcChrgEndYmd,
																motoLastUpdDtm,
																getIdoDiv(workMap),
																SVC_DLRE_CD_HKTG,
																jdgHiChrgMapOpSvcKei
														);
				CAANMsg retMsgEKK0351C250 = (CAANMsg)runSc(handle, param, EKK0351C250, mapEKK0351C250);

				// 更新年月日時分秒（更新後）取得
				motoLastUpdDtm = retMsgEKK0351C250.getString(EKK0351C250CBSMsg.UPD_DTM);
				
			}
			else
			{
				// 上記以外は、予約登録不可のため、エラーとする
				String errMsg = "オプション引継予約登録不可エラー。引継元サービス契約ステータス["+hikiMotoOpSvcKeiStat+"]";
				throw new CCException("", new SCCallException(errMsg, String.valueOf(9051), 8011));
			}
		}
	}
	/**
	 * 引継元Myホームページ登録処理<br>
	 * ・引継元のURLアカウントが未設定のMyホームページを解約・キャンセルします<br>
	 * ・引継元に新規Myホームページオプションを登録します<br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param retHikiMotoEKK0081A010 引継元サービス契約一意照会結果
	 * @param retHikiMotoEKK0351A010 引継元オプションサービス契約一意照会結果
	 * @param retHikiMotoEKK0361A010 引継元オプションサービス契約＜ISP＞一意照会
	 * @param retHikiMotoMyHpEKK0361B001 引継元オプションサービス契約一覧照会結果
	 * @param hikiMotoSeikyKeiNo 引継元請求契約番号
	 * @param mskmDtlNo 申込明細番号
	 * @param workMap ワークマップ
	 * @param hikiMotoOpSvcKeiNo 引継元オプションサービス契約番号    // OM-2014-0001247 2014/04/02 add
	 * @throws	Throwable
	 */
	private void addMyHomePage(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			CAANMsg[] retHikiMotoEKK0081A010,
			CAANMsg[] retHikiMotoEKK0351A010,
			CAANMsg[] retHikiMotoEKK0361A010,
			CAANMsg[] retHikiMotoMyHpEKK0361B001,
			String hikiMotoSeikyKeiNo,
			String mskmDtlNo,
			HashMap<String, Object> workMap,
			String hikiMotoOpSvcKeiNo          // OM-2014-0001247 2014/04/02 add
	) throws Throwable
	{
		HashMap<String, Object> inputMap = new HashMap<String, Object>();

		CAANMsg retMsg = null;

		// 引継元SYSID
		String hikiMotoSysid = getHikiMotoSysid(workMap);
		// 引継元サービス契約番号
		String hikiMotoSvcKeiNo = getHikiMotoSvcKeiNo(workMap);
		// 引継元サービス契約ステータス
		String hikiMotoSvcKeiStat = getHikiMotoSvcKeiStat(workMap);
		// 異動区分
		String idoDiv = getIdoDiv(workMap);
		// 適用年月日
		String aplyYmd = getAplyYmd(workMap);

		// getOpSvcKeiInfoの結果
		HashMap<String, Object> opSvcKeiInfo = null;
		// オプションサービス契約一意照会結果
		CAANMsg[]  msgsEKK0351A010 = null;
		// オプションサービス契約＜ISP＞一意照会結果
		CAANMsg[]  msgsEKK0361A010 = null;
		// サブオプションサービス契約一覧照会結果
		CAANMsg[]  msgsEKK0401B001 = null;

		// OM-2014-0001247 2014/04/02 start
		boolean yuukouMyHPFlg = false;
		for (int i = 0; i < retHikiMotoMyHpEKK0361B001.length; i++)
		{
			// オプションサービス契約番号
			String opSvcKeiNo = retHikiMotoMyHpEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_KEI_NO);
			// オプションサービス契約ステータス
			String opSvcKeiStat = retHikiMotoMyHpEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_KEI_STAT);
			// オプションサービスコード
			String opSvcCd = retHikiMotoMyHpEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_CD);
			if(JKKStrConst.CD00037_DSL_ZM.compareTo(opSvcKeiStat) > 0
					&& OP_SVC_CD_MYHOMEPAGE.equals(opSvcCd)
					&& !opSvcKeiNo.equals(hikiMotoOpSvcKeiNo)){
				//引き継ぐＭｙＨＰ以外で 解約済未満のＭｙホームページがある  (新規Myホームページオプションは不要)
				yuukouMyHPFlg = true;
			}
		}
		
		
		if(!yuukouMyHPFlg){
			// ■引継元のURLアカウントが未設定のMyホームページを解約・キャンセルする
			for (int i = 0; i < retHikiMotoMyHpEKK0361B001.length; i++)
			{
				// オプションサービス契約番号
				String opSvcKeiNo = retHikiMotoMyHpEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_KEI_NO);
				// オプションサービスコード
				String opSvcCd = retHikiMotoMyHpEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_CD);
				// オプションサービス契約ステータス
				String opSvcKeiStat = retHikiMotoMyHpEKK0361B001[i].getString(EKK0361B001CBSMsg1List.OP_SVC_KEI_STAT);
				// URLアカウント
				String urlAccount = retHikiMotoMyHpEKK0361B001[i].getString(EKK0361B001CBSMsg1List.URL_ACCOUNT);


				if(
						OP_SVC_CD_MYHOMEPAGE.equals(opSvcCd)
						&& isNull(urlAccount)
				)
				{
					// MyホームページでURLアカウントが未設定の場合、解約・キャンセルする

					// ******************************************************* //
					// オプションサービス契約情報取得                          //
					// ******************************************************* //
					opSvcKeiInfo = getOpSvcKeiInfo(handle, param, opSvcKeiNo);
					// オプションサービス契約一意照会結果
					msgsEKK0351A010 = (CAANMsg[])opSvcKeiInfo.get(MAP_KEY_OP_SVC);
					// オプションサービス契約＜ISP＞一意照会結果
					msgsEKK0361A010 = (CAANMsg[])opSvcKeiInfo.get(MAP_KEY_OP_SVC_ISP);
					// サブオプションサービス契約一覧照会結果
					msgsEKK0401B001 = (CAANMsg[])opSvcKeiInfo.get(MAP_KEY_SBOP_SVC);

					if (JKKStrConst.CD00037_CNC_ZM.compareTo(opSvcKeiStat) > 0)
					{
						// ******************************************************* //
						// オプションサービス契約キャンセル                        //
						// ******************************************************* //
						inputMap = this.mapper.editInMsgEKK0351C220(param, opSvcKeiNo, mskmDtlNo, motoLastUpdDtm, idoDiv);
						retMsg = (CAANMsg)runSc(handle, param, EKK0351C220, inputMap);

						// 更新年月日時分秒（更新後）取得
						motoLastUpdDtm = retMsg.getString(EKK0351C220CBSMsg.UPD_DTM);
					}
					else if (JKKStrConst.CD00037_CNC_ZM.compareTo(opSvcKeiStat) == 0)
					{
						// 締結済の場合、解約する

						HashMap<String, Object> inMap = new HashMap<String, Object>();

						// サービス終了年月日
						String svcEndYmd = aplyYmd;
						// サービス課金終了年月日（適用日−１日）
						String svcChrgEndYmd = addYYYYMMDD(aplyYmd, -1);

						inMap.put("svc_chrg_endymd", svcChrgEndYmd);	// サービス課金終了年月日
						inMap.put("svc_endymd",      svcEndYmd);		// サービス終了年月日

						// ▼▼▼▼▼ 2013/09/11 OM-2013-0001096 UPD START ▼▼▼▼▼
						// ******************************************************* //
						// 非課金判定部品実行処理＜オプション＞                    //
						// ******************************************************* //
						// ※「解約時課金フラグ」について
						// 　　オプション、サブオプションごとに非課金判定部品を実行し、
						// 　　各々の解約時課金フラグを設定する。
						HashMap<String, Object> jdgHiChrgMapOpSvcKei =
							runHiChrgJdgUtil(
									handle,
									param,
									inMap,
									retHikiMotoEKK0081A010[0],
									null,
									msgsEKK0351A010[0],
									null,
									DSL_SBT_FLG_OP_SVC_KEI_DSL
							);
						// ▲▲▲▲▲ 2013/09/11 OM-2013-0001096 UPD E N D ▲▲▲▲▲

						// ******************************************************* //
						// オプションサービス契約解約                              //
						// ******************************************************* //
						inputMap = this.mapper.editInMsgEKK0351C240(
								param,
								opSvcKeiNo,
								msgsEKK0351A010[0],
								mskmDtlNo,
								aplyYmd,
								svcEndYmd,
								svcChrgEndYmd,
								motoLastUpdDtm,
								idoDiv,
								SVC_DLRE_CD_HKTG,
								jdgHiChrgMapOpSvcKei
						);
						retMsg = (CAANMsg)runSc(handle, param, EKK0351C240, inputMap);

						// 更新年月日時分秒（更新後）取得
						motoLastUpdDtm = retMsg.getString(EKK0351C240CBSMsg.UPD_DTM);

						// ******************************************************* //
						// オプションサービス契約解約確定                          //
						// ******************************************************* //
						inputMap = this.mapper.editInMsgEKK0351C250(
								param,
								opSvcKeiNo,
								msgsEKK0351A010[0],
								svcEndYmd,
								svcChrgEndYmd,
								motoLastUpdDtm,
								idoDiv,
								SVC_DLRE_CD_HKTG,
								jdgHiChrgMapOpSvcKei
						);
						retMsg = (CAANMsg)runSc(handle, param, EKK0351C250, inputMap);

						// 更新年月日時分秒（更新後）取得
						motoLastUpdDtm = retMsg.getString(EKK0351C250CBSMsg.UPD_DTM);
					}
					else
					{
						// 何もしない
					}

					// ******************************************************* //
					// エイジング使用終了
					// ※updateAgingは、登録するエイジング対象がない場合、何も処理しないしないつくりのため、無条件で呼び出す
					// ******************************************************* //
					updateAging(handle, param, msgsEKK0351A010[0], msgsEKK0361A010[0], msgsEKK0401B001, AGING_EXEC_KBN_END);
				}
			}
		
			// ■引継元に新規Myホームページオプションを登録する
			// ******************************************************* //
			// オプションサービス契約＜ＩＳＰ＞登録処理                //
			// ******************************************************* //
			// ホームページ容量の初期値取得
			String capa = getCapa(handle, param, getHikiMotoPcrsCd(workMap), SBOP_SVC_CD_HP_CAPA); 

			// 引継元情報をセット
			inputMap = this.mapper.editInMsgEKK0361D010New(
					param,
					retHikiMotoEKK0361A010[0],
					hikiMotoSeikyKeiNo,
					hikiMotoSvcKeiNo,
					hikiMotoSysid,
					mskmDtlNo,
					getIdoDiv(workMap),
					aplyYmd,
					capa,
					motoLastUpdDtm
			);
			retMsg = (CAANMsg)runSc(handle, param, EKK0361D010, inputMap);
			motoLastUpdDtm = retMsg.getString(EKK0361D010CBSMsg.UPD_DTM);

			// 引継元に新規登録したオプションサービス契約番号
			String hikiMotoNewOpSvcKeiNo = retMsg.getString(EKK0361D010CBSMsg.OP_SVC_KEI_NO);

			if (JKKStrConst.CD00037_SHOSA_ZUMI.compareTo(hikiMotoSvcKeiStat) > 0)
			{
				// 何もしない
			}
			else if (JKKStrConst.CD00037_SHOSA_ZUMI.compareTo(hikiMotoSvcKeiStat) == 0)
			{
				// ******************************************************* //
				// オプションサービス契約＜ISP＞照査
				// ******************************************************* //
				inputMap = this.mapper.editInMsgEKK0361C010(param, hikiMotoNewOpSvcKeiNo, getIdoDiv(workMap), motoLastUpdDtm);

				retMsg = (CAANMsg)runSc(handle, param, EKK0361C010, inputMap);
				motoLastUpdDtm = retMsg.getString(EKK0361C010CBSMsg.UPD_DTM);
			}
			else
			{
				// ※elseは、仕様上、締結済のみ
				// ******************************************************* //
				// オプションサービス契約＜ISP＞照査締結
				// ******************************************************* //
				inputMap = this.mapper.editInMsgEKK0361C030(param, hikiMotoNewOpSvcKeiNo, getIdoDiv(workMap), motoLastUpdDtm);

				retMsg = (CAANMsg)runSc(handle, param, EKK0361C030, inputMap);
				motoLastUpdDtm = retMsg.getString(EKK0361C030CBSMsg.UPD_DTM);
			}

			// ■引継元に新規登録したMyホームページオプション、サブオプションの情報を取得する。
			opSvcKeiInfo = getOpSvcKeiInfo(handle, param, hikiMotoNewOpSvcKeiNo);
			// オプションサービス契約一意照会結果
			msgsEKK0351A010 = (CAANMsg[])opSvcKeiInfo.get(MAP_KEY_OP_SVC);
			// オプションサービス契約＜ISP＞一意照会結果
			msgsEKK0361A010 = (CAANMsg[])opSvcKeiInfo.get(MAP_KEY_OP_SVC_ISP);
			// サブオプションサービス契約一覧照会結果
			msgsEKK0401B001 = (CAANMsg[])opSvcKeiInfo.get(MAP_KEY_SBOP_SVC);

			// ■引継元に新規登録したWebIDをエイジングに登録する
			// ******************************************************* //
			// エイジング登録
			// ※updateAgingは、登録するエイジング対象がない場合、何も処理しないしないつくりのため、無条件で呼び出す
			// ******************************************************* //
			updateAging(handle, param, msgsEKK0351A010[0], msgsEKK0361A010[0], msgsEKK0401B001, AGING_EXEC_KBN_ADD);

			// ■引継元のサービス契約が解約済の場合、上で新規登録したMyホームページオプションを解約済にする
			if (JKKStrConst.CD00037_DSL_ZM.equals(hikiMotoSvcKeiStat))
			{
				HashMap<String, Object> inMap = new HashMap<String, Object>();

				// サービス終了年月日
				String svcEndYmd = aplyYmd;	
				svcEndYmd = aplyYmd;
				// サービス課金終了年月日（適用日−１日）
				String svcChrgEndYmd = addYYYYMMDD(aplyYmd, -1);

				inMap.put("svc_chrg_endymd", svcChrgEndYmd);	// サービス課金終了年月日
				inMap.put("svc_endymd",      svcEndYmd);		// サービス終了年月日

				// ▼▼▼▼▼ 2013/09/11 OM-2013-0001096 UPD START ▼▼▼▼▼
				// ******************************************************* //
				// 非課金判定部品実行処理＜オプション＞                    //
				// ******************************************************* //
				// ※「解約時課金フラグ」について
				// 　　オプション、サブオプションごとに非課金判定部品を実行し、
				// 　　各々の解約時課金フラグを設定する。
				HashMap<String, Object> jdgHiChrgMapOpSvcKei =
					runHiChrgJdgUtil(
							handle,
							param,
							inMap,
							retHikiMotoEKK0081A010[0],
							null,
							msgsEKK0351A010[0],
							null,
							DSL_SBT_FLG_OP_SVC_KEI_DSL
					);
				// ▲▲▲▲▲ 2013/09/11 OM-2013-0001096 UPD E N D ▲▲▲▲▲

				// ******************************************************* //
				// オプションサービス契約解約                              //
				// ******************************************************* //
				inputMap = this.mapper.editInMsgEKK0351C240(
						param,
						hikiMotoNewOpSvcKeiNo,
						msgsEKK0351A010[0],
						mskmDtlNo,
						aplyYmd,
						svcEndYmd,
						svcChrgEndYmd,
						motoLastUpdDtm,
						idoDiv,
						SVC_DLRE_CD_NORMAL,
						jdgHiChrgMapOpSvcKei
				);
				retMsg = (CAANMsg)runSc(handle, param, EKK0351C240, inputMap);
				motoLastUpdDtm = retMsg.getString(EKK0351C240CBSMsg.UPD_DTM);

				// ******************************************************* //
				// オプションサービス契約解約確定                          //
				// ******************************************************* //
				inputMap = this.mapper.editInMsgEKK0351C250(
						param,
						hikiMotoNewOpSvcKeiNo,
						msgsEKK0351A010[0],
						svcEndYmd,
						svcChrgEndYmd,
						motoLastUpdDtm,
						idoDiv,
						SVC_DLRE_CD_NORMAL,
						jdgHiChrgMapOpSvcKei
				);
				retMsg = (CAANMsg)runSc(handle, param, EKK0351C250, inputMap);
				motoLastUpdDtm = retMsg.getString(EKK0351C250CBSMsg.UPD_DTM);

				// 解約したMyホームページオプション、サブオプションの情報を取得する
				opSvcKeiInfo = getOpSvcKeiInfo(handle, param, hikiMotoNewOpSvcKeiNo);
				// オプションサービス契約一意照会結果
				msgsEKK0351A010 = (CAANMsg[])opSvcKeiInfo.get(MAP_KEY_OP_SVC);
				// 引継元：オプションサービス契約＜ISP＞一意照会結果
				msgsEKK0361A010 = (CAANMsg[])opSvcKeiInfo.get(MAP_KEY_OP_SVC_ISP);
				// 引継元：サブオプションサービス契約一覧照会結果
				msgsEKK0401B001 = (CAANMsg[])opSvcKeiInfo.get(MAP_KEY_SBOP_SVC);

				// ******************************************************* //
				// エイジング使用終了
				// ******************************************************* //
				updateAging(
						handle,
						param,
						msgsEKK0351A010[0],
						msgsEKK0361A010[0],
						msgsEKK0401B001,
						AGING_EXEC_KBN_END
				);
			}
		}
		// OM-2014-0001247 2014/04/02 end
	}
// 20130724 IT1-2013-0001434 ADD END

	// ▼▼▼▼▼ 2013/07/29 UPD START ▼▼▼▼▼
	private void callEKK1091D010(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			Map<String, Object> userData,
			HashMap<String, Object> workMap,
			String funcCd,
			String kidoCd,
			String hikisakiSvcKeiNo,
			String hikimotoSvcKeiNo,
			String mskmDtlNo,
			String prgIdoDtm,
			String sysDtm
	) throws Throwable
	{
		// UI残65_異動理由の要否について 2012/05/14 ariyoshi strat
		CAANMsg template = new CAANMsg(EKK1091D010CBSMsg.class.getName());

		ArrayList inList = (ArrayList)userData.get(USER_DATA_KEY_IDO_RSN_CD_LIST);
		CAANMsg[] templateArray = template.getCAANMsgList(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST);

		if (templateArray == null && inList != null)
		{
			templateArray = new CAANMsg[inList.size()];
		}

		if (inList != null && 0 < inList.size())
		{
			for (int i = 0; i < inList.size(); i++)	
			{
				HashMap childMap = (HashMap)inList.get(i);
				CAANMsg idoRsnMap = new CAANMsg(EKK1091D010CBSMsg1List.class.getName());
				// nullを設定
				fillCAANMSGNullMapping(idoRsnMap, new EKK1091D010CBSMsg1List().getContents());

				// リクエストパラメータ.異動理由明細.異動理由コード → 異動理由明細.異動理由コード
				idoRsnMap.set(EKK1091D010CBSMsg1List.IDO_RSN_CD, (String)childMap.get("ido_rsn_cd"));

				// リクエストパラメータ.異動理由明細.異動理由メモ → 異動理由明細.異動理由メモ
				idoRsnMap.set(EKK1091D010CBSMsg1List.IDO_RSN_MEMO, (String)childMap.get("ido_rsn_memo"));
				templateArray[i] = idoRsnMap;
			}
		}
		else
		{
			CAANMsg idoRsnMap = new CAANMsg(EKK1091D010CBSMsg1List.class.getName());
			idoRsnMap.set(EKK1091D010CBSMsg1List.IDO_RSN_CD, IDO_RSN_CD_C2);
			idoRsnMap.setNull(EKK1091D010CBSMsg1List.IDO_RSN_MEMO);
			templateArray[0] = idoRsnMap;
		}

		// ******************************
		// サービス契約リスト
		// ******************************
		ArrayList<String> svcKeiNoList = new ArrayList<String>();
		svcKeiNoList.add(hikimotoSvcKeiNo);		// 引継元サービス契約番号
		svcKeiNoList.add(hikisakiSvcKeiNo);		// 引継先サービス契約番号

		// ******************************
		// 進捗リスト
		// ******************************
		ArrayList<String> prgList = new ArrayList<String>();

		// 起動元がバッチじゃない場合
		// 起動元コードは、「異動予約反映」からのみ取得可
		if (! KIDO_CD_BAT.equals(kidoCd))
		{
			prgList.add(PRG_STAT_5101);
		}

		// 即時適用
		if (isSokujitsu)
		{
			prgList.add(PRG_STAT_5102);
		}

		// ******************************
		// 進捗特記事項１作成
		// ******************************
		// 登録確定時、進捗.進捗特記事項1に値をセットするように変更
		StringBuffer sbPrgTkjk = new StringBuffer();

		// オプション引継: 引継先
		sbPrgTkjk.append(PRG_TKJK_HIKITSUGI_SAKI);
		sbPrgTkjk.append(hikisakiSvcKeiNo);
		sbPrgTkjk.append(PRG_TKJK_HIKITSUGI_END);
		// 半角スペース
		sbPrgTkjk.append(" ");
		// オプション引継: 引継元
		sbPrgTkjk.append(PRG_TKJK_HIKITSUGI_MOTO);
		sbPrgTkjk.append(hikimotoSvcKeiNo);
		sbPrgTkjk.append(PRG_TKJK_HIKITSUGI_END);

		// ******************************
		// 進捗登録マッピング
		// ******************************
		HashMap<String, Object> inputMap = new HashMap<String, Object>();

		inputMap.put(JCMConstants.FUNC_CODE_KEY,               funcCd);					// 機能コード
		inputMap.put(EKK1091D010CBSMsg.MSKM_DTL_NO,            mskmDtlNo);				// 申込明細番号
		inputMap.put(EKK1091D010CBSMsg.IDO_DIV,                getIdoDiv(workMap));		// 異動区分
		inputMap.put(EKK1091D010CBSMsg.PRG_TKJK_1,             sbPrgTkjk.toString());	// 進捗特記事項１
		inputMap.put(EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST, templateArray);			// 異動理由リスト

		if (prgIdoDtm != null && !"".equals(prgIdoDtm))
		{
			// ※進捗異動日時が取得できるのは、
			//   異動予約反映から実行された場合のみ
			inputMap.put(EKK1091D010CBSMsg.IDO_DTM,     prgIdoDtm);			// 異動年月日時分秒
		}
		else
		{
			// 取得できない場合は、実日付
			inputMap.put(EKK1091D010CBSMsg.IDO_DTM,     sysDtm);			// 異動年月日時分秒
		}

		for (int i = 0; i < svcKeiNoList.size(); i++)
		{
			// サービス契約番号を空に
			inputMap.remove(EKK1091D010CBSMsg.SVC_KEI_NO);

			// サービス契約番号をセット
			inputMap.put(EKK1091D010CBSMsg.SVC_KEI_NO,  svcKeiNoList.get(i));

			for (int j = 0; j < prgList.size(); j++)
			{
				// 進捗ステータスを空に
				inputMap.remove(EKK1091D010CBSMsg.PRG_STAT);

				// 進捗ステータスをセット
				inputMap.put(EKK1091D010CBSMsg.PRG_STAT, prgList.get(j));

				// 進捗登録
				runSc(handle, param, EKK1091D010, inputMap);
			}
		}
	}
	// ▲▲▲▲▲ 2013/07/29 UPD E N D ▲▲▲▲▲
	// 20130810 オーダ設定登録処理を追加 ADD START
	/**
	 * オーダ設定登録処理<br>
	 * 引継先のEメール・Myホームページ・メーリングリストはSOD発行しないため、<br>
	 * 擬似的にオーダ設定レコードのみを作成します<br>
	 * @param handle セッションマネージャなどを持ったハンドル
	 * @param param モデルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param workMap ワークマップ
	 * @param svcKeiNo サービス契約番号
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param opSvcCd オプションサービスコード
	 * @param mlad メールアドレス
	 * @throws	Throwable
	 */
	private void addOdrSet(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> workMap,
			String svcKeiNo,
			String opSvcKeiNo,
			String opSvcCd,
			String mlad
	) throws Throwable
	{
		// オーダ種別コード
		String orderSbtCd = null;
		// サービスオーダコード
		String svcOrderCd = null;
		
		if (OP_SVC_CD_EMAIL.equals(opSvcCd))
		{
			orderSbtCd = JKKSvcConst.ORDER_SBT_CD_NET;
			svcOrderCd = JKKSvcConst.SVC_ORDER_CD_MAIL;
		}
		else if (OP_SVC_CD_MYHOMEPAGE.equals(opSvcCd))
		{
			orderSbtCd = JKKSvcConst.ORDER_SBT_CD_NET;
			svcOrderCd = JKKSvcConst.SVC_ORDER_CD_WEB;
		}
		else if (OP_SVC_CD_MAILINGLIST.equals(opSvcCd))
		{
			orderSbtCd = JKKSvcConst.ORDER_SBT_CD_NET;
			svcOrderCd = JKKSvcConst.SVC_ORDER_CD_ML;
		}
		else
		{
			// 上記以外は処理対象外
			return;
		}
		
		HashMap<String, Object> inMapEKK1041D010 = new HashMap<String, Object>();
		// 機能コード
		inMapEKK1041D010.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
		// サービス契約番号
		inMapEKK1041D010.put(EKK1041D010CBSMsg.SVC_KEI_NO, svcKeiNo);
		// オプションサービス契約番号
		inMapEKK1041D010.put(EKK1041D010CBSMsg.OP_SVC_KEI_NO, opSvcKeiNo);
		// オーダ種別コード
		inMapEKK1041D010.put(EKK1041D010CBSMsg.ORDER_SBT_CD, orderSbtCd);
		// サービスオーダコード
		inMapEKK1041D010.put(EKK1041D010CBSMsg.SVC_ORDER_CD, svcOrderCd);
		// 最新要求種別コード
		inMapEKK1041D010.put(EKK1041D010CBSMsg.RCNT_YOKYU_SBT_CD, JKKSvcConst.YOKYU_SBT_CD_NEW);
		// メールアドレス
		inMapEKK1041D010.put(EKK1041D010CBSMsg.MLAD, mlad);
		// 登録SOD送信年月日
		inMapEKK1041D010.put(EKK1041D010CBSMsg.ADD_SOD_SEND_YMD, opeDate);
		
		runSc(handle, param, EKK1041D010, inMapEKK1041D010);
	}
	// 20130810 オーダ設定登録処理を追加 ADD END
	
	// OM-2014-0002930対応 20140910 田中 ADD START
	/**
	 * ホームページ容量の無料容量分の超過チェック
	 * 引継元のホームページ容量が引継先の無料容量を上回っている場合
	 * サブオプションサービス契約の登録を行う
	 */
	private void addMyHpSubOp(SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> workMap,
			String mskmDtlNo,
			String hikiSakiSeikyKeiNo,
			CAANMsg[] retHikiMotoEKK0351A010,
			CAANMsg[] retHikiMotoEKK0361A010,
			List<String> hikiSakiSbOpSvcKeiNo,
			List<String> hikiSakiSbOpSvcCd) throws Throwable{
		
		// 引継元のオプションサービスがMyHPでない場合
		if (!OP_SVC_CD_MYHOMEPAGE.equals(retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_CD))){
			return;
		}
		
		// 追加容量の取得処理
		int addCapa = this.getAddCapa(handle, param, workMap, retHikiMotoEKK0361A010);
		
		// 追加容量が０でない（追加容量をサブオプションサービスに登録する必要がある）場合
		if (addCapa != 0){
			// ******************************************************* //
			// サブオプションサービス契約＜ＩＳＰ＞登録処理            //
			// ******************************************************* //
			HashMap<String, Object> inputMap = this.mapper.editInMsgEKK0411D010MyHp(
					param,
					getHikiSakiOpSvcKeiNo(workMap, retHikiMotoEKK0351A010[0].getString(EKK0351A010CBSMsg1List.OP_SVC_KEI_NO)),
					mskmDtlNo,
					hikiSakiSeikyKeiNo,
					sakiLastUpdDtm,
					getAplyYmd(workMap),
					getIdoDiv(workMap),
					addCapa
			);

			CAANMsg retMsg = (CAANMsg)runSc(handle, param, EKK0411D010, inputMap);

			// 更新年月日時分秒
			sakiLastUpdDtm = retMsg.getString(EKK0411D010CBSMsg.UPD_DTM);
			
			// 引継先サブオプションサービス契約番号
			hikiSakiSbOpSvcKeiNo.add(retMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_KEI_NO));
			// 引継先サブオプションサービスコード
			hikiSakiSbOpSvcCd.add(retMsg.getString(EKK0411D010CBSMsg.SBOP_SVC_CD));
		}
		
	}
	
	/**
	 * ホームページ無料容量取得<br>
	 * 料金コース_サブオプションサービスマスタからホームページ容量の初期値を取得します<br>
	 */
	private String getFreeCapa(
			SessionHandle handle,
			IRequestParameterReadWrite param,
			String pcrsCd,
			String sbopSvcCd
	) throws Throwable
	{
		String capa = "";
		
		// 料金コース_サブオプションサービス一覧照会
		HashMap<String, Object> inputMap = this.mapper.editInMsgEKK1881B001(param, pcrsCd, sbopSvcCd);
		CAANMsg[] retMsgs = (CAANMsg[])runSc(handle, param, EKK1881B001, inputMap);
		
		if (retMsgs.length > 0)
		{
			// サービス提供物初期値
			capa = retMsgs[0].getString(EKK1881B001CBSMsg1List.SVCTK_BUT_MRYO_VALUE);
		}
		else
		{
			throw new CCException("", new SCCallException("ホームページ無料容量取得取得エラー pcrsCd["+pcrsCd +"]sbopSvcCd["+ sbopSvcCd+"]", String.valueOf(9051), 8011));
		}
		
		return capa;
	}
	
	/**
	 * サブオプションサービス＜ＩＳＰ＞に登録する追加容量を取得する
	 * @param handle
	 * @param param
	 * @param workMap
	 * @param retHikiMotoEKK0361A010
	 * @return 追加する容量。無料容量のほうが多い場合は０を返す
	 * @throws Throwable
	 */
	private int getAddCapa(SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> workMap,
			CAANMsg[] retHikiMotoEKK0361A010) throws Throwable{
		
		// サブオプションサービスに追加する容量
		int addCapa = 0;
		
		// ========================================================== //
		// 引継先サービス契約一意照会実行                             //
		// ========================================================== //
		CAANMsg[] retHikiSakiEKK0081A010 = callEKK0081A010(handle, param, getHikiSakiSvcKeiNo(workMap));
		
		// ホームページ無料容量の初期値取得
		String freeCapa = getFreeCapa(handle, param, retHikiSakiEKK0081A010[0].getString(EKK0081A010CBSMsg1List.PCRS_CD), SBOP_SVC_CD_HP_CAPA);
		
		// オプションサービス契約＜ＩＳＰ＞の容量を取得
		String capa = retHikiMotoEKK0361A010[0].getString(EKK0361A010CBSMsg1List.CAPA);
		
		// 引継元の容量が引継先の無料容量より多い場合
		if (Integer.valueOf(capa) > Integer.valueOf(freeCapa)){
			// 差分を追加容量として取得する
			addCapa = Integer.valueOf(capa) - Integer.valueOf(freeCapa);
		}
		
		return addCapa;
	}
	// OM-2014-0002930対応 20140910 田中 ADD END
	//ANK-3149-08-00 ADD START
	/**
	 * 例外発生させるためのサービスIFエラー（ダミー）を設定します。
	 * <br>
	 * @param param
	 * @param paramMap
	 * @param errIfId エラー発生サービスIFID
	 * @param errItem エラー発生項目
	 * @return パラメータマップ
	 * @throws RequestParameterException
	 */
	protected void setExceptionErr(IRequestParameterReadWrite param, HashMap<String, Object> inMap, String errIfId, String errItem)
			throws RequestParameterException
	{
		inMap.put(errItem, "EZ");
		
		int templateStatus = JPCModelConstant.RELATION_ERR;
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (obj == null)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		// エラー情報のリストを取得
		ArrayList<Object> errList = (ArrayList<Object>)param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errList == null)
		{
			errList = new ArrayList<Object>();
		}
		
		// コントロールマップに設定
		HashMap<String, Object> errorMap = new HashMap<String, Object>();
		HashMap<String, String> errorMapChild = new HashMap<String, String>();
		
		errorMap.put(ErrorInfoMapKeys.RETURN_CODE, JPCModelConstant.NORMAL_END);
		errorMap.put(ErrorInfoMapKeys.TEMPLATE_ID, errIfId);
		errorMap.put(ErrorInfoMapKeys.STATUS, JPCModelConstant.RELATION_ERR);
		
		errorMapChild.put(errItem, "EZ");
		errorMap.put(ErrorInfoMapKeys.ITEM_CHECK_ERRORS, errorMapChild);
		
		errList.add(errorMap);
		
		param.setControlMapData(SCControlMapKeys.ERROR_INFO, errList);
	}
	//ANK-3149-08-00 ADD END
}
