/*******************************************************************************
* All Rights reserved,Copyright (c) K-Opticom
********************************************************************************
*＜プログラム内容＞
* システム名        ：eo顧客基幹システム
* モジュール名      ：JKKAdchgCheckerCC
* ソースファイル名  ：JKKAdchgCheckerCC.java
* 作成者            ：富士通
* 日付              ：2012年12月27日
*＜機能概要＞
* 住所変更機能 チェック部品
*＜修正履歴＞
*   バージョン    修正日      修正者      修正内容
*   v8.00.00      2014/04/03  FJ)星野     OM-2014-0001301対応
*   v8.01.00      2014/04/07  FJ)星野     OM-2014-0001369対応
*   v9.00.00      2014/04/30  FJ)北谷     ANK-2056-00-00対応
*   v9.01.00      2014/08/12  FJ)田中     OM-2014-0002604対応
 * v32.00.00      2017/06/15  FJ)江藤     【OM-2017-0000234】「番ポ工事未完了の為、住所変更確定できません」のメッセージ表示し住所変更確定できない不具合対応
 * v32.01.00      2017/06/09  FJ)澤田     【ANK-3149-04-00】セキュリティーパック導入
 * v66.00.00	  2023/03/20  FJ)藤本涼	  【ANK-4371-00-00】新設無し住所変更登録対応

********************************************************************************/
package com.fujitsu.futurity.bp.custom.common;

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.JKKAdchgConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKAdchgInitDspConstCC;
import com.fujitsu.futurity.bp.custom.constant.JKKSvcConst;
import com.fujitsu.futurity.bp.x21.bpm.ServiceComponentRequestInvoker;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JKKStrConst;
import eo.common.util.JKKStringUtil;
import eo.ejb.cbs.cbsmsg.EDK0011B020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EDK0011B090CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0161A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0341A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0351B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0401B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0451A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0451B002CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2091B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2101B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK2441B001CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0011A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKU0011B050CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0121A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EZM0301A010CBSMsg1List;

/**
 * 住所変更機能 チェック部品クラス
 * @author FJ
 *
 */
public class JKKAdchgCheckerCC extends AbstractCommonComponent 
{

	//--------------------------------------------------
	// チェック結果
	//--------------------------------------------------
	/** チェックＯＫ  : 1 */
	private static final String CHECK_OK = "1";
	/** チェックエラー: 0 */
	private static final String CHECK_ERR = "0";
	
	//--------------------------------------------------
	// チェック
	//--------------------------------------------------
	/** 異動機器状態チェック */
	private static final String CHK_IDO_KIK_STAT = "chk_ido_kiki_stat_result";
	
	/** セッションハンドル保持域 */
	private static ThreadLocal<SessionHandle> keepSesHandle = new ThreadLocal<SessionHandle>()
	{
		// 保持域への設定はinitialValue()ではなくset()を使用する為、
		// initialValue()は実装しない
	};
	//ANK-3149-04-00 ADD START
	/** 住所変更ステータス：完了済（003） */
	private static final String ADCHG_STAT_COMPLETE = "003";
	//ANK-3149-04-00 ADD END
	// ANK-4371-00-00 ADD START
	/** 新設工事有無：有（1） */
	private static final String NSKJ_UM_1 = "1";
	/** 新設工事有無：無（0） */
	private static final String NSKJ_UM_0 = "0";
	// ANK-4371-00-00 ADD END
	/**
	 * コンストラクタ.
	 * <br>
	 */
	public JKKAdchgCheckerCC() {
	}
	

	/**
	 * <dl>
	 * <dt>処理概要：
	 * <dd>デバッグログを出力します<BR>
	 * <dt>処理補足：
	 * <dd>
	 * </dl>
	 * 
	 * @param dumpObj 出力するオブジェクト
	 */
	private void printlnEjbLog(Object dumpObj) {
		JSYejbLog.println(JSYejbLog.DEBUG, this.getClass(), dumpObj, null, null, null);
	}

	/**
	 * 電波障害案件存在チェック処理.
	 * 電障コードを元に電波障害案件一意照会を行う。
	 * 検索結果が０件の場合、返却マップ・"dmps_check_result"に"0"を設定する。
	 * 正常の場合は、返却マップ・"dmps_check_result"に"1"を設定する。
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite dmpsExistsCheck( SessionHandle handle, IRequestParameterReadWrite param, String fixedText ) throws Exception
	{
// OM-2013-0004303対応 20131120 星野 ADD START
		try {
// OM-2013-0004303対応 20131120 星野 ADD END
			printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.dempaShogaiExistsCheck() start");
		
			/** 事前準備 */
			HashMap<String, Object> reqMap;
			HashMap<String, String> condMap = new HashMap<String, String>();
			HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
			Map<?, ?> resMap;
	
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			// 住所変更登録CCマッピングクラスインスタンスを取得
			JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
			
			// SCリクエストInvokerを取得
			ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
	
			// 判定結果初期化
			paramMap.put( "dmps_check_result", "1" );
			
			// 電障コードがある場合処理を行う。
			String denpaShogaiCd = (String)paramMap.get( JKKAdchgConstCC.PARAM_KEY_DMPS_ANKEN_NO );
			printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.dempaShogaiExistsCheck() 電障コード＝" + denpaShogaiCd);
			
			if( JKKStringUtil.isNullBlank(denpaShogaiCd) ){
				// 未入力なのでチェックせずにリターン。
				printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.dempaShogaiExistsCheck() 電障コードが未入力のため、チェック終了");
				return param;
			}
	
			// EKK0581A010  電波障害案件一意照会
			condMap.put( JKKAdchgMapperCC.COND_KEY_DMPS_ANKEN_NO, denpaShogaiCd );
			
			reqMap = mapper.setEKK0581A010( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			HashMap<String, Object> kk0581_a010_map = mapper.getEKK0581A010( param, fixedText, resMap );
			mapper.scResultCheck( param );
	
			// 検索０件の場合、判定結果に０をセット
			if (kk0581_a010_map.isEmpty()) {
				// ０件
				printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.dempaShogaiExistsCheck() EKK0581A010  電波障害案件一意照会が0件なので結果マップに0を設定。");
				paramMap.put( "dmps_check_result", "0" );
			}
	
			printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.dempaShogaiExistsCheck() end");
			return param;
		
// OM-2013-0004303対応 20131120 星野 ADD START
		} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}

// OM-2013-0004303対応 20131120 星野 ADD END
	}

	/**
	 * 住所変更登録（1周目）チェック処理.
	 * 住所変更本登録（1周目）のチェックを行う.
	 * <br>
	 * @param   handle     セッションハンドル
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite honCmt1stChecker( SessionHandle handle, IRequestParameterReadWrite param, String fixedText ) throws Exception
	{
// OM-2013-0004303対応 20131120 星野 ADD START
		try {
// OM-2013-0004303対応 20131120 星野 ADD END
		
			printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.honCmt1stChecker() start");
		
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
	
			// 判定結果初期化
			paramMap.put( "check_result", CHECK_OK );
	
			/** 異動機器状態チェック */
			if (!idoKikiStatusCheck( param, fixedText )) {
				// チェックエラー
				paramMap.put( "check_result", CHECK_ERR );
			}
	
			printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.honCmt1stChecker() end");
			return param;
		
// OM-2013-0004303対応 20131120 星野 ADD START
		} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}

// OM-2013-0004303対応 20131120 星野 ADD END
	}

	/**
	 * 異動機器状態チェック処理.
	 * サービスを解約する際、対象のサービスに紐づく機器の出荷が未完了の場合はエラー
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @return  チェック結果(true：チェックOK/false：チェックNG)
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	private boolean idoKikiStatusCheck( IRequestParameterReadWrite param, String fixedText ) throws Exception
	{
		printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.idoKikiStatusCheck() start");
	
		/** 事前準備 */
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );

		// 判定結果初期化
		paramMap.put( CHK_IDO_KIK_STAT, CHECK_OK );
		
		// サービス変更区分
		String svcChgKbn = null;
		// サービス契約番号
		String svcKeiNo = null;
		// チェック対象機器提供サービス契約リスト
		List<HashMap<String, Object>> chkKikiList = null;
		
		boolean retBoo;
		
		// ネット利用サービス変更区分
		svcChgKbn = (String)paramMap.get( JKKAdchgConstCC.PARAM_KEY_EOHNT_USE_SVC_CHG_DIV );
		// ネットサービス契約番号
		svcKeiNo = (String)paramMap.get( JKKAdchgConstCC.PARAM_KEY_NET_SVC_KEI_NO );

		// ネット利用サービス変更区分が解約の場合
		if( JKKAdchgConstCC.CD00849_SLRE.equals(svcChgKbn) ){

// IT2-2013-0000058対応 20130130 鈴木 MOD START メソッドの抽出
			if ( ! isShukkaKanryo(param, fixedText, paramMap, svcKeiNo ) ) {
				paramMap.put( CHK_IDO_KIK_STAT, CHECK_ERR );
				printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.isShukkaKanryo() 異動機器状態チェックエラー（ネット）");
				return false;
			}
			
//			// サービスに紐付く機器提供サービス契約情報を取得
//			chkKikiList = getKikiInfo( param, fixedText, svcKeiNo );
//			
//			for (HashMap<String, Object> chkMap : chkKikiList) {
//				// 出荷完了時処理済フラグ
//				String flag = getMapString( chkMap, EKK0341A010CBSMsg1List.SHKA_FIN_JI_SYRZM_FLG );
//// IT1-2013-0000052対応 20130113 星野 MOD START
////				if ( !"1".equals(flag) ) {
//					if ( isChokuso( param, fixedText, chkMap) && !"1".equals(flag) ) {
//// IT1-2013-0000052対応 20130113 星野 MOD END
//					// 出荷完了時処理済フラグが"1"以外の場合エラー
//					paramMap.put( CHK_IDO_KIK_STAT, CHECK_ERR );
//					printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.idoKikiStatusCheck() 異動機器状態チェックエラー（テレビ）");
//					return false;
//				}
//			}
// IT2-2013-0000058対応 20130130 鈴木 MOD END メソッドの抽出
			
		}

		// 電話利用サービス変更区分
		svcChgKbn = (String)paramMap.get( JKKAdchgConstCC.PARAM_KEY_EOHTL_USE_SVC_CHG_DIV );
		// 電話サービス契約番号
		svcKeiNo = (String)paramMap.get( JKKAdchgConstCC.PARAM_KEY_TEL_SVC_KEI_NO );

		// 電話利用サービス変更区分が解約の場合
		if( JKKAdchgConstCC.CD00849_SLRE.equals(svcChgKbn) ){

// IT2-2013-0000058対応 20130130 鈴木 MOD START メソッドの抽出
			if ( ! isShukkaKanryo(param, fixedText, paramMap, svcKeiNo ) ) {
				paramMap.put( CHK_IDO_KIK_STAT, CHECK_ERR );
				printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.isShukkaKanryo() 異動機器状態チェックエラー（電話）");
				return false;
			}

//			// サービスに紐付く機器提供サービス契約情報を取得
//			chkKikiList = getKikiInfo( param, fixedText, svcKeiNo );
//			
//			for (HashMap<String, Object> chkMap : chkKikiList) {
//				// 出荷完了時処理済フラグ
//				String flag = getMapString( chkMap, EKK0341A010CBSMsg1List.SHKA_FIN_JI_SYRZM_FLG );
//// IT1-2013-0000052対応 20130113 星野 MOD START
////				if ( !"1".equals(flag) ) {
//					if ( isChokuso( param, fixedText, chkMap) && !"1".equals(flag) ) {
//// IT1-2013-0000052対応 20130113 星野 MOD END
//					// 出荷完了時処理済フラグが"1"以外の場合エラー
//					paramMap.put( CHK_IDO_KIK_STAT, CHECK_ERR );
//					printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.idoKikiStatusCheck() 異動機器状態チェックエラー（電話）");
//					return false;
//				}
//			}
// IT2-2013-0000058対応 20130130 鈴木 MOD END メソッドの抽出
			
		}

		// テレビ利用サービス変更区分
		svcChgKbn = (String)paramMap.get( JKKAdchgConstCC.PARAM_KEY_EOHTV_USE_SVC_CHG_DIV );
		// テレビサービス契約番号
		svcKeiNo = (String)paramMap.get( JKKAdchgConstCC.PARAM_KEY_TV_SVC_KEI_NO );

		// テレビ利用サービス変更区分が解約の場合
		if( JKKAdchgConstCC.CD00849_SLRE.equals(svcChgKbn) ){

// IT2-2013-0000058対応 20130130 鈴木 MOD START メソッドの抽出
			if ( ! isShukkaKanryo(param, fixedText, paramMap, svcKeiNo ) ) {
				paramMap.put( CHK_IDO_KIK_STAT, CHECK_ERR );
				printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.isShukkaKanryo() 異動機器状態チェックエラー（テレビ）");
				return false;
			}

//			// サービスに紐付く機器提供サービス契約情報を取得
//			chkKikiList = getKikiInfo( param, fixedText, svcKeiNo );
//			
//			for (HashMap<String, Object> chkMap : chkKikiList) {
//				// 出荷完了時処理済フラグ
//				String flag = getMapString( chkMap, EKK0341A010CBSMsg1List.SHKA_FIN_JI_SYRZM_FLG );
//// IT1-2013-0000052対応 20130113 星野 MOD START
////				if ( !"1".equals(flag) ) {
//					if ( isChokuso( param, fixedText, chkMap) && !"1".equals(flag) ) {
//// IT1-2013-0000052対応 20130113 星野 MOD END
//					// 出荷完了時処理済フラグが"1"以外の場合エラー
//					paramMap.put( CHK_IDO_KIK_STAT, CHECK_ERR );
//					printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.idoKikiStatusCheck() 異動機器状態チェックエラー（テレビ）");
//					return false;
//				}
//			}
// IT2-2013-0000058対応 20130130 鈴木 MOD END メソッドの抽出
			
		}

		printlnEjbLog("＃＃＃＃JKKAdchgCheckerCC.idoKikiStatusCheck() end 正常終了");
		return true;
	}


