/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom, 2011
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKKAdchgOptionPackRunCC
*   ソースファイル名：JKKAdchgOptionPackRunCC.java
*   作成者          ：富士通
*   日付            ：2014年04月25日
*＜機能概要＞
*   住所変更関連オプションパック実行部品クラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v9.00.00    2014/04/25   FJ）阮      新規作成
*   v9.01.00    2014/05/16   FJ)北谷     IT1-2014-0000146対応
*   v9.02.00    2014/06/05   FJ)北谷     IT1-2014-0000200対応
*  v50.00.00    2020/06/24   FJ)三原     【ANK-3754-00-00】トビラフォン対応
**********************************************************************/
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 com.fujitsu.futurity.bp.custom.constant.JKKAdchgConstCC;
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.IRequestParameterReadOnly;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.mapping.bp.common.TemplateErrorUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0191A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C220CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C240CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C250CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371B001CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0371C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0371D010CBSMsg;
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.EKK0431C010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0431C030CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0431D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451C021CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0451C220CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0791A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0791A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2071B501CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK2071B501CBSMsg1List;

/**
 * 住所変更関連オプションパック実行部品クラス
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JKKAdchgOptionPackRunCC extends AbstractCommonComponent {

	/** データマップキー（対象データリスト） */
	public static final String KEY_TRGT_DATA_LIST = "trgt_data_list";
	
//	/** 一意照会、一覧照会のサービスインタフェース呼び出しで使用するマッパー群 */
//	private JKKSvkeiShosaClShokaiMapperCC shokaiMapper = null;
	
	// ▼▼▼▼▼▼▼▼▼▼▼▼▼ SIFプログラムID定数群 START ▼▼▼▼▼▼▼▼▼▼▼▼▼
	
	/** サービス契約一意照会 **/
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	
	/** サービス契約内訳一意照会 **/
	private static final String TEMPLATE_ID_EKK0161A010 = "EKK0161A010";
	
	/** 料金コース一意照会 **/
	private static final String TEMPLATE_ID_EKK0791A010 = "EKK0791A010";
	
	/** オプションサービス契約＜電話＞登録 **/
	private static final String TEMPLATE_ID_EKK0371D010 = "EKK0371D010";
	
	/** オプションサービス契約＜電話＞照査 **/
	private static final String TEMPLATE_ID_EKK0371C010 = "EKK0371C010";
	
	/** オプションサービス契約＜電話＞照査締結 **/
	private static final String TEMPLATE_ID_EKK0371C030 = "EKK0371C030";
	
	/** オプションサービス契約一覧照会 **/
	private static final String TEMPLATE_ID_EKK0371B001 = "EKK0371B001";
	
	/** サブオプションサービス契約＜電話＞登録 **/
	private static final String TEMPLATE_ID_EKK0431D010 = "EKK0431D010";
	
	/** サブオプションサービス契約＜電話＞照査 **/
	private static final String TEMPLATE_ID_EKK0431C010 = "EKK0431C010";
	
	/** サブオプションサービス契約＜電話＞照査締結 **/
	private static final String TEMPLATE_ID_EKK0431C030 = "EKK0431C030";
	
	/** オプションサービス契約キャンセル処理 **/
	private static final String TEMPLATE_ID_EKK0351C220 = "EKK0351C220";
	
	/** オプションサービス契約解約処理 **/
	private static final String TEMPLATE_ID_EKK0351C240 = "EKK0351C240";
	
	/** オプションサービス契約解約確定 */
	private static final String TEMPLATE_ID_EKK0351C250 = "EKK0351C250";
	
	/** サブオプションサービス契約キャンセル */
	private static final String TEMPLATE_ID_EKK0401C150 = "EKK0401C150";
	
	/** サブオプションサービス契約解約 */
	private static final String TEMPLATE_ID_EKK0401C170 = "EKK0401C170";
	
	/** サブオプションサービス契約解約確定 */
	private static final String TEMPLATE_ID_EKK0401C180 = "EKK0401C180";
	
	/** 割引サービス契約解約（異動予約未来登録） */
	private static final String TEMPLATE_ID_EKK0451C021 = "EKK0451C021";
	
	/** 割引サービス契約＜置換型＞開始 */
	private static final String TEMPLATE_ID_EKK0451C220 = "EKK0451C220";
	
	/** サブオプションサービス契約一覧照会 */
	private static final String TEMPLATE_ID_EKK0401B001 = "EKK0401B001";
	
	/** 進捗登録 */
	private static final String TEMPLATE_ID_EKK1091D010 = "EKK1091D010";
	
	/** サービス契約内訳＜eo光電話＞一意照会 */
	private static final String TEMPLATE_ID_EKK0191A010 = "EKK0191A010";
	
	// ▲▲▲▲▲▲▲▲▲▲▲▲▲ SIFプログラムID定数群 END ▲▲▲▲▲▲▲▲▲▲▲▲▲
	
	// ▼▼▼▼▼▼▼▼▼▼▼▼▼ INPUT項目定数群 START ▼▼▼▼▼▼▼▼▼▼▼▼▼
	
	/** INPUT.サービス契約番号 */
	public static final String SVC_KEI_NO = "svc_kei_no";
	
	/** INPUT.サービス契約内訳番号（電話１番号） */
	public static final String SVC_KEI_UCWK_NO_TEL1 = "svc_kei_ucwk_no_tel1";
	
	/** INPUT.サービス契約内訳番号（電話２番号） */
	public static final String SVC_KEI_UCWK_NO_TEL2 = "svc_kei_ucwk_no_tel2";
	
	/** INPUT.オプションパック登録パターンコード（電話１番号） */
	public static final String OP_PACK_ADD_PTN_NO1 = "op_park_add_ptn_no1";
	
//	/** INPUT.変更前オプションパック登録パターンコード（電話１番号） */
//	public static final String BF_OP_PACK_ADD_PTN_NO1 = "bf_op_park_add_ptn_no1";
	
	/** INPUT.オプションパック登録パターンコード（電話２番号） */
	public static final String OP_PACK_ADD_PTN_NO2 = "op_park_add_ptn_no2";
	
//	/** INPUT.変更前オプションパック登録パターンコード（電話２番号） */
//	public static final String BF_OP_PACK_ADD_PTN_NO2 = "bf_op_park_add_ptn_no2";
	
	/** INPUT.住所変更処理パターンフラグ */
	public static final String ADDCHANG_PTN_FLG = "addchang_prn_flg";
	
	/** INPUT.住所変更処理モードフラグ */
	public static final String ADDCHANG_MODE_FLG = "addchang_mod_flg";
	
	/** INPUT.申込明細番号 */
	public static final String MSKM_DTL_NO = "mskm_dtl_no";
	
	/** INPUT.請求契約番号 */
	public static final String SEIKY_KEI_NO = "seiky_kei_no";
	
	/** INPUT.異動区分 */
	public static final String IDO_DIV = "ido_div";
	
	/** INPUT.本登録の番号変更時専用パラメーター(番号変更前のパック種類を示す割引サービスコード/1番号目) */
	public static final String OP_PACK_CHG_BF1 = "op_pack_chg_bf1";
	
	/** INPUT.本登録の番号変更時専用パラメーター(番号変更後のパック種類を示す割引サービスコード/1番号目) */
	public static final String OP_PACK_CHG_AF1 = "op_pack_chg_af1";
	
	/** INPUT.本登録の番号変更時専用パラメーター(番号変更後のパック種類を示す割引サービスコード/2番号目) */
	public static final String OP_PACK_CHG_BF2 = "op_pack_chg_bf2";
	
	/** INPUT.本登録の番号変更時専用パラメーター(番号変更後のパック種類を示す割引サービスコード/2番号目) */
	public static final String OP_PACK_CHG_AF2 = "op_pack_chg_af2";
	
	/** INPUT.解約希望日 */
	public static final String DSL_KIBO_YMD = "dsl_kibo_ymd";
	
	// ▲▲▲▲▲▲▲▲▲▲▲▲▲ INPUT項目定数群 END ▲▲▲▲▲▲▲▲▲▲▲▲▲
	
	// ▼▼▼▼▼▼▼▼▼▼▼▼▼ パラメーター定数群 START ▼▼▼▼▼▼▼▼▼▼▼▼▼
	
	/** 住所変更パターンフラグ_住所変更（サービス追加） */
	public static final String ADCHG_SVC_KEI_ADD = "adChgSvcKeiAdd";
	
	/** 住所変更パターンフラグ_住所変更（電話番号追加） */
	public static final String ADCHG_TELNO_ADD = "adChgTelNoAdd";
	
	/** 住所変更パターンフラグ_住所変更（番号変更） */
	public static final String ADCHG_TELNO_CHANGE = "adChgTelNoChange";
	
	/** 住所変更パターンフラグ_住所変更（番号追加取消） */
	public static final String ADCHG_TELNO_ADDCL = "adChgTelNoAddCl";
	
	/** 住所変更パターンフラグ_住所変更（番号変更の取消） */
	public static final String ADCHG_TELNO_CHANGECL = "adChgTelNoChangsCl";
	
	/** 住所変更処理モード_住所変更（本登録） */
	public static final String ADCHG_MAIN_MODE = "adChgMainMode";
	
	/** 住所変更処理モード_住所変更（修正モード） */
	public static final String ADCHG_CHANGE_MOD = "adChgChangeMode";
	
	/** 住所変更処理モード_住所変更（住変キャンセル） */
	public static final String ADCHG_ADCL_MOD = "adChgAdClMode";
	
	// ▲▲▲▲▲▲▲▲▲▲▲▲▲ パラメーター定数群 END ▲▲▲▲▲▲▲▲▲▲▲▲▲
	
	
	/** サービスコード「０１：ネット」 */
	public static final String SVC_CD_01 = "01";
	
	/** サービスコード「０２：電話」 */
	public static final String SVC_CD_02 = "02";
	
	/** 運用日を取得する関数 */
	private String opeDate = "";
	
	/** 進捗ステータス eo光電話オプションパック設定完了 */
	private static final String PRG_STAT_PACKADD = "5112";
	
