/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JKKFixipadCC
 *   ソースファイル名：JKKFixipadCC.java
 *   作成者          ：FJ
 *   日付            ：2011年11月01日
 *＜機能概要＞
 *   固定ＩＰアドレス払出機能ビジネスロジック
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00       2011/11/01   FJ  　　    新規作成
 *   v3.02       2012/08/10   FJ) 藤原    【TAI-2012-0000061】OS時刻参照を削除。エイジングの使用開始年月日時分秒は設定しなくてもS-I/Fで設定される
 *   v4.00       2013/03/06   FJ) 砂川    【IKK-2013-0000284】ステータスが解約済まはたキャンセル済のサービス契約内訳をスキップする対応
 *   v5.00       2013/05/30   FJ) 清崎    【TG1-2013-0000421】固定グローバルオプション登録時、サービス契約内訳ステータスの参照対応
 *   v23.00      2016/01/04   FJ) 栗秋    【ANK-2612-00-00】 １０Ｇコース導入対応
 *   v23.01      2016/02/09   FJ) 真崎    【ANK-2718-00-00】固定グローバルIPアドレス払出方法変更
 *   v26.00      2016/07/22   FJ) 原田    【ANK-2765-00-00】認証IDの統一化
 **********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

// 2012/08/10 TAI-2012-0000061 del start
//import java.text.SimpleDateFormat;
// 2012/08/10 TAI-2012-0000061 del end
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.JKKFixipadConstCC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0022_KKSV0022OP;
import com.fujitsu.futurity.bp.custom.constant.KKSV0022_KKSV0022OP_KKSV002201CC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041301SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041301SC_EKK0161B004CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041302SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041302SC_EKK0171A010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041303SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041303SC_EZM0171B010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041304SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041304SC_EKK0241B001CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041305SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041305SC_EZM0341A010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041306SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041306SC_EZM0331A010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041307SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041307SC_EZM0101B030CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041308SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041308SC_EZM0321A010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041311SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041311SC_EKK0081A010CBSMsg1List;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041309SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_KKSV041310SC;
import com.fujitsu.futurity.bp.custom.constant.KKSV0413_KKSV0413OP_WORK;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0413_KKSV0413OP_EKK0161B004BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0413_KKSV0413OP_EKK0171A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0413_KKSV0413OP_EKK0241B001BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0413_KKSV0413OP_EZM0101B030BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0413_KKSV0413OP_EZM0101C010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0413_KKSV0413OP_EZM0111D010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0413_KKSV0413OP_EZM0171B010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0413_KKSV0413OP_EZM0321A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0413_KKSV0413OP_EZM0331A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0413_KKSV0413OP_EZM0341A010BSMapper;
import com.fujitsu.futurity.bp.custom.mapping.KKSV0413_KKSV0413OP_EKK0081A010BSMapper;
import eo.common.constant.JKKStrConst;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.SCCallException;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.common.x01.sc.ErrorInfoMapKeys;
import com.fujitsu.futurity.common.x01.sc.SCControlMapKeys;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.common.JCMAPLConstMgr;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0161B004CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0241B001CBSMsg1List;
import eo.ejb.common.edit.JKKejbEditYmdInit;


/**
 * 固定ＩＰアドレス払出コモンコンポーネント部品<br/>
 * <br/>
 * 以下の場合に、空き固定ＩＰアドレスを払出し利用登録するビジネスロジックです。<br/>
 * <ul>
 * <li>固定グローバルＩＰアドレス情報登録画面でのオプションサービス契約登録</li>
 * <li>サービス契約更新(eo光ネット)画面でのコース変更異動処理の際、ＩＳＰ認証ＩＤ変更に伴うオプションサービス契約付け替え</li>
 * </ul>
 * <br/>
 * <pre>※注意※
 * 当ＣＣ部品は、サービス：KKSV0022固定グローバルＩＰアドレス情報初期表示　を前提とし、
 * 内部でのサービスＩ／Ｆ呼出では‘KKSV0413_KKSV0413OP’というＢＰを併用しています。
 * 
 * 上位から与えられた RequestParameterマップ KKSV0022 に KKSV0413 関連のマップを組み込んで使用しますが、
 * KKSV0022は外部（上位）のマップ、KKSV0413は内部のマップ、なので、混同されないよう注意ください。
 * </pre>
 * @author 富士通
 * @since 2011-11-01
 */
public class JKKFixipadCC extends AbstractCommonComponent implements JKKFixipadConstCC
{

	private static final String ERR_MSG = "INVALID_RETURN_MESSAGE";

	/** エイジング種別コード：固定ＩＰアドレス */
	private static final String AGING_SBT_CD_FIXIPAD = "002";

	/** 固定IP取得種別コード：ＶＲ識別なし */
	// ▼▼ ANK-2718-00-00 2016/02/09 MOD START ▼▼
//	private static final String KOTEI_IP_STKU_SBT_NO_VR = "1";
	private static final String KOTEI_IP_STKU_SBT_NO_VR = "4";
	// ▲▲ ANK-2718-00-00 2016/02/09 MOD END   ▲▲

	// ST2-2012-0000612 2012/04/05 ADD START
	/** 固定IP取得種別コード：１Ｇ */
	private static final String KOTEI_IP_STKU_SBT_1G = "4";

	/** ＶＲ識別コード：２００Ｍ用ＶＲ */
	private static final String VR_SKBT_CD_HFA = "HFA";
	// ST2-2012-0000612 2012/04/05 ADD END
	// ANK-2612-00-00 2016/01/04 ADD START
	
	/** 固定IP取得種別コード：１０Ｇ */
	private static final String KOTEI_IP_STKU_SBT_10G = "5";
	
	/** ＶＲ識別コード：１０Ｇ用ＶＲ */
	private static final String VR_SKBT_CD_HF10G = "HF10G";
	// ANK-2612-00-00 2016/01/04 ADD END
	
	// ▼▼ ANK-2718-00-00 2016/02/09 ADD START ▼▼
	/** ＶＲ識別コード：１Ｇ用ＶＲ */
	private static final String VR_SKBT_CD_HF1G = "HF1G";
	
	/** ＶＲ識別コード：eo電話(OF)用ＶＲ */
	private static final String VR_SKBT_CD_OF1G = "OF1G";
	
	/** ＶＲ識別コード：マンションＶＲ用 */
	private static final String VR_SKBT_CD_MF1 = "MF1";
	
	/** 固定IP取得種別コード：メガファイバー */
	private static final String KOTEI_IP_STKU_SBT_MF1 = "2";
	// ▲▲ ANK-2718-00-00 2016/02/09 ADD END   ▲▲
	
	// 2013/02/19 IT2-2013-0000195 add okita start
	/** サービス契約回線内訳ステータス：使用中 */
	private static final String SVC_KEI_KAISEN_UCWK_STAT_USE = "100";
	// 2013/02/19 IT2-2013-0000195 add okita end
	
	/** 運用年月日 */
	private String unyoYmd = null;
	
	/** 上位から指定された機能コード */
	private String functionCode = null;

	/** ＶＲ識別 */
	private String vrSkbt = null;

	// ▼▼▼ IKK-2013-0000284 Add Start ▼▼▼
	/** サービス契約内訳ステータス：解約済 */
	private static final String SVC_KEI_UCWK_STAT_910 = "910";
	
	/** サービス契約内訳ステータス：キャンセル済 */
	private static final String SVC_KEI_UCWK_STAT_920 = "920";
	// ▲▲▲ IKK-2013-0000284 Add End   ▲▲▲