// IT2-2013-0000058対応 20130130 鈴木 ADD START メソッドの抽出
	/**
	 * 対象のサービスに紐づく機器の出荷が未完了判定
	 * 直送　かつ　配送ステータス＝受付済　のとき、false とする。
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   paramMap   paramマップ
	 * @param   svcKeiNo   サービス契約番号
	 * @return  チェック結果(true：出荷完了/false：出荷未完了)
	 * @throws  Exception  例外が発生した場合
	 */
	private boolean isShukkaKanryo(IRequestParameterReadWrite param,
			String fixedText, HashMap<String, Object> paramMap, String svcKeiNo)
			throws Exception {
		
		boolean retBoo = true;
		
		// サービスに紐付く機器提供サービス契約情報を取得
		List<HashMap<String, Object>> chkKikiList = getKikiInfo( param, fixedText, svcKeiNo );
		
		for (HashMap<String, Object> chkMap : chkKikiList) {
// IT2-2013-0000058対応 20130130 鈴木 DEL START
//			// 出荷完了時処理済フラグ
//			String flag = getMapString( chkMap, EKK0341A010CBSMsg1List.SHKA_FIN_JI_SYRZM_FLG );
// IT2-2013-0000058対応 20130130 鈴木 DEL END
// IT1-2013-0000052対応 20130113 星野 MOD START
//				if ( !"1".equals(flag) ) {
// IT2-2013-0000058対応 20130130 鈴木 MOD START
//				if ( isChokuso( param, fixedText, chkMap) && !"1".equals(flag) ) {
			if ( isChokuso( param, fixedText, chkMap) && isHaisoUketukeZumi( param, fixedText, chkMap ) ) {
				// 直送　かつ　配送ステータス＝受付済　のとき、チェックエラーとする。
// IT2-2013-0000058対応 20130130 鈴木 MOD END
// IT1-2013-0000052対応 20130113 星野 MOD END
//				// 出荷完了時処理済フラグが"1"以外の場合エラー

				retBoo = false;
				break;
			}
		}
		// chkKikiList ０件のときは true扱いとする（対応前と同じ）
		return retBoo;
	}
// IT2-2013-0000058対応 20130130 鈴木 ADD END メソッドの抽出

// IT1-2013-0000052対応 20130113 星野 ADD START
	private boolean isChokuso( IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> chkMap) throws Exception {
		
		/** 事前準備 */
		HashMap<String, Object> reqMap;
		HashMap<String, String> condMap = new HashMap<String, String>();
		Map<?, ?> resMap;

		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		
		// ・EDK0011B090  契約機器配送対象物品一覧照会
		condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, (String) chkMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		reqMap = mapper.setEDK0011B090(param, fixedText, condMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		ArrayList<HashMap<String, Object>> dk0011_b090_list = mapper.getEDK0011B090(param, fixedText, resMap);
		mapper.scResultCheck(param);
		
		if( dk0011_b090_list == null || dk0011_b090_list.isEmpty() ){
// IT2-2013-0000058対応 20130130 鈴木 MOD START
//			// 配送対象物品が取得できない場合はお客様直送扱い
//			return true;
			// 配送対象物品が取得できない場合はお客様直送でない に変更
			return false;
// IT2-2013-0000058対応 20130130 鈴木 MOD END
		}
		String kojiAkNo = "";
		for(HashMap<String, Object> dk0011_b090_map : dk0011_b090_list){
			if( dk0011_b090_map.get(EDK0011B090CBSMsg1List.KIKI_CHG_NO).equals(chkMap.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO)) ){
				// 機器変更番号が一致した配送から工事案件番号取得
				kojiAkNo = (String) dk0011_b090_map.get( EDK0011B020CBSMsg1List.KOJIAK_NO );
				if(!StringUtils.isEmpty(kojiAkNo)){
					break;
				}
			}
		}
		
		if(StringUtils.isEmpty(kojiAkNo)){
			// 工事案件番号が取得できない場合はお客様直送扱い
			return true;
		}
	
		// ・EKU0141B020  工事案件対象宅内機器一覧照会２
		condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_KOJIAK_NO, (String) kojiAkNo);
		reqMap = mapper.setEKU0141B020(param, fixedText, condMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		ArrayList<HashMap<String, Object>> ku0141_b020_list = mapper.getEKU0141B020(param, fixedText, resMap);
		mapper.scResultCheck(param);

		if(null != ku0141_b020_list && ku0141_b020_list.size() > 0 )
		{
			// 工事会社配送
			return false;
		}
		else
		{
			// お客様直送
			return true;
		}
	}
// IT1-2013-0000052対応 20130113 星野 ADD END

// IT2-2013-0000058対応 20130130 鈴木 ADD START
	private boolean isHaisoUketukeZumi( IRequestParameterReadWrite param, String fixedText, HashMap<String, Object> chkMap) throws Exception {
		
		/** 事前準備 */
		HashMap<String, Object> reqMap;
		HashMap<String, String> condMap = new HashMap<String, String>();
		Map<?, ?> resMap;

		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// ・EDK0011B090  契約機器配送対象物品一覧照会
		condMap = new HashMap<String, String>();
		condMap.put(JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, (String) chkMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO));
		reqMap = mapper.setEDK0011B090(param, fixedText, condMap);
		resMap = scCall.run(reqMap, keepSesHandle.get());
		ArrayList<HashMap<String, Object>> dk0011_b090_list = mapper.getEDK0011B090(param, fixedText, resMap);
		mapper.scResultCheck(param);
		
		if( dk0011_b090_list == null || dk0011_b090_list.isEmpty() ){
			// ０件の場合、配送済み　でない
			return false;
		}
		
		boolean retBoo = false;
		for(HashMap<String, Object> dk0011_b090_map : dk0011_b090_list){
			if( dk0011_b090_map.get(EDK0011B090CBSMsg1List.KIKI_CHG_NO).equals(chkMap.get(EKK0341A010CBSMsg1List.KIKI_CHG_NO)) ){
				
				// 機器変更番号が一致した配送から配送ステータスを取得
				String haisoStat = (String) dk0011_b090_map.get( EDK0011B090CBSMsg1List.HAISO_STAT );
				
				// 配送ステータス：001 受付済 の場合、true.
				if("001".equals(haisoStat)){
					retBoo = true;
					break;
				}
			}
		}
		
		return retBoo;
	}
// IT2-2013-0000058対応 20130130 鈴木 ADD END

	/**
	 * 機器提供サービス契約情報取得処理.
	 * サービス契約番号に紐付く機器提供サービス契約情報を取得する.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   svcKeiNo   サービス契約番号
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	private ArrayList<HashMap<String, Object>> getKikiInfo( IRequestParameterReadWrite param, String fixedText, String svcKeiNo ) throws Exception
	{
// OM-2014-0001369対応 20140407 星野 ADD START
		return getKikiInfo(param, fixedText, svcKeiNo, null);
	}
	
	/**
	 * 機器提供サービス契約情報取得処理.
	 * サービス契約番号に紐付く機器提供サービス契約情報を取得する.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   svcKeiNo   サービス契約番号
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	private ArrayList<HashMap<String, Object>> getKikiInfo( IRequestParameterReadWrite param, String fixedText, String svcKeiNo, String funcCode ) throws Exception
	{
// OM-2014-0001369対応 20140407 星野 ADD END

		/** 事前準備 */
		HashMap<String, Object> reqMap;
		HashMap<String, String> condMap = new HashMap<String, String>();
		Map<?, ?> resMap;

		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		// 機器提供サービス契約情報リスト
		ArrayList kikiInfoList = new ArrayList();
		
		// EKK0341B002_機器提供サービス契約一覧照会（サービス契約番号）
		condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svcKeiNo );
// OM-2014-0001369対応 20140407 星野 ADD START
//		reqMap = mapper.setEKK0341B002( param, fixedText, condMap);
		reqMap = mapper.setEKK0341B002( param, fixedText, condMap, funcCode);