//	/** ユーザ任意文字列 */
//	private String fixedTextGlobal = null;

	/**
	 * 住所変更関連オプションパック操作実行部品のメイン処理
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @throws Throwable
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	public IRequestParameterReadWrite adChgOptionPackMain(SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> requestParam, String fixedText) throws Throwable
	{
		// S-IF結果格納用
		HashMap<String, Object> resultHash =  new HashMap<String, Object>();
		
//		this.fixedTextGlobal = fixedText;
//		
//		HashMap trgtData = (HashMap)param.getData(this.fixedTextGlobal);
//		ArrayList<HashMap<String, Object>> trgtDataList = (ArrayList<HashMap<String, Object>>)trgtData.get(KEY_TRGT_DATA_LIST);
		
		// SC呼び出し部品のインスタンス生成（引数にはログに出力するクラス名を渡す。空文字を設定した場合はログに出力されない）
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// ▼▼▼▼▼▼▼▼▼▼▼▼ TO GET ALL INPUT ITEMS START ▼▼▼▼▼▼▼▼▼▼▼▼
		
		// INPUT.TARGET_SVC_KEI_NO
		String prmSvcKeiNo = (String)requestParam.get(SVC_KEI_NO);
		
		// INPUT.TARGET_SVC_KEI_UCWK(BF_TELNO.1)
		String prmSvcKeiUcwkNoTel1 = (String)requestParam.get(SVC_KEI_UCWK_NO_TEL1);
		
		// INPUT.TARGET_SVC_KEI_UCWK(BF_TELNO.2)
		String prmSvcKeiUcwkNoTel2 = (String)requestParam.get(SVC_KEI_UCWK_NO_TEL2);
		
		// INPUT.OPPACK_ADD_PTN_FLG(TARGET_UCWK_NO_TEL1)
		String prmOpPackAddPtnFlgTel1 = (String)requestParam.get(OP_PACK_ADD_PTN_NO1);
//		String prmBfOpPackAddPtnFlgTel1 = (String)requestParam.get(BF_OP_PACK_ADD_PTN_NO1);
		
		// INPUT.OPPACK_ADD_PTN_FLG(TARGET_UCWK_NO_TEL2)
		String prmOpPackAddPtnFlgTel2 = (String)requestParam.get(OP_PACK_ADD_PTN_NO2);
//		String prmBfOpPackAddPtnFlgTel2 = (String)requestParam.get(BF_OP_PACK_ADD_PTN_NO2);
		
		// INPUT.ADDCHANG_PTN_FLG
		String prmAdChgPtnFlg = (String)requestParam.get(ADDCHANG_PTN_FLG);
		
		// INPUT.ADDCHANG_MODE_FLG
		String prmAdChgModeFlg = (String)requestParam.get(ADDCHANG_MODE_FLG);
		
		// INPUT.ADDCHANG_MSKM_MEISAI_NO
		String prmMskmMeisaiNo = (String)requestParam.get(MSKM_DTL_NO);
		
		// INPUT.SEIKY_KEI_NO
		String prmSeikyKeiNo = (String)requestParam.get(SEIKY_KEI_NO);
		
		// INPUT.ADDCHANG_IDO_DIV
		String prmIdoDiv = (String)requestParam.get(IDO_DIV);
		
		// INPUT.OP_PACK_CHG_BF1(TARGET_UCWK_NO_TEL1)
		String prmOpPackChangBf1 = (String)requestParam.get(OP_PACK_CHG_BF1);
		
		// INPUT.OP_PACK_CHG_AF1(TARGET_UCWK_NO_TEL1)
		String prmOpPackChangAf1 = (String)requestParam.get(OP_PACK_CHG_AF1);
		
		// INPUT.DSL_KIBO_YMD
		String dslKiboYmd = (String)requestParam.get(DSL_KIBO_YMD);
		
		// ▲▲▲▲▲▲▲▲▲▲▲▲▲ TO GET ALL INPUT ITEM END ▲▲▲▲▲▲▲▲▲▲▲▲▲
		
		// 共通処理_CCコール前サービス契約内訳の一意照会を実施
		
		// ステータスコード
		int statusCode = 0;
		
		// 運用日の取得
		opeDate = JCCBPCommon.getOpeDate(null);
		
		//****************************************
		// ■サービス契約一意照会
		//****************************************
		statusCode = callEKK0081A010SC(param, handle, requestParam, resultHash, prmSvcKeiNo);
		if(statusCode != 0)
		{
			return param;
		}
		// サービス契約一意照会結果を取得
		HashMap<String, Object> eKK0081A010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0081A010);
		
		// 処理中サービス契約のSYSIDを取得
		String sysid =  (String)eKK0081A010Hash.get(EKK0081A010CBSMsg1List.SYSID);
		
		// サービス契約排他単位の最終更新年月日時分秒
		String svc_kei_last_upd_dtm = (String)eKK0081A010Hash.get(EKK0081A010CBSMsg1List.LAST_UPD_DTM);
		
		CAANMsg[] outMsgEKK2071B501List_TEL1 = null;
		CAANMsg[] outMsgEKK2071B501List_TEL2 = null;
		
		// オプションパック登録パターンコード（電話１番号）がNULLでない場合
		if (prmOpPackAddPtnFlgTel1 != null && !"".equals(prmOpPackAddPtnFlgTel1)) {
			
			//割引サービス構成マスタから対象の構成オプションサービス契約の料金プランコードを取得
			List<CAANMsg> eKK2071B501CaanMsgList = editInMsgKK2071B501(param,prmOpPackAddPtnFlgTel1);
			HashMap<String, Object> inMsgEKK2071B501Map = editInMsgCmn(param, eKK2071B501CaanMsgList.get(0));
			Map<?, ?> rsltEKK2071B501 = scCall.run(inMsgEKK2071B501Map, handle);
			outMsgEKK2071B501List_TEL1 = getWorkData(EKK2071B501CBSMsg.EKK2071B501CBSMSG1LIST, rsltEKK2071B501);
		}
		// オプションパック登録パターンコード（電話２番号）がNULLでない場合
		if (prmOpPackAddPtnFlgTel2 != null && !"".equals(prmOpPackAddPtnFlgTel2)) {
			
			//割引サービス構成マスタから対象の構成オプションサービス契約の料金プランコードを取得
			List<CAANMsg> eKK2071B501CaanMsgList = editInMsgKK2071B501(param,prmOpPackAddPtnFlgTel2);
			HashMap<String, Object> inMsgEKK2071B501Map = editInMsgCmn(param, eKK2071B501CaanMsgList.get(0));
			Map<?, ?> rsltEKK2071B501 = scCall.run(inMsgEKK2071B501Map, handle);
			outMsgEKK2071B501List_TEL2 = getWorkData(EKK2071B501CBSMsg.EKK2071B501CBSMSG1LIST, rsltEKK2071B501);
		}
		
		// ▼▼▼▼▼▼▼▼▼▼▼▼▼ オプションパックに対する振舞い処理 START ▼▼▼▼▼▼▼▼▼▼▼▼
		
		// 住所変更処理パターンが「サービス追加」かつ住所変更モードフラグ「本登録」の場合
		if ( ADCHG_SVC_KEI_ADD.equals(prmAdChgPtnFlg) && ADCHG_MAIN_MODE.equals(prmAdChgModeFlg) ) {
			// サービス契約内訳番号１が空白（空白orNULL）ない場合、
			if (prmSvcKeiUcwkNoTel1 != null && !"".equals(prmSvcKeiUcwkNoTel1)) {
				// オプションパック登録パターンコード（電話１番号）にパック情報が存在する場合のみ
				if (prmOpPackAddPtnFlgTel1 != null && !"".equals(prmOpPackAddPtnFlgTel1)) {
					// 光電話セレクトオプションパックCCをコール（登録モード：０１）
					
					String workTelSelectOpPackOperateKey = "TelSelectOpPackOperate";
					boolean workTelSelectOpPackOperateFlg = createUserData(param, workTelSelectOpPackOperateKey);
			
					JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
					editMapTelSelectOpPackOperate(
							param,
							fixedText,
							workTelSelectOpPackOperateKey,
							"01",
							sysid,
							prmSvcKeiNo,
							prmSvcKeiUcwkNoTel1,
							prmMskmMeisaiNo,
							opeDate,
							"",
							prmIdoDiv,
							prmOpPackAddPtnFlgTel1,
							svc_kei_last_upd_dtm
					);
					telSelectOpPackOperateCC.execute(handle, param, workTelSelectOpPackOperateKey);
					
					
					String packDiv = prmOpPackAddPtnFlgTel1;
					// パック３の場合は１
					if ("W00000007".equals(packDiv)){
						packDiv = "1";
					// パック７の場合は２
					}else if ("W00000008".equals(packDiv)){
						packDiv = "2";
					}
					// ANK-3754-00-00 ADD START
					// あんしん電話パックの場合は3
					else if ("W00000023".equals(packDiv))
					{
						packDiv = "3";
					}
					// ANK-3754-00-00 ADD END

					ArrayList<HashMap<String, Object>> wribSvcKeiList = getTelSelectOpPack(handle, param,prmSvcKeiNo, prmSvcKeiUcwkNoTel1, packDiv);
					if(wribSvcKeiList!=null && !wribSvcKeiList.isEmpty()){
						String wribSvcKeiNo = (String)wribSvcKeiList.get(0).get("wrib_svc_kei_no");
						// 進捗登録（eo光電話オプションパック設定完了）
						addEKK1091D010(handle, param, fixedText, 
								prmSvcKeiNo, prmSvcKeiUcwkNoTel1, wribSvcKeiNo, packDiv,
								PRG_STAT_PACKADD, "01", dslKiboYmd);
					}
					// 下記実行条件は内訳番号１が空白でないこと及びパック登録が実行されていた場合
					// ▼▼▼▼▼▼▼▼▼▼▼▼▼ オプションサービス契約関連の振舞い START ▼▼▼▼▼▼▼▼▼▼▼▼
					// オプションサービス契約登録処理へ（サービス契約内訳番号１AND２、内訳１のパック種類、内訳２のパック種類）
					// パック構成に必要なオプションサービスのプランコードを抽出
					opSvcKeiAdd(
							handle,
							param,
							requestParam,
							fixedText,
							outMsgEKK2071B501List_TEL1,
							sysid,
							prmSvcKeiNo,
							prmSvcKeiUcwkNoTel1,
							prmMskmMeisaiNo,
							prmSeikyKeiNo
							);
					// ▲▲▲▲▲▲▲▲▲▲▲▲▲ オプションサービス契約関連の振舞い END ▲▲▲▲▲▲▲▲▲▲▲▲▲
				}
			}
			// サービス契約内訳番号２が空白（空白orNULL）ない場合、
			if (prmSvcKeiUcwkNoTel2 != null && !"".equals(prmSvcKeiUcwkNoTel2)) {
				// オプションパック登録パターンコード（電話２番号）にパック情報が存在する場合のみ
				if (prmOpPackAddPtnFlgTel2 != null && !"".equals(prmOpPackAddPtnFlgTel2)) {
					// 光電話セレクトオプションパックCCをコール（登録モード：０１）
					
					String workTelSelectOpPackOperateKey = "TelSelectOpPackOperate";
					boolean workTelSelectOpPackOperateFlg = createUserData(param, workTelSelectOpPackOperateKey);
			
					JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
					editMapTelSelectOpPackOperate(
							param,
							fixedText,
							workTelSelectOpPackOperateKey,
							"01",
							sysid,
							prmSvcKeiNo,
							prmSvcKeiUcwkNoTel2,
							prmMskmMeisaiNo,
							opeDate,
							"",
							prmIdoDiv,
							prmOpPackAddPtnFlgTel2,
							svc_kei_last_upd_dtm
					);
					telSelectOpPackOperateCC.execute(handle, param, workTelSelectOpPackOperateKey);
					
					String packDiv = prmOpPackAddPtnFlgTel2;
					// パック３の場合は１
					if ("W00000007".equals(packDiv)){
						packDiv = "1";
					// パック７の場合は２
					}else if ("W00000008".equals(packDiv)){
						packDiv = "2";
					}
					// ANK-3754-00-00 ADD START
					// あんしん電話パックの場合は3
					else if ("W00000023".equals(packDiv))
					{
						packDiv = "3";
					}
					// ANK-3754-00-00 ADD END

					ArrayList<HashMap<String, Object>> wribSvcKeiList = getTelSelectOpPack(handle, param,prmSvcKeiNo, prmSvcKeiUcwkNoTel2, packDiv);
					if(wribSvcKeiList!=null && !wribSvcKeiList.isEmpty()){
						String wribSvcKeiNo = (String)wribSvcKeiList.get(0).get("wrib_svc_kei_no");
						// 進捗登録（eo光電話オプションパック設定完了）
						addEKK1091D010(handle, param, fixedText, 
								prmSvcKeiNo, prmSvcKeiUcwkNoTel2, wribSvcKeiNo, packDiv,
								PRG_STAT_PACKADD, "01", dslKiboYmd);
					}

					// 下記実行条件は内訳番号１が空白でないこと及びパック登録が実行されていた場合
					// ▼▼▼▼▼▼▼▼▼▼▼▼▼ オプションサービス契約関連の振舞い START ▼▼▼▼▼▼▼▼▼▼▼▼
					// オプションサービス契約登録処理へ（サービス契約内訳番号１AND２、内訳１のパック種類、内訳２のパック種類）
					opSvcKeiAdd(
							handle,
							param,
							requestParam,
							fixedText,
							outMsgEKK2071B501List_TEL2,
							sysid,
							prmSvcKeiNo,
							prmSvcKeiUcwkNoTel2,
							prmMskmMeisaiNo,
							prmSeikyKeiNo
							);
					// ▲▲▲▲▲▲▲▲▲▲▲▲▲ オプションサービス契約関連の振舞い END ▲▲▲▲▲▲▲▲▲▲▲▲▲
				}
			}
		}
		
		// 住所変更処理パターンが「電話番号追加」かつ住所変更モードフラグ「本登録」の場合
		// または、住所変更処理パターンが「電話番号追加」かつ住所変更モードフラグ「修正モード」の場合
		else if ( (ADCHG_TELNO_ADD.equals(prmAdChgPtnFlg) && ADCHG_MAIN_MODE.equals(prmAdChgModeFlg)) 
					|| (ADCHG_TELNO_ADD.equals(prmAdChgPtnFlg) && ADCHG_CHANGE_MOD.equals(prmAdChgModeFlg))) {
			if (prmSvcKeiUcwkNoTel1 != null && !"".equals(prmSvcKeiUcwkNoTel1)) {
				// オプションパック登録パターンコード（電話１番号）にパック情報が存在する場合のみ
				if (prmOpPackAddPtnFlgTel1 != null && !"".equals(prmOpPackAddPtnFlgTel1)) {
					// 光電話セレクトオプションパックCCをコール（登録モード：０１）
					
					String workTelSelectOpPackOperateKey = "TelSelectOpPackOperate";
					boolean workTelSelectOpPackOperateFlg = createUserData(param, workTelSelectOpPackOperateKey);
			
					JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
					editMapTelSelectOpPackOperate(
							param,
							fixedText,
							workTelSelectOpPackOperateKey,
							"01",
							sysid,
							prmSvcKeiNo,
							prmSvcKeiUcwkNoTel1,
							prmMskmMeisaiNo,
							opeDate,
							"",
							prmIdoDiv,
							prmOpPackAddPtnFlgTel1,
							svc_kei_last_upd_dtm
					);
					telSelectOpPackOperateCC.execute(handle, param, workTelSelectOpPackOperateKey);
					
					String packDiv = prmOpPackAddPtnFlgTel1;
					// パック３の場合は１
					if ("W00000007".equals(packDiv)){
						packDiv = "1";
					// パック７の場合は２
					}else if ("W00000008".equals(packDiv)){
						packDiv = "2";
					}
					// ANK-3754-00-00 ADD START
					// あんしん電話パックの場合は3
					else if ("W00000023".equals(packDiv)){
						packDiv = "3";
					}
					// ANK-3754-00-00 ADD END

					ArrayList<HashMap<String, Object>> wribSvcKeiList = getTelSelectOpPack(handle, param,prmSvcKeiNo, prmSvcKeiUcwkNoTel1, packDiv);
					if(wribSvcKeiList!=null && !wribSvcKeiList.isEmpty()){
						String wribSvcKeiNo = (String)wribSvcKeiList.get(0).get("wrib_svc_kei_no");
						// 進捗登録（eo光電話オプションパック設定完了）
						addEKK1091D010(handle, param, fixedText, 
								prmSvcKeiNo, prmSvcKeiUcwkNoTel1, wribSvcKeiNo, packDiv,
								PRG_STAT_PACKADD, "01", dslKiboYmd);
					}

					// 下記実行条件は内訳番号１が空白でないこと及びパック登録が実行されていた場合
					// ▼▼▼▼▼▼▼▼▼▼▼▼▼ オプションサービス契約関連の振舞い START ▼▼▼▼▼▼▼▼▼▼▼▼
					// オプションサービス契約登録処理へ（サービス契約内訳番号１AND２、内訳１のパック種類、内訳２のパック種類）
					opSvcKeiAdd(
							handle,
							param,
							requestParam,
							fixedText,
							outMsgEKK2071B501List_TEL1,
							sysid,
							prmSvcKeiNo,
							prmSvcKeiUcwkNoTel1,
							prmMskmMeisaiNo,
							prmSeikyKeiNo
							);
					// ▲▲▲▲▲▲▲▲▲▲▲▲▲ オプションサービス契約関連の振舞い END ▲▲▲▲▲▲▲▲▲▲▲▲▲
				}
			}
		}
		// 住所変更処理パターンが「電話番追加取消」かつ住所変更モードフラグ「修正モード」の場合
		// または、住所変更処理パターンが「電話番追加取消」かつ住所変更モードフラグ「住変キャンセル」の場合
		else if ( (ADCHG_TELNO_ADDCL.equals(prmAdChgPtnFlg) && ADCHG_CHANGE_MOD.equals(prmAdChgModeFlg))
					|| (ADCHG_TELNO_ADDCL.equals(prmAdChgPtnFlg) && ADCHG_ADCL_MOD.equals(prmAdChgModeFlg))) {
			// サービス契約内訳番号１が空白（空白orNULL）ない場合、
			// IT1-2014-0000200 2014/06/05 mod start
			//if (prmSvcKeiUcwkNoTel1 != null && !"".equals(prmSvcKeiUcwkNoTel1)) {
			if (!StringUtils.isEmpty(prmSvcKeiUcwkNoTel1) && !StringUtils.isEmpty(prmOpPackAddPtnFlgTel1)) {
			// IT1-2014-0000200 2014/06/05 mod end
				String packDiv = prmOpPackAddPtnFlgTel1;
				// パック３の場合は１
				if ("W00000007".equals(packDiv)){
					packDiv = "1";
				// パック７の場合は２
				}else if ("W00000008".equals(packDiv)){
					packDiv = "2";
				}
				// ANK-3754-00-00 ADD START
				// あんしん電話パックの場合は3
				else if ("W00000023".equals(packDiv))
				{
					packDiv = "3";
				}
				// ANK-3754-00-00 ADD END

				ArrayList<HashMap<String, Object>> wribSvcKeiList = getTelSelectOpPack(handle, param,prmSvcKeiNo, prmSvcKeiUcwkNoTel1, packDiv);
				if(wribSvcKeiList!=null && !wribSvcKeiList.isEmpty()){
					String wribSvcKeiNo = (String)wribSvcKeiList.get(0).get("wrib_svc_kei_no");
					// 進捗登録（eo光電話オプションパック設定完了）
					addEKK1091D010(handle, param, fixedText, 
							prmSvcKeiNo, prmSvcKeiUcwkNoTel1, wribSvcKeiNo, packDiv,
							PRG_STAT_PACKADD, "02", dslKiboYmd);
				}

				String workTelSelectOpPackOperateKey = "TelSelectOpPackOperate";
				boolean workTelSelectOpPackOperateFlg = createUserData(param, workTelSelectOpPackOperateKey);
		
				JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
				editMapTelSelectOpPackOperate(
						param,
						fixedText,
						workTelSelectOpPackOperateKey,
						"02",
						sysid,
						prmSvcKeiNo,
						prmSvcKeiUcwkNoTel1,
						prmMskmMeisaiNo,
						opeDate,
						"20991231",
						prmIdoDiv,
						prmOpPackAddPtnFlgTel1,
						svc_kei_last_upd_dtm
				);
				telSelectOpPackOperateCC.execute(handle, param, workTelSelectOpPackOperateKey);
				
				// 下記実行条件は内訳番号１が空白でないこと及びパック登録が実行されていた場合
				// ▼▼▼▼▼▼▼▼▼▼▼▼▼ オプションサービス契約関連の振舞い START ▼▼▼▼▼▼▼▼▼▼▼▼
				// オプションサービス契約登録処理へ（サービス契約内訳番号１AND２、内訳１のパック種類、内訳２のパック種類）
				opSvcKeiDel(
						handle,
						param,
						requestParam,
						fixedText,
						sysid,
						prmSvcKeiNo,
						prmSvcKeiUcwkNoTel1,
						prmMskmMeisaiNo,
						prmSeikyKeiNo
						);
				// ▲▲▲▲▲▲▲▲▲▲▲▲▲ オプションサービス契約関連の振舞い END ▲▲▲▲▲▲▲▲▲▲▲▲▲
			}
			// サービス契約内訳番号２が空白（空白orNULL）ない場合、
			// IT1-2014-0000200 2014/06/05 mod start
			//if (prmSvcKeiUcwkNoTel2 != null && !"".equals(prmSvcKeiUcwkNoTel2)) {	
			if (!StringUtils.isEmpty(prmSvcKeiUcwkNoTel2) && !StringUtils.isEmpty(prmOpPackAddPtnFlgTel2)) {
			// IT1-2014-0000200 2014/06/05 mod end
				String packDiv = prmOpPackAddPtnFlgTel2;
				// パック３の場合は１
				if ("W00000007".equals(packDiv)){
					packDiv = "1";
				// パック７の場合は２
				}else if ("W00000008".equals(packDiv)){
					packDiv = "2";
				}
				// ANK-3754-00-00 ADD START
				// あんしん電話パックの場合は3
				else if ("W00000023".equals(packDiv))
				{
					packDiv = "3";
				}
				// ANK-3754-00-00 ADD END

				ArrayList<HashMap<String, Object>> wribSvcKeiList = getTelSelectOpPack(handle, param,prmSvcKeiNo, prmSvcKeiUcwkNoTel2, packDiv);
				if(wribSvcKeiList!=null && !wribSvcKeiList.isEmpty()){
					String wribSvcKeiNo = (String)wribSvcKeiList.get(0).get("wrib_svc_kei_no");
					// 進捗登録（eo光電話オプションパック設定完了）
					addEKK1091D010(handle, param, fixedText, 
							prmSvcKeiNo, prmSvcKeiUcwkNoTel2, wribSvcKeiNo, packDiv,
							PRG_STAT_PACKADD, "02", dslKiboYmd);
				}

				// 光電話セレクトオプションパックCCをコール（解約モード：０２）
				String workTelSelectOpPackOperateKey = "TelSelectOpPackOperate";
				boolean workTelSelectOpPackOperateFlg = createUserData(param, workTelSelectOpPackOperateKey);
		
				JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
				editMapTelSelectOpPackOperate(
						param,
						fixedText,
						workTelSelectOpPackOperateKey,
						"02",
						sysid,
						prmSvcKeiNo,
						prmSvcKeiUcwkNoTel2,
						prmMskmMeisaiNo,
						opeDate,
						"20991231",
						prmIdoDiv,
						prmOpPackAddPtnFlgTel2,
						svc_kei_last_upd_dtm
				);
				telSelectOpPackOperateCC.execute(handle, param, workTelSelectOpPackOperateKey);
				// 下記実行条件は内訳番号１が空白でないこと及びパック解約が実行されていた場合
				// ▼▼▼▼▼▼▼▼▼▼▼▼▼ オプションサービス契約関連の振舞い START ▼▼▼▼▼▼▼▼▼▼▼▼
				// オプションサービス契約解約処理へ（サービス契約内訳番号１AND２、内訳１のパック種）
				opSvcKeiDel(
						handle,
						param,
						requestParam,
						fixedText,
						sysid,
						prmSvcKeiNo,
						prmSvcKeiUcwkNoTel2,
						prmMskmMeisaiNo,
						prmSeikyKeiNo
						);
		
				// ▲▲▲▲▲▲▲▲▲▲▲▲▲ オプションサービス契約関連の振舞い END ▲▲▲▲▲▲▲▲▲▲▲▲▲
			}
		}
		// 本登録の場合番号変更を行う場合、オプションパックの変更有無を確認（１内訳のみ変更、２内訳の場合は連続で呼ぶ）
		else if ( ADCHG_TELNO_CHANGE.equals(prmAdChgPtnFlg) && ADCHG_MAIN_MODE.equals(prmAdChgModeFlg))
		{
			// 住所変更中の番号変更に伴い、パックの種類に変更が生じた場合、旧パックの解約予約、新パックの登録予約を行う
			// 変更前、変更後共に有効なパックの場合
			if ((prmOpPackChangBf1 != null && !"".equals(prmOpPackChangBf1))
					&& (prmOpPackChangAf1 != null && !"".equals(prmOpPackChangAf1))) {
				// 変更前と変更後が異なる種類のパックの場合
				if (!prmOpPackChangBf1.equals(prmOpPackChangAf1)) {
					
					// 変更前パックの解約予約を登録
					String packDiv = null;
					// パック３の場合は１
					if ("W00000007".equals(prmOpPackChangBf1)){
						packDiv = "1";
					// パック７の場合は２
					}else if ("W00000008".equals(prmOpPackChangBf1)){
						packDiv = "2";
					}
					// ANK-3754-00-00 ADD START
					// あんしん電話パックの場合は3
					else if ("W00000023".equals(prmOpPackChangBf1))
					{
						packDiv = "3";
					}
					// ANK-3754-00-00 ADD END

					ArrayList<HashMap<String, Object>> wribSvcKeiListDsl = getTelSelectOpPack(handle, param,prmSvcKeiNo, prmSvcKeiUcwkNoTel1, packDiv);
					if(wribSvcKeiListDsl!=null && !wribSvcKeiListDsl.isEmpty()){
						String wribSvcKeiNo = (String)wribSvcKeiListDsl.get(0).get("wrib_svc_kei_no");
						// ■割引サービス契約解約（異動予約未来登録）
						CAANMsg EKK0451C021SCLine = callEKK0451C021SC(param, handle, requestParam, wribSvcKeiNo, prmMskmMeisaiNo, dslKiboYmd, svc_kei_last_upd_dtm, new HashMap<String, Object>());

						// 進捗登録（eo光電話オプションパック設定完了）
						addEKK1091D010(handle, param, fixedText, 
								prmSvcKeiNo, prmSvcKeiUcwkNoTel1, wribSvcKeiNo, packDiv,
								PRG_STAT_PACKADD, "02", dslKiboYmd);
					}


					JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
					String workTelSelectOpPackOperateKey = "TelSelectOpPackOperate";
					
					// 変更前の内訳に対して変更後のパック種類の割引サービス契約登録を行う
					createUserData(param, workTelSelectOpPackOperateKey);
					// パック３の場合は１
					if ("W00000007".equals(prmOpPackChangAf1)){
						packDiv = "1";
					// パック７の場合は２
					}else if ("W00000008".equals(prmOpPackChangAf1)){
						packDiv = "2";
					}
					// ANK-3754-00-00 ADD START
					// あんしん電話パックの場合は3
					else if ("W00000023".equals(prmOpPackChangAf1))
					{
						packDiv = "3";
					}
					// ANK-3754-00-00 ADD END
					
					//****************************************
					// ■サービス契約内訳一意照会
					//****************************************
					statusCode = callEKK0161A010SC(param, handle, requestParam, resultHash, prmSvcKeiUcwkNoTel1);
					if(statusCode != 0)
					{
						return param;
					}
					// サービス契約内訳一意照会
					HashMap<String, Object> eKK0161A010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0161A010);
					
//					// サービス契約排他単位の最終更新年月日時分秒
//					String svcKeiNo = (String)eKK0161A010Hash.get(EKK0161A010CBSMsg1List.LAST_UPD_DTM);
					// サービス契約番号
					String svcKeiNo = (String)eKK0161A010Hash.get(EKK0161A010CBSMsg1List.SVC_KEI_NO);
					svc_kei_last_upd_dtm = (String)eKK0161A010Hash.get(EKK0161A010CBSMsg1List.LAST_UPD_DTM);
					
					editMapTelSelectOpPackOperate(
							param,
							fixedText,
							workTelSelectOpPackOperateKey,
							"01",
							sysid,
							svcKeiNo,
							prmSvcKeiUcwkNoTel1,
							prmMskmMeisaiNo,
							dslKiboYmd,
							"20991231",
							prmIdoDiv,
							packDiv,
							svc_kei_last_upd_dtm
					);
					telSelectOpPackOperateCC.execute(handle, param, workTelSelectOpPackOperateKey);
					
					// 変更後のパックの開始予約を設定
					// 今登録したパックの割引サービス契約番号と更新日時を取得
					ArrayList<HashMap<String, Object>> wribSvcKeiList = getTelSelectOpPack(handle, param,svcKeiNo, prmSvcKeiUcwkNoTel1, packDiv);
					if(wribSvcKeiList!=null && !wribSvcKeiList.isEmpty()){
						String wribSvcKeiNo = (String)wribSvcKeiList.get(0).get("wrib_svc_kei_no");
	//					String updDtmBf = (String)wribSvcKeiList.get(0).get("upd_dtm");
						HashMap retPacCCMap = (HashMap)param.getData("TelSelectOpPackOperate");
						String updDtmBf = (String)retPacCCMap.get("upd_dtm");
						
						// ■割引サービス契約＜置換型＞開始
						// IT1-2014-0000146 2014/05/16 mod start
						//CAANMsg EKK0451C220SCLine = callEKK0451C220SC(param, handle, requestParam, wribSvcKeiNo, updDtmBf, resultHash);
						CAANMsg EKK0451C220SCLine = callEKK0451C220SC(param, handle, requestParam, wribSvcKeiNo, updDtmBf, resultHash, dslKiboYmd);
						// IT1-2014-0000146 2014/05/16 mod end
						
						// 進捗登録（eo光電話オプションパック設定完了）
						addEKK1091D010(handle, param, fixedText, 
								prmSvcKeiNo, prmSvcKeiUcwkNoTel1, wribSvcKeiNo, packDiv,
								PRG_STAT_PACKADD, "01", dslKiboYmd);
					}

				}
				else {
					// 変更前後共に同じパック種類の場合は何もしない
				}
			}
			// 変更前有効、変更後無効な場合、変更前のパックの解約予約を登録
			else if ((prmOpPackChangBf1 != null && !"".equals(prmOpPackChangBf1))
					&& (prmOpPackChangAf1 == null || "".equals(prmOpPackChangAf1))) {
				
				// 変更前パックの解約予約を登録
				String packDiv = null;
				// パック３の場合は１
				if ("W00000007".equals(prmOpPackChangBf1)){
					packDiv = "1";
				// パック７の場合は２
				}else if ("W00000008".equals(prmOpPackChangBf1)){
					packDiv = "2";
				}
				// ANK-3754-00-00 ADD START
				// あんしん電話パックの場合は3
				else if ("W00000023".equals(prmOpPackChangBf1))
				{
					packDiv = "3";
				}
				// ANK-3754-00-00 ADD END

				ArrayList<HashMap<String, Object>> wribSvcKeiListDsl = getTelSelectOpPack(handle, param,prmSvcKeiNo, prmSvcKeiUcwkNoTel1, packDiv);
				if(wribSvcKeiListDsl!=null && !wribSvcKeiListDsl.isEmpty()){
					String wribSvcKeiNo = (String)wribSvcKeiListDsl.get(0).get("wrib_svc_kei_no");
					
					// ■割引サービス契約解約（異動予約未来登録）
					CAANMsg EKK0451C021SCLine = callEKK0451C021SC(param, handle, requestParam, wribSvcKeiNo, prmMskmMeisaiNo, dslKiboYmd, svc_kei_last_upd_dtm, new HashMap<String, Object>());
					
					// 進捗登録（eo光電話オプションパック設定完了）
					addEKK1091D010(handle, param, fixedText, 
							prmSvcKeiNo, prmSvcKeiUcwkNoTel1, wribSvcKeiNo, packDiv,
							PRG_STAT_PACKADD, "02", dslKiboYmd);
				}
				
			}
			// 変更前無効、変更後有効な場合、変更後のパックの開始予約を設定
			else if ((prmOpPackChangBf1 == null || "".equals(prmOpPackChangBf1))
					&& (prmOpPackChangAf1 != null && !"".equals(prmOpPackChangAf1))) {
				// 変更前の内訳に対して変更後のパック種類の割引サービス契約登録を行う
				String workTelSelectOpPackOperateKey = "TelSelectOpPackOperate";
				boolean workTelSelectOpPackOperateFlg = createUserData(param, workTelSelectOpPackOperateKey);
		
				JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
				
				String packDiv = null;
				
				// パック３の場合は「１」
				if ("W00000007".equals(prmOpPackChangAf1)){
					packDiv = "1";
				// パック７の場合は「２」
				}else if ("W00000008".equals(prmOpPackChangAf1)){
					packDiv = "2";
				}
				// ANK-3754-00-00 ADD START
				// あんしん電話パックの場合は「3」
				else if ("W00000023".equals(prmOpPackChangAf1))
				{
					packDiv = "3";
				}
				// ANK-3754-00-00 ADD END
				
				//****************************************
				// ■サービス契約内訳一意照会
				//****************************************
				statusCode = callEKK0161A010SC(param, handle, requestParam, resultHash, prmSvcKeiUcwkNoTel1);
				if(statusCode != 0)
				{
					return param;
				}
				// サービス契約内訳一意照会
				HashMap<String, Object> eKK0161A010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0161A010);
				
				// サービス契約排他単位の最終更新年月日時分秒
				String svcKeiNo = (String)eKK0161A010Hash.get(EKK0161A010CBSMsg1List.SVC_KEI_NO);
				
				editMapTelSelectOpPackOperate(
						param,
						fixedText,
						workTelSelectOpPackOperateKey,
						"01",
						sysid,
						svcKeiNo,
						prmSvcKeiUcwkNoTel1,
						prmMskmMeisaiNo,
						dslKiboYmd, //opeDate,
						"20991231",
						prmIdoDiv,
						packDiv,
						svc_kei_last_upd_dtm
				);
				telSelectOpPackOperateCC.execute(handle, param, workTelSelectOpPackOperateKey);
				
				
				// 変更後のパックの開始予約を設定
				// 今登録したパックの割引サービス契約番号と更新日時を取得
				ArrayList<HashMap<String, Object>> wribSvcKeiList = getTelSelectOpPack(handle, param,svcKeiNo, prmSvcKeiUcwkNoTel1, packDiv);
				if(wribSvcKeiList!=null && !wribSvcKeiList.isEmpty()){
					String wribSvcKeiNo = (String)wribSvcKeiList.get(0).get("wrib_svc_kei_no");
//					String updDtmBf = (String)wribSvcKeiList.get(0).get("upd_dtm");
					HashMap retPacCCMap = (HashMap)param.getData("TelSelectOpPackOperate");
					String updDtmBf = (String)retPacCCMap.get("upd_dtm");
					
					// ■割引サービス契約＜置換型＞開始
					// IT1-2014-0000146 2014/05/16 mod start
					//CAANMsg EKK0451C220SCLine = callEKK0451C220SC(param, handle, requestParam, wribSvcKeiNo, updDtmBf, resultHash);
					CAANMsg EKK0451C220SCLine = callEKK0451C220SC(param, handle, requestParam, wribSvcKeiNo, updDtmBf, resultHash, dslKiboYmd);
					// IT1-2014-0000146 2014/05/16 mod end
					
					// 進捗登録（eo光電話オプションパック設定完了）
					addEKK1091D010(handle, param, fixedText, 
							prmSvcKeiNo, prmSvcKeiUcwkNoTel1, wribSvcKeiNo, packDiv,
							PRG_STAT_PACKADD, "01", dslKiboYmd);
				}

			}
			else {
				// 実質上、変更前後共に無効の場合は何もしない
			}
		}
		else if ( ADCHG_TELNO_CHANGECL.equals(prmAdChgPtnFlg) && ADCHG_ADCL_MOD.equals(prmAdChgModeFlg)) {
			// 異動予約（パック（割引サービス契約）の解約、開始の予約）反映取消はここではしない
			// パックの振舞いもしない、既存処理にて対応可のため、ここでは何もしない
		}
		
		return param;
	}
	
	/**
	 * 住所変更関連オプションパック操作実行部品のメイン処理
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @throws Throwable
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	private IRequestParameterReadWrite opSvcKeiAdd(
			SessionHandle handle, 
			IRequestParameterReadWrite param,
			HashMap<String, Object> requestParam, 
			String fixedText,
			CAANMsg[] outMsgEKK2071B501List, 
			String sysid, 
			String svcKeino,
			String svcKeiUcwkNo,
			String mskmDtlNo,
			String seikyKeiNo
			) throws Throwable
	{
		
		// ステータスコード
		int statusCode = 0;
		
		// S-IF結果格納用
		HashMap<String, Object> resultHash =  new HashMap<String, Object>();
		
		// オプションサービス契約の振舞い
		for (int i = 0; i< outMsgEKK2071B501List.length; i++) {

			//****************************************
			// ■サービス契約内訳一意照会
			//****************************************
			statusCode = callEKK0161A010SC(param, handle, requestParam, resultHash, svcKeiUcwkNo);
			if(statusCode != 0)
			{
				return param;
			}
			// サービス契約内訳一意照会
			HashMap<String, Object> eKK0161A010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0161A010);
			
			// サービス契約排他単位の最終更新年月日時分秒
			String svc_kei_last_upd_dtm = (String)eKK0161A010Hash.get(EKK0161A010CBSMsg1List.LAST_UPD_DTM);
			
			//料金プランコード→料金コースコード変換マップ
			String[][] op_svcPcrsNeta = {
					{"PB2701", "B27"},
					{"PB2801", "B28"},
					{"PB2901", "B29"},
					{"PB3001", "B30"},
					// ANK-3754-00-00 MOD START
					//{"PB3101", "B31"}
					{"PB3101", "B31"},
					{"PBE601", "BE6"}
					// ANK-3754-00-00 MOD END
			};		//左側：オプションサービスコード，　右側：料金コースコード
			
			
			String tgPplanCd = outMsgEKK2071B501List[i].getString(EKK2071B501CBSMsg1List.PPLAN_CD);
			
			String tgPcrsCd = "";
			
			// 料金コースの特定
			for (int p = 0; p< op_svcPcrsNeta.length; p ++) {
				
				// 料金コース変換図１項目（料金コースコード）
				String svcPcrsNet = (String)op_svcPcrsNeta[p][0];
				
				// 登録対象の料金プランコードと料金コース変換図第１項目の料金プランと一致した場合、料金コースを特定
				if (svcPcrsNet.equals(tgPplanCd)) {
					// 料金コース変換図２項目（料金プランコード）
					tgPcrsCd = (String)op_svcPcrsNeta[p][1];
					break;
				}
			}
			
			// オプションサービスの振舞いを行う
			if (tgPcrsCd != null && !"".equals(tgPcrsCd)) {
				//****************************************
				// ■料金コース一意照会
				//****************************************
				statusCode = callEKK0791A010SC(param, handle, requestParam, resultHash, tgPcrsCd);
				if(statusCode != 0)
				{
					return param;
				}
				// 料金コース一意照会結果を取得
				HashMap<String, Object> eKK0791A010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0791A010);
				
				// 料金コースコードを取得し、料金コースマスタからオプションサービスコードを取得
				String opSvcCd = (String)eKK0791A010Hash.get(EKK0791A010CBSMsg1List.OP_SVC_CD);
				
				/*************************************************************************************/
				/** オプションサービス契約＜電話＞登録                                              **/
				/*************************************************************************************/
				CAANMsg getEKK0371D010SCMap = null;
				CAANMsg getEKK0371C010SCMap = null;
				CAANMsg getEKK0371C030SCMap = null;
				
				getEKK0371D010SCMap = callEKK0371D010SC(
						param,
						handle,
						requestParam,
						opSvcCd, 
						tgPcrsCd, 
						tgPplanCd, 
						sysid, 
						svcKeiUcwkNo, 
						seikyKeiNo, 
						mskmDtlNo, 
						svc_kei_last_upd_dtm,
						resultHash
				);
				
				// 更新後排他時間の保持
				String last_upd_dtm = getNullToStr(getEKK0371D010SCMap.getString(EKK0371D010CBSMsg.UPD_DTM));
				
				// サービス契約内訳の一意照会の結果からサービス契約内訳のステータスを取得
				String svckeiUcwkStat = (String)eKK0161A010Hash.get(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT);
				
				if (svckeiUcwkStat != null && !"".equals(svckeiUcwkStat)) {
					// サービス契約内訳が020：照査済以下の場合は何もしない
					// サービス契約内訳ステータスが020：照査済みの場合、オプションの照査処理を実施
					if ("020".equals(svckeiUcwkStat)){
						/*************************************************************************************/
						/** オプションサービス契約＜電話＞照査                                          **/
						/*************************************************************************************/
						getEKK0371C010SCMap = callEKK0371C010SC(param, handle, requestParam, last_upd_dtm, getEKK0371D010SCMap);
					}
					// サービス契約内訳ステータスが020：照査済以上（030：締結済）の場合、オプションの照査締結を実施
					else if ("030".equals(svckeiUcwkStat)) {
						/*************************************************************************************/
						/** オプションサービス契約＜電話＞照査締結                                          **/
						/*************************************************************************************/
						getEKK0371C030SCMap = callEKK0371C030SC(param, handle, requestParam, last_upd_dtm, getEKK0371D010SCMap);
					}
				}
			}
		}
		
		// サブオプションの振舞いを行う
		
		for (int i = 0; i< outMsgEKK2071B501List.length; i++) {
			
			//****************************************
			// ■サービス契約内訳一意照会
			//****************************************
			statusCode = callEKK0161A010SC(param, handle, requestParam, resultHash, svcKeiUcwkNo);
			if(statusCode != 0)
			{
				return param;
			}
			// サービス契約内訳一意照会
			HashMap<String, Object> eKK0161A010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0161A010);
			
			// サービス契約排他単位の最終更新年月日時分秒
			String svc_kei_last_upd_dtm = (String)eKK0161A010Hash.get(EKK0161A010CBSMsg1List.LAST_UPD_DTM);
			
			//料金プランコード→料金コースコード変換マップ
			String[][] sbop_svcPcrsNeta = {
					{"PD0701", "D07"},
					{"PD0801", "D08"}
			};
			
			String tgPplanCd = outMsgEKK2071B501List[i].getString(EKK2071B501CBSMsg1List.PPLAN_CD);
			
			String tgSbopPcrsCd = "";
			
			// 料金コースの特定
			for (int p = 0; p< sbop_svcPcrsNeta.length; p ++) {
				
				// 料金コース変換図１項目（料金コースコード）
				String svcPcrsNet = (String)sbop_svcPcrsNeta[p][0];
				
				// 登録対象の料金プランコードと料金コース変換図第１項目の料金プランと一致した場合、料金コースを特定
				if (svcPcrsNet.equals(tgPplanCd)) {
					// 料金コース変換図２項目（料金プランコード）
					tgSbopPcrsCd = (String)sbop_svcPcrsNeta[p][1];
					break;
				}
			}
			
			// サブオプションの料金コード取得できた場合振舞い
			if (tgSbopPcrsCd != null && !"".equals(tgSbopPcrsCd)) {
				//****************************************
				// ■料金コース一意照会
				//****************************************
				statusCode = callEKK0791A010SC(param, handle, requestParam, resultHash, tgSbopPcrsCd);
				if(statusCode != 0)
				{
					return param;
				}
				// 料金コース一意照会結果を取得
				HashMap<String, Object> eKK0791A010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0791A010);
				
				// 料金コースコードを取得し、料金コースマスタからサブオプションサービスコードを取得
				String sbopSvcCd = (String)eKK0791A010Hash.get(EKK0791A010CBSMsg1List.SBOP_SVC_CD);
				
				/*************************************************************************************/
				/** オプションサービス契約一覧照会を行う (サービス契約内訳配下全て)                 **/
				/*************************************************************************************/
				//EKK0371B001_オプションサービス契約＜電話＞一覧照会（サービス契約内訳番号）