	/**
	 * 固定ＩＰアドレス払出処理・主メソッド<br/>
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列：本ＣＣの操作コマンドを指定，get/post/both
	 * @return 返却用リクエストパラメータ
	 * @throws Throwable 各例外
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite runFixipadHradsi(
			SessionHandle handle, 
			IRequestParameterReadWrite param, 
			String fixedText) throws Throwable
	{
		//初期処理
		HashMap<String, Object> kksv002201cc = (HashMap<String, Object>)param.getData(KKSV0022_KKSV0022OP.KKSV002201CC);
		IRequestParameterReadWrite paramA = init(param, kksv002201cc);

		//操作コマンド get/post/both
		String magicWord = fixedText.trim().toLowerCase();

		//利用登録のみの指示でない場合、固定ＩＰアドレス取得処理を実施
		if (!JKKFIXIPADCC_POST.equals(magicWord))
		{
			IRequestParameterReadWrite paramB = runGetFixipad(handle, paramA, kksv002201cc);
			
			if (JKKFIXIPADCC_BOTH.equals(magicWord))
			{
				paramA = preparePostProcessParameter(paramB, kksv002201cc);
			}
			else
			{
				paramA = paramB;
			}
		}

		//取得のみの指示でない場合、固定ＩＰアドレス利用登録処理を実施
		IRequestParameterReadWrite paramC = paramA;
		if (!JKKFIXIPADCC_GET.equals(magicWord))
		{
			paramC = runUseFixipad(handle, paramA, kksv002201cc);
		}
		
		//出力 ArrayList 編集
		return editResultList(magicWord, paramC, kksv002201cc);
	}



	/**
	 * 本機能の初期処理
	 * 
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws RequestParameterException リクエストパラメータ操作例外
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite init(IRequestParameterReadWrite param, HashMap<String, Object> kksv002201cc) throws RequestParameterException
	{
		//リターンコードをデフォルト設定
		param.setControlMapData(SCControlMapKeys.RETURN_CODE, "0");
		param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, "");

		// 運用日付
		unyoYmd = JCCBPCommon.getOpeDate(null);

		//機能コード
		functionCode = (String)kksv002201cc.get(JCMConstants.FUNC_CODE_KEY);

		//作業項目リストの初期化
		Map<Object, Object> workAreaMap = param.getMappingWorkArea();
		if (workAreaMap == null)
		{
			workAreaMap = new HashMap<Object, Object>();
			param.setMappingWorkArea(workAreaMap);
		}
		
		HashMap<String, Object> workMap = (HashMap<String, Object>)workAreaMap.get(KKSV0413_KKSV0413OP.WORK);
		if (workMap == null)
		{
			workMap = new HashMap<String, Object>();
			workAreaMap.put(KKSV0413_KKSV0413OP.WORK, workMap);
		}
		
		//作業項目リスト．サービス契約番号
		String svc_kei_no = (String)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.SVC_KEI_NO);
		workMap.put(KKSV0413_KKSV0413OP_WORK.SVC_KEI_NO, svc_kei_no);

		//作業項目リスト．ＺＭ０１０１更新年月日時分秒（更新前）
		String upd_dtm_bf = (String)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.ZM0101_UPD_DTM_BF);
		workMap.put(KKSV0413_KKSV0413OP_WORK.ZM0101_UPD_DTM, upd_dtm_bf);

		return param;
	}



	/**
	 * 固定ＩＰアドレス払出：固定ＩＰアドレス取得
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite runGetFixipad(
			SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> kksv002201cc)
	throws Throwable
	{
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//ＶＲ識別取得処理
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		IRequestParameterReadWrite paramA = getVrSkbt(handle, param, kksv002201cc);

		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//集約局・中心局コード取得処理
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		IRequestParameterReadWrite paramB = getShyakkt(handle, paramA, kksv002201cc);

		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//未使用固定ＩＰアドレス取得処理
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		IRequestParameterReadWrite paramC = findFreeFixipad(handle, paramB, kksv002201cc);

		return paramC;
	}



	/**
	 * ＶＲ識別コードの設定
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite getVrSkbt(SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> kksv002201cc) throws Throwable
	{
		String svc_kei_ucwk_no = null;

		IRequestParameterReadWrite paramA = param;

		//認証ＩＤが指定されている場合（コース変更異動のための固定ＩＰアドレス払出）サービス契約内訳の検索は不要
		String isp_ninsho_id = (String)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.ISP_NINSHO_ID);
		if (isp_ninsho_id == null || 1 > isp_ninsho_id.trim().length())
		{
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			//サービス契約内訳一覧照会 S-IF 実行
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			paramA = callEKK0161B004(handle, paramA, kksv002201cc);
			
			HashMap<String, Object> kksv041301sc = (HashMap<String, Object>)paramA.getData(KKSV0413_KKSV0413OP.KKSV041301SC);
			ArrayList<?> ekk0161b004List = (ArrayList<?>)kksv041301sc.get(KKSV0413_KKSV0413OP_KKSV041301SC.EKK0161B004CBSMSG1LIST);
			if (ekk0161b004List != null && 0 < ekk0161b004List.size())
			{
				// ▼▼▼ IKK-2013-0000284 Delete Start ▼▼▼
//				HashMap<String, Object> ekk0161Map = (HashMap<String, Object>)ekk0161b004List.get(0);
				// ▲▲▲ IKK-2013-0000284 Delete End   ▲▲▲
				// ▼▼▼ IKK-2013-0000284 Add Start    ▼▼▼
				HashMap<String, Object> ekk0161Map = null;
				HashMap<String, Object> ekk0161SubMap = null;
				String svc_kei_ucwk_stat = null;
				
				for(int i = 0; i < ekk0161b004List.size(); i++)
				{
					ekk0161SubMap = (HashMap<String, Object>)ekk0161b004List.get(i);
					
					svc_kei_ucwk_stat = (String)ekk0161SubMap.get(KKSV0413_KKSV0413OP_KKSV041301SC_EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
					
					if(SVC_KEI_UCWK_STAT_910.equals(svc_kei_ucwk_stat) || SVC_KEI_UCWK_STAT_920.equals(svc_kei_ucwk_stat))
					{
						// 解約済またはキャンセル済のサービス契約内訳情報はスキップ
						continue;
					}
					else
					{
						ekk0161Map = (HashMap<String, Object>)ekk0161b004List.get(i);
					}
				}
				if(null == ekk0161Map)
				{
					throw new SCCallException(ERR_MSG, "0", 9999);
				}
				// ▲▲▲ IKK-2013-0000284 Add End      ▲▲▲

				//サービス契約内訳番号を取得
				svc_kei_ucwk_no = (String)ekk0161Map.get(KKSV0413_KKSV0413OP_KKSV041301SC_EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
			}
			else
			{
				throw new SCCallException(ERR_MSG, "0", 9999);
			}

			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			//サービス契約内訳<eo光ネット>一意照会 S-IF 実行
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			paramA = callEKK0171A010(handle, paramA, kksv002201cc, svc_kei_ucwk_no);

			HashMap<String, Object> kksv041302sc = (HashMap<String, Object>)paramA.getData(KKSV0413_KKSV0413OP.KKSV041302SC);
			ArrayList<?> ekk0171a010List = (ArrayList<?>)kksv041302sc.get(KKSV0413_KKSV0413OP_KKSV041302SC.EKK0171A010CBSMSG1LIST);
			if (ekk0171a010List != null && 0 < ekk0171a010List.size())
			{
				HashMap<String, Object> ekk0171Map = (HashMap<String, Object>)ekk0171a010List.get(0);
				
				//ＩＳＰ認証ＩＤを取得
				isp_ninsho_id = (String)ekk0171Map.get(KKSV0413_KKSV0413OP_KKSV041302SC_EKK0171A010CBSMsg1List.ISP_NINSHO_ID);
			}
			else
			{
				throw new SCCallException(ERR_MSG, "0", 9999);
			}
		}
		
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//固定ＩＰ取得種別コードの選定
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		String kotei_ip_stku_sbt_cd = null;

		//ＶＲ識別の取得
		vrSkbt  = "";
		int atPos = isp_ninsho_id.indexOf("@");
		if (atPos >= 0 && atPos < isp_ninsho_id.length())
		{
			vrSkbt = isp_ninsho_id.substring(++atPos);

			// ▼▼ ANK-2718-00-00 2016/02/09 MOD START ▼▼ 
//			// ST2-2012-0000612 2012/04/05 MOD START
//			// VR識別コード：HFAの場合、固定IP取得種別は固定で4とする
//			if (vrSkbt.equals(VR_SKBT_CD_HFA))
//			{
//				kotei_ip_stku_sbt_cd = KOTEI_IP_STKU_SBT_1G;
//			}
//			// ANK-2612-00-00 2016/01/04 ADD START
//			// VR識別コード：HF10Gの場合、固定IP取得種別は固定で5とする
//			else if(vrSkbt.equals(VR_SKBT_CD_HF10G))
//			{
//				kotei_ip_stku_sbt_cd = KOTEI_IP_STKU_SBT_10G;
//			}
//			// ANK-2612-00-00 2016/01/04 ADD END
//			
//			// その他のVR識別コードの時
//			else {
//				//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
//				//コード名称管理一覧照会 S-IF 実行
//				//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
//				paramA = callEZM0171B010(handle, paramA, kksv002201cc);
//		
//				
//				HashMap<?, ?> kksv041303sc = (HashMap<?, ?>)paramA.getData(KKSV0413_KKSV0413OP.KKSV041303SC);
//				ArrayList<?> ezm0171b010List = (ArrayList<?>)kksv041303sc.get(KKSV0413_KKSV0413OP_KKSV041303SC.EZM0171B010CBSMSG1LIST);
//				if (ezm0171b010List != null && 0 < ezm0171b010List.size())
//				{
//					for (int i = 0; i < ezm0171b010List.size(); i++)
//					{
//						HashMap<String, Object> ezm0171Map = (HashMap<String, Object>)ezm0171b010List.get(i);
//						
//						//コード区分に入っているＶＲ識別コード
//						String vr_skbt_cd = (String)ezm0171Map.get(KKSV0413_KKSV0413OP_KKSV041303SC_EZM0171B010CBSMsg1List.CD_DIV);
//						//表示順＋１ ＝ 固定ＩＰ取得種別コード
//						if (vrSkbt.equals(vr_skbt_cd))
//						{
//							Object buf = ezm0171Map.get(KKSV0413_KKSV0413OP_KKSV041303SC_EZM0171B010CBSMsg1List.DSP_JUN);
//							int foo = Integer.parseInt((String) buf);
//							kotei_ip_stku_sbt_cd = String.valueOf(++foo);
//							break;
//						}
//					}
//				}
//				else
//				{
//					throw new SCCallException(ERR_MSG, "0", 9999);
//				}
//			}
//			// ST2-2012-0000612 2012/04/05 MOD END
			
			
			// ANK-2765-00-00 ADD START
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			//サービス契約一意照会 S-IF 実行
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			paramA = callEKK0081A010(handle, paramA, kksv002201cc);
			
			// 料金コースコード
			String pcrs_cd = "";
			
			// サービス契約一覧照会 S-IFの実行結果から料金コースコードを取得する
			HashMap<String, Object> kksv041311sc = (HashMap<String, Object>)paramA.getData(KKSV0413_KKSV0413OP.KKSV041311SC);
			ArrayList<?> ekk0081a010List = (ArrayList<?>)kksv041311sc.get(KKSV0413_KKSV0413OP_KKSV041311SC.EKK0081A010CBSMSG1LIST);
			if (ekk0081a010List != null && 0 < ekk0081a010List.size())
			{
				HashMap<String, Object> ekk0081SubMap = (HashMap<String, Object>)ekk0081a010List.get(0);
				pcrs_cd  = (String)ekk0081SubMap.get(KKSV0413_KKSV0413OP_KKSV041311SC_EKK0081A010CBSMsg1List.PCRS_CD);
			}
			
			if (JKKStrConst.CD00134_A50.equals(pcrs_cd)                           // マンションタイプ グローバル １００Ｍ ＶＤＳＬ
					||JKKStrConst.CD00134_A51.equals(pcrs_cd)                     // マンションタイプ グローバル １００Ｍ ＶＤＳＬ
					||JKKStrConst.CD00134_A52.equals(pcrs_cd)                     // マンションタイプ グローバル １００Ｍ ＶＤＳＬ
					||JKKStrConst.CD00134_A53.equals(pcrs_cd)                     // マンションタイプ グローバル １００Ｍ ＶＤＳＬ
					||JKKStrConst.CD00134_A54.equals(pcrs_cd)                     // マンションタイプ グローバル １００Ｍ イーサネット
					||JKKStrConst.CD00134_A55.equals(pcrs_cd)                     // マンションタイプ グローバル １ギガ イーサネット
					||JKKStrConst.CD00134_GLB100M_PREMIUM_VDSL.equals(pcrs_cd)    // マンションタイプ グローバル １００Ｍプレミアム ＶＤＳＬ
					||JKKStrConst.CD00134_GLB100M_PREMIUM_ETHER.equals(pcrs_cd)   // マンションタイプ グローバル １００Ｍプレミアム イーサネット
					||JKKStrConst.CD00134_A79.equals(pcrs_cd)                     // マンションタイプ グローバル １００Ｍ ＤＯＣＳＩＳ
					||JKKStrConst.CD00134_A80.equals(pcrs_cd))                    // マンションタイプ グローバル １００Ｍプレミアム ＤＯＣＳＩＳ
			{
				// マンショングローバルは固定ＩＰ取得コード:2を設定 ****
				kotei_ip_stku_sbt_cd = KOTEI_IP_STKU_SBT_MF1;
			}
			else
			{
			// ANK-2765-00-00 ADD END
			
				// **** VR識別コード:HF1G, HFA, OF1G は固定IP取得コード：4を設定 ****
				if (   VR_SKBT_CD_HFA .equals(vrSkbt)
						|| VR_SKBT_CD_HF1G.equals(vrSkbt) 
						|| VR_SKBT_CD_OF1G.equals(vrSkbt) )
				{
					kotei_ip_stku_sbt_cd = KOTEI_IP_STKU_SBT_1G;
				}
				// ANK-2765-00-00 DEL START
//				// **** VR識別コード:MF1 は固定ＩＰ取得コード:2を設定 ****
//				else if ( VR_SKBT_CD_MF1.equals(vrSkbt) )
//				{
//					kotei_ip_stku_sbt_cd = KOTEI_IP_STKU_SBT_MF1;
//				}
				// ANK-2765-00-00 DEL END
				// **** VR識別コード:HF10G は固定ＩＰ取得コード:5を設定 ****
				else if ( VR_SKBT_CD_HF10G.equals(vrSkbt) )
				{
					kotei_ip_stku_sbt_cd = KOTEI_IP_STKU_SBT_10G;
				}
				// **** VR識別コードが上記以外の場合 ****
				else
				{
					// 例外をスロー
					addError(param, "EKK0171A010CBSMsg1List_err", "EA", "EKK0171A010", JPCModelConstant.RELATION_ERR, 0);
					throw new SCCallException("INVALID_RETURN_MESSAGE", String.valueOf(0), JPCModelConstant.RELATION_ERR);
				}
				// ▲▲ ANK-2718-00-00 2016/02/09 MOD END   ▲▲
			// ANK-2765-00-00 ADD START
			}
			// ANK-2765-00-00 ADD END
		}
		else
		//ＶＲ識別なし＝＝100M
		{
			kotei_ip_stku_sbt_cd = KOTEI_IP_STKU_SBT_NO_VR;
		}

		//固定ＩＰ取得種別コードを未使用固定ＩＰアドレス一覧照会の検索キーに設定
		paramA = setFindingKeyParameter(paramA, KKSV0413_KKSV0413OP_KKSV041307SC.KEY_KOTEI_IP_STKU_SBT_CD, kotei_ip_stku_sbt_cd);

		return paramA;
	}



	/**
	 * KKSV041307SC未使用固定ＩＰアドレス一覧照会マップに検索キーを設定
	 * 
	 * @param param リクエストパラメータ
	 * @param key 格納キー文字列
	 * @param val 格納する値
	 * @return 現在のリクエストパラメータ
	 * @throws RequestParameterException リクエストパラメータ操作例外
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite setFindingKeyParameter(IRequestParameterReadWrite param, String key, String val) throws RequestParameterException
	{
		//入力パラメータの準備
		HashMap<String, Object> kksv041307sc = (HashMap<String, Object>)param.getData(KKSV0413_KKSV0413OP.KKSV041307SC);
		if (kksv041307sc == null)
		{
			kksv041307sc = new HashMap<String, Object>();
			param.setData(KKSV0413_KKSV0413OP.KKSV041307SC, kksv041307sc);
		}
		
		//検索キーを設定
		kksv041307sc.put(key, val);

		return param;
	}



	/**
	 * EKK0161B004 サービス契約内訳一覧照会 S-IF により、サービス契約に付くサービス契約内訳を取得
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite callEKK0161B004(SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> kksv002201cc) throws Throwable
	{
		//入力パラメータの準備
		HashMap<String, Object> kksv041301sc = new HashMap<String, Object>();
		
		//機能コード：一覧系処理なので、機能コード‘１’を指定
		kksv041301sc.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);

		//入力キーのサービス契約番号は init メソッド内で設定済み

		//入力マップをリクエストマップにセット
		param.setData(KKSV0413_KKSV0413OP.KKSV041301SC, kksv041301sc);

		//BP-SCマッピングクラス
		KKSV0413_KKSV0413OP_EKK0161B004BSMapper mapper = new KKSV0413_KKSV0413OP_EKK0161B004BSMapper();

		// 上りマッピング
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		
		//サービスＩ／Ｆ呼出
		Map<?, ?> result = (new ServiceComponentRequestInvoker()).run(paramMap, handle);

		// 下りマッピング
		IRequestParameterReadWrite ret = mapper.editResultRP(result, param);

		// エラーチェック処理
		errChk(result);

		return ret;
	}



	/**
	 * EKK0171A010 サービス契約内訳<eo光ネット>一意照会 S-IF により、指定サービス契約内訳に関するサービス契約内訳<eo光ネット> を取得
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @param svc_kei_ucwk_no サービス契約内訳番号
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite callEKK0171A010(SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> kksv002201cc, String svc_kei_ucwk_no) throws Throwable
	{
		//入力パラメータの準備
		HashMap<String, Object> kksv041302sc = new HashMap<String, Object>();
		
		//機能コード：カレントレコード照会なので、機能コード‘２’を指定
		kksv041302sc.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_2);

		//ＫＥＹ＿サービス契約内訳番号
		kksv041302sc.put(KKSV0413_KKSV0413OP_KKSV041302SC.KEY_SVC_KEI_UCWK_NO, svc_kei_ucwk_no);

		//入力マップをリクエストマップにセット
		param.setData(KKSV0413_KKSV0413OP.KKSV041302SC, kksv041302sc);

		//BP-SCマッピングクラス
		KKSV0413_KKSV0413OP_EKK0171A010BSMapper mapper = new KKSV0413_KKSV0413OP_EKK0171A010BSMapper();

		// 上りマッピング
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		
		//サービスＩ／Ｆ呼出
		Map<?, ?> result = (new ServiceComponentRequestInvoker()).run(paramMap, handle);

		// 下りマッピング
		IRequestParameterReadWrite ret = mapper.editResultRP(result, param);

		// エラーチェック処理
		errChk(result);

		return ret;
	}



	// ANK-2765-00-00 ADD START
	/**
	 * EKK0081A010 サービス契約一意照会 S-IF により、サービス契約を取得
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite callEKK0081A010(SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> kksv002201cc) throws Throwable
	{
		
		//入力パラメータの準備
		HashMap<String, Object> kksv041311sc = new HashMap<String, Object>();
		
		// 運用日付
		unyoYmd = JCCBPCommon.getOpeDate(null);
		
		//作業項目リスト．サービス契約番号
		String svc_kei_no = (String)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.SVC_KEI_NO);
		
		//機能コード：機能コード‘２’を指定
		kksv041311sc.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_2);
		
		//サービス契約番号
		kksv041311sc.put(KKSV0413_KKSV0413OP_KKSV041311SC.KEY_SVC_KEI_NO, svc_kei_no);
		
		//予約適用年月日：運用年月日
		kksv041311sc.put(KKSV0413_KKSV0413OP_KKSV041311SC.KEY_RSV_APLY_YMD, unyoYmd);
		
		//入力マップをリクエストマップにセット
		param.setData(KKSV0413_KKSV0413OP.KKSV041311SC, kksv041311sc);

		//BP-SCマッピングクラス
		KKSV0413_KKSV0413OP_EKK0081A010BSMapper mapper = new KKSV0413_KKSV0413OP_EKK0081A010BSMapper();

		// 上りマッピング
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		
		//サービスＩ／Ｆ呼出
		Map<?, ?> result = (new ServiceComponentRequestInvoker()).run(paramMap, handle);

		// 下りマッピング
		IRequestParameterReadWrite ret = mapper.editResultRP(result, param);

		// エラーチェック処理
		errChk(result);

		return ret;
	}
	// ANK-2765-00-00 ADD END



	/**
	 * EZM0171B010 コード名称管理一覧照会 S-IF により、ＶＲ識別コード一覧を取得
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite callEZM0171B010(SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> kksv002201cc) throws Throwable
	{
		//入力パラメータの準備
		HashMap<String, Object> kksv041303sc = new HashMap<String, Object>();
		
		//機能コード：一覧照会なので、機能コード‘１’を指定
		kksv041303sc.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);

		//入力マップをリクエストマップにセット
		param.setData(KKSV0413_KKSV0413OP.KKSV041303SC, kksv041303sc);

		//BP-SCマッピングクラス
		KKSV0413_KKSV0413OP_EZM0171B010BSMapper mapper = new KKSV0413_KKSV0413OP_EZM0171B010BSMapper();

		// 上りマッピング
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		
		//サービスＩ／Ｆ呼出
		Map<?, ?> result = (new ServiceComponentRequestInvoker()).run(paramMap, handle);

		// 下りマッピング
		IRequestParameterReadWrite ret = mapper.editResultRP(result, param);

		// エラーチェック処理
		errChk(result);

		return ret;
	}



	/**
	 * 集約局・中心局コードの決定処理
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite getShyakkt(SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> kksv002201cc) throws Throwable
	{

		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//サービス契約回線内訳一覧照会 S-IF 実行
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		IRequestParameterReadWrite paramA = callEKK0241B001(handle, param);

//		String kaisen_cd = null;					//回線コード
		String mansion_bukken_no = null;			//マンション物件番号
		String kiten_hdsho_cd = null;				//起点変電所コード
		String shyakk_cd = null;					//集約局コード

		HashMap<String, Object> kksv041304sc = (HashMap<String, Object>)paramA.getData(KKSV0413_KKSV0413OP.KKSV041304SC);
		ArrayList<?> ekk0241b001List = (ArrayList<?>)kksv041304sc.get(KKSV0413_KKSV0413OP_KKSV041304SC.EKK0241B001CBSMSG1LIST);
		if (ekk0241b001List != null && 0 < ekk0241b001List.size())
		{
			HashMap<String, Object> ekk0241Map = (HashMap<String, Object>)ekk0241b001List.get(0);

// 2013/02/19 IT2-2013-0000195 add okita start
			for (Iterator iter = ekk0241b001List.iterator(); iter.hasNext();) {
				HashMap<String, Object> ekk0241TmpMap = (HashMap<String, Object>) iter.next();
				if (SVC_KEI_KAISEN_UCWK_STAT_USE.equals(ekk0241TmpMap.get(EKK0241B001CBSMsg1List.SVC_KEI_KAISEN_UCWK_STAT))) {
					ekk0241Map = ekk0241TmpMap;
					break;
				}
			}
// 2013/02/19 IT2-2013-0000195 add okita end
			
//			kaisen_cd         = (String)ekk0241Map.get(KKSV0413_KKSV0413OP_KKSV041304SC_EKK0241B001CBSMsg1List.KAISEN_CD);
			mansion_bukken_no = (String)ekk0241Map.get(KKSV0413_KKSV0413OP_KKSV041304SC_EKK0241B001CBSMsg1List.MANSION_BUKKEN_NO);
			kiten_hdsho_cd    = (String)ekk0241Map.get(KKSV0413_KKSV0413OP_KKSV041304SC_EKK0241B001CBSMsg1List.KITEN_HDSHO_CD);
			shyakk_cd         = (String)ekk0241Map.get(KKSV0413_KKSV0413OP_KKSV041304SC_EKK0241B001CBSMsg1List.SHYAKK_CD);
		}

		//集約局・中心局コード
		String shyakk_chuskk_cd = null;

		boolean isMansion = (mansion_bukken_no != null && 0 < mansion_bukken_no.trim().length());

		IRequestParameterReadWrite paramB = paramA;

		//ＶＲ識別あり、マンションタイプ？
		// ANK-2765-00-00 MOD START
		//if ((vrSkbt != null && 0 < vrSkbt.length()) && isMansion)
		if (isMansion)
		// ANK-2765-00-00 MOD END
		{
			//検索キーを設定
			HashMap<String, Object> kksv041305sc = new HashMap<String, Object>();
			kksv041305sc.put(KKSV0413_KKSV0413OP_KKSV041305SC.KEY_SHYAKK_CD, shyakk_cd);
			kksv041305sc.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
			paramA.setData(KKSV0413_KKSV0413OP.KKSV041305SC, kksv041305sc);

			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			//集約局コードをキーにして中心局コードを検索
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			paramB = callEZM0341A010(handle, paramA);

			ArrayList<?> ezm0341a010List = (ArrayList<?>)kksv041305sc.get(KKSV0413_KKSV0413OP_KKSV041305SC.EZM0341A010CBSMSG1LIST);
			if (ezm0341a010List != null && 0 < ezm0341a010List.size())
			{
				HashMap<String, Object> ezm0341Map = (HashMap<String, Object>)ezm0341a010List.get(0);
				
				//中心局コードを取得
				shyakk_chuskk_cd = (String)ezm0341Map.get(KKSV0413_KKSV0413OP_KKSV041305SC_EZM0341A010CBSMsg1List.CHUSKK_CD);
			}
		}
		else
		{
			//検索キーを設定
			HashMap<String, Object> kksv041306sc = new HashMap<String, Object>();
			kksv041306sc.put(KKSV0413_KKSV0413OP_KKSV041306SC.KEY_KITEN_HDSHO_CD, kiten_hdsho_cd);
			kksv041306sc.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
			paramA.setData(KKSV0413_KKSV0413OP.KKSV041306SC, kksv041306sc);

			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			//起点変電所コードをキーにして集約局コードを検索
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			paramB = callEZM0331A010(handle, paramA);

			ArrayList<?> ezm0331a010List = (ArrayList<?>)kksv041306sc.get(KKSV0413_KKSV0413OP_KKSV041306SC.EZM0331A010CBSMSG1LIST);
			if (ezm0331a010List != null && 0 < ezm0331a010List.size())
			{
				HashMap<String, Object> ezm0331Map = (HashMap<String, Object>)ezm0331a010List.get(0);
				
				// ▼▼ ANK-2718-00-00 2016/02/09 MOD START (コメントのみ修正 中心局 → 集約局）▼▼
				// 集約局コードを取得
				// ▲▲ ANK-2718-00-00 2016/02/09 MOD END                                       ▲▲
				shyakk_chuskk_cd = (String)ezm0331Map.get(KKSV0413_KKSV0413OP_KKSV041306SC_EZM0331A010CBSMsg1List.SHYAKK_CD);
			}
			// ▼▼ ANK-2718-00-00 2016/02/09 ADD START ▼▼
			// 起点変電所コードから集約局コードが取得できなかった場合
			else
			{
				// 例外をスロー
				addError(param, "EZM0331A010CBSMsg1List_err", "EA", "EZM0331A010", JPCModelConstant.RELATION_ERR, 0);
				throw new SCCallException("INVALID_RETURN_MESSAGE", String.valueOf(0), JPCModelConstant.RELATION_ERR);

			}
			
			//検索キーを設定
			HashMap<String, Object> kksv041305sc = new HashMap<String, Object>();
			kksv041305sc.put(KKSV0413_KKSV0413OP_KKSV041305SC.KEY_SHYAKK_CD, shyakk_chuskk_cd);
			kksv041305sc.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
			paramA.setData(KKSV0413_KKSV0413OP.KKSV041305SC, kksv041305sc);

			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			//（上記起点変電所コードをキーにして取得した）集約局コードをキーにして中心局コードを検索
			//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
			paramB = callEZM0341A010(handle, paramA);

			ArrayList<?> ezm0341a010List = (ArrayList<?>)kksv041305sc.get(KKSV0413_KKSV0413OP_KKSV041305SC.EZM0341A010CBSMSG1LIST);
			if (ezm0341a010List != null && 0 < ezm0341a010List.size())
			{
				HashMap<String, Object> ezm0341Map = (HashMap<String, Object>)ezm0341a010List.get(0);
				
				//中心局コードを取得
				shyakk_chuskk_cd = (String)ezm0341Map.get(KKSV0413_KKSV0413OP_KKSV041305SC_EZM0341A010CBSMsg1List.CHUSKK_CD);
			}
			// 集約局コードから中心局コードを取得できなかった場合
			else
			{
				// 例外をスロー
				addError(param, "EZM0341A010CBSMsg1List_err", "EA", "EZM0341A010", JPCModelConstant.RELATION_ERR, 0);
				throw new SCCallException("INVALID_RETURN_MESSAGE", String.valueOf(0), JPCModelConstant.RELATION_ERR);
			}
				
			// ▲▲ ANK-2718-00-00 2016/02/09 ADD END   ▲▲
		}

		//集約局・中心局コードを未使用固定ＩＰアドレス一覧照会の検索キーに設定
		return setFindingKeyParameter(paramB, KKSV0413_KKSV0413OP_KKSV041307SC.KEY_SHYAKK_CHUSKK_CD, shyakk_chuskk_cd);
	}



	/**
	 * EKK0241B001 サービス契約回線内訳一覧照会 S-IF により、サービス契約が付くサービス契約回線内訳を取得
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite callEKK0241B001(SessionHandle handle,
			IRequestParameterReadWrite param) throws Throwable
	{
//		//入力パラメータの準備
//		HashMap<String, Object> kksv041304sc = new HashMap<String, Object>();
//		
//		//機能コード：一覧照会なので、機能コード‘１’を指定
//		kksv041304sc.put(JCMConstants.FUNC_CODE_KEY, JPCModelConstant.FUNC_CD_1);
//
//		//入力マップをリクエストマップにセット
//		param.setData(KKSV0413_KKSV0413OP.KKSV041304SC, kksv041304sc);

		//BP-SCマッピングクラス
		KKSV0413_KKSV0413OP_EKK0241B001BSMapper mapper = new KKSV0413_KKSV0413OP_EKK0241B001BSMapper();

		// 上りマッピング
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		
		//サービスＩ／Ｆ呼出
		Map<?, ?> result = (new ServiceComponentRequestInvoker()).run(paramMap, handle);

		// 下りマッピング
		IRequestParameterReadWrite ret = mapper.editResultRP(result, param);

		// エラーチェック処理
		errChk(result);

		return ret;
	}



	/**
	 * EZM0331A010 起点変電所一意照会 S-IF により、サービス契約回線内訳の起点変電所コードに当たる集約局コードを照会
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite callEZM0331A010(SessionHandle handle,
			IRequestParameterReadWrite param) throws Throwable
	{
		//BP-SCマッピングクラス
		KKSV0413_KKSV0413OP_EZM0331A010BSMapper mapper = new KKSV0413_KKSV0413OP_EZM0331A010BSMapper();

		// 上りマッピング
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		
		//サービスＩ／Ｆ呼出
		Map<?, ?> result = (new ServiceComponentRequestInvoker()).run(paramMap, handle);

		// 下りマッピング
		IRequestParameterReadWrite ret = mapper.editResultRP(result, param);

		// エラーチェック処理
		errChk(result);

		return ret;
	}



	/**
	 * EZM0341A010 集約局一意照会 S-IF により、サービス契約回線内訳の集約局コードに当たる中心局コードを照会
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite callEZM0341A010(SessionHandle handle,
			IRequestParameterReadWrite param) throws Throwable
	{
		//BP-SCマッピングクラス
		KKSV0413_KKSV0413OP_EZM0341A010BSMapper mapper = new KKSV0413_KKSV0413OP_EZM0341A010BSMapper();

		// 上りマッピング
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		
		//サービスＩ／Ｆ呼出
		Map<?, ?> result = (new ServiceComponentRequestInvoker()).run(paramMap, handle);

		// 下りマッピング
		IRequestParameterReadWrite ret = mapper.editResultRP(result, param);

		// エラーチェック処理
		errChk(result);

		return ret;
	}



	/**
	 * 空き固定ＩＰアドレスの取得
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite findFreeFixipad(SessionHandle handle,
			IRequestParameterReadWrite param,
			HashMap<String, Object> kksv002201cc) throws Throwable
	{
		//ＫＥＹ＿基準年月日
		String use_sta_ymd = (String)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.USE_STAT_YMD);
		
		//集約局・中心局コードを未使用固定ＩＰアドレス一覧照会の検索キーに設定
		IRequestParameterReadWrite paramA = setFindingKeyParameter(param, KKSV0413_KKSV0413OP_KKSV041307SC.KEY_KJN_YMD, use_sta_ymd);

		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//未使用固定IPアドレス一覧照会 S-IF 実行
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		IRequestParameterReadWrite paramB = callEZM0101B030(handle, paramA);

		HashMap<String, Object> kksv041307sc = (HashMap<String, Object>) paramB.getData(KKSV0413_KKSV0413OP.KKSV041307SC);
		ArrayList<?> ezm0101bxxxList = (ArrayList<?>) kksv041307sc.get(KKSV0413_KKSV0413OP_KKSV041307SC.EZM0101B030CBSMSG1LIST);
		if (ezm0101bxxxList == null || 1 > ezm0101bxxxList.size())
		{
			addError(param, "EZM0101B030CBSMsg1List_err", "EA", "EZM0101B030", JPCModelConstant.RELATION_ERR, 0);
			throw new SCCallException("INVALID_RETURN_MESSAGE", String.valueOf(0), JPCModelConstant.RELATION_ERR);
		}

		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		//業務パラメータ一意照会 S-IF により、ネットマスク値を取得
		//＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋＋
		return callEZM0321A010(handle, paramB);
	}



	/**
	 * EZM0101B030 未使用固定IPアドレス一覧照会 S-IF により、取得一覧の１行目を取得
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite callEZM0101B030(SessionHandle handle,
			IRequestParameterReadWrite param) throws Throwable
	{
		//BP-SCマッピングクラス
		KKSV0413_KKSV0413OP_EZM0101B030BSMapper mapper = new KKSV0413_KKSV0413OP_EZM0101B030BSMapper();

		// 上りマッピング
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		
		//サービスＩ／Ｆ呼出
		Map<?, ?> result = (new ServiceComponentRequestInvoker()).run(paramMap, handle);

		// 下りマッピング
		IRequestParameterReadWrite ret = mapper.editResultRP(result, param);

		// エラーチェック処理
		errChk(result);

		return ret;
	}



	
	/**
	 * EZM0321A010 業務パラメータ一意照会 S-IF により、ネットマスク値を取得する。
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite callEZM0321A010(SessionHandle handle,
			IRequestParameterReadWrite param) throws Throwable
	{
		//BP-SCマッピングクラス
		KKSV0413_KKSV0413OP_EZM0321A010BSMapper mapper = new KKSV0413_KKSV0413OP_EZM0321A010BSMapper();

		// 上りマッピング
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		
		//サービスＩ／Ｆ呼出
		Map<?, ?> result = (new ServiceComponentRequestInvoker()).run(paramMap, handle);

		// 下りマッピング
		IRequestParameterReadWrite ret = mapper.editResultRP(result, param);

		// エラーチェック処理
		errChk(result);

		return ret;
	}



	/**
	 * 固定ＩＰアドレス利用登録処理<br/>
	 * 次の処理を行う<br/>
	 * <br/>
	 * <ul>
	 * <li>指定固定ＩＰアドレスのエイジング登録</li>
	 * <li>指定固定ＩＰアドレスを利用期間中に更新</li>
	 * </ul>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite runUseFixipad(
			SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> kksv002201cc)
	throws Throwable
	{
		//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		//エイジング対象登録
		//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		IRequestParameterReadWrite paramBuf = callEZM0111D010(handle, param, kksv002201cc);

		//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		//固定ＩＰアドレス変更
		//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		return callEZM0101C010(handle, paramBuf, kksv002201cc);
	}



	/**
	 * 操作コマンドが‘both’の場合に‘post’処理用マップを編集
	 * 
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws RequestParameterException リクエストパラメータ操作例外
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite preparePostProcessParameter(
			IRequestParameterReadWrite param,
			HashMap<String, Object> kksv002201cc) throws RequestParameterException
	{
		HashMap<String, Object> kksv041307sc = (HashMap<String, Object>)param.getData(KKSV0413_KKSV0413OP.KKSV041307SC);

		ArrayList<?> ezm0101bxxxList = (ArrayList<?>)kksv041307sc.get(KKSV0413_KKSV0413OP_KKSV041307SC.EZM0101B030CBSMSG1LIST);
		if (ezm0101bxxxList != null && 0 < ezm0101bxxxList.size())
		{
			HashMap<String, Object> ezm0101Map = (HashMap<String, Object>)ezm0101bxxxList.get(0);

			//固定ＩＰアドレス
			String fixipad = (String)ezm0101Map.get(KKSV0413_KKSV0413OP_KKSV041307SC_EZM0101B030CBSMsg1List.KOTEI_IP_AD);
			kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.FIXIPAD_IN, fixipad);
	
			//使用回数
			String use_cnt = (String)ezm0101Map.get(KKSV0413_KKSV0413OP_KKSV041307SC_EZM0101B030CBSMsg1List.USE_CNT);
			//＋１する
			int nUseCnt = Integer.parseInt(use_cnt);
			use_cnt = String.valueOf(++nUseCnt);
			kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.USE_CNT_IN, use_cnt);
	
			//ＺＭ０１０１更新年月日時分秒
			String upd_dtm = (String)ezm0101Map.get(KKSV0413_KKSV0413OP_KKSV041307SC_EZM0101B030CBSMsg1List.UPD_DTM);
			Map<?, ?> workAreaMap = param.getMappingWorkArea();
			HashMap<String, Object> workMap = (HashMap<String, Object>)workAreaMap.get(KKSV0413_KKSV0413OP.WORK);
			workMap.put(KKSV0413_KKSV0413OP_WORK.ZM0101_UPD_DTM, upd_dtm);
		}

		//集約局・中心局コード
		String shyakk_chuskk_cd = (String)kksv041307sc.get(KKSV0413_KKSV0413OP_KKSV041307SC.KEY_SHYAKK_CHUSKK_CD);
		kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.SHYAKK_CHUSKK_CD_IN, shyakk_chuskk_cd);

		//固定ＩＰ取得種別コード
		String fixip_stku_sbt_cd = (String)kksv041307sc.get(KKSV0413_KKSV0413OP_KKSV041307SC.KEY_KOTEI_IP_STKU_SBT_CD);
		kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.KOTEI_IP_STKU_SBT_CD_IN, fixip_stku_sbt_cd);

		return param;
	}



	/**
	 * 出力結果リストの編集
	 * 
	 * @param magicWord 操作コマンドget/post/both
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws RequestParameterException リクエストパラメータ操作例外
	 */
	@SuppressWarnings("unchecked")
	private IRequestParameterReadWrite editResultList(
			String magicWord, IRequestParameterReadWrite param, HashMap<String, Object> kksv002201cc)
	throws RequestParameterException
	{
		//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		//出力データをマップに格納
		//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
		HashMap<String, Object> resultMap = prepareOutputArrayList(kksv002201cc);

		//利用登録のみの指示でない場合（get OR both）
		if (!JKKFIXIPADCC_POST.equals(magicWord))
		{
			HashMap<String, Object> kksv041307sc = (HashMap<String, Object>)param.getData(KKSV0413_KKSV0413OP.KKSV041307SC);

			//集約局・中心局コード
			String shyakk_chuskk_cd = (String)kksv041307sc.get(KKSV0413_KKSV0413OP_KKSV041307SC.KEY_SHYAKK_CHUSKK_CD);
			resultMap.put(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.SHYAKK_CHUSKK_CD, shyakk_chuskk_cd);

			//固定ＩＰ取得種別コード
			String fixip_stku_sbt_cd = (String)kksv041307sc.get(KKSV0413_KKSV0413OP_KKSV041307SC.KEY_KOTEI_IP_STKU_SBT_CD);
			resultMap.put(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.KOTEI_IP_STKU_SBT_CD, fixip_stku_sbt_cd);

			ArrayList<?> ezm0101bxxxList = (ArrayList<?>)kksv041307sc.get(KKSV0413_KKSV0413OP_KKSV041307SC.EZM0101B030CBSMSG1LIST);
			if (ezm0101bxxxList != null && 0 < ezm0101bxxxList.size())
			{
				HashMap<String, Object> ezm0101Map = (HashMap<String, Object>)ezm0101bxxxList.get(0);

				//固定ＩＰアドレス（ＯＵＴ）
				String fixipad = (String)ezm0101Map.get(KKSV0413_KKSV0413OP_KKSV041307SC_EZM0101B030CBSMsg1List.KOTEI_IP_AD);
				resultMap.put(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.FIXIPAD, fixipad);

				//更新年月日時分秒（固定ＩＰアドレス）
				String upd_dtm = (String)ezm0101Map.get(KKSV0413_KKSV0413OP_KKSV041307SC_EZM0101B030CBSMsg1List.UPD_DTM);
				resultMap.put(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.ZM0101_UPD_DTM, upd_dtm);

				//使用回数
				String use_cnt = (String)ezm0101Map.get(KKSV0413_KKSV0413OP_KKSV041307SC_EZM0101B030CBSMsg1List.USE_CNT);
				resultMap.put(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.USE_CNT, use_cnt);
			}

			HashMap<String, Object> kksv041308sc = (HashMap<String, Object>)param.getData(KKSV0413_KKSV0413OP.KKSV041308SC);
			ArrayList<?> ezm0321a010List = (ArrayList<?>)kksv041308sc.get(KKSV0413_KKSV0413OP_KKSV041308SC.EZM0321A010CBSMSG1LIST);
			if (ezm0321a010List != null && 0 < ezm0321a010List.size())
			{
				HashMap<String, Object> ezm0321Map = (HashMap<String, Object>)ezm0321a010List.get(0);

				//ネットマスク
				String netmask = (String)ezm0321Map.get(KKSV0413_KKSV0413OP_KKSV041308SC_EZM0321A010CBSMsg1List.WORK_PARAM_SETTE_VALUE);
				resultMap.put(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.NETMASK, netmask);
			}

			HashMap<String, Object> kksv041301sc = (HashMap<String, Object>)param.getData(KKSV0413_KKSV0413OP.KKSV041301SC);
			if (kksv041301sc != null)		//ＩＳＰ認証ＩＤが指定された場合はサービス契約内訳は検索しないからパス
			{
				ArrayList<?> ekk0161a010List = (ArrayList<?>)kksv041301sc.get(KKSV0413_KKSV0413OP_KKSV041301SC.EKK0161B004CBSMSG1LIST);
				if (ekk0161a010List != null && 0 < ekk0161a010List.size())
				{
					// ▼▼▼ IKK-2013-0000284 Delete Start ▼▼▼
//					HashMap<String, Object> ekk0161Map = (HashMap<String, Object>)ekk0161a010List.get(0);
					// ▲▲▲ IKK-2013-0000284 Delete End   ▲▲▲
					// ▼▼▼ IKK-2013-0000284 Add Start    ▼▼▼
					String svc_kei_ucwk_stat = null;
					HashMap<String, Object> ekk0161Map = null;
					HashMap<String, Object> ekk0161SubMap = null;
					for(int i = 0; i < ekk0161a010List.size(); i++)
					{
						ekk0161SubMap = (HashMap<String, Object>)ekk0161a010List.get(i);
					
						svc_kei_ucwk_stat = (String)ekk0161SubMap.get(KKSV0413_KKSV0413OP_KKSV041301SC_EKK0161B004CBSMsg1List.SVC_KEI_UCWK_STAT);
						
						if(!(SVC_KEI_UCWK_STAT_910.equals(svc_kei_ucwk_stat) || SVC_KEI_UCWK_STAT_920.equals(svc_kei_ucwk_stat)))
						{
							ekk0161Map = ekk0161SubMap;
						}
					}
					// ▲▲▲ IKK-2013-0000284 Add End      ▲▲▲
	
					//サービス契約内訳番号
					String svc_kei_ucwk_no = (String)ekk0161Map.get(KKSV0413_KKSV0413OP_KKSV041301SC_EKK0161B004CBSMsg1List.SVC_KEI_UCWK_NO);
					resultMap.put(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.SVC_KEI_UCWK_NO, svc_kei_ucwk_no);
	
					//ＫＫ０１６１世代登録年月日時分秒
					String gene_add_dtm = (String)ekk0161Map.get(KKSV0413_KKSV0413OP_KKSV041301SC_EKK0161B004CBSMsg1List.GENE_ADD_DTM);
					resultMap.put(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.KK0161_GENE_ADD_DTM, gene_add_dtm);
					
					// TG1-2013-0000421 2013/05/30 ADD START
					//サービス契約内訳ステータス
					resultMap.put(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.SVC_KEI_UCWK_STAT, svc_kei_ucwk_stat);
					// TG1-2013-0000421 2013/05/30 ADD END
				}
			}
			HashMap<String, Object> kksv041304sc = (HashMap<String, Object>)param.getData(KKSV0413_KKSV0413OP.KKSV041304SC);
			ArrayList<?> ekk0241b001List = (ArrayList<?>)kksv041304sc.get(KKSV0413_KKSV0413OP_KKSV041304SC.EKK0241B001CBSMSG1LIST);
			if (ekk0241b001List != null && 0 < ekk0241b001List.size())
			{
				HashMap<String, Object> ekk251Map = (HashMap<String, Object>)ekk0241b001List.get(0);

				//サービス契約回線内訳番号
				String svc_kkei_kaisen_ucwk_no = (String)ekk251Map.get(KKSV0413_KKSV0413OP_KKSV041304SC_EKK0241B001CBSMsg1List.SVC_KEI_KAISEN_UCWK_NO);
				resultMap.put(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.SVC_KEI_KAISEN_UCWK_NO, svc_kkei_kaisen_ucwk_no);
			}
		}

		//取得のみの指示でない場合（post OR both）
		if (!JKKFIXIPADCC_GET.equals(magicWord))
		{
			//更新年月日時分秒（固定ＩＰアドレス）
			Map<?, ?> workAreaMap = param.getMappingWorkArea();
			HashMap<String, Object> workMap = (HashMap<String, Object>)workAreaMap.get(KKSV0413_KKSV0413OP.WORK);
			String zm0101_upd_dtm = (String)workMap.get(KKSV0413_KKSV0413OP_WORK.ZM0101_UPD_DTM);
			resultMap.put(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.ZM0101_UPD_DTM, zm0101_upd_dtm);
			//エイジング番号
			HashMap<String, Object> kksv041309sc = (HashMap<String, Object>)param.getData(KKSV0413_KKSV0413OP.KKSV041309SC);
			String aging_no = (String)kksv041309sc.get(KKSV0413_KKSV0413OP_KKSV041309SC.AGING_NO);
			resultMap.put(KKSV0022_KKSV0022OP_KKSV002201CC_fixipad_hradsi_list.AGING_NO, aging_no);
		}

		return param;
	}