// OM-2014-0001369対応 20140407 星野 ADD END
		resMap = scCall.run( reqMap, keepSesHandle.get());
		List<HashMap<String, Object>> kk0341_b002_map_list = mapper.getEKK0341B002( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		if (kk0341_b002_map_list != null) {
			for(HashMap<String, Object> kk0341_b002_map : kk0341_b002_map_list){
				
				// EKK0341A010 機器提供サービス契約一意照会
				condMap.put( JKKAdchgMapperCC.COND_KEY_KKTK_SVC_KEI_NO, getMapString( kk0341_b002_map, EKK0341A010CBSMsg1List.KKTK_SVC_KEI_NO ) );
				condMap.put( JKKAdchgMapperCC.COND_KEY_OPEDATE, JCCBPCommon.getOpeDate(null) );
				reqMap = mapper.setEKK0341A010( param, fixedText, condMap );
				resMap = scCall.run( reqMap, keepSesHandle.get() );
				HashMap<String, Object> kk0341_a010_map = mapper.getEKK0341A010( param, fixedText, resMap );
				mapper.scResultCheck( param );

				kikiInfoList.add(kk0341_a010_map);
			}
		}
		return kikiInfoList;
	}
	

	/**
	 * パラメータ取得(HashMap).
	 * <br>
	 * @param  targetMap  取得元マップ
	 * @param  targetKey  取得元キー項目
	 * @return 取得文字列
	 */
	private String getMapString( HashMap targetMap, String targetKey ) {
		String resultStr = new String();

		if ( targetMap != null ) {
			if ( ( targetKey != null ) && ( !"".equals( targetKey ) ) ) {
				if ( targetMap.containsKey( targetKey ) ) {
					resultStr = (String) targetMap.get(targetKey);
				}
			}
		}
		return resultStr;
	}
	
// LOT3 ANK-1272対応 Nao.F START
	/**
	 * 住所変更登録（1周目）チェック処理.
	 * 住所変更本登録（1周目）のチェックを行う.
	 * <br>
	 * @param   handle     セッションハンドル
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite smaValChecker( SessionHandle handle, IRequestParameterReadWrite param, String fixedText ) throws Exception
	{
// OM-2013-0004303対応 20131120 星野 ADD START
		try {
// OM-2013-0004303対応 20131120 星野 ADD END
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
	
			// 判定結果初期化
			paramMap.put( "check_result", CHECK_OK );
	
			/** 異動機器状態チェック */
			if (!smaValStatusCheck( param, fixedText )) {
				// チェックエラー
				paramMap.put( "check_result", CHECK_ERR );
			}
	
			return param;
// OM-2013-0004303対応 20131120 星野 ADD START
		} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}

// OM-2013-0004303対応 20131120 星野 ADD END
	}
	
	/**
	 * スマートバリュー情報一覧取得処理.
	 * サービス契約番号に紐付くスマートバリュー情報を取得する.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   svcKeiNo   サービス契約番号
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	private boolean smaValStatusCheck( IRequestParameterReadWrite param, String fixedText) throws Exception
	{

		/** 事前準備 */
		HashMap<String, Object> reqMap;
		HashMap<String, String> condMap = new HashMap<String, String>();
		Map<?, ?> resMap;
		
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );

		String svcKeiNo = (String)paramMap.get("svcKeiNo");
		if (StringUtils.isEmpty(svcKeiNo)) {
			// サービス契約がない場合はチェックしない
			return true;
		}
		
		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// EKK2441B002 スマートバリュー設定一覧照会
		condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svcKeiNo );
		condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_KAIS_UCWK_NO, (String)paramMap.get("svckeikaisen") );
		reqMap = mapper.setEKK2441B001( param, fixedText, condMap);
		resMap = scCall.run( reqMap, keepSesHandle.get());
		List<HashMap<String, Object>> kk2441_b001_map_list = mapper.getEKK2441B001( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		for (int i = 0 ; i < kk2441_b001_map_list.size(); i++) {
			HashMap<String, Object> smaValmap = kk2441_b001_map_list.get(i);
			String waricncymd = (String)smaValmap.get(EKK2441B001CBSMsg1List.TAJGS_WRIB_KEI_CNC_YMD);
			
			if (StringUtils.isEmpty(waricncymd) || "20991231".equals(waricncymd)) {
				return false;
			}
		}
		
		return true;
	}
// LOT3 ANK-1272対応 Nao.F END
// IT2-2013-0000XXX対応 2013.2.28 START
	/**
	 * 住所変更登録（1周目）チェック処理.
	 * 住所変更本登録（1周目）のチェックを行う.
	 * <br>
	 * @param   handle     セッションハンドル
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite kikiStateChecker( SessionHandle handle, IRequestParameterReadWrite param, String fixedText ) throws Exception
	{
// OM-2013-0004303対応 20131120 星野 ADD START
		try {
// OM-2013-0004303対応 20131120 星野 ADD END
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
	
			// 判定結果初期化
			paramMap.put( "check_result", CHECK_OK );
			
			// 各種サービス契約番号
			String svcKeiNt = (String)paramMap.get("svcKeiNo_Net");
			String svcKeiTl = (String)paramMap.get("svcKeiNo_Tel");
			String svcKeiTv = (String)paramMap.get("svcKeiNo_Tv");
			
			boolean chkflg = true;
			
			// サービスに紐付く機器提供サービス契約情報を取得
			if (!StringUtils.isEmpty(svcKeiNt)) {
// OM-2014-0001369対応 20140407 星野 MOD START
//				List<HashMap<String, Object>> chkKikiList_Net = getKikiInfo(param, fixedText, svcKeiNt);
				List<HashMap<String, Object>> chkKikiList_Net = getKikiInfo(param, fixedText, svcKeiNt, "6");
// OM-2014-0001369対応 20140407 星野 MOD END
				
				if (!kikiStateCheck(chkKikiList_Net)) {
					paramMap.put( "check_result", CHECK_ERR );
					chkflg = false;
				}
			}
			
			if (!StringUtils.isEmpty(svcKeiTl) && chkflg) {
// OM-2014-0001369対応 20140407 星野 MOD START
//				List<HashMap<String, Object>> chkKikiList_Tel = getKikiInfo(param, fixedText, svcKeiTl);
				List<HashMap<String, Object>> chkKikiList_Tel = getKikiInfo(param, fixedText, svcKeiTl, "6");
// OM-2014-0001369対応 20140407 星野 MOD END
				
				if (!kikiStateCheck(chkKikiList_Tel)) {
					paramMap.put( "check_result", CHECK_ERR );
					chkflg = false;
				}
			}
			
			if (!StringUtils.isEmpty(svcKeiTv) && chkflg) {
// OM-2014-0001369対応 20140407 星野 MOD START
//				List<HashMap<String, Object>> chkKikiList_Tv = getKikiInfo(param, fixedText, svcKeiTv);
				List<HashMap<String, Object>> chkKikiList_Tv = getKikiInfo(param, fixedText, svcKeiTv, "6");
// OM-2014-0001369対応 20140407 星野 MOD END
				
				if (!kikiStateCheck(chkKikiList_Tv)) {
					paramMap.put( "check_result", CHECK_ERR );
					chkflg = false;
				}
			}
	
			return param;
// OM-2013-0004303対応 20131120 星野 ADD START
		} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}

// OM-2013-0004303対応 20131120 星野 ADD END
	}
	
	/**
	 * スマートバリュー情報一覧取得処理.
	 * サービス契約番号に紐付くスマートバリュー情報を取得する.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   svcKeiNo   サービス契約番号
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	private boolean kikiStateCheck(List<HashMap<String, Object>> chkKikiList) throws Exception
	{

		for (int i = 0 ; i < chkKikiList.size(); i++) {
			HashMap<String, Object> chkKikiMap = chkKikiList.get(i);
			String kikiState = (String)chkKikiMap.get(EKK0341A010CBSMsg1List.KKTK_SVC_KEI_STAT);
			
			if ("010".equals(kikiState) || "020".equals(kikiState) || "030".equals(kikiState)) {
				return false;
			}
		}
		
		return true;
	}
// IT2-2013-0000XXX対応 2013.2.28 END
// IT1-XXXX対応 20130408 START
	/**
	 * 住所変更確定チェック処理.
	 * 住所変更本確定のチェックを行う.
	 * 住所変更登録の工事依頼判定を行う.
	 * <br>
	 * @param   handle     セッションハンドル
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite kojiStateChecker( SessionHandle handle, IRequestParameterReadWrite param, String fixedText ) throws Exception
	{
// OM-2013-0004303対応 20131120 星野 ADD START
		try {
// OM-2013-0004303対応 20131120 星野 ADD END
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
	
			// 判定結果初期化
			paramMap.put( "check_result", CHECK_OK );
			// ANK-4371-00-00 ADD START
			// 新設工事無
			paramMap.put( "nskj_um", NSKJ_UM_0 );
			// ANK-4371-00-00 ADD END
	
			/** 工事依頼状況チェック */
			if (!kojiStatusCheck( param, fixedText )) {
				// チェックエラー
				paramMap.put( "check_result", CHECK_ERR );
			}
	
			return param;
// OM-2013-0004303対応 20131120 星野 ADD START
		} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}