//				CAANMsg[] getEKK0351B002SCMap = null;
//				getEKK0351B002SCMap = callEKK0351B002SC(param, handle, requestParam, resultHash, svcKeiUcwkNo);
				CAANMsg[] getEKK0371B001SCMap = null;
				getEKK0371B001SCMap = callEKK0371B001SC(param, handle, requestParam, resultHash, svcKeiUcwkNo);
				
				//登録対象のサブオプションの親オプションサービス契約番号
				String tgOpSvcKeiNo = "";
				//登録対象のサブオプションの親オプションサービスコード
				String tgOpSvcCd = ""; 
				//登録対象のサブオプションの親オプションサービス契約ステータス
				String tgOpSvcKeiStat = "";
				
				// オプション対サブオプション特定マップ
//				String[][] op_sbop_getMap = {
//						{"PD0701", "PB2801"},
//						{"PD0801", "PB3001"}
//				};
				String[][] op_sbop_getMap = {
						{"D07", "B024"},   // 転送電話選択　　転送電話
						{"D08", "B025"}    // 非通知着信拒否　　発信者番号表示
				};
				
				
				// 登録対象のサブ対オプのサービスコードと処理中のオプションサービスコードと一致した場合、
				// 対象オプションサービス契約のオプションサービス契約番号を抽出
				
				//対象オプションサービスコードを取得
				for (int p = 0; p <op_sbop_getMap.length; p ++) {
					// オプション対サブオプション特定マップ１項目（）
					String tgsbOpSvcCd = (String)op_sbop_getMap[p][0];
					
					if (tgsbOpSvcCd.equals(sbopSvcCd)) {
						// 登録対象のサブオプションンの対象親オプションサービスコードを特定
						tgOpSvcCd = (String)op_sbop_getMap[p][1];
						break;
					}
				}
				
				// オプションサービス契約一覧照会の結果を取得
				for (int opSvc= 0; opSvc < getEKK0371B001SCMap.length; opSvc++) {
					// オプションサービスコードを取得
					CAANMsg getEKK0371B001Line = getEKK0371B001SCMap[opSvc];
					
					String opSvcCd = (String)getEKK0371B001Line.getString(EKK0371B001CBSMsg1List.OP_SVC_CD);
					
					// 対象親オプションサービスコードが処理中のオプションサービス契約が一致の場合
					if (tgOpSvcCd.equals(opSvcCd)) {
						tgOpSvcKeiNo = (String)getEKK0371B001Line.getString(EKK0371B001CBSMsg1List.OP_SVC_KEI_NO);
						tgOpSvcKeiStat = (String)getEKK0371B001Line.getString(EKK0371B001CBSMsg1List.OP_SVC_KEI_STAT);
					}
				}
				
				// 親オプションサービス契約番号が特定できた場合のみサブオプションを登録
				if (tgOpSvcKeiNo != null && !"".equals(tgOpSvcKeiNo)) {
					/*************************************************************************************/
					/** サブオプションサービス契約＜電話＞登録                                              **/
					/*************************************************************************************/
					CAANMsg EKK0431D010SCLine = callEKK0431D010SC(
							param,
							handle,
							requestParam,
							sbopSvcCd,
							tgSbopPcrsCd,
							tgPplanCd,
							svc_kei_last_upd_dtm,
							resultHash,
							tgOpSvcKeiNo
					);
					
					// サブオプション登録後の最終更新年月日時分秒
					String sbop_add_last_upd_dtm = getNullToStr(EKK0431D010SCLine.getString(EKK0431D010CBSMsg.UPD_DTM));
					
					// 親のオプションサービス契約ステータスに併せてサブオプションサービス契約ステータスを上げる
					// 親オプションが照査済の場合子のサブオプションも照査する
					if ("020".equals(tgOpSvcKeiStat)) {
						/*************************************************************************************/
						/** サブオプションサービス契約＜電話＞照査                                          **/
						/*************************************************************************************/
						CAANMsg EKK0431C010SCLine = callEKK0431C010SC(param, handle, requestParam, sbop_add_last_upd_dtm, resultHash);
					}
					// 親オプションが締結済の場合子のサブオプションも照査締結する
					else if ("030".equals(tgOpSvcKeiStat)) {
						/*************************************************************************************/
						/** サブオプションサービス契約＜電話＞照査締結                                      **/
						/*************************************************************************************/
						CAANMsg EKK0431C010SCLine = callEKK0431C030SC(param, handle, requestParam, sbop_add_last_upd_dtm, resultHash);
					}
				}
			}
	}
		
		return param;
	}
	
	/**
	 * オプションサービス契約のキャンセル・解約処理
	 * 
	 * @param handle
	 * @param param
	 * @param fixedText
	 * @throws Throwable
	 * @return  リクエストパラメータ(param)に戻り値を追加して返却する
	 */
	private IRequestParameterReadWrite opSvcKeiDel(
			SessionHandle handle, 
			IRequestParameterReadWrite param,
			HashMap<String, Object> requestParam, 
			String fixedText,
			String sysid, 
			String svcKeino,
			String svcKeiUcwkNo,
			String mskmDtlNo,
			String seikyKeiNo
			) throws Throwable
	{
		
		// ステータスコード
		int statusCode = 0;
		
		// S-IF結果格納用
		HashMap<String, Object> resultHash =  new HashMap<String, Object>();
		
		// オプションサービス契約の一覧照会を行う（サービス契約内訳番号配下全て取得）
		CAANMsg[] getEKK0371B001SCMap = null;
		
		getEKK0371B001SCMap = callEKK0371B001SC(param, handle, requestParam, resultHash, svcKeiUcwkNo);
		
		for (int i = 0; i<getEKK0371B001SCMap.length ;i++) {
			
			//****************************************
			// ■サービス契約内訳一意照会
			//****************************************
			statusCode = callEKK0161A010SC(param, handle, requestParam, resultHash, svcKeiUcwkNo);
			if(statusCode != 0)
			{
				return param;
			}
			// サービス契約内訳一意照会
			HashMap<String, Object> eKK0161A010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0161A010);
			
			// サービス契約排他単位の最終更新年月日時分秒
			String svc_kei_last_upd_dtm = (String)eKK0161A010Hash.get(EKK0161A010CBSMsg1List.LAST_UPD_DTM);
			
			CAANMsg getEKK0371B001SCLine = getEKK0371B001SCMap[i];
			
			// オプションサービス契約番号を取得する
			String opSvcKeiNo = (String)getEKK0371B001SCLine.getString(EKK0371B001CBSMsg1List.OP_SVC_KEI_NO);
			
			// オプションサービス契約ステータスを取得する
			String opSvcKeiStat = (String)getEKK0371B001SCLine.getString(EKK0371B001CBSMsg1List.OP_SVC_KEI_STAT);
			
			// 格納型の初期宣言
			CAANMsg EKK0351C220SCLine = null;
			CAANMsg EKK0351C240SCLine = null;
			CAANMsg EKK0351C250SCLine = null;
			
			
			// オプションサービス契約コード取得する
			String opSvcCd = (String)getEKK0371B001SCLine.getString(EKK0371B001CBSMsg1List.OP_SVC_CD);
			
			// オプションサービス契約コードが「転送電話」および「迷惑電話拒否」以外の場合
			if (opSvcCd != null && !"".equals(opSvcCd)) {
				// IT1-2014-0000200 2014/06/05 mod start
				//if (!"PB2801".equals(opSvcCd) && !"PB3001".equals(opSvcCd)) {
				if (!"B024".equals(opSvcCd) && !"B025".equals(opSvcCd)) {
				// IT1-2014-0000200 2014/06/05 mod end
					// オプションサービス契約ステータスが010、020の場合はキャンセル処理
					if ("010".equals(opSvcKeiStat) || "020".equals(opSvcKeiStat)) {
						EKK0351C220SCLine = callEKK0351C220SC(
								param,
								handle,
								requestParam,
								opSvcKeiNo,
								mskmDtlNo,
								svc_kei_last_upd_dtm,
								resultHash);
					}
					// オプションサービス契約ステータスが030の場合は解約処理
					else if ("030".equals(opSvcKeiStat)) {
						// オプションサービス契約解約
						EKK0351C240SCLine = callEKK0351C240SC(
								param,
								handle,
								requestParam,
								opSvcKeiNo,
								mskmDtlNo,
								svc_kei_last_upd_dtm,
								resultHash);
						// オプションサービス契約解約確定
						EKK0351C250SCLine =  callEKK0351C250SC(
								param,
								handle,
								requestParam,
								opSvcKeiNo,
								mskmDtlNo,
								resultHash);
					}
				}
				// オプションサービス契約コードが「転送電話」および「迷惑電話拒否」の場合
				else {
					// サブオプションサービス契約の一覧照会を行う
					CAANMsg[] getEKK0401B001SCMap = null;
					
					getEKK0401B001SCMap = callEKK0401B001SC(param, handle, requestParam, resultHash, opSvcKeiNo);
					
					// 該当オプションにいサブオプションが存在する場合は配下をすべてキャンセル・解約
					if (getEKK0401B001SCMap != null && getEKK0401B001SCMap.length > 0) {
						for (int sbop = 0; sbop < getEKK0401B001SCMap.length; sbop ++) {
							CAANMsg getEKK0401B001SCLine = getEKK0401B001SCMap[sbop];
							CAANMsg EKK0401C150Line = null;
							CAANMsg EKK0401C170Line = null;
							CAANMsg EKK0401C180Line = null;
							
							// サブオプションサービス契約のステータスを取得
							String sbopSvcKeiStat =  getEKK0401B001SCLine.getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT);
							
							// サブオプションサービス契約番号の取得
							String sbopSvcKeiNo =  getEKK0401B001SCLine.getString(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_NO);
							
							// サブオプションサービス契約ステータスが030：締結済未満の場合はキャンセル処理を行う
							if ("010".equals(sbopSvcKeiStat) || "020".equals(sbopSvcKeiStat)) {
								EKK0401C150Line = callEKK0401C150SC(
										param,
										handle,
										requestParam,
										opSvcKeiNo,
										sbopSvcKeiNo,
										mskmDtlNo,
										svc_kei_last_upd_dtm,
										resultHash);
							}
							// サブオプションサービス契約ステータスが020：締結済以上の場合は解約処理を行う
							else if ("030".equals(sbopSvcKeiStat)) {
								// サブオプションサービス契約解約
								EKK0401C170Line = callEKK0401C170SC(
										param,
										handle,
										requestParam,
										opSvcKeiNo,
										sbopSvcKeiNo,
										mskmDtlNo,
										svc_kei_last_upd_dtm,
										resultHash);
								// サブオプションサービス契約解約確定
								EKK0401C180Line = callEKK0401C180SC(
										param,
										handle,
										requestParam,
										opSvcKeiNo,
										sbopSvcKeiNo,
										mskmDtlNo,
										resultHash);
							}
						}
					}
					
					//****************************************
					// ■サービス契約内訳一意照会
					//****************************************
					statusCode = callEKK0161A010SC(param, handle, requestParam, resultHash, svcKeiUcwkNo);
					if(statusCode != 0)
					{
						return param;
					}
					// サービス契約内訳一意照会
					HashMap<String, Object> eKK0161A010Hash2 = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0161A010);
					
					// サービス契約排他単位の最終更新年月日時分秒
					String svc_kei_last_upd_dtm2 = (String)eKK0161A010Hash2.get(EKK0161A010CBSMsg1List.LAST_UPD_DTM);
					
					if ("010".equals(opSvcKeiStat) || "020".equals(opSvcKeiStat)) {
						EKK0351C220SCLine = callEKK0351C220SC(
								param,
								handle,
								requestParam,
								opSvcKeiNo,
								mskmDtlNo,
								svc_kei_last_upd_dtm2,
								resultHash);
					}
					// オプションサービス契約ステータスが030の場合は解約処理
					else if ("030".equals(opSvcKeiStat)) {
						// オプションサービス契約解約
						EKK0351C240SCLine = callEKK0351C240SC(
								param,
								handle,
								requestParam,
								opSvcKeiNo,
								mskmDtlNo,
								svc_kei_last_upd_dtm2,
								resultHash);
						// オプションサービス契約解約確定
						EKK0351C250SCLine = callEKK0351C250SC(
								param,
								handle,
								requestParam,
								opSvcKeiNo,
								mskmDtlNo,
								resultHash);
					}
				}
			}
		}
		
		 return param;
	}
	
	/**
	 * サービス契約一意照会SIFを呼び出し
	 * @param	param		リクエストパラメータ	
	 * @param	handle		セッションハンドル
	 * @param	inHash		条件用Hash
	 * @param	resultHash	結果のハッシュ
	 * @param	svcKeiNo	サービス契約番号
	 * @return				サービスインターフェースのリターンコード
	 * @throws	RequestParameterException, SCException 例外時にスローされます
	 */
	private int callEKK0081A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash,
			String svcKeiNo
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0081A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0081A010CBSMsg.class.getName());
		mappingEKK0081A010InMsg(template, inHash, svcKeiNo);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング処理
		editResultRP(sIFResult, param);

		// エラーチェック
		errChk(sIFResult);

		// 結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		// ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			resultHash.put(TEMPLATE_ID_EKK0081A010, mappingEKK0081A010SCOutMsg(resultMsgs));
		}

		return status;
		
	}
	
	/**
	 * templateに対してEKK0081A010の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param svcKeiNo サービス契約番号
	 * @param requestParam アプリ固有のパラメータ
	 */
	private void mappingEKK0081A010InMsg(CAANMsg template, HashMap<String, Object> inHash, String svcKeiNo)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0081A010CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0081A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0081A010);

		//機能コード--サービス契約一意照会
		template.set(EKK0081A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);

		//ＫＥＹ＿サービス契約番号
		template.set(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
		
		//ＫＥＹ＿予約適用年月日
		template.set(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, opeDate);
		
		//ＫＥＹ＿世代登録年月日時分
		template.setNull(EKK0081A010CBSMsg.KEY_GENE_ADD_DTM);
	}

	
	/**
	 * サービスI/F実行用の共通部を設定します<br>
	 * <br>
	 * 
	 * @param param (I) 業務データ取得用I/F
	 * @param msg データ登録内容
	 * @return オプションサービス契約作成数
	 * @throws RequestParameterException
	 * @exception RequestParameterExceptionがスローされます 。
	 */
	private HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param) 
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		//電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		
		//ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		
		//オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		
		//サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		//依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		
		//依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		
		//依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		
		//オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		return paramMap;
	}
	

	/**
	 * 持ちうるフィールドに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);
			
		}
	}
	
	/**
	 * 条件部の共通する項目の設定
	 * @param param リクエストパラメータ
	 * @param template template 条件の設定先
	 * @throws RequestParameterException
	 */
	private void editBasicCmn(IRequestParameterReadOnly param, CAANMsg template)
	throws RequestParameterException
	{
		
		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
		
	}
	
	/**
	 * <pre>
	 * サービスコンポーネント実行後に、IRequestParameterReadWriteに必要なデータをマッピングする
	 * 
	 * </pre>
	 * @param msgList CAANMsgクラス
	 * @param param 業務データ取得・書込用I/F
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	private void editResultRP(Map<?, ?> msgList, IRequestParameterReadWrite param) 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、ステータス取得
		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);
		}

		// エラー情報のマップを取得
		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));
	}
	
	/**
	 * エラーチェック処理です。
	 * <br>
	 * @param msgList サービスインタフェース実行結果
	 * @return void
	 * @throws SCCallException 
	 */
	private static 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(EKK0081A010CBSMsg.STATUS);

		if ((0 != returnCode.intValue()) || (0 != templateStatus))
		{
			String errMsg = "INVALID_RETURN_MESSAGE";
			throw new SCCallException(errMsg, String.valueOf(returnCode), templateStatus);
		}
	}
	
	/**
	 * EKK0081A010の結果をHashとして抽出する
	 * @param resultMsgs EKK0081A010のテンプレートリスト
	 * @return EKK0081A010の結果部分
	 */
	private HashMap<String, Object> mappingEKK0081A010SCOutMsg(CAANMsg[] resultMsgs)
	{
		
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		CAANMsg[] msgList = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		//結果の取得
		msgList = 
			(CAANMsg[])msg.getMsgData().get(EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST);
		retHash = msgList[0].getMsgData();
		
		return retHash;
	}
	
	/**
	 * EKK0341A010の結果をHashとして抽出する
	 * @param resultMsgs EKK0081A010のテンプレートリスト
	 * @return EKK0081A010の結果部分
	 */
	private HashMap<String, Object> mappingEKK0341A010SCOutMsg(CAANMsg[] resultMsgs)
	{
		
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		CAANMsg[] msgList = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		//結果の取得
		msgList = 
			(CAANMsg[])msg.getMsgData().get(EKK0341A010CBSMsg.EKK0341A010CBSMSG1LIST);
		retHash = msgList[0].getMsgData();
		
		return retHash;
	}
	

	/**
	 * @param param
	 * @param dataMapKey
	 * @param mappingData
	 * @return HashMap<String, Object>
	 * @throws RequestParameterException
	 */
	private HashMap<String, Object> editInMsg(IRequestParameterReadWrite param,
												Object[][] mappingData) throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		
		// 【取得元：電文ヘッダ(ヘッダ)】
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		// 【取得元：ユーザエリア(コントロールマップ)】
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		String svcIf = (String)mappingData[0][1];
		
		CAANMsg template = new CAANMsg(String.format("eo.ejb.cbs.cbsmsg.%sCBSMsg", svcIf));
		
		// オペレータID
		template.set(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// 運用日付
		template.set(JCMConstants.OPERATE_DATE_KEY, param.getControlMapData(SCControlMapKeys.OPE_DATE));
		// 運用日時
		template.set(JCMConstants.OPERATE_DATETIME_KEY, param.getControlMapData(SCControlMapKeys.OPE_TIME));
		
		for (int i = 0; i < mappingData.length; i++)
		{
			if ("".equals(mappingData[i][1]))
			{
				template.setNull((String)mappingData[i][0]);
			}
			else
			{
				template.set((String)mappingData[i][0], mappingData[i][1]);
			}
		}
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = template;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		return paramMap;
	}
	
	/**
	 * 
	 * @param param
	 * @param templates
	 * @param returnCode
	 * @param dataMapKey
	 * @param mappingData
	 * @return IRequestParameterReadWrite
	 * @throws RequestParameterException
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editErrorInfoCom(IRequestParameterReadWrite param,
														CAANMsg[] templates, 
														int returnCode,
														String dataMapKey,
														Object[][] mappingData) throws RequestParameterException
	{
		// 本来はサービスインターフェイス分の処理が必要
		CAANMsg template = templates[0];
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if (0 != returnCode)
		{
			templateStatus = 9000;
		}
		
		if (null == JCMAPLConstMgr.getString("RETURN_MESSAGE_" + String.format("%1$04d", templateStatus)))
		{
			templateStatus = 0;
		}
		
		int bpStatus = 0;
		Object obj = param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		if (null == obj)
		{
			bpStatus = -1;
		}
		else
		{
			bpStatus = Integer.parseInt((String)param.getControlMapData(SCControlMapKeys.RETURN_CODE));
		}
		
		if (templateStatus > bpStatus)
		{
			// BPにサービスコンポーネントのステータスを設定する。
			String formatStatus = String.format("%1$04d", templateStatus);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);
		}
		
		HashMap<String, String> inMap = null;
		
		// ユーザデータ情報
		inMap = (HashMap<String, String>)param.getData(dataMapKey);
		
		for (int i = 0; i < mappingData.length; i++)
		{
				if (!template.isNull(mappingData[i][0] + "_err"))
				{
					if (!inMap.containsKey(mappingData[i][0] + "_err"))
					{
						inMap.put(mappingData[i][0] + "_err", template.getString(mappingData[i][0] + "_err"));
					}
				}
		}
		
		return param;
	}
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		if (str == null || "".equals(str.trim()))
		{
			return "";
		}
		return str;
	}
	
	public static String addYYYYMMDD(String trgtYmd, int addDay)
	{
		// 年月日が空の場合
		if (trgtYmd == null || "".equals(trgtYmd))
		{
			return trgtYmd;
		}

		// 年月日が８桁に満たない場合
		if (trgtYmd.length() < 8)
		{
			return trgtYmd;
		}

		// 年月日の抽出
		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);
	}
	
	/**
	 * サービスI/F実行用の共通部を設定します<br>
	 * <br>
	 * 
	 * @param param (I) 業務データ取得用I/F
	 * @param msg データ登録内容
	 * @return オプションサービス契約作成数
	 * @throws RequestParameterException
	 * @exception RequestParameterExceptionがスローされます 。
	 */
	private HashMap<String, Object> editInMsgCmn(IRequestParameterReadOnly param, CAANMsg msg) 
	throws RequestParameterException
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		/* SCインプット共通データ */
		// **********************************************
		// 【取得元：電文ヘッダ(ヘッダ)】
		// **********************************************
		// 電文ID
		paramMap.put(JCMConstants.TRANZACTION_ID_KEY, param.getTelegramID());
		// ユースケースID
		paramMap.put(JCMConstants.USECASE_ID_KEY, param.getUsecaseID());
		// オペレーションID
		paramMap.put(JCMConstants.OPERATION_ID_KEY, param.getOperationID());
		// サービス呼び出し区分
		paramMap.put(JCMConstants.CALL_TYPE_KEY, param.getCallType());
		
		// **********************************************
		// 【取得元：ユーザエリア(コントロールマップ)】
		// **********************************************
		// 依頼先ホスト名
		paramMap.put(JCMConstants.CLIENT_HOST_NAME_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTNAME));
		// 依頼元IPアドレス
		paramMap.put(JCMConstants.CLIENT_IP_ADDRESS_KEY, param.getControlMapData(SCControlMapKeys.REQ_HOSTIP));
		// 依頼元画面ID
		paramMap.put(JCMConstants.INVOKE_GAMEN_ID_KEY, param.getControlMapData(SCControlMapKeys.REQ_VIEWID));
		// オペレータID
		paramMap.put(JCMConstants.OPERATOR_ID_KEY, param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		
		CAANMsg[] templates = new CAANMsg[1];
		templates[0] = msg;
		paramMap.put(JCMConstants.TEMPLATE_LIST_KEY, templates);
		
		return paramMap;
		
	}
	
	/**
	 * 業務データの取得処理です。
	 * <br>
	 * @param workMapKey 業務データのマップキー
	 * @param rsltShokai 一意照会、一覧照会の結果データ
	 * @return 業務データ
	 */
	protected CAANMsg[] getWorkData(String workMapKey, Map<?, ?> rsltShokai)
	{
		CAANMsg[] templateArray = null;
		CAANMsg[] templates = (CAANMsg[])rsltShokai.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg parentTemplate = templates[0];

		templateArray = parentTemplate.getCAANMsgList(workMapKey);
		
		return templateArray;
	}
	
	/**
	 * ユーザ定義文字列がユーザ情報になければデータを作成します。
	 * <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;
	}
	
	/**
	 *<DL>
	 *<DT>処理概要:電話セレクトオプションパック操作部品CC
	 *<DD>サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 *<DT>入力パラメータ説明:
	 *<DD>特になし
	 *<DT>入力パラメータ説明：
	 *<DD>特になし
	 *<DT>出力パラメータ説明:
	 *<DD>特になし
	 *</DL>
	 * @param	param				(I) 業務データ取得用I/F
	 * @param	inMap				業務情報を保持するマップ
	 * @param	fixedText			ユーザ任意文字列
	 * @param	workFixedText		ワーク領域
	 * @return						サービスコンポーネント実行用CAANMsg
	 * @throws	RequestParameterException
	 * @since	2014.04.25
	 */
	public void editMapTelSelectOpPackOperate(
			IRequestParameterReadWrite param, 
			String fixedText,
			String workFixedText,
			String trn_div,
			String sysid,
			String svc_kei_no,
			String svc_kei_ucwk_no,
			String mskmDtlNo,
			String kisan_ymd,
			String use_sta_kibo_ymd,
			String ido_div,
			String pack_div,
			String last_upd_dtm
	)
	throws RequestParameterException 
	{
		// 対象データマップ
		HashMap opPackTrgtData = (HashMap)param.getData(workFixedText);
		
		// 機能コード
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_FUNC_CD, JPCModelConstant.FUNC_CD_1);
		
		// 処理区分
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_TRN_DIV, trn_div);
		
		// SYDID
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_SYSID, sysid);
		
		// サービス契約番号
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_SVC_KEI_NO, svc_kei_no);
		
		// サービス契約内訳番号
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_SVC_KEI_UCWK_NO, svc_kei_ucwk_no);
		
		// 申込明細番号
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_MSKM_DTL_NO, mskmDtlNo);
		
		// 起算日
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_KISAN_YMD, kisan_ymd);
		
		// 利用開始希望日
		if(!"".equals(use_sta_kibo_ymd)){
			//<サービス追加、番号追加>以外
			opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_USE_STA_KIBO_YMD, use_sta_kibo_ymd);
		}
		
		// 異動区分
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_IDO_DIV, ido_div);
		
		// パック３の場合は２
		if ("W00000007".equals(pack_div)){
			pack_div = "1";
		// パック７の場合は２
		}else if ("W00000008".equals(pack_div)){
			pack_div = "2";
		}
		// ANK-3754-00-00 ADD START
		// あんしん電話パックの場合は3
		else if ("W00000023".equals(pack_div))
		{
			pack_div = "3";
		}
		// ANK-3754-00-00 ADD END
		
		// パック割区分
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_PACK_DIV, pack_div);
		
		// 更新年月日
		opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_KK0081_UPD_DTM, last_upd_dtm);
		
		// オプションパック解約時のみ設定の項目
		if ("02".equals(trn_div)) {
			// サービス解約理由コード
			opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_SVC_DLRE_CD, "01");
			
			// サービスキャンセル理由コード
			opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_SVC_CANCEL_RSN_CD, "02");
			
			// 課金区分
			opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_KAKIN_DIV, "2");
			
			// 違約金コード
			opPackTrgtData.put(JKKTelSelectOpPackOperateCC.KEY_PNLTY_DIV, "0");
		}
		
	}
	
	/**
	 *<DL>
	 *<DT>処理概要:機器提供サービス契約履歴一覧照会
	 *<DD>サービスコンポーネント実行前に、CAANMsgに必要なデータをマッピングする
	 *<DT>入力パラメータ説明:
	 *<DD>特になし
	 *<DT>入力パラメータ説明：
	 *<DD>特になし
	 *<DT>出力パラメータ説明:
	 *<DD>特になし
	 *</DL>
	 * @param param (I) 業務データ取得用I/F
	 * @param svcKeiNo サービス契約番号
	 * @return サービスコンポーネント実行用CAANMsg
	 * @throws RequestParameterException
	 * @since 2013.12.03
	 */
	public List<CAANMsg> editInMsgKK2071B501(IRequestParameterReadOnly param, String opPackAddPtnFlg)
	throws RequestParameterException 
	{
		CAANMsg template = new CAANMsg(EKK2071B501CBSMsg.class.getName());
		List<CAANMsg> templateList = new ArrayList<CAANMsg>();

		//nullを設定
		fillCAANMSGNullMapping(template, new EKK2071B501CBSMsg().getContents());

		// テンプレートID
		template.set(EKK2071B501CBSMsg.TEMPLATEID, "EKK2071B501");

		// 共通情報設定処理
		editCommonInfo(param, template);

		// 機能コード
		template.set(EKK2071B501CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// ＫＥＹ＿割引サービスコード → ＫＥＹ＿割引サービスコード
		if (!"".equals(opPackAddPtnFlg)) 
		{
				template.set(EKK2071B501CBSMsg.KEY_WRIB_SVC_CD, opPackAddPtnFlg);
		}
		else
		{
			template.set(EKK2071B501CBSMsg.KEY_WRIB_SVC_CD, new String());
		}
//		// 最大検索件数
//		template.set(EKK2071B501CBSMsg.MAX_SEARCH_NUM, "100");
//		
//		// 表示件数
//		template.set(EKK2071B501CBSMsg.DISPLAY_NUM, "100");
//		
//		// 表示ページ番号
//		template.set(EKK2071B501CBSMsg.DISPLAY_PAGE_NUM, "1");
//		
//		// 総検索件数
//		template.set(EKK2071B501CBSMsg.TOTAL_SEARCH_NUM, "100");
//		
//		// 総ページ数
//		template.set(EKK2071B501CBSMsg.TOTAL_PAGE_NUM, "1");
		
		templateList.add(template);

		return templateList;
	}
	
	/**
	 * 料金コース一意照会SIFを呼び出し
	 * @param	param		リクエストパラメータ	
	 * @param	handle		セッションハンドル
	 * @param	inHash		条件用Hash
	 * @param	resultHash	結果のハッシュ
	 * @param	pcrsCd	料金コース
	 * @return				サービスインターフェースのリターンコード
	 * @throws	RequestParameterException, SCException 例外時にスローされます
	 */
	private int callEKK0791A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash,
			String pcrsCd
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0791A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0791A010CBSMsg.class.getName());
		mappingEKK0791A010InMsg(template, inHash, pcrsCd);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング処理
		editResultRP(sIFResult, param);

		// エラーチェック
		errChk(sIFResult);

		// 結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		// ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			resultHash.put(TEMPLATE_ID_EKK0791A010, mappingEKK0791A010SCOutMsg(resultMsgs));
		}

		return status;
		
	}
	
	/**
	 * templateに対してEKK0791A010の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param svcKeiNo 料金コースコード
	 * @param requestParam アプリ固有のパラメータ
	 */
	private void mappingEKK0791A010InMsg(CAANMsg template, HashMap<String, Object> inHash, String pcrsCd)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0791A010CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0791A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0791A010);

		//機能コード-料金コース一意照会
		template.set(EKK0791A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);

		//ＫＥＹ＿料金コースコード
		template.set(EKK0791A010CBSMsg.KEY_PCRS_CD, pcrsCd);
		
		//ＫＥＹ＿予約適用年月日
		template.set(EKK0791A010CBSMsg.KEY_RSV_APLY_YMD, opeDate);
		
		//ＫＥＹ＿世代登録年月日時分
		template.setNull(EKK0791A010CBSMsg.KEY_GENE_ADD_DTM);
	}
	
	/**
	 * EKK0791A010の結果をHashとして抽出する
	 * @param resultMsgs EKK0791A010のテンプレートリスト
	 * @return EKK0791A010の結果部分
	 */
	private HashMap<String, Object> mappingEKK0791A010SCOutMsg(CAANMsg[] resultMsgs)
	{
		
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		CAANMsg[] msgList = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		//結果の取得
		msgList = 
			(CAANMsg[])msg.getMsgData().get(EKK0791A010CBSMsg.EKK0791A010CBSMSG1LIST);
		retHash = msgList[0].getMsgData();
		
		return retHash;
	}
	
	/**
	 * オプションサービス契約＜電話＞登録SIFを呼び出し
	 * @param param リクエストパラメータ
	 * @param handle セッションハンドル
	 * @param inHash 条件用Hash
	 * @param jkkOpsvkeiTelIktAddCC 処理対象Hash
	 * @param resultHash 結果のハッシュ
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 
	 */
	private CAANMsg callEKK0371D010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String opSvcCd, 
			String pcrdCd, 
			String pplanCd, 
			String sysid, 
			String svcKeiUcwkno, 
			String seikyKeiNo, 
			String mskmDtlNo, 
			String lastUpdDtm,
			HashMap<String, Object> resultHash)
			throws Throwable
	{
		
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		//サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);
		
		//EKK0371D010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0371D010CBSMsg.class.getName());
		mappingEKK0371D010InMsg(template, 
				inHash,
				opSvcCd, 
				pcrdCd, 
				pplanCd, 
				sysid, 
				svcKeiUcwkno, 
				seikyKeiNo, 
				mskmDtlNo, 
				lastUpdDtm,
				resultHash
				);
		editBasicCmn(param, template);
		
		//リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		//SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();
		
		//SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		//結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);
		
		// エラーマッピング処理
		editResultRP(sIFResult, param);
		
		errChk(sIFResult);

		//ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		CAANMsg map = null;
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			map = mappingEKK0371D010SCOutMsg(resultMsgs);
			
		}
		
		return map;
		
	}
	
	/**
	 * templateに対してEKK0371D010の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param jkkOpsvkeiTelIktAddCC 処理対象Hash
	 * @param resultHash 結果条件
	 * @param requestParam アプリ固有のパラメータ
	 */
	private void mappingEKK0371D010InMsg(
			CAANMsg template, 
			HashMap<String, Object> inHash,
			String opSvcCd, 
			String pcrdCd, 
			String pplanCd, 
			String sysid, 
			String svcKeiUcwkno, 
			String seikyKeiNo, 
			String mskmDtlNo, 
			String lastUpdDtm,
			HashMap<String, Object> resultHash)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0371D010CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0371D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0371D010);

		//機能コード(登録モード：１)
		template.set(EKK0371D010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		//パラメータ設定
		//オプションサービスコード
		template.set(
				EKK0371D010CBSMsg.OP_SVC_CD,
				opSvcCd);
		
		//料金コースコード
		template.set(
				EKK0371D010CBSMsg.PCRS_CD,
				pcrdCd);
				
		//料金プランコード
		template.set(
				EKK0371D010CBSMsg.PPLAN_CD,
				pplanCd);
			
		//親契約識別コード(サービス契約内訳紐付き指定)
		template.set(
				EKK0371D010CBSMsg.OYA_KEI_SKBT_CD,"03");
		
		//SYSID
		template.set(
				EKK0371D010CBSMsg.SYSID,
				sysid);
		
		//異動区分
		template.set(
				EKK0371D010CBSMsg.IDO_DIV,
				inHash.get(IDO_DIV));
		
		template.setNull(EKK0371D010CBSMsg.SVC_KEI_NO);
		
		//サービス契約内訳番号
		template.set(EKK0371D010CBSMsg.SVC_KEI_UCWK_NO, svcKeiUcwkno);

		//請求契約番号
		template.set(EKK0371D010CBSMsg.SEIKY_KEI_NO, seikyKeiNo);

		// 更新年月日時分秒（サービス契約単位の排他最新時間）
		template.set(EKK0371D010CBSMsg.UPD_DTM_BF, lastUpdDtm);

		//申込明細番号
		template.set(EKK0371D010CBSMsg.MSKM_DTL_NO, mskmDtlNo);

		// 通話料指定額到達通知指定金額にnullをセットする
		template.setNull(EKK0371D010CBSMsg.TWRYO_STIAM_TTU_TCHI_STIAM);

		// サービス利用開始希望年月日
		template.set(EKK0371D010CBSMsg.SVC_USE_STA_KIBO_YMD, opeDate);
		
		// 表示用サービス提供開始年月日
		template.set(EKK0371D010CBSMsg.DSP_SVCTK_STAYMD, opeDate);
	}
	
	/**
	 * EKK0371D010の結果をHashとして抽出する
	 * @param resultMsgs EKK0371D010のテンプレートリスト
	 * @return EKK0371D010の結果部分
	 */
	private CAANMsg mappingEKK0371D010SCOutMsg(CAANMsg[] resultMsgs)
	{
		
//		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		return msg;
		
	}
	
	/**
	 * サービス契約一意照会SIFを呼び出し
	 * @param	param		リクエストパラメータ	
	 * @param	handle		セッションハンドル
	 * @param	inHash		条件用Hash
	 * @param	resultHash	結果のハッシュ
	 * @param	svcKeiNo	サービス契約番号
	 * @return				サービスインターフェースのリターンコード
	 * @throws	RequestParameterException, SCException 例外時にスローされます
	 */
	private int callEKK0161A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash,
			String svcKeiUcwkNo
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0161A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0161A010CBSMsg.class.getName());
		mappingEKK0161A010InMsg(template, inHash, svcKeiUcwkNo);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング処理
		editResultRP(sIFResult, param);

		// エラーチェック
		errChk(sIFResult);

		// 結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		// ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			resultHash.put(TEMPLATE_ID_EKK0161A010, mappingEKK0161A010SCOutMsg(resultMsgs));
		}

		return status;
		
	}
	

	/**
	 * templateに対してEKK0161A010の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param svcKeiNo サービス契約番号
	 * @param requestParam アプリ固有のパラメータ
	 */
	private void mappingEKK0161A010InMsg(CAANMsg template, HashMap<String, Object> inHash, String svcKeiUcwkNo)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0161A010CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0161A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0161A010);

		//機能コード--サービス契約一意照会
		template.set(EKK0161A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);

		//ＫＥＹ＿サービス契約番号
		template.set(EKK0161A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		
		//ＫＥＹ＿予約適用年月日
		template.set(EKK0161A010CBSMsg.KEY_RSV_APLY_YMD, opeDate);
		
		//ＫＥＹ＿世代登録年月日時分
		template.setNull(EKK0161A010CBSMsg.KEY_GENE_ADD_DTM);
	}
	/**
	 * EKK0161A010の結果をHashとして抽出する
	 * @param resultMsgs EKK0161A010のテンプレートリスト
	 * @return EKK0161A010の結果部分
	 */
	private HashMap<String, Object> mappingEKK0161A010SCOutMsg(CAANMsg[] resultMsgs)
	{
		
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		CAANMsg[] msgList = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		//結果の取得
		msgList = 
			(CAANMsg[])msg.getMsgData().get(EKK0161A010CBSMsg.EKK0161A010CBSMSG1LIST);
		retHash = msgList[0].getMsgData();
		
		return retHash;
	}
	/**
	 * オプションサービス契約＜電話＞照査SIFを呼び出し
	 * 
	 * @param param
	 *            リクエストパラメータ
	 * @param handle
	 *            セッションハンドル
	 * @param inHash
	 *            条件用Hash
	 * @param jkkOpsvkeiTelIktAddCC
	 *            処理対象Hash
	 * @param resultHash
	 *            結果のハッシュ
	 * @return サービスインターフェースのリターンコード
	 * @throws Throwable 
	 */
	private CAANMsg callEKK0371C010SC(IRequestParameterReadWrite param, SessionHandle handle,
			HashMap<String, Object> inHash, String lastUpdDtm,
			CAANMsg getEKK0371D010SCMap) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0371C010CBSMsg.class.getName());
		mappingEKK0371C010InMsg(template, inHash, lastUpdDtm, getEKK0371D010SCMap);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング処理
		editResultRP(sIFResult, param);
		

		errChk(sIFResult);
		// 結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		CAANMsg map = null;
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			map = mappingEKK0371C010SCOutMsg(resultMsgs);
			
		}
		
		return map;
	}

	/**
	 * templateに対してEKK0371C010の条件に関する部分を設定する
	 * 
	 * @param template
	 *            条件の設定先
	 * @param inHash
	 *            設定条件
	 * @param jkkOpsvkeiTelIktAddCC
	 *            処理対象ハッシュ
	 * @param resultHash
	 *            結果のハッシュ
	 * @param requestParam
	 *            アプリ固有のパラメータ
	 */
	private void mappingEKK0371C010InMsg(CAANMsg template, HashMap<String, Object> inHash,
			String lastUpdDtm, CAANMsg getEKK0371D010SCMap)
	{
//		HashMap<String, Object> eKK0791A010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0791A010);
		
		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0371C010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0371C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0371C010);

		// 機能コード
		template.set(EKK0371C010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		// オプションサービス契約番号
//		template.set(EKK0371C010CBSMsg.OP_SVC_KEI_NO, eKK0791A010Hash.get(EKK0371D010CBSMsg.OP_SVC_KEI_NO));
		template.set(EKK0371C010CBSMsg.OP_SVC_KEI_NO, getEKK0371D010SCMap.getString(EKK0371D010CBSMsg.OP_SVC_KEI_NO));

		// 異動区分
		template.set(EKK0371C010CBSMsg.IDO_DIV, inHash.get(IDO_DIV));

		// 更新年月日時分秒（更新前）
		template.set(EKK0371C010CBSMsg.UPD_DTM_BF, lastUpdDtm);
	}
	
	/**
	 * EKK0371C010の結果をHashとして抽出する
	 * @param resultMsgs EKK0371D010のテンプレートリスト
	 * @return EKK0371D010の結果部分
	 */
	private CAANMsg mappingEKK0371C010SCOutMsg(CAANMsg[] resultMsgs)
	{
		
//		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		return msg;
		
	}
	
	/**
	 * EKK0371C030_オプションサービス契約＜電話＞照査締結<br>
	 * <br>
	 * @param	param					リクエストパラメータ
	 * @param	handle					セッションハンドル
	 * @param	inHash					条件用Hash
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				結果のハッシュ
	 * @return							サービスインターフェースのリターンコード
	 * @throws	Throwable 
	 */
	private CAANMsg callEKK0371C030SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String lastUpdDtm,
			CAANMsg  getEKK0371D010SCMap
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0081A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0371C030CBSMsg.class.getName());
		mappingEKK0371C030InMsg(template, inHash, lastUpdDtm, getEKK0371D010SCMap);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]
		{
			template
		});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング処理
		editResultRP(sIFResult, param);
		

		errChk(sIFResult);
		// 結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		CAANMsg map = null;
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			map = mappingEKK0371C030SCOutMsg(resultMsgs);
			
		}
		
		return map;
	}

	/**
	 * templateに対してEKK0371C030の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template				条件の設定先
	 * @param	inHash					設定条件
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象ハッシュ
	 * @param	resultHash				結果のハッシュ
	 */
	private void mappingEKK0371C030InMsg(
			CAANMsg template, 
			HashMap<String, Object> inHash, 
			String lastUpdDtm,
			CAANMsg  getEKK0371D010SCMap
	)
	{
//		HashMap<String, Object> eKK0371D010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0371D010);

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0371C030CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0371C030CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0371C030);

		// 機能コード
		template.set(EKK0371C030CBSMsg.FUNC_CODE,     JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約番号
//		template.set(EKK0371C030CBSMsg.OP_SVC_KEI_NO, eKK0371D010Hash.get(EKK0371D010CBSMsg.OP_SVC_KEI_NO));
		template.set(EKK0371C030CBSMsg.OP_SVC_KEI_NO, getEKK0371D010SCMap.getString(EKK0371D010CBSMsg.OP_SVC_KEI_NO));
		// 異動区分
		template.set(EKK0371C030CBSMsg.IDO_DIV,       inHash.get(IDO_DIV));
		// 更新年月日時分秒（更新前）
		template.set(EKK0371C030CBSMsg.UPD_DTM_BF,    lastUpdDtm);
	}
	
	/**
	 * EKK0371D010の結果をHashとして抽出する
	 * @param resultMsgs EKK0371D010のテンプレートリスト
	 * @return EKK0371D010の結果部分
	 */
	private CAANMsg mappingEKK0371C030SCOutMsg(CAANMsg[] resultMsgs)
	{
		
//		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		return msg;
		
	}
	
	/**
	 * オプションサービス契約一覧照会SIFを呼び出し
	 * @param	param		リクエストパラメータ	
	 * @param	handle		セッションハンドル
	 * @param	inHash		条件用Hash
	 * @param	resultHash	結果のハッシュ
	 * @param	svcKeiNo	サービス契約番号
	 * @return				サービスインターフェースのリターンコード
	 * @throws	RequestParameterException, SCException 例外時にスローされます
	 */
	private CAANMsg[] callEKK0371B001SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash,
			String svcKeiUcwkNo
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0371B001への呼び出しパラメータ設定
		template = new CAANMsg(EKK0371B001CBSMsg.class.getName());
		mappingEKK0371B001InMsg(template, inHash, svcKeiUcwkNo);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング処理
		editResultRP(sIFResult, param);

		// エラーチェック
		errChk(sIFResult);

		// 結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		CAANMsg[] msgList = null;

		// ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			msgList = (CAANMsg[])mappingEKK0371B001SCOutMsg(resultMsgs);
		}

		return msgList;
		
	}
	
	/**
	 * templateに対してEKK0371B001の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param svcKeiNo サービス契約番号
	 * @param requestParam アプリ固有のパラメータ
	 */
	private void mappingEKK0371B001InMsg(CAANMsg template, HashMap<String, Object> inHash, String svcKeiUcwkNo)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0371B001CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0371B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0371B001);

		//機能コード--サービス契約一意照会
		template.set(EKK0371B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		//ＫＥＹ＿サービス契約内訳番号
		template.set(EKK0371B001CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		
	}
	
	/**
	 * EKK0371B001の結果をHashとして抽出する
	 * @param resultMsgs EKK0371B001のテンプレートリスト
	 * @return EKK0371B001の結果部分
	 */
	private CAANMsg[] mappingEKK0371B001SCOutMsg(CAANMsg[] resultMsgs)
	{
		
//		HashMap<String, Object> retHash = null;
//		CAANMsg msg = null;
		CAANMsg[] msgList = null;
		
		
		//結果の取得
		msgList = 
			(CAANMsg[])resultMsgs[0].getMsgData().get(EKK0371B001CBSMsg.EKK0371B001CBSMSG1LIST);
		
		return msgList;
	}
	
	/**
	 * EKK0431D010_サブオプションサービス契約＜電話＞登録<br>
	 * <br>
	 * @param	param					リクエストパラメータ
	 * @param	handle					セッションハンドル
	 * @param	inHash					条件用Hash
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				結果のハッシュ
	 * @param	op_svc_kei_no			オプションサービス契約番号
	 * @return							サービスインターフェースのリターンコード
	 * @throws	Throwable 
	 */
	private CAANMsg callEKK0431D010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String sbopSvcCd,
			String pcrsCd,
			String pplanCd,
			String lastUpdDtm,
			HashMap<String, Object> resultHash,
			String op_svc_kei_no
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg                 template   = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0431D010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0431D010CBSMsg.class.getName());
		mappingEKK0431D010InMsg(
				template,
				inHash,
				sbopSvcCd,
				pcrsCd,
				pplanCd,
				lastUpdDtm,
				resultHash,
				op_svc_kei_no);

		CAANMsg EKK0431D010map = callSCCmn(
				param,
				handle,
				resultHash,
				template,
				sIFRequest,
				TEMPLATE_ID_EKK0431D010,
				null
		);

		return EKK0431D010map;
	}
	
	/**
	 * templateに対してEKK0431D010の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template				条件の設定先
	 * @param	inHash					設定条件
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				
	 * @param	op_svc_kei_no			
	 */
	private void mappingEKK0431D010InMsg(
			CAANMsg template, 
			HashMap<String, Object> inHash,
			String sbopSvcCd,
			String pcrsCd,
			String pplanCd,
			String lastUpdDtm,
			HashMap<String,Object> resultHash,
			String op_svc_kei_no
	)
	{
		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0431D010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0431D010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0431D010);

		// 機能コード
		template.set(EKK0431D010CBSMsg.FUNC_CODE,     JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約番号
		template.set(EKK0431D010CBSMsg.OP_SVC_KEI_NO, op_svc_kei_no);
		// サブオプションサービスコード
		template.set(EKK0431D010CBSMsg.SBOP_SVC_CD,   sbopSvcCd);
		// 料金コースコード
		template.set(EKK0431D010CBSMsg.PCRS_CD,       pcrsCd);
		// 料金プランコード
		template.set(EKK0431D010CBSMsg.PPLAN_CD,      pplanCd);
		// 異動区分
		template.set(EKK0431D010CBSMsg.IDO_DIV,       inHash.get(IDO_DIV));
		// 請求契約番号
		template.set(EKK0431D010CBSMsg.SEIKY_KEI_NO,  inHash.get(SEIKY_KEI_NO));
		// 排他制御用更新年月日
		template.set(EKK0431D010CBSMsg.UPD_DTM_BF,    lastUpdDtm);
		// 申込明細番号
		template.set(EKK0431D010CBSMsg.MSKM_DTL_NO,   inHash.get(MSKM_DTL_NO));
	}

	/**************************************************************************/
	/** サービス-I/F実行共通処理領域                                         **/
	/**************************************************************************/
	private CAANMsg callSCCmn(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> resultHash,
			CAANMsg template,
			HashMap<String, Object> sIFRequest,
			String templateId,
			String msg1ListKey
	) throws Throwable
	{
		ServiceComponentRequestInvoker scCall     = null;
		CAANMsg[]                      resultMsgs = null;
		Map<?, ?>                      sIFResult  = null;

		int status = 0;

		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング処理
		editResultRP(sIFResult, param);
		errChk(sIFResult);

		// 結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);

		CAANMsg map = null;
		
		//ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			map = mappingSCOutMsg(resultMsgs);
			resultHash.put(templateId, map.getMsgData());
		}
		
		return map;
	}
	
	/**
	 * EKK0371D010の結果をHashとして抽出する
	 * @param resultMsgs EKK0371D010のテンプレートリスト
	 * @return EKK0371D010の結果部分
	 */
	private CAANMsg mappingSCOutMsg(CAANMsg[] resultMsgs)
	{
		
//		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		return msg;
		
	}
	
	/**
	 * EKK0431C010_サブオプションサービス契約＜電話＞照査<br>
	 * <br>
	 * @param	param					リクエストパラメータ
	 * @param	handle					セッションハンドル
	 * @param	inHash					条件用Hash
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				結果のハッシュ
	 * @return							サービスインターフェースのリターンコード
	 * @throws	Throwable 
	 */
	private CAANMsg callEKK0431C010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String lastUpdDtm,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg                 template   = null;

		CAANMsg map = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0431C010CBSMsg.class.getName());
		mappingEKK0431C010InMsg(template, inHash, lastUpdDtm, resultHash);

		map = callSCCmn(
				param,
				handle,
				resultHash,
				template,
				sIFRequest,
				TEMPLATE_ID_EKK0431C010,
				null
		);

		return map;
	}
	
	/**
	 * templateに対してEKK0431C010の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template				条件の設定先
	 * @param	inHash					設定条件
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象
	 * @param	resultHash				結果のハッシュ
	 */
	private void mappingEKK0431C010InMsg(
			CAANMsg template,
			HashMap<String, Object> inHash,
			String lastUpdDtm,
			HashMap<String, Object> resultHash
	)
	{
		HashMap<String, Object> eKK0431D010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0431D010);

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0431C010CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0431C010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0431C010);

		// 機能コード
		template.set(EKK0431C010CBSMsg.FUNC_CODE,       JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約番号
		template.set(EKK0431C010CBSMsg.OP_SVC_KEI_NO,   eKK0431D010Hash.get(EKK0431D010CBSMsg.OP_SVC_KEI_NO));
		// サブオプションサービス契約番号
		template.set(EKK0431C010CBSMsg.SBOP_SVC_KEI_NO, eKK0431D010Hash.get(EKK0431D010CBSMsg.SBOP_SVC_KEI_NO));
		// 異動区分
		template.set(EKK0431C010CBSMsg.IDO_DIV,         inHash.get(IDO_DIV));
		// 更新年月日時分秒（更新前）
		template.set(EKK0431C010CBSMsg.UPD_DTM_BF,      lastUpdDtm);
	}
	
	/**
	 * EKK0431C030_サブオプションサービス契約＜電話＞照査締結<br>
	 * <br>
	 * @param	param					リクエストパラメータ
	 * @param	handle					セッションハンドル
	 * @param	inHash					条件用Hash
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				結果のハッシュ
	 * @return							サービスインターフェースのリターンコード
	 * @throws	Throwable 
	 */
	private CAANMsg callEKK0431C030SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String lastUpdDtm,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg                 template   = null;
		
		CAANMsg map = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0431C030への呼び出しパラメータ設定
		template = new CAANMsg(EKK0431C030CBSMsg.class.getName());
		mappingEKK0431C030InMsg(template, inHash, lastUpdDtm, resultHash);

		map = callSCCmn(
				param,
				handle,
				resultHash,
				template,
				sIFRequest,
				TEMPLATE_ID_EKK0431C030,
				null
		);

		return map;
	}
	
	/**
	 * templateに対してEKK0431C030の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template				条件の設定先
	 * @param	inHash					設定条件
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象
	 * @param	resultHash				結果のハッシュ
	 */
	private void mappingEKK0431C030InMsg(
			CAANMsg template, 
			HashMap<String, Object> inHash,
			String lastUpdDtm,
			HashMap<String, Object> resultHash
	)
	{
		HashMap<String, Object> eKK0431D010Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0431D010);

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0431C030CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0431C030CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0431C030);

		// 機能コード
		template.set(EKK0431C030CBSMsg.FUNC_CODE,       JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約番号
		template.set(EKK0431C030CBSMsg.OP_SVC_KEI_NO,   eKK0431D010Hash.get(EKK0431D010CBSMsg.OP_SVC_KEI_NO));
		// サブオプションサービス契約番号
		template.set(EKK0431C030CBSMsg.SBOP_SVC_KEI_NO, eKK0431D010Hash.get(EKK0431D010CBSMsg.SBOP_SVC_KEI_NO));
		// 異動区分
		template.set(EKK0431C030CBSMsg.IDO_DIV,         inHash.get(IDO_DIV));
		// 更新年月日時分秒（更新前）
		template.set(EKK0431C030CBSMsg.UPD_DTM_BF,      lastUpdDtm);
	}
	
	/**
	 * EKK0351C220_オプションサービス契約キャンセル<br>
	 * <br>
	 * @param	param					リクエストパラメータ
	 * @param	handle					セッションハンドル
	 * @param	inHash					条件用Hash
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				結果のハッシュ
	 * @return							サービスインターフェースのリターンコード
	 * @throws	Throwable 
	 */
	private CAANMsg callEKK0351C220SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String opSvcKeiNo,
			String mskmDtlNo,
			String lastUpdDtm,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg                 template   = null;

		CAANMsg map = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0351C220CBSMsg.class.getName());
		mappingEKK0351C220InMsg(
				template,
				inHash,
				opSvcKeiNo,
				mskmDtlNo,
				lastUpdDtm,
				resultHash);

		map = callSCCmn(
				param,
				handle,
				resultHash,
				template,
				sIFRequest,
				TEMPLATE_ID_EKK0351C220,
				null
		);

		return map;
	}
	
	/**
	 * templateに対してEKK0351C220の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template				条件の設定先
	 * @param	inHash					設定条件
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象
	 * @param	resultHash				結果のハッシュ
	 */
	private void mappingEKK0351C220InMsg(
			CAANMsg template,
			HashMap<String, Object> inHash,
			String dslOpSvcKeiNo,
			String mskmDtlNo,
			String lastUpdDtm,
			HashMap<String, Object> resultHash
	)
	{

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0351C220CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0351C220CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351C220);

		// 機能コード
		template.set(EKK0351C220CBSMsg.FUNC_CODE,         JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約番号
		template.set(EKK0351C220CBSMsg.OP_SVC_KEI_NO,     dslOpSvcKeiNo);
		// 申込明細番号
		template.set(EKK0351C220CBSMsg.MSKM_DTL_NO,       mskmDtlNo);
		// サービスキャンセル理由コード
		template.set(EKK0351C220CBSMsg.SVC_CANCEL_RSN_CD, String.valueOf("02"));
		// 異動区分
		template.set(EKK0351C220CBSMsg.IDO_DIV,           inHash.get(IDO_DIV));
		// 更新年月日時分秒（更新前）
		template.set(EKK0351C220CBSMsg.UPD_DTM_BF,        lastUpdDtm);
	}
	
	/**
	 * EKK0351C220_オプションサービス契約キャンセル<br>
	 * <br>
	 * @param	param					リクエストパラメータ
	 * @param	handle					セッションハンドル
	 * @param	inHash					条件用Hash
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				結果のハッシュ
	 * @return							サービスインターフェースのリターンコード
	 * @throws	Throwable 
	 */
	private CAANMsg callEKK0351C240SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String opSvcKeiNo,
			String mskmDtlNo,
			String lastUpdDtm,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg                 template   = null;

		CAANMsg map = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0351C240CBSMsg.class.getName());
		mappingEKK0351C240InMsg(
				param,
				template,
				inHash,
				opSvcKeiNo,
				mskmDtlNo,
				lastUpdDtm,
				resultHash);

		map = callSCCmn(
				param,
				handle,
				resultHash,
				template,
				sIFRequest,
				TEMPLATE_ID_EKK0351C240,
				null
		);

		return map;
	}
	
	/**
	 * templateに対してEKK0351C240の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template				条件の設定先
	 * @param	inHash					設定条件
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象
	 * @param	resultHash				結果のハッシュ
	 */
	private void mappingEKK0351C240InMsg(
			IRequestParameterReadOnly param,
			CAANMsg template,
			HashMap<String, Object> inHash,
			String dslOpSvcKeiNo,
			String mskmDtlNo,
			String lastUpdDtm,
			HashMap<String, Object> resultHash
	)throws RequestParameterException 
	{

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0351C240CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0351C240CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351C240);
		
		String svcChrgEndYmd = addYYYYMMDD(opeDate, -1);

		// 機能コード
		template.set(EKK0351C240CBSMsg.FUNC_CODE,         JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約番号
		template.set(EKK0351C240CBSMsg.OP_SVC_KEI_NO,     dslOpSvcKeiNo);
		// 申込明細番号
		template.set(EKK0351C240CBSMsg.MSKM_DTL_NO,       mskmDtlNo);
		// 予約適用開始希望年月日
		template.set(EKK0351C240CBSMsg.RSV_TSTA_KIBO_YMD, opeDate);
		// サービス終了年月日
		template.set(EKK0351C240CBSMsg.SVC_ENDYMD,        opeDate);
		// サービス解約理由コード
		template.set(EKK0351C240CBSMsg.SVC_DLRE_CD,       String.valueOf("01"));
		// 解約担当ユーザーＩＤ
		template.set(EKK0351C240CBSMsg.DSL_TNT_USER_ID,   (String)param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// サービス解約理由メモ
		template.set(EKK0351C240CBSMsg.SVC_DLRE_MEMO,     new String());
		// 違約金発生コード
		template.set(EKK0351C240CBSMsg.PNLTY_HASSEI_CD,   "0");
		// サービス課金終了年月日
		template.set(EKK0351C240CBSMsg.SVC_CHRG_ENDYMD,   svcChrgEndYmd);
		// 異動区分
		template.set(EKK0351C240CBSMsg.IDO_DIV,           inHash.get(IDO_DIV));
		// 更新年月日時分秒（更新前）
		template.set(EKK0351C240CBSMsg.UPD_DTM_BF,        lastUpdDtm);
		
	}
	
	/**
	 * オプションサービス契約一覧照会SIFを呼び出し
	 * @param	param		リクエストパラメータ	
	 * @param	handle		セッションハンドル
	 * @param	inHash		条件用Hash
	 * @param	resultHash	結果のハッシュ
	 * @param	svcKeiNo	サービス契約番号
	 * @return				サービスインターフェースのリターンコード
	 * @throws	RequestParameterException, SCException 例外時にスローされます
	 */
	private CAANMsg[] callEKK0401B001SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			HashMap<String, Object> resultHash,
			String opSvcKeiNo
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;
		int status = 0;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0401B001への呼び出しパラメータ設定
		template = new CAANMsg(EKK0401B001CBSMsg.class.getName());
		mappingEKK0401B001InMsg(template, inHash, opSvcKeiNo);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング処理
		editResultRP(sIFResult, param);

		// エラーチェック
		errChk(sIFResult);

		// 結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);

		// ステータスコードの取得
		status = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		CAANMsg[] msgList = null;

		// ステータスが0以外はエラーとなっている
		if(status == 0)
		{
			msgList = (CAANMsg[])mappingEKK0401B001SCOutMsg(resultMsgs);
		}

		return msgList;
		
	}
	
	/**
	 * templateに対してEKK0161A010の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param inHash 設定条件
	 * @param svcKeiNo サービス契約番号
	 * @param requestParam アプリ固有のパラメータ
	 */
	private void mappingEKK0401B001InMsg(CAANMsg template, HashMap<String, Object> inHash, String opSvcKeiNo)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0401B001CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0401B001CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401B001);

		//機能コード--サブオプションサービス契約一覧照会
		template.set(EKK0401B001CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_1);

		//ＫＥＹ＿サービス契約内訳番号
		template.set(EKK0401B001CBSMsg.KEY_OP_SVC_KEI_NO, opSvcKeiNo);
		
	}
	
	/**
	 * EKK0351B002の結果をHashとして抽出する
	 * @param resultMsgs EKK0161A010のテンプレートリスト
	 * @return EKK0161A010の結果部分
	 */
	private CAANMsg[] mappingEKK0401B001SCOutMsg(CAANMsg[] resultMsgs)
	{
		
//		HashMap<String, Object> retHash = null;
//		CAANMsg msg = null;
		CAANMsg[] msgList = null;
		
		
		//結果の取得
		msgList = 
			(CAANMsg[])resultMsgs[0].getMsgData().get(EKK0401B001CBSMsg.EKK0401B001CBSMSG1LIST);
		
		return msgList;
	}
	

	/**
	 * EKK0351C220_オプションサービス契約キャンセル<br>
	 * <br>
	 * @param	param					リクエストパラメータ
	 * @param	handle					セッションハンドル
	 * @param	inHash					条件用Hash
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				結果のハッシュ
	 * @return							サービスインターフェースのリターンコード
	 * @throws	Throwable 
	 */
	private CAANMsg callEKK0401C150SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String opSvcKeiNo,
			String dslSbopSvcKeiNo,
			String mskmDtlNo,
			String lastUpdDtm,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg                 template   = null;

		CAANMsg map = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0401C150CBSMsg.class.getName());
		mappingEKK0401C150InMsg(
				template,
				inHash,
				opSvcKeiNo,
				dslSbopSvcKeiNo,
				mskmDtlNo,
				lastUpdDtm,
				resultHash);

		map = callSCCmn(
				param,
				handle,
				resultHash,
				template,
				sIFRequest,
				TEMPLATE_ID_EKK0401C150,
				null
		);

		return map;
	}
	
	/**
	 * templateに対してEKK0351C220の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template				条件の設定先
	 * @param	inHash					設定条件
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象
	 * @param	resultHash				結果のハッシュ
	 */
	private void mappingEKK0401C150InMsg(
			CAANMsg template,
			HashMap<String, Object> inHash,
			String dslOpSvcKeiNo,
			String dslSbopSvcKeiNo,
			String mskmDtlNo,
			String lastUpdDtm,
			HashMap<String, Object> resultHash
	)
	{

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0401C150CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0401C150CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401C150);

		// 機能コード
		template.set(EKK0401C150CBSMsg.FUNC_CODE,         JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約番号
		template.set(EKK0401C150CBSMsg.OP_SVC_KEI_NO,     dslOpSvcKeiNo);
		// サブオプションサービス契約番号
		template.set(EKK0401C150CBSMsg.SBOP_SVC_KEI_NO,   dslSbopSvcKeiNo);
		// 申込明細番号
		template.set(EKK0401C150CBSMsg.MSKM_DTL_NO,       mskmDtlNo);
		// サービスキャンセル理由コード
		template.set(EKK0401C150CBSMsg.SVC_CANCEL_RSN_CD, String.valueOf("02"));
		// 異動区分
		template.set(EKK0401C150CBSMsg.IDO_DIV,           inHash.get(IDO_DIV));
		// 更新年月日時分秒（更新前）
		template.set(EKK0401C150CBSMsg.UPD_DTM_BF,        lastUpdDtm);
	}
	
	/**
	 * EKK0351C220_オプションサービス契約キャンセル<br>
	 * <br>
	 * @param	param					リクエストパラメータ
	 * @param	handle					セッションハンドル
	 * @param	inHash					条件用Hash
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				結果のハッシュ
	 * @return							サービスインターフェースのリターンコード
	 * @throws	Throwable 
	 */
	private CAANMsg callEKK0401C170SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String opSvcKeiNo,
			String dslSbopSvcKeiNo,
			String mskmDtlNo,
			String lastUpdDtm,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg                 template   = null;

		CAANMsg map = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0401C170CBSMsg.class.getName());
		mappingEKK0401C170InMsg(
				template,
				inHash,
				opSvcKeiNo,
				dslSbopSvcKeiNo,
				mskmDtlNo,
				lastUpdDtm,
				resultHash);

		map = callSCCmn(
				param,
				handle,
				resultHash,
				template,
				sIFRequest,
				TEMPLATE_ID_EKK0401C170,
				null
		);

		return map;
	}
	
	/**
	 * templateに対してEKK0351C220の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template				条件の設定先
	 * @param	inHash					設定条件
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象
	 * @param	resultHash				結果のハッシュ
	 */
	private void mappingEKK0401C170InMsg(
			CAANMsg template,
			HashMap<String, Object> inHash,
			String dslOpSvcKeiNo,
			String dslSbopSvcKeiNo,
			String mskmDtlNo,
			String lastUpdDtm,
			HashMap<String, Object> resultHash
	)
	{

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0401C170CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0401C170CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401C170);
		
		String svcChrgEndYmd = addYYYYMMDD(opeDate, -1);

		// 機能コード
		template.set(EKK0401C170CBSMsg.FUNC_CODE,         JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約番号
		template.set(EKK0401C170CBSMsg.OP_SVC_KEI_NO,     dslOpSvcKeiNo);
		// サブオプションサービス契約番号
		template.set(EKK0401C170CBSMsg.SBOP_SVC_KEI_NO,   dslSbopSvcKeiNo);
		// 申込明細番号
		template.set(EKK0401C170CBSMsg.MSKM_DTL_NO,       mskmDtlNo);
		// 予約適用開始希望年月日
		template.set(EKK0401C170CBSMsg.RSV_TSTA_KIBO_YMD, opeDate);
		// サービス終了年月日
		template.set(EKK0401C170CBSMsg.SVC_ENDYMD,        opeDate);
		// サービス課金終了年月日
		template.set(EKK0401C170CBSMsg.SVC_CHRG_ENDYMD,   svcChrgEndYmd);
		// サービス解約理由コード
		template.set(EKK0401C170CBSMsg.SVC_DLRE_CD,       String.valueOf("01"));
		// サービス解約理由メモ
		template.set(EKK0401C170CBSMsg.SVC_DLRE_MEMO,     new String());
		// 違約金発生コード	
		template.set(EKK0401C170CBSMsg.PNLTY_HASSEI_CD,   "0");
		// 異動区分
		template.set(EKK0401C170CBSMsg.IDO_DIV,           inHash.get(IDO_DIV));
		// 更新年月日時分秒（更新前）
		template.set(EKK0401C170CBSMsg.UPD_DTM_BF,        lastUpdDtm);
	}
	
	/**
	 * EKK0351C220_オプションサービス契約キャンセル<br>
	 * <br>
	 * @param	param					リクエストパラメータ
	 * @param	handle					セッションハンドル
	 * @param	inHash					条件用Hash
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				結果のハッシュ
	 * @return							サービスインターフェースのリターンコード
	 * @throws	Throwable 
	 */
	private CAANMsg callEKK0351C250SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String opSvcKeiNo,
			String mskmDtlNo,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg                 template   = null;

		CAANMsg map = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0351C250CBSMsg.class.getName());
		mappingEKK0351C250InMsg(
				param,
				template,
				inHash,
				opSvcKeiNo,
				mskmDtlNo,
				resultHash);

		map = callSCCmn(
				param,
				handle,
				resultHash,
				template,
				sIFRequest,
				TEMPLATE_ID_EKK0351C250,
				null
		);

		return map;
	}
	
	/**
	 * templateに対してEKK0351C240の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template				条件の設定先
	 * @param	inHash					設定条件
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象
	 * @param	resultHash				結果のハッシュ
	 */
	private void mappingEKK0351C250InMsg(
			IRequestParameterReadOnly param,
			CAANMsg template,
			HashMap<String, Object> inHash,
			String dslOpSvcKeiNo,
			String mskmDtlNo,
			HashMap<String, Object> resultHash
	)throws RequestParameterException 
	{
		
		HashMap<String, Object> eKK0351C240Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0351C240);

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0351C250CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0351C250CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0351C250);
		
		String svcChrgEndYmd = addYYYYMMDD(opeDate, -1);

		// 機能コード
		template.set(EKK0351C250CBSMsg.FUNC_CODE,         JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約番号
		template.set(EKK0351C250CBSMsg.OP_SVC_KEI_NO,     dslOpSvcKeiNo);
		// 申込明細番号
		template.set(EKK0351C250CBSMsg.MSKM_DTL_NO,       mskmDtlNo);
		// サービス終了年月日
		template.set(EKK0351C250CBSMsg.SVC_ENDYMD,        opeDate);
		// サービス解約理由コード
		template.set(EKK0351C250CBSMsg.SVC_DLRE_CD,       String.valueOf("01"));
		// 解約担当ユーザーＩＤ
		template.set(EKK0351C250CBSMsg.DSL_TNT_USER_ID,   (String)param.getControlMapData(SCControlMapKeys.OPERATOR_ID));
		// サービス解約理由メモ
		template.set(EKK0351C250CBSMsg.SVC_DLRE_MEMO,     new String());
		// 解約時課金フラグ
		template.set(EKK0351C250CBSMsg.DSLJI_CHRG_FLG,    "0");
		// サービス課金終了年月日
		template.set(EKK0351C250CBSMsg.SVC_CHRG_ENDYMD,   svcChrgEndYmd);
		// 異動区分
		template.set(EKK0351C250CBSMsg.IDO_DIV,           inHash.get(IDO_DIV));
		// 更新年月日時分秒（更新前）
		template.set(EKK0351C250CBSMsg.UPD_DTM_BF,        (String)eKK0351C240Hash.get(EKK0351C240CBSMsg.UPD_DTM));
	}
	
	/**
	 * EKK0351C220_オプションサービス契約キャンセル<br>
	 * <br>
	 * @param	param					リクエストパラメータ
	 * @param	handle					セッションハンドル
	 * @param	inHash					条件用Hash
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				結果のハッシュ
	 * @return							サービスインターフェースのリターンコード
	 * @throws	Throwable 
	 */
	private CAANMsg callEKK0401C180SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String opSvcKeiNo,
			String dslSbopSvcKeiNo,
			String mskmDtlNo,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg                 template   = null;

		CAANMsg map = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0401C180CBSMsg.class.getName());
		mappingEKK0401C180InMsg(
				template,
				inHash,
				opSvcKeiNo,
				dslSbopSvcKeiNo,
				mskmDtlNo,
				resultHash);

		map = callSCCmn(
				param,
				handle,
				resultHash,
				template,
				sIFRequest,
				TEMPLATE_ID_EKK0401C180,
				null
		);

		return map;
	}
	
	/**
	 * templateに対してEKK0351C220の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template				条件の設定先
	 * @param	inHash					設定条件
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象
	 * @param	resultHash				結果のハッシュ
	 */
	private void mappingEKK0401C180InMsg(
			CAANMsg template,
			HashMap<String, Object> inHash,
			String dslOpSvcKeiNo,
			String dslSbopSvcKeiNo,
			String mskmDtlNo,
			HashMap<String, Object> resultHash
	)
	{
		
		HashMap<String, Object> eKK0401C170Hash = (HashMap<String, Object>)resultHash.get(TEMPLATE_ID_EKK0401C170);

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0401C180CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0401C180CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0401C180);
		
		String svcChrgEndYmd = addYYYYMMDD(opeDate, -1);

		// 機能コード
		template.set(EKK0401C180CBSMsg.FUNC_CODE,         JPCModelConstant.FUNC_CD_1);
		// オプションサービス契約番号
		template.set(EKK0401C180CBSMsg.OP_SVC_KEI_NO,     dslOpSvcKeiNo);
		// サブオプションサービス契約番号
		template.set(EKK0401C180CBSMsg.SBOP_SVC_KEI_NO,   dslSbopSvcKeiNo);
		// 申込明細番号
		template.set(EKK0401C180CBSMsg.MSKM_DTL_NO,       mskmDtlNo);
		// サービス終了年月日
		template.set(EKK0401C180CBSMsg.SVC_ENDYMD,        opeDate);
		// サービス課金終了年月日
		template.set(EKK0401C180CBSMsg.SVC_CHRG_ENDYMD,   svcChrgEndYmd);
		// サービス解約理由コード
		template.set(EKK0401C180CBSMsg.SVC_DLRE_CD,       String.valueOf("01"));
		// サービス解約理由メモ
		template.set(EKK0401C180CBSMsg.SVC_DLRE_MEMO,     new String());
		// 解約時課金フラグ
		template.set(EKK0401C180CBSMsg.DSLJI_CHRG_FLG,    "0");
		// 異動区分
		template.set(EKK0401C180CBSMsg.IDO_DIV,           inHash.get(IDO_DIV));
		// 更新年月日時分秒（更新前）
		template.set(EKK0401C180CBSMsg.UPD_DTM_BF,        (String)eKK0401C170Hash.get(EKK0401C170CBSMsg.UPD_DTM));
	}
	
	/**
	 * EKK0451C220_割引サービス契約＜置換型＞開始<br>
	 * <br>
	 * @param	param					リクエストパラメータ
	 * @param	handle					セッションハンドル
	 * @param	inHash					条件用Hash
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				結果のハッシュ
	 * @return							サービスインターフェースのリターンコード
	 * @throws	Throwable 
	 */
	private CAANMsg callEKK0451C220SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String wribSvcKeiNo,
			String upd_dtm_bf,
			HashMap<String, Object> resultHash,
			// IT1-2014-0000146 2014/05/16 add start
			String dslKiboYmd
			// IT1-2014-0000146 2014/05/16 add end
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg                 template   = null;

		CAANMsg map = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0451C220CBSMsg.class.getName());
		mappingEKK0451C220InMsg(
				template,
				inHash,
				wribSvcKeiNo,
				upd_dtm_bf,
				resultHash,
				// IT1-2014-0000146 2014/05/16 add start
				dslKiboYmd);
				// IT1-2014-0000146 2014/05/16 add end

		map = callSCCmn(
				param,
				handle,
				resultHash,
				template,
				sIFRequest,
				TEMPLATE_ID_EKK0451C220,
				null
		);

		return map;
	}
	
	/**
	 * templateに対してEKK0451C220の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template				条件の設定先
	 * @param	inHash					設定条件
	 * @param	resultHash				結果のハッシュ
	 */
	private void mappingEKK0451C220InMsg(
			CAANMsg template,
			HashMap<String, Object> inHash,
			String wribSvcKeiNo,
			String upd_dtm_bf,
			HashMap<String, Object> resultHash,
			// IT1-2014-0000146 2014/05/16 add start
			String dslKiboYmd
			// IT1-2014-0000146 2014/05/16 add end
	)
	{
		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0451C220CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0451C220CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0451C220);
		
		// 機能コード
		template.set(EKK0451C220CBSMsg.FUNC_CODE,         JPCModelConstant.FUNC_CD_1);
		// 割引サービス契約番号
		template.set(EKK0451C220CBSMsg.WRIB_SVC_KEI_NO,   wribSvcKeiNo);
		// IT1-2014-0000146 2014/05/16 add start
		// サービス開始年月日
		template.set(EKK0451C220CBSMsg.SVC_STA_YMD,       dslKiboYmd);
		// IT1-2014-0000146 2014/05/16 add end
		// 異動区分
		template.set(EKK0451C220CBSMsg.IDO_DIV,           inHash.get(IDO_DIV));
		// 更新年月日時分秒（更新前）
		template.set(EKK0451C220CBSMsg.UPD_DTM_BF,        upd_dtm_bf);
	}
	