	/**
	 * 出力用 ArrayList の準備
	 * 
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 結果書き出し用HashMap
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> prepareOutputArrayList(HashMap<String, Object> kksv002201cc)
	{
		ArrayList<HashMap<String, Object>> childList = 
			(ArrayList<HashMap<String, Object>>)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.FIXIPAD_HRADSI_LIST);
		if (childList == null)
		{
			childList = new ArrayList<HashMap<String, Object>>();
			kksv002201cc.put(KKSV0022_KKSV0022OP_KKSV002201CC.FIXIPAD_HRADSI_LIST, childList);
		}
		
		HashMap<String, Object> resultMap = null;
		if (0 < childList.size())
		{
			resultMap = childList.get(0);
		}
		else
		{
			resultMap = new HashMap<String, Object>();
			childList.add(resultMap);
		}

		return resultMap;
	}



	/**
	 * エイジング対象登録サービスＩ／Ｆ呼出処理
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite callEZM0111D010(
			SessionHandle handle, IRequestParameterReadWrite param, HashMap<String, Object> kksv002201cc)
	throws Throwable
	{
		//入力パラメータの準備
		HashMap<String, Object> kksv041309sc = new HashMap<String, Object>();
		
		//機能コード：更新処理なので、上位から指定された機能コードを使用
		kksv041309sc.put(JCMConstants.FUNC_CODE_KEY, functionCode);
		//エイジング種別コード
		kksv041309sc.put(KKSV0413_KKSV0413OP_KKSV041309SC.AGING_SBT_CD, AGING_SBT_CD_FIXIPAD);
		//エイジング対象値
		String fixipad = (String)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.FIXIPAD_IN);
		kksv041309sc.put(KKSV0413_KKSV0413OP_KKSV041309SC.AGING_TG_VALUE, fixipad);
		//使用開始年月日時分秒
// 2012/08/10 TAI-2012-0000061 del start
//		String dtm = nowTimestamp();
//		kksv041309sc.put(KKSV0413_KKSV0413OP_KKSV041309SC.USE_STA_DTM, unyoYmd + dtm);
// 2012/08/10 TAI-2012-0000061 del end
		
		//入力マップをリクエストマップにセット
		param.setData(KKSV0413_KKSV0413OP.KKSV041309SC, kksv041309sc);

		//BP-SCマッピングクラス
		KKSV0413_KKSV0413OP_EZM0111D010BSMapper mapper = new KKSV0413_KKSV0413OP_EZM0111D010BSMapper();

		// 上りマッピング
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		
		//サービスＩ／Ｆ呼出
		Map<?, ?> result = (new ServiceComponentRequestInvoker()).run(paramMap, handle);

		// 下りマッピング
		IRequestParameterReadWrite ret = mapper.editResultRP(result, param);

		// エラーチェック処理
		errChk(result);

		return ret;
	}



	/**
	 * 固定ＩＰアドレス変更サービスＩ／Ｆ呼出処理
	 * 
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param kksv002201cc KKSV002201CC固定ＩＰアドレス払出マップ
	 * @return 現在のリクエストパラメータ
	 * @throws Throwable 各例外
	 */
	private IRequestParameterReadWrite callEZM0101C010(SessionHandle handle,
			IRequestParameterReadWrite param, HashMap<String, Object> kksv002201cc) throws Throwable
	{
		//入力パラメータの準備
		HashMap<String, Object> kksv041310sc = new HashMap<String, Object>();
		
		//機能コード：更新処理なので、上位から指定された機能コードを使用
		kksv041310sc.put(JCMConstants.FUNC_CODE_KEY, functionCode);

		//固定ＩＰアドレス
		String fixipad = (String)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.FIXIPAD_IN);
		kksv041310sc.put(KKSV0413_KKSV0413OP_KKSV041310SC.KOTEI_IP_AD, fixipad);
		//集約局・中心局コード
		String shyakk_chuskk_cd = (String)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.SHYAKK_CHUSKK_CD_IN);
		kksv041310sc.put(KKSV0413_KKSV0413OP_KKSV041310SC.SHYAKK_CHUSKK_CD, shyakk_chuskk_cd);
		//固定ＩＰアドレス適用開始年月日
		String tsta_ymd = (String)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.USE_STAT_YMD);
		kksv041310sc.put(KKSV0413_KKSV0413OP_KKSV041310SC.KOTEI_IP_AD_TSTAYMD, tsta_ymd);
		//固定ＩＰアドレス適用終了年月日
		String tend_ymd = (String)(new JKKejbEditYmdInit()).convEndYmdInitFix();
		kksv041310sc.put(KKSV0413_KKSV0413OP_KKSV041310SC.KOTEI_IP_AD_TENDYMD, tend_ymd);
		//使用回数
		String use_cnt = (String)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.USE_CNT_IN);
		kksv041310sc.put(KKSV0413_KKSV0413OP_KKSV041310SC.USE_CNT, use_cnt);
		//固定ＩＰ取得種別コード
		String fixip_stku_sbt_cd = (String)kksv002201cc.get(KKSV0022_KKSV0022OP_KKSV002201CC.KOTEI_IP_STKU_SBT_CD_IN);
		kksv041310sc.put(KKSV0413_KKSV0413OP_KKSV041310SC.KOTEI_IP_STKU_SBT_CD, fixip_stku_sbt_cd);


		//入力マップをリクエストマップにセット
		param.setData(KKSV0413_KKSV0413OP.KKSV041310SC, kksv041310sc);

		//BP-SCマッピングクラス
		KKSV0413_KKSV0413OP_EZM0101C010BSMapper mapper = new KKSV0413_KKSV0413OP_EZM0101C010BSMapper();

		// 上りマッピング
		HashMap<String, Object> paramMap = mapper.editInMsg(param);
		
		//サービスＩ／Ｆ呼出
		Map<?, ?> result = (new ServiceComponentRequestInvoker()).run(paramMap, handle);

		// 下りマッピング
		IRequestParameterReadWrite ret = mapper.editResultRP(result, param);

		// エラーチェック処理
		errChk(result);

		return ret;
	}



	/**
	 * 現在時刻の文字列を返す
	 * 
	 * @return HHmmssSSS形式の時刻文字列
	 */
	public static String nowTimestamp()
	{
// 2012/08/10 TAI-2012-0000061 del start
//		SimpleDateFormat fmt = new SimpleDateFormat("HHmmssSSS");
//		Calendar cal = Calendar.getInstance();
//		return fmt.format(cal.getTime());
// 2012/08/10 TAI-2012-0000061 del end
// 2012/08/10 TAI-2012-0000061 add start
		return (JCCBPCommon.getSysDateTimeStamp()).substring(8);
// 2012/08/10 TAI-2012-0000061 add end
	}



	/**
	 * チェック処理<br>
	 * サービスコンポーネント実行用CAANMsgを返却します。<br>
	 * <br>
	 * 
	 * @param handle セッションハンドル
	 * @param param (I) 業務データ取得用I/F
	 * @param fixedText (I) ユーザ定義文字列
	 * @return サービスコンポーネント実行用CAANMsg
	 * @exception Throwableがスローされます 。
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		return null;
	}



	/**
	 * サービスインターフェイス処理結果(エラー情報)の取得<br>
	 * 業務データ取得・書込用I/Fをそのまま返却します。<br>
	 * <br>
	 * @param param デルグループ、コントロールマップを含むパラメータオブジェクト
	 * @param templates CAANMsgクラス配列
	 * @param returnCode リターンコード
	 * @return 業務データ取得・書込用I/F
	 * @throws Throwable
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param,
			CAANMsg[] templates, int returnCode) throws Throwable
	{
		return param;
	}



	/**
	 * エラーチェック処理
	 * 
	 * @param msgList サービスインタフェース実行結果
	 * return void
	 * @throws SCCallException 
	 */
	private void errChk(Map<?, ?> msgList) 
	throws SCCallException
	{
		CAANMsg[] templates = (CAANMsg[])msgList.get(JCMConstants.TEMPLATE_LIST_KEY);
		CAANMsg template = templates[0];

		// リターンコード取得
		int returnCode = (Integer)msgList.get(JCMConstants.RET_CD_INT_KEY);
		
		// ステータス
		int templateStatus = template.getInt(JCMConstants.STATUS_INT_KEY);
		
		if ((0 != returnCode) || (0 != templateStatus))
		{
			throw new SCCallException(ERR_MSG, String.valueOf(returnCode), templateStatus);
		}
	}

	/**
	 * CCで検知したエラー情報を呼び出し元に通知します。
	 * @param param パラメータ
	 * @param itemName エラーの起こった項目名
	 * @param errorLevel Eから始まるエラーレベル
	 * @param ifId エラーが起こったことにするインターフェイスＩＤ
	 * @throws RequestParameterException 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public static void addError(IRequestParameterReadWrite param, String itemName, String errorLevel, String ifId, int status, int returnCode) throws RequestParameterException
	{
		List<Map<String, Object>> errors = null;
		Object errorInfos = param.getControlMapData(SCControlMapKeys.ERROR_INFO);
		if (errorInfos == null)
		{
			errors = new ArrayList<Map<String, Object>>();
			param.setControlMapData(SCControlMapKeys.ERROR_INFO, errorInfos);
		}
		else
		{
			errors = (List<Map<String, Object>>)errorInfos;
		}
		
		String recentryErrorStatusString = (String)param.getControlMapData(SCControlMapKeys.RETURN_CODE);
		Integer recentryErrorStatus = 0;
		try
		{
			if (recentryErrorStatusString != null)
			{
				recentryErrorStatus = Integer.parseInt(recentryErrorStatusString);
			}
		} catch (NumberFormatException e)
		{
		}
		if (status > recentryErrorStatus)
		{
			String formatStatus = String.format("%1$04d", status);
			String message = JCMAPLConstMgr.getString("RETURN_MESSAGE_" + formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_CODE, formatStatus);
			param.setControlMapData(SCControlMapKeys.RETURN_MESSAGE, message);	
		}

		Map<String, String> itemCheckErrorMap = new HashMap<String, String>();
		itemCheckErrorMap.put(itemName, errorLevel);
		
		Map<String, Object> errorInfoMap = new HashMap<String, Object>();
		errorInfoMap.put(ErrorInfoMapKeys.ITEM_CHECK_ERRORS, itemCheckErrorMap);
		errorInfoMap.put(ErrorInfoMapKeys.TEMPLATE_ID, ifId);
		errorInfoMap.put(ErrorInfoMapKeys.STATUS, status);
		errorInfoMap.put(ErrorInfoMapKeys.RETURN_CODE, returnCode);
		
		errors.add(errorInfoMap);
	}

}