// OM-2013-0004303対応 20131120 星野 ADD END
	}
	
	/**
	 * 工事案件情報取得処理.
	 * サービス契約番号に紐付く工事案件情報を取得する.
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   svcKeiNo   サービス契約番号
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	private boolean kojiStatusCheck( IRequestParameterReadWrite param, String fixedText) throws Exception
	{

		/** 事前準備 */
		HashMap<String, Object> reqMap;
		HashMap<String, String> condMap = new HashMap<String, String>();
		Map<?, ?> resMap;
		
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );

		String svcKeiNo = null;
		
		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		/** パラメータの取得 */
		// 変更前サービス契約番号（ネット）
		String net_svc_kei_no = (String)paramMap.get("net_svc_kei_no");
		// 変更前サービス契約番号（電話）
		String tel_svc_kei_no = (String)paramMap.get("tel_svc_kei_no");
		// 変更前サービス契約番号（テレビ）
		String tv_svc_kei_no = (String)paramMap.get("tv_svc_kei_no");
		// eo光ネット利用サービス変更区分
		String eohnt_use_svc_chg_div = (String)paramMap.get("eohnt_use_svc_chg_div");
		// eo光電話利用サービス変更区分
		String eohtl_use_svc_chg_div = (String)paramMap.get("eohtl_use_svc_chg_div");
		// eo光電話利用サービス変更区分
		String eohtv_use_svc_chg_div = (String)paramMap.get("eohtv_use_svc_chg_div");
		// 変更後サービス契約番号（ネット）
		String net_svc_kei_no_af = (String)paramMap.get("net_svc_kei_no_af");
		// 変更後サービス契約番号（電話）
		String tel_svc_kei_no_af = (String)paramMap.get("tel_svc_kei_no_af");
		// 変更後サービス契約番号（テレビ）
		String tv_svc_kei_no_af = (String)paramMap.get("tv_svc_kei_no_af");
		// 移転元＿マンション物件コード
		String itenmMansionBukkenCd = (String)paramMap.get("itenmMansionBukkenCd");
		// 移転先＿マンション物件コード
		String itensMansionBukkenCd = (String)paramMap.get("itensMansionBukkenCd");
		// 移転元＿回線コード
		String itenmKaisenCd = (String)paramMap.get("itenmKaisenCd");
		// 移転先＿回線コード
		String itensKaisenCd = (String)paramMap.get("itensKaisenCd");
		
		
		boolean kojiari_flg = false;
		// ANK-4371-00-00 ADD START
		/** 新設工事の確認 */
		// ネット・電話
		if (!StringUtils.isEmpty(net_svc_kei_no_af) || !StringUtils.isEmpty(tel_svc_kei_no_af)) {
			
			// マンションかつ光回線以外
			if("001".equals(itensMansionBukkenCd) && !"1004".equals(itensKaisenCd)){
				// 工事無し
			} else {
				
				// ネットのサービス契約番号があれば優先して使用
				if (!StringUtils.isEmpty(net_svc_kei_no_af)) {
					svcKeiNo = net_svc_kei_no_af;
				} else {
					svcKeiNo = tel_svc_kei_no_af;
				}
				
				// ネットと電話の変更区分が保留、解約、または契約無しの場合は工事無し
				if (("2".equals(eohnt_use_svc_chg_div) || "4".equals(eohnt_use_svc_chg_div) || "5".equals(eohnt_use_svc_chg_div)) 
						&& ("2".equals(eohtl_use_svc_chg_div) || "4".equals(eohtl_use_svc_chg_div) || "5".equals(eohtl_use_svc_chg_div))) {
					kojiari_flg = true;
				}
				
				boolean isAftNetAri = isAftSvcAri(param, fixedText, eohnt_use_svc_chg_div, net_svc_kei_no_af);
				boolean isAftTelAri = isAftSvcAri(param, fixedText, eohtl_use_svc_chg_div, tel_svc_kei_no_af);
				// 転居先にネット・電話が無い場合（住変中解約対応）
				if(!isAftNetAri && !isAftTelAri){
					// チェックOKとする
					kojiari_flg = true;
				}

				
				//  EKU0011B050 工事案件一覧照会
				condMap.clear();
				condMap.put( JKKAdchgMapperCC.COND_KEY_KOJIAK_NO_SVC_KEI_NO, svcKeiNo);
				reqMap = mapper.setEKU0011B050( param, fixedText, condMap );
				resMap = scCall.run( reqMap, keepSesHandle.get() );
				ArrayList<HashMap<String, Object>> ku0011_b050 = mapper.getEKU0011B050( param, fixedText, resMap );
				mapper.scResultCheck( param );
				
				Iterator<HashMap<String, Object>> ku0011_b050Ite = ku0011_b050.iterator();
				while(ku0011_b050Ite.hasNext())
				{
					// カレントの工事案件情報を取得
					HashMap<String, Object> curKu0011_b050 = ku0011_b050Ite.next();
					
					// ●工事案件情報の取得
					condMap.clear();
					condMap.put( JKKAdchgMapperCC.COND_KEY_KOJIAK_NO, (String)curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_NO));
					reqMap = mapper.setEKU0011A010( param, fixedText, condMap );
					resMap = scCall.run( reqMap, keepSesHandle.get() );
					HashMap<String, Object> ku0011_a010 = mapper.getEKU0011A010( param, fixedText, resMap );
					mapper.scResultCheck( param );
					
					String kojiSbtCd = (String)ku0011_a010.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD);
					String koji_opIdoCd = (String)ku0011_a010.get(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV);
					
					if (!"00019".equals(koji_opIdoCd)) {
						continue;
					}
					
					// 新設工事が存在するかのチェック
					if ("001".equals(kojiSbtCd) || "003".equals(kojiSbtCd)) {
						kojiari_flg = true;
						// 新設工事有
						paramMap.put( "nskj_um", NSKJ_UM_1 );
					}
					
				}
				if (!kojiari_flg) {
					return false;
				}
			}
		}
		
		kojiari_flg = false;
		// テレビ
		if (!StringUtils.isEmpty(tv_svc_kei_no_af)) {
			
			svcKeiNo = tv_svc_kei_no_af;
			
			// テレビの変更区分が保留、解約、または契約無しの場合は工事無し
			if ("2".equals(eohtv_use_svc_chg_div) || "4".equals(eohtv_use_svc_chg_div) || "5".equals(eohtv_use_svc_chg_div)) {
				kojiari_flg = true;
			}
			
			boolean isAftTvAri = isAftSvcAri(param, fixedText, eohtv_use_svc_chg_div, tv_svc_kei_no_af);
			// 転居先にテレビが無い場合（住変中解約対応）
			if(!isAftTvAri){
				// チェックOKとする
				kojiari_flg = true;
			}
			
			//  EKU0011B050 工事案件一覧照会
			condMap.clear();
			condMap.put( JKKAdchgMapperCC.COND_KEY_KOJIAK_NO_SVC_KEI_NO, svcKeiNo);
			reqMap = mapper.setEKU0011B050( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> ku0011_b050 = mapper.getEKU0011B050( param, fixedText, resMap );
			mapper.scResultCheck( param );
			
			Iterator<HashMap<String, Object>> ku0011_b050Ite = ku0011_b050.iterator();
			while(ku0011_b050Ite.hasNext())
			{
				// カレントの工事案件情報を取得
				HashMap<String, Object> curKu0011_b050 = ku0011_b050Ite.next();
				
				// ●工事案件情報の取得
				condMap.clear();
				condMap.put( JKKAdchgMapperCC.COND_KEY_KOJIAK_NO, (String)curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_NO));
				reqMap = mapper.setEKU0011A010( param, fixedText, condMap );
				resMap = scCall.run( reqMap, keepSesHandle.get() );
				HashMap<String, Object> ku0011_a010 = mapper.getEKU0011A010( param, fixedText, resMap );
				mapper.scResultCheck( param );
				
				String kojiSbtCd = (String)ku0011_a010.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD);
				String koji_opIdoCd = (String)ku0011_a010.get(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV);
				
				if (!"00019".equals(koji_opIdoCd)) {
					continue;
				}
				
				// 新設工事が存在するかのチェック
				if ("001".equals(kojiSbtCd) || "003".equals(kojiSbtCd)) {
					kojiari_flg = true;
					// 新設工事有
					paramMap.put( "nskj_um", NSKJ_UM_1 );
				}
				
			}
			if (!kojiari_flg) {
				return false;
			}
		}
		
		kojiari_flg = false;
		
		// ANK-4371-00-00 ADD END
		/** 撤去工事の確認 */
		// ネット・電話
		if (!StringUtils.isEmpty(net_svc_kei_no) || !StringUtils.isEmpty(tel_svc_kei_no)) {
			
			// マンションかつ光回線以外
			if("001".equals(itenmMansionBukkenCd) && !"1004".equals(itenmKaisenCd)){
				// 工事無し
			} else {
				
				// ネットのサービス契約番号があれば優先して使用
				if (!StringUtils.isEmpty(net_svc_kei_no)) {
					svcKeiNo = net_svc_kei_no;
				} else {
					svcKeiNo = tel_svc_kei_no;
				}
				
				// ネットと電話のどちらかの変更区分が保留
				if ("2".equals(eohnt_use_svc_chg_div) || "2".equals(eohtl_use_svc_chg_div)) {
					kojiari_flg = true;
				}
				// または両方契約無しか追加の場合工事無し
				if (("5".equals(eohnt_use_svc_chg_div) || "3".equals(eohnt_use_svc_chg_div))
						&& ("5".equals(eohtl_use_svc_chg_div) || "3".equals(eohtl_use_svc_chg_div))) {
					kojiari_flg = true;
				}
				
				//  EKU0011B050 工事案件一覧照会
				condMap.clear();
				condMap.put( JKKAdchgMapperCC.COND_KEY_KOJIAK_NO_SVC_KEI_NO, svcKeiNo);
				reqMap = mapper.setEKU0011B050( param, fixedText, condMap );
				resMap = scCall.run( reqMap, keepSesHandle.get() );
				ArrayList<HashMap<String, Object>> ku0011_b050 = mapper.getEKU0011B050( param, fixedText, resMap );
				mapper.scResultCheck( param );
				
				Iterator<HashMap<String, Object>> ku0011_b050Ite = ku0011_b050.iterator();
				while(ku0011_b050Ite.hasNext())
				{
					// カレントの工事案件情報を取得
					HashMap<String, Object> curKu0011_b050 = ku0011_b050Ite.next();
					
					// ●工事案件情報の取得
					condMap.clear();
					condMap.put( JKKAdchgMapperCC.COND_KEY_KOJIAK_NO, (String)curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_NO));
					reqMap = mapper.setEKU0011A010( param, fixedText, condMap );
					resMap = scCall.run( reqMap, keepSesHandle.get() );
					HashMap<String, Object> ku0011_a010 = mapper.getEKU0011A010( param, fixedText, resMap );
					mapper.scResultCheck( param );
					
					String kojiSbtCd = (String)ku0011_a010.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD);
					String koji_opIdoCd = (String)ku0011_a010.get(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV);
					
					if (!"00019".equals(koji_opIdoCd)) {
						continue;
					}
					
					// 撤去工事が存在するかのチェック
					if ("002".equals(kojiSbtCd) || "004".equals(kojiSbtCd)) {
						kojiari_flg = true;
					}
					
				}
				if (!kojiari_flg) {
					return false;
				}
			}
		}
		
		kojiari_flg = false;
		// テレビ
		if (!StringUtils.isEmpty(tv_svc_kei_no)) {
			
			svcKeiNo = tv_svc_kei_no;
			
			// テレビの変更区分が保留、追加、または契約無しの場合は工事無し
			if ("2".equals(eohtv_use_svc_chg_div) || "3".equals(eohtv_use_svc_chg_div) || "5".equals(eohtv_use_svc_chg_div)) {
				kojiari_flg = true;
			}
			
			//  EKU0011B050 工事案件一覧照会
			condMap.clear();
			condMap.put( JKKAdchgMapperCC.COND_KEY_KOJIAK_NO_SVC_KEI_NO, svcKeiNo);
			reqMap = mapper.setEKU0011B050( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> ku0011_b050 = mapper.getEKU0011B050( param, fixedText, resMap );
			mapper.scResultCheck( param );
			
			Iterator<HashMap<String, Object>> ku0011_b050Ite = ku0011_b050.iterator();
			while(ku0011_b050Ite.hasNext())
			{
				// カレントの工事案件情報を取得
				HashMap<String, Object> curKu0011_b050 = ku0011_b050Ite.next();
				
				// ●工事案件情報の取得
				condMap.clear();
				condMap.put( JKKAdchgMapperCC.COND_KEY_KOJIAK_NO, (String)curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_NO));
				reqMap = mapper.setEKU0011A010( param, fixedText, condMap );
				resMap = scCall.run( reqMap, keepSesHandle.get() );
				HashMap<String, Object> ku0011_a010 = mapper.getEKU0011A010( param, fixedText, resMap );
				mapper.scResultCheck( param );
				
				String kojiSbtCd = (String)ku0011_a010.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD);
				String koji_opIdoCd = (String)ku0011_a010.get(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV);
				
				if (!"00019".equals(koji_opIdoCd)) {
					continue;
				}
				
				// 撤去工事が存在するかのチェック
				if ("002".equals(kojiSbtCd) || "004".equals(kojiSbtCd)) {
					kojiari_flg = true;
				}
				
			}
			if (!kojiari_flg) {
				return false;
			}
		}
		
		// ANK-4371-00-00 DEL START