// 20140511 星野 ADD START
	/**
	 * EKK0451C220_割引サービス契約＜置換型＞開始<br>
	 * <br>
	 * @param	param					リクエストパラメータ
	 * @param	handle					セッションハンドル
	 * @param	inHash					条件用Hash
	 * @param	jkkOpsvkeiTelIktAddCC	処理対象Hash
	 * @param	resultHash				結果のハッシュ
	 * @return							サービスインターフェースのリターンコード
	 * @throws	Throwable 
	 */
	private CAANMsg callEKK0451C021SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			HashMap<String, Object> inHash,
			String wribSvcKeiNo,
			String mskmDtlNo,
			String svcEndYmd,
			String upd_dtm_bf,
			HashMap<String, Object> resultHash
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg                 template   = null;

		CAANMsg map = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// 呼び出しパラメータ設定
		template = new CAANMsg(EKK0451C021CBSMsg.class.getName());
		mappingEKK0451C021InMsg(
				template,
				inHash,
				wribSvcKeiNo,
				mskmDtlNo,
				svcEndYmd,
				upd_dtm_bf,
				resultHash
		);

		map = callSCCmn(
				param,
				handle,
				resultHash,
				template,
				sIFRequest,
				TEMPLATE_ID_EKK0451C021,
				null
		);

		return map;
	}
	
	/**
	 * templateに対してEKK0451C021の条件に関する部分を設定する<br>
	 * <br>
	 * @param	template				条件の設定先
	 * @param	inHash					設定条件
	 * @param	resultHash				結果のハッシュ
	 */
	private void mappingEKK0451C021InMsg(
			CAANMsg template,
			HashMap<String, Object> inHash,
			String wribSvcKeiNo,
			String mskmDtlNo,
			String svcEndYmd,
			String upd_dtm_bf,
			HashMap<String, Object> resultHash
	)
	{
		

		// まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0451C021CBSMsg().getContents());

		// テンプレートID(SIFのID)
		template.set(EKK0451C021CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0451C021);
		
		// 機能コード
		template.set(EKK0451C021CBSMsg.FUNC_CODE,         JPCModelConstant.FUNC_CD_1);
		// 割引サービス契約番号
		template.set(EKK0451C021CBSMsg.WRIB_SVC_KEI_NO, wribSvcKeiNo);
		// 申込明細番号
		template.set(EKK0451C021CBSMsg.MSKM_DTL_NO, 	mskmDtlNo);
		// サービス終了年月日
		template.set(EKK0451C021CBSMsg.SVC_ENDYMD, 		svcEndYmd);
		// サービス解約理由コード
		template.set(EKK0451C021CBSMsg.SVC_DLRE_CD, 	"01");
		// サービス解約理由メモ
		template.set(EKK0451C021CBSMsg.SVC_DLRE_MEMO, 	"");
		// 違約金発生コード
		template.set(EKK0451C021CBSMsg.PNLTY_HASSEI_CD, "0");
		// 異動区分
		template.set(EKK0451C021CBSMsg.IDO_DIV, 		inHash.get(IDO_DIV));
		// 異動予約詳細コード（電話オプションパック割引解約）
		template.set(EKK0451C021CBSMsg.IDO_RSV_DTL_CD, 	"028");
		// 更新年月日時分秒（更新前）
		template.set(EKK0451C021CBSMsg.UPD_DTM_BF, 		upd_dtm_bf);
	}