//		kojiari_flg = false;
//		/** 新設工事の確認 */
//		// ネット・電話
//		if (!StringUtils.isEmpty(net_svc_kei_no_af) || !StringUtils.isEmpty(tel_svc_kei_no_af)) {
//			
//			// マンションかつ光回線以外
//			if("001".equals(itensMansionBukkenCd) && !"1004".equals(itensKaisenCd)){
//				// 工事無し
//			} else {
//				
//				// ネットのサービス契約番号があれば優先して使用
//				if (!StringUtils.isEmpty(net_svc_kei_no_af)) {
//					svcKeiNo = net_svc_kei_no_af;
//				} else {
//					svcKeiNo = tel_svc_kei_no_af;
//				}
//				
//				// ネットと電話の変更区分が保留、解約、または契約無しの場合は工事無し
//				if (("2".equals(eohnt_use_svc_chg_div) || "4".equals(eohnt_use_svc_chg_div) || "5".equals(eohnt_use_svc_chg_div)) 
//						&& ("2".equals(eohtl_use_svc_chg_div) || "4".equals(eohtl_use_svc_chg_div) || "5".equals(eohtl_use_svc_chg_div))) {
//					kojiari_flg = true;
//				}
//				
//// OM-2014-0001301対応 20140403 星野 ADD START
//				boolean isAftNetAri = isAftSvcAri(param, fixedText, eohnt_use_svc_chg_div, net_svc_kei_no_af);
//				boolean isAftTelAri = isAftSvcAri(param, fixedText, eohtl_use_svc_chg_div, tel_svc_kei_no_af);
//				// 転居先にネット・電話が無い場合（住変中解約対応）
//				if(!isAftNetAri && !isAftTelAri){
//					// チェックOKとする
//					kojiari_flg = true;
//				}
//
//// OM-2014-0001301対応 20140403 星野 ADD END
//				
//				//  EKU0011B050 工事案件一覧照会
//				condMap.clear();
//				condMap.put( JKKAdchgMapperCC.COND_KEY_KOJIAK_NO_SVC_KEI_NO, svcKeiNo);
//				reqMap = mapper.setEKU0011B050( param, fixedText, condMap );
//				resMap = scCall.run( reqMap, keepSesHandle.get() );
//				ArrayList<HashMap<String, Object>> ku0011_b050 = mapper.getEKU0011B050( param, fixedText, resMap );
//				mapper.scResultCheck( param );
//				
//				Iterator<HashMap<String, Object>> ku0011_b050Ite = ku0011_b050.iterator();
//				while(ku0011_b050Ite.hasNext())
//				{
//					// カレントの工事案件情報を取得
//					HashMap<String, Object> curKu0011_b050 = ku0011_b050Ite.next();
//					
//					// ●工事案件情報の取得
//					condMap.clear();
//					condMap.put( JKKAdchgMapperCC.COND_KEY_KOJIAK_NO, (String)curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_NO));
//					reqMap = mapper.setEKU0011A010( param, fixedText, condMap );
//					resMap = scCall.run( reqMap, keepSesHandle.get() );
//					HashMap<String, Object> ku0011_a010 = mapper.getEKU0011A010( param, fixedText, resMap );
//					mapper.scResultCheck( param );
//					
//					String kojiSbtCd = (String)ku0011_a010.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD);
//					String koji_opIdoCd = (String)ku0011_a010.get(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV);
//					
//					if (!"00019".equals(koji_opIdoCd)) {
//						continue;
//					}
//					
//					// 新設工事が存在するかのチェック
//					if ("001".equals(kojiSbtCd) || "003".equals(kojiSbtCd)) {
//						kojiari_flg = true;
//					}
//					
//				}
//				if (!kojiari_flg) {
//					return false;
//				}
//			}
//		}
//		
//		kojiari_flg = false;
//		// テレビ
//		if (!StringUtils.isEmpty(tv_svc_kei_no_af)) {
//			
//			svcKeiNo = tv_svc_kei_no_af;
//			
//			// テレビの変更区分が保留、解約、または契約無しの場合は工事無し
//			if ("2".equals(eohtv_use_svc_chg_div) || "4".equals(eohtv_use_svc_chg_div) || "5".equals(eohtv_use_svc_chg_div)) {
//				kojiari_flg = true;
//			}
//			
//// OM-2014-0001301対応 20140403 星野 ADD START
//			boolean isAftTvAri = isAftSvcAri(param, fixedText, eohtv_use_svc_chg_div, tv_svc_kei_no_af);
//			// 転居先にテレビが無い場合（住変中解約対応）
//			if(!isAftTvAri){
//				// チェックOKとする
//				kojiari_flg = true;
//			}
////OM-2014-0001301対応 20140403 星野 ADD END
//			
//			//  EKU0011B050 工事案件一覧照会
//			condMap.clear();
//			condMap.put( JKKAdchgMapperCC.COND_KEY_KOJIAK_NO_SVC_KEI_NO, svcKeiNo);
//			reqMap = mapper.setEKU0011B050( param, fixedText, condMap );
//			resMap = scCall.run( reqMap, keepSesHandle.get() );
//			ArrayList<HashMap<String, Object>> ku0011_b050 = mapper.getEKU0011B050( param, fixedText, resMap );
//			mapper.scResultCheck( param );
//			
//			Iterator<HashMap<String, Object>> ku0011_b050Ite = ku0011_b050.iterator();
//			while(ku0011_b050Ite.hasNext())
//			{
//				// カレントの工事案件情報を取得
//				HashMap<String, Object> curKu0011_b050 = ku0011_b050Ite.next();
//				
//				// ●工事案件情報の取得
//				condMap.clear();
//				condMap.put( JKKAdchgMapperCC.COND_KEY_KOJIAK_NO, (String)curKu0011_b050.get(EKU0011B050CBSMsg1List.KOJIAK_NO));
//				reqMap = mapper.setEKU0011A010( param, fixedText, condMap );
//				resMap = scCall.run( reqMap, keepSesHandle.get() );
//				HashMap<String, Object> ku0011_a010 = mapper.getEKU0011A010( param, fixedText, resMap );
//				mapper.scResultCheck( param );
//				
//				String kojiSbtCd = (String)ku0011_a010.get(EKU0011A010CBSMsg1List.KOJIAK_SBT_CD);
//				String koji_opIdoCd = (String)ku0011_a010.get(EKU0011A010CBSMsg1List.KOJI_UK_OPTNTY_IDO_DIV);
//				
//				if (!"00019".equals(koji_opIdoCd)) {
//					continue;
//				}
//				
//				// 新設工事が存在するかのチェック
//				if ("001".equals(kojiSbtCd) || "003".equals(kojiSbtCd)) {
//					kojiari_flg = true;
//				}
//				
//			}
//			if (!kojiari_flg) {
//				return false;
//			}
//		}
		// ANK-4371-00-00 DEL END
		
		return true;
	}
// IT1-XXXX対応 20130408 END

// OM-2014-0001301対応 20140403 星野 ADD START
	private boolean isAftSvcAri(
		IRequestParameterReadWrite param,
		String fixedText, 
		String use_svc_chg_div, 
		String svc_kei_no_af
	)throws Exception {
		
		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

		JKKAdchgCmnLogicCC lclCmnLogic = new JKKAdchgCmnLogicCC(keepSesHandle.get());
		
		boolean isAftSvcAri;
		if( "2".equals(use_svc_chg_div) || "4".equals(use_svc_chg_div) || "5".equals(use_svc_chg_div) ){
			isAftSvcAri = false;
		}else{
			isAftSvcAri = false;
			if(!StringUtils.isEmpty(svc_kei_no_af)){
				// EKK0081A010_サービス契約一意照会
				HashMap<String, Object> kk0081_a010_map = 
					lclCmnLogic.getEKK0081A010( param, mapper, fixedText, scCall, svc_kei_no_af, JCCBPCommon.getOpeDate(null) );
				
				if( kk0081_a010_map != null && !kk0081_a010_map.isEmpty() ){
					String svcKeiStat = (String)kk0081_a010_map.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
					if(!"910".equals(svcKeiStat) && !"920".equals(svcKeiStat)){
						isAftSvcAri = true;
					}
				}
			}
		}
		return isAftSvcAri;
	}
// OM-2014-0001301対応 20140403 星野 ADD START
	
// OM-2013-0003333対応 20131019 星野 ADD START
	/**
	 * MAチェック処理.
	 * <br>
	 * @param   handle     セッションハンドル
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite maChecker( SessionHandle handle, IRequestParameterReadWrite param, String fixedText ) throws Exception
	{
// OM-2013-0004303対応 20131120 星野 ADD START
		try {
// OM-2013-0004303対応 20131120 星野 ADD END
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
			if( paramMap == null ){
				return param;
			}
	
			// 判定結果初期化
			paramMap.put( "check_result", CHECK_OK );
	
			/** 工事依頼状況チェック */
			if (!maCheck( param, fixedText )) {
				// チェックエラー
				paramMap.put( "check_result", CHECK_ERR );
			}
	
			return param;
// OM-2013-0004303対応 20131120 星野 ADD START
		} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}

// OM-2013-0004303対応 20131120 星野 ADD END
	}
	
	private boolean maCheck(IRequestParameterReadWrite param, String fixedText) throws Exception {
		
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
		if( paramMap == null ){
			return true;
		}
		
		String telno = (String)paramMap.get("telno");
		String jyusyo_cd = (String)paramMap.get("jyusyo_cd");
		
		if( StringUtils.isEmpty(telno) || StringUtils.isEmpty(jyusyo_cd) 
// OM-2013-0003967対応 20131102 星野 ADD START
			|| telno.length() < 6
// OM-2013-0003967対応 20131102 星野 ADD END
		){
			return true;
		}

		/** 照会 事前準備 */
		HashMap<String, String> condMap = new HashMap<String, String>();
		HashMap<String, Object> reqMap;
		Map<?, ?> resMap;

		// 住所情報変更初期表示情報取得コモンコンポーネント
		// マッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();

		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		
		// ●電話番号一意照会
		condMap.clear();
		condMap.put( JKKAdchgMapperCC.COND_KEY_TELNO, telno );
		reqMap = mapper.setEZM0121A010( param, fixedText, condMap );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		HashMap<String, Object> zm0121_a010 = mapper.getEZM0121A010( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
// OM-2013-0003967対応 20131102 星野 ADD START
		String kyokuNo;
// OM-2013-0003967対応 20131102 星野 ADD END
		// 電話番号マスタが取得できない場合は番ポ追加と判断し、電話番号の頭6桁を局番として使用
		if(zm0121_a010==null || StringUtils.isEmpty( (String)zm0121_a010.get(EZM0121A010CBSMsg1List.KYOKU_NO) ) ){
// OM-2013-0003967対応 20131102 星野 MOD START
//			return true;
			kyokuNo = telno.substring(0, 6);
			
		}else{
			kyokuNo = (String)zm0121_a010.get(EZM0121A010CBSMsg1List.KYOKU_NO);
// OM-2013-0003967対応 20131102 星野 MOD END
		}
		
		// 局番一意照会
		condMap.clear();
// OM-2013-0003967対応 20131102 星野 MOD START
//		condMap.put( JKKAdchgMapperCC.COND_KEY_KYOKU_NO, (String)zm0121_a010.get(EZM0121A010CBSMsg1List.KYOKU_NO));
		condMap.put( JKKAdchgMapperCC.COND_KEY_KYOKU_NO, kyokuNo);
// OM-2013-0003967対応 20131102 星野 MOD END
		reqMap = mapper.setEZM0301A010( param, fixedText, condMap );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		HashMap<String, Object> zm0301_a010 = mapper.getEZM0301A010( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		if( zm0301_a010 == null || StringUtils.isEmpty( (String)zm0301_a010.get(EZM0301A010CBSMsg1List.NO_KUKAKU_CD) ) ){
			return true;
		}
		
		// 番号区画コード(局番)
		String noKukakuC_Kyok = (String)zm0301_a010.get(EZM0301A010CBSMsg1List.NO_KUKAKU_CD);
		
		// 住所対象番号区画一覧照会
		condMap.clear();
		condMap.put( JKKAdchgMapperCC.COND_KEY_AD_CD, jyusyo_cd);
		reqMap = mapper.setEZM0091B010( param, fixedText, condMap );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		ArrayList<HashMap<String, Object>> zm0091_b010_list = mapper.getEZM0091B010( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		for( HashMap<String, Object> zm0091_b010_map : zm0091_b010_list ){
			String noKukakuCDs_Jusyo = (String)zm0091_b010_map.get(EZM0301A010CBSMsg1List.NO_KUKAKU_CD);
			
			// 局番の区画コードと住所の区画コードが一致すればOK
			if(noKukakuC_Kyok.equals(noKukakuCDs_Jusyo)){
				return true;
			}
		}
		
		return false;
	}
// OM-2013-0003333対応 20131019 星野 ADD END

// IT1-2014-0000040対応 20140124 星野 ADD START
	/**
	 * 転居先開通チェック処理.
	 * <br>
	 * @param   handle     セッションハンドル
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite z1Checker( SessionHandle handle, IRequestParameterReadWrite param, String fixedText ) throws Exception
	{
		try {
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
			if( paramMap == null ){
				return param;
			}
	
			// 判定結果初期化
			paramMap.put( "check_result", CHECK_OK );
	
			/** 転居先開通チェック */
			if (!z1Check( param, fixedText )) {
				// チェックエラー
				paramMap.put( "check_result", CHECK_ERR );
			}
	
			return param;
		} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}

	}
	
	private boolean z1Check(IRequestParameterReadWrite param, String fixedText) throws Exception {
		
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
		if( paramMap == null ){
			// チェックOK
			return true;
		}
		
		String svc_kei_no = (String)paramMap.get("svc_kei_no");
		if(StringUtils.isEmpty(svc_kei_no)){
			// チェックOK
			return true;
		}
		
		JKKAdchgHakkoSODCC adchgSodCC = new JKKAdchgHakkoSODCC();
		boolean isZ1Ordered = adchgSodCC.findZ1OrderHasBeenSent(param, keepSesHandle.get(), svc_kei_no);
		
		if(isZ1Ordered){
			// チェックNG
			return false;
		}
		
		return true;
	}
// IT1-2014-0000040対応 20140124 星野 ADD END
	
// ANK-2056-00-00 2014/04/28 start
	/**
	 * 電話セレクトオプションパックチェック処理.
	 * <br>
	 * @param   handle     セッションハンドル
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite judgeTelOpPack( SessionHandle handle, IRequestParameterReadWrite param, String fixedText ) throws Throwable
	{
		try {
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
	
			if( paramMap != null ){
				// 判定結果初期化
				paramMap.put( "check_result", CHECK_OK );
		
				/** 電話オプションパックチェック */
				if (!telOpPackCheck(handle, param, fixedText)) {
					// チェックエラー
					paramMap.put( "check_result", CHECK_ERR );
				}
			}
			
			return param;

		} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}
	}
	
	/**
	 * 電話セレクトオプションパックチェック処理
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   svcKeiNo   サービス契約番号
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	private boolean telOpPackCheck(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{

		/** 事前準備 */
		HashMap<String, Object> reqMap;
		HashMap<String, String> condMap = new HashMap<String, String>();
		Map<?, ?> resMap;
		
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );

		String svcKeiNo = (String)paramMap.get("svc_kei_no");
		String svcKeiUcwkNo = (String)paramMap.get("svc_kei_ucwk_no");
		String wribSvcCd = (String)paramMap.get("wri_svc_cd");
		
		if (StringUtils.isEmpty(svcKeiNo) || StringUtils.isEmpty(svcKeiUcwkNo)) {
			// サービス契約がない場合はチェックしない
			return true;
		}
		
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		//判定用料金コースコードリスト
		ArrayList<HashMap> paramJudgePcrsCdList = new ArrayList<HashMap>();
		
		//画面で引継を選んだオプションのリスト
		ArrayList<HashMap> judgePcrsCdList = (ArrayList<HashMap>)paramMap.get("judge_pcrs_cd_list");
		for(int i=0; judgePcrsCdList!=null&&i<judgePcrsCdList.size(); i++){
			HashMap childMap = judgePcrsCdList.get(i);
			String opSvcKeiNo = (String)childMap.get("op_svc_kei_no");

			//料金コースコードと料金プランコードを検索
			condMap.clear();
			condMap.put( JKKAdchgMapperCC.COND_KEY_OP_SVC_KEI_NO, opSvcKeiNo);
			condMap.put( JKKAdchgMapperCC.COND_KEY_OPEDATE, JCCBPCommon.getOpeDate(null));
			reqMap = mapper.setEKK0351A010( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			HashMap<String, Object> retMapEKK0351A010 = mapper.getEKK0351A010( param, fixedText, resMap );
			mapper.scResultCheck( param );

			HashMap opMap = new HashMap();
			// 料金コースコード
			opMap.put("pcrs_cd", retMapEKK0351A010.get(EKK0351A010CBSMsg1List.PCRS_CD));
			// 料金プランコード
			opMap.put("pplan_cd", retMapEKK0351A010.get(EKK0351A010CBSMsg1List.PPLAN_CD));
			if(!paramJudgePcrsCdList.contains(opMap)){
				paramJudgePcrsCdList.add(opMap);
			}
			
			// サブオプションを持っているか検索してチェック用のリストに足す
			condMap.clear();
			condMap.put( JKKAdchgMapperCC.COND_KEY_OP_SVC_KEI_NO, opSvcKeiNo);
			reqMap = mapper.setEKK0401B001( param, fixedText, condMap );
			resMap = scCall.run( reqMap, keepSesHandle.get() );
			ArrayList<HashMap<String, Object>> kk0401B001_list = mapper.getEKK0401B001( param, fixedText, resMap );
			mapper.scResultCheck( param );

			for( HashMap<String, Object> kk0401B001_map : kk0401B001_list ){
				if("900".compareTo((String)kk0401B001_map.get(EKK0401B001CBSMsg1List.SBOP_SVC_KEI_STAT))<0){
					continue;
				}
				HashMap subOpMap = new HashMap();
				// 料金コースコード
				subOpMap.put("pcrs_cd", kk0401B001_map.get(EKK0401B001CBSMsg1List.PCRS_CD));
				// 料金プランコード
				subOpMap.put("pplan_cd", kk0401B001_map.get(EKK0401B001CBSMsg1List.PPLAN_CD));
				if(!paramJudgePcrsCdList.contains(subOpMap)){
					paramJudgePcrsCdList.add(subOpMap);
				}
			}
		}
		
		// お得チェック部品呼び出し
		HashMap dataMap = new HashMap();
		// 基準年月日
		dataMap.put("base_date", paramMap.get("base_date"));
		dataMap.put("judge_pcrs_cd_list", paramJudgePcrsCdList);
		
		JFUOptPackAplyChkCC optPackAplyChkCC = new JFUOptPackAplyChkCC();
		param.setData("fixedTextJFUOptPackAplyChkCC", dataMap);
		param = optPackAplyChkCC.judgeOptPack(handle, param, "fixedTextJFUOptPackAplyChkCC");
		
		HashMap retMap = (HashMap)param.getData("fixedTextJFUOptPackAplyChkCC");
		String retWribSvcCd = (String)retMap.get("wrib_svc_cd");
		if(StringUtils.isEmpty(wribSvcCd) && StringUtils.isEmpty(retWribSvcCd)){
			//パック付けなくて正しい
			return true;
		}else if(StringUtils.isEmpty(wribSvcCd) && !StringUtils.isEmpty(retWribSvcCd)){
			//パックつけるべき
			return false;
		}else if(!StringUtils.isEmpty(wribSvcCd) && !wribSvcCd.equals(retWribSvcCd)){
			//パック違い
			return false;
		}
		// OK
		return true;
	}