// 20140511 星野 ADD END
	
	/**
	 * S/IF呼出時の共通情報を設定する
	 * @param param 業務データ取得用I/F
	 * @param template 条件の設定先
	 * @throws RequestParameterException
	 */
	private void editCommonInfo(
			IRequestParameterReadOnly param,
			CAANMsg template)
			throws RequestParameterException 
	{
		// オペレータID
		Object operatorId = param.getControlMapData(SCControlMapKeys.OPERATOR_ID);
		template.set(JCMConstants.OPERATOR_ID_KEY, operatorId);

		// 運用日付
		Object operateDate = param.getControlMapData(SCControlMapKeys.OPE_DATE);
		template.set(JCMConstants.OPERATE_DATE_KEY, operateDate);

		// 運用日時
		Object operateDateTime = param.getControlMapData(SCControlMapKeys.OPE_TIME);
		template.set(JCMConstants.OPERATE_DATETIME_KEY, operateDateTime);
	}
	
	/**
	 * 電話セレクトオプションパック操作CCでパック情報を取得
	 * 
	 * @param param
	 * @param fixedText
	 * @throws Throwable 
	 */
	private ArrayList<HashMap<String, Object>> getTelSelectOpPack(SessionHandle handle, IRequestParameterReadWrite param, 
			String svc_kei_no, String svc_kei_ucwk_no, String packDiv) throws Throwable {
		String fixedTextPackCC = "fixedTextPackCC";
		JKKTelSelectOpPackOperateCC telSelectOpPackOperateCC = new JKKTelSelectOpPackOperateCC();
		//電話セレクトオプションパック操作CCに渡すパラメータを作成
		HashMap<String, Object> paramMapPackCC = new HashMap<String, Object>();
		paramMapPackCC.put("func_cd", "1");
		paramMapPackCC.put("trn_div","00"); //照会
		paramMapPackCC.put("svc_kei_no",svc_kei_no);
		paramMapPackCC.put("svc_kei_ucwk_no",svc_kei_ucwk_no);
		param.setData(fixedTextPackCC, paramMapPackCC);
		//照会を実行
		param = telSelectOpPackOperateCC.execute(handle, param, fixedTextPackCC);

		HashMap<String, Object> retMapPackCC = (HashMap<String, Object>)param.getData(fixedTextPackCC);
		ArrayList<HashMap<String, Object>> retList = (ArrayList<HashMap<String, Object>>)retMapPackCC.get("wrib_svc_kei_list"); 
		//無効な割引サービス契約情報は除く
		for(int i=retList.size()-1; i>=0; i--){
			if(("900".compareTo((String)retList.get(i).get("wrib_svc_kei_stat")) <= 0 )
				|| !packDiv.equals((String)retList.get(i).get("pack_div"))){
				retList.remove(i);
			}
		}
		return retList;
	}
	
	/**
	 * EKK1091D010 進捗登録
	 * @return
	 * @throws Throwable
	 */
	private void addEKK1091D010(SessionHandle handle, IRequestParameterReadWrite param, String fixedText,
			String svcKeiNo, String svcKeiUcwkNo, String wribSvcKeiNo, String pacDiv, 
			String prgStat, String trnDiv, String dslKiboYmd) 
	throws Throwable {
		
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// 特記事項編集
		String prgTkjk1 = "";
		// サービス契約内訳＜eo光電話＞一意照会
		HashMap<String, Object> retHash =callEKK0191A010SC(param, handle, svcKeiUcwkNo);

		prgTkjk1 = "電話番号："+retHash.get(EKK0191A010CBSMsg1List.TELNO)+" ";
		if("1".equals(pacDiv)){
			prgTkjk1 += "eo光電話パック３";
		}else if("2".equals(pacDiv)){
			prgTkjk1 += "eo光電話パック７";
		}
		// ANK-3754-00-00 ADD START
		else if("3".equals(pacDiv))
		{
			prgTkjk1 += "あんしん電話パック";
		}
		// ANK-3754-00-00 ADD END
		if("01".equals(trnDiv)){
			prgTkjk1 += "登録 利用開始日：";
		}else if("02".equals(trnDiv)){
			prgTkjk1 += "解約 利用終了日：";
		}
		if(!StringUtils.isEmpty(dslKiboYmd)){
			prgTkjk1 += dslKiboYmd.substring(0,4)+"/"+dslKiboYmd.substring(4,6)+"/"+dslKiboYmd.substring(6,8);
		}
		// EKK1091D010 進捗登録
		HashMap<String, String> inMap = new HashMap<String, String>();
		inMap.put( JKKAdchgConstCC.PARAM_KEY_SVC_KEI_NO, svcKeiNo );
		inMap.put( EKK1091D010CBSMsg.WRIB_SVC_KEI_NO, wribSvcKeiNo );
		inMap.put( JKKAdchgConstCC.PARAM_KEY_IDO_DIV, JKKAdchgConstCC.IDO_DIV_ADCHG_RGST );
		inMap.put( JKKAdchgConstCC.PARAM_KEY_IDO_DTM, JCCBPCommon.getSysDateTimeStamp() );
		inMap.put( JKKAdchgConstCC.PARAM_KEY_PRG_STAT, prgStat );
		inMap.put( EKK1091D010CBSMsg.PRG_TKJK_1, prgTkjk1 );
		HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData(fixedText);
		paramMap.put( JKKAdchgConstCC.PARAM_KEY_FUNC_CD,"1");
		HashMap<String, Object> reqMap = mapper.setEKK1091D010(param, fixedText, inMap, getIdoRsnList(param) );
		
		Map<?, ?> resMap = scCall.run(reqMap, handle);
		mapper.scResultCheck(param);
		
	}
	
	/**
	 * 異動理由リスト 取得処理.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @return  進捗登録用の異動理由リスト
	 * @throws Throwable 
	 */
	private ArrayList<HashMap<String, Object>> getIdoRsnList(IRequestParameterReadWrite param) throws Throwable {

		/** 事前準備 */
		HashMap<String, Object> paramMap = (HashMap<String, Object>)param.getData("idoRsnListMap");

		// 投入データ設定[異動理由リスト]
		ArrayList<HashMap<String, Object>> put_ido_rsn_list = new ArrayList<HashMap<String, Object>>();

		// param.異動理由リストの情報を投入データとして登録
		ArrayList<HashMap<String, Object>> prm_ido_rsn_list = (ArrayList<HashMap<String, Object>>)paramMap.get( JKKAdchgConstCC.PARAM_KEY_IDO_RSN_LIST );
		Iterator<HashMap<String, Object>> prm_ido_rsn_ite = prm_ido_rsn_list.iterator();
		while( prm_ido_rsn_ite.hasNext() ){

			HashMap<String, Object> cur_ido_rsn = prm_ido_rsn_ite.next();

			// 投入データを登録
			HashMap<String, Object> put_ido_rsn = new HashMap<String, Object>();
			put_ido_rsn.put( EKK1091D010CBSMsg1List.IDO_RSN_CD, (String)cur_ido_rsn.get( JKKAdchgConstCC.PARAM_KEY_IDO_RSN_CD ) );
			put_ido_rsn.put( EKK1091D010CBSMsg1List.IDO_RSN_MEMO, (String)cur_ido_rsn.get( JKKAdchgConstCC.PARAM_KEY_IDO_RSN_MEMO ) );
			put_ido_rsn_list.add( put_ido_rsn );
		}

		return put_ido_rsn_list;
	}

	/**
	 * サービス契約内訳一意照会SIFを呼び出し
	 * @param	param		リクエストパラメータ	
	 * @param	handle		セッションハンドル
	 * @param	inHash		条件用Hash
	 * @param	resultHash	結果のハッシュ
	 * @param	svcKeiNo	サービス契約番号
	 * @return				サービスインターフェースのリターンコード
	 * @throws	RequestParameterException, SCException 例外時にスローされます
	 */
	private HashMap<String, Object> callEKK0191A010SC(
			IRequestParameterReadWrite param,
			SessionHandle handle,
			String svcKeiUcwkNo
	) throws Throwable
	{
		HashMap<String, Object> sIFRequest = null;
		CAANMsg[] resultMsgs = null;
		CAANMsg template = null;
		ServiceComponentRequestInvoker scCall = null;
		Map<?, ?> sIFResult = null;

		// サービスIF共通の情報を設定
		sIFRequest = editInMsgCmn(param);

		// EKK0191A010への呼び出しパラメータ設定
		template = new CAANMsg(EKK0191A010CBSMsg.class.getName());
		mappingEKK0191A010InMsg(template, svcKeiUcwkNo);
		editBasicCmn(param, template);

		// リクエスト用クラスの設定
		sIFRequest.put(JCMConstants.TEMPLATE_LIST_KEY, new CAANMsg[]{template});

		// SC呼び出しクラスの生成
		scCall = new ServiceComponentRequestInvoker();

		// SIFの呼び出し
		sIFResult = scCall.run(sIFRequest, handle);

		// エラーマッピング処理
		editResultRP(sIFResult, param);

		// エラーチェック
		errChk(sIFResult);

		// 結果の取得
		resultMsgs = (CAANMsg[])sIFResult.get(JCMConstants.TEMPLATE_LIST_KEY);

		return  mappingEKK0191A010SCOutMsg(resultMsgs);
		
	}
	
	/**
	 * templateに対してEKK0191A010の条件に関する部分を設定する
	 * @param template 条件の設定先
	 * @param svcKeiUcwkNo サービス契約番号
	 * @param requestParam アプリ固有のパラメータ
	 */
	private void mappingEKK0191A010InMsg(CAANMsg template, String svcKeiUcwkNo)
	{

		//まずは全条件のNullマッピング
		fillCAANMSGNullMapping(template, new EKK0191A010CBSMsg().getContents());
		
		//テンプレートID(SIFのID)
		template.set(EKK0191A010CBSMsg.TEMPLATEID, TEMPLATE_ID_EKK0191A010);

		//機能コード--サービス契約内訳一意照会
		template.set(EKK0191A010CBSMsg.FUNC_CODE, JPCModelConstant.FUNC_CD_2);

		//ＫＥＹ＿サービス契約内訳番号
		template.set(EKK0191A010CBSMsg.KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		
	}
	/**
	 * EKK0191A010の結果をHashとして抽出する
	 * @param resultMsgs EKK0191A010のテンプレートリスト
	 * @return EKK0191A010の結果部分
	 */
	private HashMap<String, Object> mappingEKK0191A010SCOutMsg(CAANMsg[] resultMsgs)
	{
		
		HashMap<String, Object> retHash = null;
		CAANMsg msg = null;
		CAANMsg[] msgList = null;
		
		//結果の抽出
		msg = resultMsgs[0];
		
		//結果の取得
		msgList = 
			(CAANMsg[])msg.getMsgData().get(EKK0191A010CBSMsg.EKK0191A010CBSMSG1LIST);
		retHash = msgList[0].getMsgData();
		
		return retHash;
	}

	
}