// ANK-2056-00-00 2014/04/28 end

	
	// OM-2014-0002604 20140812 田中 ADD START
	/**
	 * 電話番号解約チェック処理.
	 * <br>
	 * @param   handle     セッションハンドル
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	public IRequestParameterReadWrite judgeDslTelNo( SessionHandle handle, IRequestParameterReadWrite param, String fixedText ) throws Throwable
	{
		try {
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			/** 事前準備 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
	
			if( paramMap != null ){
				// 判定結果初期化
				paramMap.put( "check_result", CHECK_OK );
		
				/** 電話の内訳のステータスチェック */
				if (!telNoDslCheck(handle, param, fixedText)) {
					// チェックエラー
					paramMap.put( "check_result", CHECK_ERR );
				}
			}
			
			return param;

		} finally {

			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null){
				keepSesHandle.remove();
			}
		}
	}
	
	/**
	 * 住変で解約する予定の電話番号が解約されているかのチェック
	 * <br>
	 * @param   param      モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param   fixedText  ユーザ任意文字列
	 * @param   svcKeiNo   サービス契約番号
	 * @throws  Exception  例外が発生した場合
	 */
	@SuppressWarnings({ "unchecked" })
	private boolean telNoDslCheck(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		
		
		HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );

		String svcKeiNo = (String)paramMap.get("svc_kei_no");
		
		// 電話の１番号目と２番号目の内訳番号を取得する
		String svcKeiUcwkNo1 = (String)paramMap.get("svc_kei_ucwk_no_1");
		String svcKeiUcwkNo2 = (String)paramMap.get("svc_kei_ucwk_no_2");
		
		// サービス契約がないまたは、電話の内訳番号が存在しない場合はチェックしない
		if (StringUtils.isEmpty(svcKeiNo) || (StringUtils.isEmpty(svcKeiUcwkNo1) && StringUtils.isEmpty(svcKeiUcwkNo2))) {
			return true;
		}
		
		// １番号目の内訳番号が取得できている場合
		if (!StringUtils.isEmpty(svcKeiUcwkNo1)) {
			
			// １番号目のサービス契約内訳のステータスが解約済またはキャンセル済であるかのチェック
			if (telNoStaCheck(param, fixedText, svcKeiUcwkNo1)) {
				// 解約済またはキャンセル済の場合falseを返す
				return false;
			}
		}
		
		// ２番号目の内訳番号が取得できている場合
		if (!StringUtils.isEmpty(svcKeiUcwkNo2)) {
			
			// ２番号目のサービス契約内訳のステータスが解約済またはキャンセル済であるかのチェック
			if (telNoStaCheck(param, fixedText, svcKeiUcwkNo2)) {
				// 解約済またはキャンセル済の場合falseを返す
				return false;
			}
		}
		
		// 電話のサービス契約内訳が解約もキャンセルもされていない場合
		return true;
	}
	
	/**
	 * 電話のサービス契約内訳が解約済またはキャンセル済かどうかをチェックする
	 * <br>
	 * @param   svcKeiUcwkNo      サービス契約内訳番号
	 * @throws  Exception  例外が発生した場合
	 */
	private boolean telNoStaCheck(IRequestParameterReadWrite param, String fixedText, String svcKeiUcwkNo) throws Throwable
	{
		/** 事前準備 */
		HashMap<String, Object> reqMap;
		HashMap<String, String> condMap = new HashMap<String, String>();
		Map<?, ?> resMap;
		
		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// サービス契約内訳の一意照会
		condMap.clear();
		condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		condMap.put( JKKAdchgMapperCC.COND_KEY_OPEDATE, JCCBPCommon.getOpeDate(null));
		reqMap = mapper.setEKK0161A010( param, fixedText, condMap );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		HashMap<String, Object> retMapEKK0161A010 = mapper.getEKK0161A010( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		// サービス契約内訳のステータスが解約済またはキャンセル済かどうかのチェック
		String ucwkSta = (String)retMapEKK0161A010.get(EKK0161A010CBSMsg1List.SVC_KEI_UCWK_STAT);
		if (JKKSvcConst.SVC_KEI_STAT_910.equals(ucwkSta) || JKKSvcConst.SVC_KEI_STAT_920.equals(ucwkSta)) {
			return true;
		}
		
		// サービス契約内訳のステータスが解約済またはキャンセル済でない場合
		return false;
	}
	// OM-2014-0002604 20140812 田中 ADD END
	// OM-2017-0000234 2017/06/15 ADD START
	/**
	 * 電話サービス契約ステータス取得
	 * <br>
	 * @param handle セッションハンドル
	 * @param param モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @throws Throwable 例外が発生した場合
	 */
	public IRequestParameterReadWrite getSvcKeiStatTel(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		try
		{
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			/** 業務データ取得 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
	
			if( paramMap != null )
			{
				// ｅｏ光電話＿変更後＿サービス契約番号取得
				String svcKeiNoTelAf = (String)paramMap.get("svc_kei_no_tel_af");
				
				if (!JKKStringUtil.isNullBlank(svcKeiNoTelAf))
				{
					// サービス契約ステータス取得
					String svcKeiStat = getSvcKeiStat(param, fixedText, svcKeiNoTelAf);
					
					// サービス契約ステータスを返却
					paramMap.put("svc_kei_stat_tel_af", svcKeiStat);
				}
			}
			
			return param;

		} finally 
		{
			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null)
			{
				keepSesHandle.remove();
			}
		}
	}
	
	/**
	 * 指定されたサービス契約番号のカレントのサービス契約ステータスを取得します。
	 * <BR>
	 * @param param モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @param svcKeiNo サービス契約番号
	 * @throws Throwable 例外が発生した場合
	 */
	private String getSvcKeiStat(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws Throwable
	{
		// 戻り値
		String result = "";
		HashMap<String, Object> reqMap;
		HashMap<String, String> condMap = new HashMap<String, String>();
		Map<?, ?> resMap;
		
		// 住所変更登録CCマッピングクラスインスタンスを取得
		JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
		
		// SCリクエストInvokerを取得
		ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();
		
		// サービス契約一意照会
		condMap.clear();
		condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svcKeiNo);
		condMap.put( JKKAdchgMapperCC.COND_KEY_OPEDATE, JCCBPCommon.getOpeDate(null));
		reqMap = mapper.setEKK0081A010( param, fixedText, condMap );
		resMap = scCall.run( reqMap, keepSesHandle.get() );
		HashMap<String, Object> retMapEKK0081A010 = mapper.getEKK0081A010( param, fixedText, resMap );
		mapper.scResultCheck( param );
		
		if (null != retMapEKK0081A010)
		{
			result = (String)retMapEKK0081A010.get(EKK0081A010CBSMsg1List.SVC_KEI_STAT);
		}
		
		return result;
	}
	// OM-2017-0000234 2017/06/15 ADD END
	//ANK-3149-04-00 ADD START
	/**
	 * 転居先に引き継げる、セキュリティーパック・プレミアムパック・サギウォールをチェックする。
	 * <br>
	 * @param handle セッションハンドル
	 * @param param モデルグループ、コントロールマップを含むリクエストパラメータ
	 * @param fixedText ユーザ任意文字列
	 * @throws Throwable 例外が発生した場合
	 */
	public IRequestParameterReadWrite checkSecurityPackOrInetsgwl(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		try
		{
			/** リソース保持 */
			// セッションハンドルをローカル変数に保持
			keepSesHandle.set(handle);
	
			/** 業務データ取得 */
			HashMap<String, Object> paramMap = (HashMap<String, Object>)( param.getData(fixedText) );
	
			String CHECK_RESULT_OK = "0";
			
			String CHECK_RESULT_NG = "1";
			
			String CHECK_RESULT_NG2 = "2";
			
			if( paramMap != null )
			{
				// ｅｏ光ネット＿変更前＿サービス契約番号
				String svcKeiNoNetBf = (String)paramMap.get("net_svc_kei_no_bf");
				// ｅｏ光ネット＿変更後＿サービス契約番号
				String svcKeiNoNetAf = (String)paramMap.get("net_svc_kei_no_af");
				// sysid
				String sysid = (String)paramMap.get("sysid");
				// 住所変更番号
				String adchgAdchgNo = (String)paramMap.get("adchg_adchg_no");
				
				//ｅｏ光ネット＿変更後＿サービス契約番号が空の場合処理を終了する。
				if (svcKeiNoNetAf == null || StringUtils.isEmpty(svcKeiNoNetAf)) {
					return param;
				}
				
				// ノートン存在有無
				boolean netNtfmlprmUm = false;
				// サギウォール存在有無
				boolean netInetsgwlUm = false;
				// 割引セキュリティーパック存在有無
				boolean securityPackUm = false;
				// 割引プレミアムパック存在有無
				boolean premiumPackUm = false;
				
				// 判定結果初期化
				paramMap.put( "check_security_result", CHECK_RESULT_OK );
				// 判定結果初期化
				paramMap.put( "check_premium_result", CHECK_RESULT_OK );
				// 判定結果初期化
				paramMap.put( "check_inetsgwl_result", CHECK_RESULT_OK );
				// 判定結果初期化
				paramMap.put( "check_ntfmlprm_result", CHECK_RESULT_OK );
				
				if (!JKKStringUtil.isNullBlank(svcKeiNoNetBf) || !JKKStringUtil.isNullBlank(svcKeiNoNetAf))
				{
					HashMap<String, String> condMap = new HashMap<String, String>();
					// マッピングクラスインスタンスを取得
					JKKAdchgMapperCC mapper = JKKAdchgMapperCC.getInstance();
					HashMap<String, Object> reqMap;
					Map<?, ?> resMap;
					// SCリクエストInvokerを取得
					ServiceComponentRequestInvoker scCall = new ServiceComponentRequestInvoker();

					condMap.clear();
					condMap.put( JKKAdchgMapperCC.COND_KEY_ADCHG_NO, adchgAdchgNo);
					reqMap = mapper.setEKK2101B001( param, fixedText, condMap );
					resMap = scCall.run( reqMap, keepSesHandle.get() );
					ArrayList<HashMap<String, Object>> kk2101_b001_list = mapper.getEKK2101B001( param, fixedText, resMap );
					mapper.scResultCheck( param );

					// 有効データの取得
					ArrayList<HashMap<String, Object>> exAdchgDtl = getExistDt(kk2101_b001_list, EKK2101B001CBSMsg1List.MK_FLG);

					/** オプションサービス契約情報の取得 */
					ArrayList<HashMap<String, Object>> opSvcKeiLst = getDtlDt(exAdchgDtl, JKKAdchgInitDspConstCC.CDXXXXX_OP_SVC_KEI);
					Iterator<HashMap<String, Object>> opSvcKeiLstIte = opSvcKeiLst.iterator();
					while(opSvcKeiLstIte.hasNext()){

						// カレントのオプションサービス契約情報の取得
						HashMap<String, Object> curOpSvcKei = opSvcKeiLstIte.next();

						// 一意検索に使用する検索条件マップをクリア
						condMap.clear();

						// 一意照会の対象となるオプションサービス契約番号を取得
						String svcKeiNo_aft = (String)curOpSvcKei.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO);

						if(StringUtils.isEmpty(svcKeiNo_aft)){
							continue;
						}

						// 変更後識別番号を検索キーとする
						condMap.put(JKKAdchgMapperCC.COND_KEY_OP_SVC_KEI_NO, svcKeiNo_aft);

						condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JKKAdchgConstCC.DEFAULT_RSV_APLY_YMD);
						reqMap = mapper.setEKK0351A010( param, fixedText, condMap );
						resMap = scCall.run( reqMap, keepSesHandle.get() );
						HashMap<String, Object> kk0351_a010_map = mapper.getEKK0351A010( param, fixedText, resMap );
						mapper.scResultCheck( param );

						String opSvcCd = (String)kk0351_a010_map.get(EKK0351A010CBSMsg1List.OP_SVC_CD);
						//インターネットサギウォール・ノートン以外の場合、次の処理へ
						if ( !(opSvcCd.equals(JKKStrConst.OP_SVC_CD_INETSGWL) || opSvcCd.equals(JKKStrConst.OP_SVC_CD_NTFMLPRM)) ) {
							continue;
						}
						//インターネットサギウォールが存在している場合、
						if (opSvcCd.equals(JKKStrConst.OP_SVC_CD_INETSGWL)) {
							netInetsgwlUm = true;
						}
						//ノートンファミリープレミアが存在している場合、
						if (opSvcCd.equals(JKKStrConst.OP_SVC_CD_NTFMLPRM)) {
							netNtfmlprmUm = true;
						}
					}
					
					/** ネットパック情報の取得 */
					ArrayList<HashMap<String, Object>> netPackLst = getDtlDt(exAdchgDtl, JKKAdchgInitDspConstCC.CDXXXXX_NET_PACK);
					Iterator<HashMap<String, Object>> netPackLstIte = netPackLst.iterator();
					while(netPackLstIte.hasNext()){

						// カレントの割引サービス契約番号の取得
						HashMap<String, Object> curKojiAkNo = netPackLstIte.next();

						// 一意検索に使用する検索条件マップをクリア
						condMap.clear();

						// 一意照会の対象となる割引サービス契約番号を取得
						String wribSvcKeiAft = (String)curKojiAkNo.get(EKK2101B001CBSMsg1List.CHAF_SKBT_NO);

						if(StringUtils.isEmpty(wribSvcKeiAft)){
							continue;
						}
						
						// ・EKK0451A010 割引サービス契約一意照会
						condMap.put( JKKAdchgMapperCC.COND_KEY_WRIB_SVC_KEI_NO, wribSvcKeiAft );
						// 運用日付を設定
						condMap.put(JKKAdchgMapperCC.COND_KEY_OPEDATE, JCCBPCommon.getOpeDate(null));
						reqMap = mapper.setEKK0451A010( param, fixedText, condMap );
						resMap = scCall.run( reqMap, keepSesHandle.get() );
						HashMap<String, Object> kk0451_a010 = mapper.getEKK0451A010( param, fixedText, resMap );
						mapper.scResultCheck( param );
						
						String wribSvcCd = (String)kk0451_a010.get(EKK0451A010CBSMsg1List.WRIB_SVC_CD);
						//セキュリティーパック・プレミアムパック以外の場合、次の処理へ
						if ( !(wribSvcCd.equals(JKKStrConst.WRIB_SVC_CD_SECURITY_PACK) || wribSvcCd.equals(JKKStrConst.WRIB_SVC_SMARTLINK_PREMIUM)) ) {
							continue;
						}
						//セキュリティーパックが存在している場合、
						if (wribSvcCd.equals(JKKStrConst.WRIB_SVC_CD_SECURITY_PACK)) {
							securityPackUm = true;
						}
						//プレミアムパックが存在している場合、
						if (wribSvcCd.equals(JKKStrConst.WRIB_SVC_SMARTLINK_PREMIUM)) {
							premiumPackUm = true;
						}
						
					}
					
					//転居先にセキュリティ割引が存在するかチェックを行う。
					if (securityPackUm == true || premiumPackUm == true) {
						// ・EKK0451B002 割引サービス契約一覧照会（サービス契約番号）
						condMap.clear();
						condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svcKeiNoNetAf );
						reqMap = mapper.setEKK0451B002( param, fixedText, condMap );
						resMap = scCall.run( reqMap, keepSesHandle.get() );
						ArrayList<HashMap<String, Object>> kk0451_b002_list = mapper.getEKK0451B002_SUB( param, fixedText, resMap );
						mapper.scResultCheck( param );

						// 一覧照会にて取得したデータ数分、繰り返し
						Iterator<HashMap<String, Object>> kk0451B002Ite = kk0451_b002_list.iterator();
						while(kk0451B002Ite.hasNext()){
							// カレントの情報を取得
							HashMap<String, Object> curWribSvcKeiLst = kk0451B002Ite.next();

							// ・EKK0451A010 割引サービス契約一意照会
							condMap.clear();
							String wribSvcKeiStat = (String)curWribSvcKeiLst.get(EKK0451B002CBSMsg1List.WRIB_SVC_KEI_STAT);
							String wribSvcCd = (String)curWribSvcKeiLst.get(EKK0451B002CBSMsg1List.WRIB_SVC_CD);
							//ステータスが解約済・キャンセル済の場合処理をしない
							if ( wribSvcKeiStat.equals(JKKStrConst.CD00055_DSLZM) || wribSvcKeiStat.equals(JKKStrConst.CD00055_CSLZM) ) {
								continue;
							}
							//引継予定のセキュリティーパックが引継先にセキュリティーパックが存在する場合
							if ( securityPackUm == true && wribSvcCd.equals(JKKStrConst.WRIB_SVC_CD_SECURITY_PACK) ) {
								// チェックエラー
								paramMap.put( "check_security_result", CHECK_RESULT_NG );
							}
							//引継予定のセキュリティーパックなのに引継先にプレミアムパックが存在する場合
							if ( securityPackUm == true && wribSvcCd.equals(JKKStrConst.WRIB_SVC_SMARTLINK_PREMIUM) ) {
								// チェックエラー
								paramMap.put( "check_security_result", CHECK_RESULT_NG2 );
							}
							//引継予定のプレミアムパックが引継先にプレミアムパックが存在する場合
							if ( premiumPackUm == true && wribSvcCd.equals(JKKStrConst.WRIB_SVC_SMARTLINK_PREMIUM) ) {
								// チェックエラー
								paramMap.put( "check_premium_result", CHECK_RESULT_NG );
							}
							//引継予定のプレミアムパックなのに、引継先にセキュリティーパックが存在する場合
							if ( premiumPackUm == true && wribSvcCd.equals(JKKStrConst.WRIB_SVC_CD_SECURITY_PACK) ) {
								// チェックエラー
								paramMap.put( "check_premium_result", CHECK_RESULT_NG2 );
							}
						}
					}

					//転居先にサギウォールオプションが存在するかチェックを行う。
					if (netInetsgwlUm == true) {
						// オプションサービス契約一覧照会（サービス契約番号）
						condMap.clear();
						condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svcKeiNoNetAf );
						condMap.put( JKKAdchgMapperCC.COND_KEY_OP_SVC_CD, JKKStrConst.OP_SVC_CD_INETSGWL);
						reqMap = mapper.setEKK0351B002( param, fixedText, condMap );
						resMap = scCall.run( reqMap, keepSesHandle.get() );
						ArrayList<HashMap<String, Object>> kk0351_b002_list = mapper.getEKK0351B002( param, fixedText, resMap );
						mapper.scResultCheck( param );
						// 一覧照会にて取得したデータ数分、繰り返し
						Iterator<HashMap<String, Object>> kk0351B002Ite = kk0351_b002_list.iterator();
						while(kk0351B002Ite.hasNext()){
							// カレントの情報を取得
							HashMap<String, Object> curOpSvcKeiLst = kk0351B002Ite.next();

							condMap.clear();
							String opSvcKeiStat = (String)curOpSvcKeiLst.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT);
							String opSvcCd = (String)curOpSvcKeiLst.get(EKK0351B002CBSMsg1List.OP_SVC_CD);
							//ステータスが解約済・キャンセル済の場合処理をしない
							if ( opSvcKeiStat.equals(JKKStrConst.CD00055_DSLZM) || opSvcKeiStat.equals(JKKStrConst.CD00055_CSLZM) ) {
								continue;
							}
							//サギウォールの場合
							if (opSvcCd.equals(JKKStrConst.OP_SVC_CD_INETSGWL)) {
								// チェックエラー
								paramMap.put( "check_inetsgwl_result", CHECK_RESULT_NG );
							}
						}
					}
					//転居先にノートンオプションが存在するかチェックを行う。
					if (netNtfmlprmUm == true) {
						// オプションサービス契約一覧照会（サービス契約番号）
						condMap.clear();
						condMap.put( JKKAdchgMapperCC.COND_KEY_SVC_KEI_NO, svcKeiNoNetAf );
						condMap.put( JKKAdchgMapperCC.COND_KEY_OP_SVC_CD, JKKStrConst.OP_SVC_CD_NTFMLPRM);
						reqMap = mapper.setEKK0351B002( param, fixedText, condMap );
						resMap = scCall.run( reqMap, keepSesHandle.get() );
						ArrayList<HashMap<String, Object>> kk0351_b002_list = mapper.getEKK0351B002( param, fixedText, resMap );
						mapper.scResultCheck( param );
						// 一覧照会にて取得したデータ数分、繰り返し
						Iterator<HashMap<String, Object>> kk0351B002Ite = kk0351_b002_list.iterator();
						while(kk0351B002Ite.hasNext()){
							// カレントの情報を取得
							HashMap<String, Object> curOpSvcKeiLst = kk0351B002Ite.next();

							condMap.clear();
							String opSvcKeiStat = (String)curOpSvcKeiLst.get(EKK0351B002CBSMsg1List.OP_SVC_KEI_STAT);
							String opSvcCd = (String)curOpSvcKeiLst.get(EKK0351B002CBSMsg1List.OP_SVC_CD);
							//ステータスが解約済・キャンセル済の場合処理をしない
							if ( opSvcKeiStat.equals(JKKStrConst.CD00055_DSLZM) || opSvcKeiStat.equals(JKKStrConst.CD00055_CSLZM) ) {
								continue;
							}
							//ノートンの場合
							if (opSvcCd.equals(JKKStrConst.OP_SVC_CD_NTFMLPRM)) {
								// チェックエラー
								paramMap.put( "check_ntfmlprm_result", CHECK_RESULT_NG );
							}
						}
					}
				}
			}
			
			return param;

		} finally 
		{
			// ・セッションハンドル保持域
			if(keepSesHandle.get() != null)
			{
				keepSesHandle.remove();
			}
		}
	}
	
	/**
	 * 住所変更明細 各種情報取得処理.
	 * <dd>住所変更明細スキーマの情報を元に、指定した住所変更明細種別コードの情報を取得する。
	 * <br>
	 * @param   dtlLst   住所変更明細スキーマから取得した住所変更明細情報
	 * @param   dtlSbtCd 取得対象となる住所変更明細種別コード
	 * @throws  Throwable     例外が発生した場合
	 */
	private ArrayList<HashMap<String, Object>> getDtlDt(ArrayList<HashMap<String, Object>> dtlLst, String dtlSbtCd) throws Throwable
	{
		// 返却域を準備
		ArrayList<HashMap<String, Object>> resLst = new ArrayList<HashMap<String, Object>>();


		// 取得対象の住所明細種別コードが未設定の場合は、
		// 該当データなしとする
		if(StringUtils.isEmpty(dtlSbtCd)){
			return resLst;
		}


		// 指定された住所変更明細種別コードと一致する明細データの抽出
		Iterator<HashMap<String, Object>> dtlLstIte = dtlLst.iterator();
		while(dtlLstIte.hasNext()){

			// カレントの明細データを取得
			HashMap<String, Object> curDtlDt = dtlLstIte.next();

			// 住所変更明細種別コードが指定されたものと一致するかをチェック
			if(!dtlSbtCd.equals((String)curDtlDt.get(EKK2101B001CBSMsg1List.ADCHG_DTL_SBT_CD))){

				// 次の明細データを読み出す
				continue;
			}

			// 対象データを取得し、ディープコピー
			HashMap<String, Object> tgtDt = new HashMap<String, Object>();
			tgtDt.putAll(curDtlDt);

			// 返却域へ設定
			resLst.add(tgtDt);
		}

		return resLst;
	}
	
	/**
	 * 一覧データ取得処理.
	 * <dd>パラメータの情報を元に、一覧照会結果から有効データを取得する。
	 * <br>
	 * @param   searchResLst  一覧照会結果
	 * @param   mkFlgColNm    CBSMsgクラスに定義されている無効フラグのカラム名称
	 * @throws  Throwable  例外が発生した場合
	 * @return  有効データ
	 */
	private ArrayList<HashMap<String, Object>> getExistDt(ArrayList<HashMap<String, Object>> searchResLst, String mkFlgColNm) throws Throwable
	{
		// 返却域を準備
		ArrayList<HashMap<String, Object>> enaDtLst = new ArrayList<HashMap<String, Object>>();
		

		// サイズのチェック
		if(searchResLst != null && searchResLst.size() > 0){

			// サイズが１以上の場合、１件ずつデータをチェック
			Iterator<HashMap<String, Object>> resLstIte = searchResLst.iterator();
			while(resLstIte.hasNext()){

				// カレントデータを取得
				HashMap<String, Object> curDt = resLstIte.next();

				// 無効フラグが「無効」となっているかのチェック
				if(!JKKAdchgInitDspConstCC.CD00016_ENA.equals(curDt.get(mkFlgColNm))){

					// 次のデータを読み出す
					continue;
				}
				// 住所変更スキーマ（EKK2091）の場合は住所変更ステータス：完了済を無視する
				if (curDt.containsKey(EKK2091B001CBSMsg1List.ADCHG_STAT)) {
					if (ADCHG_STAT_COMPLETE.equals(curDt.get(EKK2091B001CBSMsg1List.ADCHG_STAT))) {
						continue;
					}
				}
				// 有効データを取得し、ディープコピー
				HashMap<String, Object> enaDt = new HashMap<String, Object>();
				enaDt.putAll(curDt);

				// 返却域へ設定
				enaDtLst.add(enaDt);
			}
		}

		return enaDtLst;
	}
	//ANK-3149-04-00 ADD END
}
