/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKA15501SFLogic
*   ソースファイル名：KKA15501SFLogic.java
*   作成者          ：富士通
*   日付            ：2015年08月18日
*＜機能概要＞
*   多機能ルーター機能変更連携を行います。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*	v18.00.00	2015/08/18	 FJ) 河邊	【ANK-2631-00-00】ワンストップ案件（ＳＴＥＰ１）
*	v23.00.00	2016/03/03	 FJ) 河邊	【ANK-2789-00-00】【WO7】多機能ルーター機能変更時のファミリーパック契約有無チェック機能追加
*   v26.00.00	2016/06/10   FJ)笠川    【ANK-2687-00-00】 プレミアムサポート施策
*	v26.00.01	2016/07/28	 FJ）柳		【IT1-2016-0000100】異動区分選択切替マッピング漏れ対応
*	v41.00.00	2019/05/14	 FJ）河邊	【OM-2019-0000469】WO7による多機能ルーターのルーター機能変更チェック不備
*	v47.00.00	2019/12/16	 FJ)Neil	【ANK-3764-00-00】WO7⇒eoのAPI連携におけるリターンコード=99の改修
*	v59.00.00	2022/04/05	 FJ)舘山	【OM-2020-0001266】ルータオプション解約でシステムエラー
*	v60.00.00	2022/08/09	 FJ)謝		【ANK-4287-00-00】【eo定期】機器オプションの予約機能対応
*	v61.00.00	2023/05/09	 FJ)謝		【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応
*	v61.00.01	2023/10/03	 FJ)舘山	【ANK-4315-00-00】【eo定期】 eoホームゲートウェイ導入対応
**********************************************************************/

package eo.web.webview.KKA15501SF;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import eo.web.webview.KKA15401SF.KKW03301SFLogic;
import eo.web.webview.KKA15401SF.KKW03301SFConst;
import eo.web.webview.KKA15401SF.KKA15401SFLogic;


import com.fujitsu.futurity.model.common.check.HalfCharCheck;
import com.fujitsu.futurity.model.common.check.LengthCheck;
import com.fujitsu.futurity.model.common.check.MixCharCheck;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKStringUtil;
import eo.web.webview.common.JKKOneStopApiCommonUtil;
import eo.web.webview.common.OneStopDataBeanAccess;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.commonOneStop.JCCMessageCache;
import eo.web.webview.commonOneStop.JCCWebCommon;
import eo.web.webview.commonOneStop.JKKCommonConst;
import eo.web.webview.mapping.KKSV0061_KKSV0061OPDBMapper;
import eo.web.webview.mapping.KKSV0062_KKSV0062OPDBMapper;
import eo.web.webview.mapping.KKSV0463_KKSV0463OPDBMapper;
import eo.web.webview.mapping.KKSV0551_KKSV0551OPDBMapper;
import eo.web.webview.mapping.KKSV0820_KKSV0820OPDBMapper;

/**
 * 多機能ルーター機能変更連携を行います。
 * @author 富士通
 *
 */
@SuppressWarnings("serial")
public class KKA15501SFLogic extends KKW03301SFLogic
{
	
	/** ワンストップ返却用ワーニングメッセージ格納Map */
	private Map<String, String[]> warMsgMap = null;
	
	/** ワンストップ返却用単関連エラーメッセージ格納Map */
	private Map<String, String[]> tkckErrMsgMap = null;
	
	/** ワンストップ返却用エラーメッセージ格納Map */
	private Map<String, String[]> errMsgMap = null;
	
	/** ワンストップ返却用SIFエラー格納Map */
	private Map<String, String[]> sifErrMap = null;
	
	/** ワンストップ用受信パラメタ格納Map */
	private Map<String, Object> requestMap = null;
	
	/** 機能コード */
	private String funcCode = null;
	
	/** インターフェイスID */
	private static final String IF_ID = "KKIFE280";
	
	/** ワンストップ用ワーニング保持リスト */
	private List<Map<String, String>> warnList = null;
	
	/** コード区分リスト格納用Map */
	private Map<String, List<Map<String, String>>> cdDivListMap = null;
	
	/** ワンストップ処理時異動区分(00026:機器契約変更) */
	private static final String OS_IDO_DIV = JKKCommonConst.IDO_DIV_VALUE_00026;

	// IT1-2016-0000100 2016/07/28 ADD START
	// サービス提供履歴フラグ
	private String svcTkRrkFlg = "0";
	// IT1-2016-0000100 2016/07/28 ADD END
	
	/**
	 * ワンストップ用APIコントロールメソッドです。
	 * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	public boolean apiControl() throws Exception
	{
		try
		{
			try
			{
				// API用初期処理
				if (!this.apiInit())
				{
					// 業務規制中の為処理終了
					return true;
				}
				
				// ワンストップ独自単項目チェック
				if (!this.singleChkForOneStop())
				{
					// エラー発生の為処理終了
					return true;
				}
				
				// ワンストップ独自単関連チェック
				if (!this.singleKnrnChkForOneStop())
				{
					// エラー発生の為処理終了
					return true;
				}
				
				// ワンストップ独自共通関連チェック
				if (!this.commonKnrnChkForOneStop())
				{
					// エラー発生の為処理終了
					return true;
				}
				
				// ワンストップ独自先行関連チェック
				if (!this.senkoKnrnChkForOneStop())
				{
					// エラー発生の為処理終了
					return true;
				}
				
				// 初期処理用DataBean上書き処理
				this.overwriteDataBeanForInit();
				
				////////////////////////////////////////////////////////
				// 機器提供サービス契約一覧画面 初期表示処理
				////////////////////////////////////////////////////////
				this.init();
				
				// メッセージチェック
				if (!JKKOneStopApiCommonUtil.msgChk(this, warMsgMap, tkckErrMsgMap, errMsgMap, warnList, funcCode, IF_ID))
				{
					// エラー発生の為処理終了
					return true;
				}
				
				// ワンストップ独自関連チェック（初期処理後）
				if (!this.knrnChkForOneStopAfInit())
				{
					// エラー発生の為処理終了
					return true;
				}
				
				////////////////////////////////////////////////////////
				//機能ルーター／PLC登録連携 隠し項目初期値設定処理（機器一覧）
				////////////////////////////////////////////////////////
				X31SDataBeanAccess bean = super.getServiceFormBean();
				KKA15401SFLogic.setHidShkvForKikiIcrn(bean);
				
				////////////////////////////////////////////////////////
				// 機器提供サービス契約一覧画面 機器オプションボタン押下処理
				////////////////////////////////////////////////////////
				this.forwardKikiOption();
				
				if (!JKKOneStopApiCommonUtil.msgChk(this, warMsgMap, tkckErrMsgMap, errMsgMap, warnList, funcCode, IF_ID))
				{
					// エラー発生の為処理終了
					return true;
				}
				
				////////////////////////////////////////////////////////
				// 多機能ルーターオプションサービス契約更新画面 初期表示処理
				////////////////////////////////////////////////////////
				this.initKkw19701();
				
				if (!JKKOneStopApiCommonUtil.msgChk(this, warMsgMap, tkckErrMsgMap, errMsgMap, warnList, funcCode, IF_ID))
				{
					// エラー発生の為処理終了
					return true;
				}
				
				// DataBean上書き及び関連チェック処理
				if (!this.overwriteDataBeanKnrnChk())
				{
					// エラー発生の為処理終了
					return true;
				}
				
				////////////////////////////////////////////////////////
				// 多機能ルーターオプションサービス契約更新画面 更新確認ボタン押下処理
				////////////////////////////////////////////////////////
				this.forwardUpdCfmKkw19701();
				
				if (!JKKOneStopApiCommonUtil.msgChk(this, warMsgMap, tkckErrMsgMap, errMsgMap, warnList, funcCode, IF_ID))
				{
					// エラー発生の為処理終了
					return true;
				}
				
				////////////////////////////////////////////////////////
				// 多機能ルーターオプションサービス契約更新確認画面 適用ボタン押下処理
				////////////////////////////////////////////////////////
				this.forwardFixKkw19701();
				
				if (!JKKOneStopApiCommonUtil.msgChk(this, warMsgMap, tkckErrMsgMap, errMsgMap, warnList, funcCode, IF_ID))
				{
					// エラー発生の為処理終了
					return true;
				}
				
				////////////////////////////////////////////////////////
				// 機器提供サービス契約一覧画面 更新確認ボタン押下処理
				////////////////////////////////////////////////////////
				this.forwardUpdCfm();
				
				// メッセージチェック
				if (!JKKOneStopApiCommonUtil.msgChk(this, warMsgMap, tkckErrMsgMap, errMsgMap, warnList, funcCode, IF_ID))
				{
					// エラー発生の為処理終了
					return true;
				}
				
				// 機能コードがチェック&登録の場合のみ、確定ボタン押下処理
				if (JKKCommonConst.FUNC_CODE_1.equals(funcCode))
				{
					////////////////////////////////////////////////////
					// 機器提供サービス契約一覧画面 確定ボタン押下処理
					////////////////////////////////////////////////////
					this.forwardFix();
					
					// メッセージチェック
					if (!JKKOneStopApiCommonUtil.msgChk(this, warMsgMap, tkckErrMsgMap, errMsgMap, warnList, funcCode, IF_ID))
					{
						// エラー発生の為処理終了
						return true;
					}
				}
				
				// API用終了処理(正常終了)
				this.apiTerminal("00");
			}
			catch (JCCWebServiceException wse)
			{
				// サービスIFエラー処理
				JKKOneStopApiCommonUtil.msgChk(this, warMsgMap, tkckErrMsgMap, errMsgMap, warnList, funcCode, IF_ID);
				X31CMessageResult msgResult = wse.getMessageList();
				JKKOneStopApiCommonUtil.sifErrChk(this, msgResult, sifErrMap, warnList, IF_ID);
			}
		}
		catch (Exception e)
		{
			// 例外発生時はシステムエラー
			JKKOneStopApiCommonUtil.printErrorLog(getSessionId(), "KKIFE280_多機能ルーター機能変更（ワンストップ）にて例外が発生しました。", e);
			this.apiTerminal("99");
		}
		return true;
	}

	/**
	 * ワンストップ用API初期処理メソッドです。
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private boolean apiInit() throws Exception
	{
		// 受信データXML⇒Map変換
		requestMap = (Map<String, Object>)JKKOneStopApiCommonUtil.getReceiveXml(getSessionId()).get(IF_ID + "_RECEIVE");
		
		// 機能コード取得(業務規制チェック用に単項目チェック前に取得)
		funcCode = (String)requestMap.get("func_code");
		
		// 機能コードがチェック以外の場合、業務規制チェック
		if (!JKKCommonConst.FUNC_CODE_2.equals(funcCode)
				&& !JKKOneStopApiCommonUtil.checkRegulationForUpdateApi(this))
		{
			// エラーメッセージを設定
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5001", warnList, funcCode, IF_ID);
			return false;
		}
		
		// エラー・ワーニングメッセージマップ作成
		this.createMsgMap();
		
		// ワーニングリスト生成
		warnList = new ArrayList<Map<String, String>>();
		
		return true;
	}

	/**
	 * メッセージマップ作成処理です。
	 * 画面独自処理にて発生しうるエラーメッセージをMapに格納する。
     * <BR>
	 * @throws Exception 
	 */
	private void createMsgMap() throws Exception
	{
		// メッセージ読み込み
		JCCMessageCache.setMessageCache();
		
		// ワーニングメッセージ格納Map組み立て
		warMsgMap = new HashMap<String, String[]>();
		warMsgMap.put(JCCMessageCache.getMessage("EKB9010--Q"), new String[]{"W0001", ""});
		
		// 単関連エラーメッセージ格納Map組み立て（※なし）
		tkckErrMsgMap = new HashMap<String, String[]>();
		
		// エラーメッセージ格納Map組み立て
		errMsgMap = new HashMap<String, String[]>();
		errMsgMap.put(JCCMessageCache.getMessage("EKB9140-KW"), new String[]{"E5013", ""});
		errMsgMap.put(JCCMessageCache.getMessage("EKBD990-KW"), new String[]{"E5018", ""});
// ▽▽▽ OM-2020-0001266 ADD START
		errMsgMap.put(JCCMessageCache.getMessage("EKBF680-JW"), new String[]{"E5004", ""});
// △△△ OM-2020-0001266 ADD END 
// ANK-4315-00-00 ADD START
		errMsgMap.put(JCCMessageCache.getMessage("EKB0930-NW", new String[]{"電話アダプター機能ありのHGWの", "ルーター機能の解約"}), new String[]{"E5023", ""});
// ANK-4315-00-00 ADD END
		
		// サービスIFエラー格納Map組み立て（※なし）
		sifErrMap = new HashMap<String, String[]>();
		
		// ANK-3764-00-00 MOD START
        sifErrMap.put("EKK2811C240,1150,kkop_svc_kei_no,EA", new String[]{"E5004", ""});
        // ANK-3764-00-00 MOD END
	}

	/**
	 * ワンストップ用単項目チェックメソッドです。
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	private boolean singleChkForOneStop() throws Exception
	{
		// エラーリスト
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();
		String itemName = null;
		String itemValue = null;
		
		// 機能コード
		itemName = "func_code";
		if (!JKKOneStopApiCommonUtil.checkRequireNotNull(requestMap, itemName))
		{
			// 必須チェックエラー
			errList.add(JKKOneStopApiCommonUtil.getReqErrInfMap(itemName));
		}
		else
		{
			itemValue = (String)requestMap.get(itemName);
			if (!HalfCharCheck.isNumber1Check(itemValue))
			{
				// 形式チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getFormErrInfMap(itemName));
			}
			if (!LengthCheck.isLength1Check(itemValue, 1))
			{
				// 桁数チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getLenErrInfMap(itemName));
			}
			if (!JKKCommonConst.FUNC_CODE_1.equals(itemValue)
					&& !JKKCommonConst.FUNC_CODE_2.equals(itemValue))
			{
				// リファレンスチェックエラー
				errList.add(JKKOneStopApiCommonUtil.getRefErrInfMap(itemName));
			}
		}
		
		// SYSID
		itemName = "sysid";
		if (!JKKOneStopApiCommonUtil.checkRequireNotNull(requestMap, itemName))
		{
			// 必須チェックエラー
			errList.add(JKKOneStopApiCommonUtil.getReqErrInfMap(itemName));
		}
		else
		{
			itemValue = (String)requestMap.get(itemName);
			if (!HalfCharCheck.isEnNumber1Check(itemValue))
			{
				// 形式チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getFormErrInfMap(itemName));
			}
			if (!LengthCheck.isLength1Check(itemValue, 10))
			{
				// 桁数チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getLenErrInfMap(itemName));
			}
		}
		
		// サービス契約番号
		itemName = "svc_kei_no";
		if (!JKKOneStopApiCommonUtil.checkRequireNotNull(requestMap, itemName))
		{
			// 必須チェックエラー
			errList.add(JKKOneStopApiCommonUtil.getReqErrInfMap(itemName));
		}
		else
		{
			itemValue = (String)requestMap.get(itemName);
			if (!HalfCharCheck.isEnNumber1Check(itemValue))
			{
				// 形式チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getFormErrInfMap(itemName));
			}
			if (!LengthCheck.isLength1Check(itemValue, 10))
			{
				// 桁数チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getLenErrInfMap(itemName));
			}
		}
		
		// 異動理由大分類コード
		itemName = "ido_rsn_dbri_cd";
		if (!JKKOneStopApiCommonUtil.checkRequireNotNull(requestMap, itemName))
		{
			// 必須チェックエラー
			errList.add(JKKOneStopApiCommonUtil.getReqErrInfMap(itemName));
		}
		else
		{
			itemValue = (String)requestMap.get(itemName);
			if (!HalfCharCheck.isEnNumber1Check(itemValue))
			{
				// 形式チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getFormErrInfMap(itemName));
			}
			if (!LengthCheck.isLength1Check(itemValue, 2))
			{
				// 桁数チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getLenErrInfMap(itemName));
			}
		}
		
		// 異動理由中分類コード
		itemName = "ido_rsn_cbri_cd";
		if (requestMap.containsKey(itemName))
		{
			itemValue = (String)requestMap.get(itemName);
			if (!HalfCharCheck.isEnNumber1Check(itemValue))
			{
				// 形式チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getFormErrInfMap(itemName));
			}
			if (!LengthCheck.isLength1Check(itemValue, 2))
			{
				// 桁数チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getLenErrInfMap(itemName));
			}
		}
		
		// 異動理由メモ
		itemName = "ido_rsn_memo";
		if (requestMap.containsKey(itemName))
		{
			itemValue = (String)requestMap.get(itemName);
			if (!MixCharCheck.isMix1Check(itemValue))
			{
				// 形式チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getFormErrInfMap(itemName));
			}
			if (!LengthCheck.isLength2Check(itemValue, 1, 100))
			{
				// 桁数チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getLenErrInfMap(itemName));
			}
		}
		
		// ユーザID
		itemName = "user_id";
		if (!JKKOneStopApiCommonUtil.checkRequireNotNull(requestMap, itemName))
		{
			// 必須チェックエラー
			errList.add(JKKOneStopApiCommonUtil.getReqErrInfMap(itemName));
		}
		else
		{
			itemValue = (String)requestMap.get(itemName);
			if (!HalfCharCheck.isEnNumber1Check(itemValue))
			{
				// 形式チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getFormErrInfMap(itemName));
			}
			if (!LengthCheck.isLength2Check(itemValue, 6, 10))
			{
				// 桁数チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getLenErrInfMap(itemName));
			}
		}
		
		// ルーター機能解約有無
		itemName = "router_kino_dsl_um";
		if (!JKKOneStopApiCommonUtil.checkRequireNotNull(requestMap, itemName))
		{
			// 必須チェックエラー
			errList.add(JKKOneStopApiCommonUtil.getReqErrInfMap(itemName));
		}
		else
		{
			itemValue = (String)requestMap.get(itemName);
			if (!HalfCharCheck.isNumber1Check(itemValue))
			{
				// 形式チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getFormErrInfMap(itemName));
			}
			if (!LengthCheck.isLength1Check(itemValue, 1))
			{
				// 桁数チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getLenErrInfMap(itemName));
			}
			
			
		}
		
		// 変更後ルーター機能コード
		itemName = "chg_router_kino_cd";
		if (requestMap.containsKey(itemName))
		{
			itemValue = (String)requestMap.get(itemName);
			if (!HalfCharCheck.isEnNumber1Check(itemValue))
			{
				// 形式チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getFormErrInfMap(itemName));
			}
			if (!LengthCheck.isLength1Check(itemValue, 3))
			{
				// 桁数チェックエラー
				errList.add(JKKOneStopApiCommonUtil.getLenErrInfMap(itemName));
			}
		}
		
		// エラーが存在する場合
		if (errList.size() > 0)
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "10", errList, warnList, funcCode, IF_ID);
			return false;
		}
		
		return true;
	}

	/**
	 * ワンストップ独自単関連チェック処理です。
     * <BR>
     * @return boolean
	 */
	private boolean singleKnrnChkForOneStop()
	{
		// エラーリスト
		List<Map<String, String>> errList = new ArrayList<Map<String, String>>();
		
		// ルーター機能解約有無／変更後ルーター機能コード 未設定チェック
		// ルーター機能解約有無が有の時、
		// 受信データMap.変更後ルーター機能コードが設定されている場合、エラー
		String routerKinoDslUm = (String)requestMap.get("router_kino_dsl_um");
		boolean chgRouterKinoCd = JKKOneStopApiCommonUtil.checkRequireNotNull(requestMap, "chg_router_kino_cd");
		if (JKKStrConst.CD_DIV_UM_ARI.equals(routerKinoDslUm) && chgRouterKinoCd)
		{
			// エラー情報をエラーリストに格納
			errList.add(JKKOneStopApiCommonUtil.getTkckErrInfMap("E5002", "router_kino_dsl_um"));
		}
		
		// ルーター機能解約有無／変更後ルーター機能コード 必須チェック
		// ルーター機能解約有無が無の時、
		// 受信データMap.変更後ルーター機能コードが未設定の場合、エラー
		if (JKKStrConst.CD_DIV_UM_NASHI.equals(routerKinoDslUm) && !chgRouterKinoCd)
		{
			// エラー情報をエラーリストに格納
			errList.add(JKKOneStopApiCommonUtil.getTkckErrInfMap("E5003", "router_kino_dsl_um"));
		}
		
		// エラーが存在する場合
		if (errList.size() > 0)
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "10", errList, warnList, funcCode, IF_ID);
			return false;
		}
		
		return true;
	}

	/**
	 * ワンストップ用共通関連チェックメソッドです。
	 * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private boolean commonKnrnChkForOneStop() throws Exception
	{
		// dataBean取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {bean};
		
		// チェック対象パラメタの退避
		String sysid = (String)requestMap.get("sysid");
		String svcKeiNo = (String)requestMap.get("svc_kei_no");
		String userId = (String)requestMap.get("user_id");
		String idoDiv = OS_IDO_DIV;
		String idoRsnDbriCd = (String)requestMap.get("ido_rsn_dbri_cd");
		String idoRsnCbriCd = (String)requestMap.get("ido_rsn_cbri_cd");
		
		// 取得対象コード種別
		List<String> cdSbtList = new ArrayList<String>();
		cdSbtList.add("CD00002");
		cdSbtList.add("CD01613");
// ANK-4287-00-00 ADD START
		cdSbtList.add("CD01797");
// ANK-4287-00-00 ADD END
		
		// 運用日付
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		
		// SYSID・サービス契約番号・ユーザIDの存在チェック＋コード種別の取得
		// ■KKSV0820
		HashMap<String, Object> kksv0820ParamMap  = new HashMap<String, Object>();
		HashMap<String, Object> kksv0820InputMap  = new HashMap<String, Object>();
		HashMap<String, Object> kksv0820OutputMap = new HashMap<String, Object>();
		
		// パラメタ設定
		kksv0820ParamMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0820");
		kksv0820ParamMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, "KKSV0820OP");
		
		// 上りマッピング
		KKSV0820_KKSV0820OPDBMapper kksv0820Mapper = new KKSV0820_KKSV0820OPDBMapper();
		kksv0820Mapper.setKKSV082001CC(paramBean, kksv0820InputMap, opeDate, sysid, svcKeiNo, userId, cdSbtList);
		
		invokeService(kksv0820ParamMap, kksv0820InputMap, kksv0820OutputMap);
		
		// SYSID存在チェック
		if (!JKKOneStopApiCommonUtil.checkExistSysid(kksv0820OutputMap))
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5014", warnList, funcCode, IF_ID);
			return false;
		}
		
		// サービス契約番号存在チェック
		if (!JKKOneStopApiCommonUtil.checkExistSvcKeiNo(kksv0820OutputMap))
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5015", warnList, funcCode, IF_ID);
			return false;
		}
		
		// ユーザID存在チェック
		if (!JKKOneStopApiCommonUtil.checkExistUserId(kksv0820OutputMap))
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5016", warnList, funcCode, IF_ID);
			return false;
		}
		
		// コード区分リストの退避
		Map<String, Object> kksv082001ccMap = (Map<String, Object>)kksv0820OutputMap.get("KKSV082001CC");
		Map<String, Object> codeMeishoKanriMap = (Map)kksv082001ccMap.get("codeMeishoKanriMap");
		cdDivListMap = (Map)codeMeishoKanriMap.get("rslt_cd_sbt_map");
		
		// 異動理由の大分類・中分類の組み合わせチェック／サービス契約の異動可能チェック用のサービス呼び出し
		OneStopDataBeanAccess osBean = new OneStopDataBeanAccess();
		osBean.sendMessageString("ＳＹＳＩＤ", X31CWebConst.DATABEAN_SET_VALUE, sysid);
		osBean.sendMessageString("選択サービス契約番号", X31CWebConst.DATABEAN_SET_VALUE, svcKeiNo);
		osBean.sendMessageString("運用日付", X31CWebConst.DATABEAN_SET_VALUE,  opeDate);
		// IT1-2016-0000100 2016/07/28 ADD START
		osBean.sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_SET_VALUE, svcKeiNo);
		// IT1-2016-0000100 2016/07/28 ADD END
		
		OneStopDataBeanAccess[] paramOsBean = {osBean};
		
		// ■KKSV0061
		HashMap<String, Object> kksv0061ParamMap  = new HashMap<String, Object>();
		HashMap<String, Object> kksv0061InputMap  = new HashMap<String, Object>();
		HashMap<String, Object> kksv0061OutputMap = new HashMap<String, Object>();
		
		// パラメタ設定
		kksv0061ParamMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0061);
		kksv0061ParamMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0061OP);
		
		// 上りマッピング
		KKSV0061_KKSV0061OPDBMapper kksv0061Mapper = new KKSV0061_KKSV0061OPDBMapper();
		kksv0061Mapper.setKKSV006101SC(paramOsBean, kksv0061InputMap, JPCModelConstant.FUNC_CD_1);
		kksv0061Mapper.setKKSV006102SC(paramOsBean, kksv0061InputMap, JPCModelConstant.FUNC_CD_3);
		kksv0061Mapper.setKKSV006103SC(paramOsBean, kksv0061InputMap, JPCModelConstant.FUNC_CD_3);
		
		invokeService(kksv0061ParamMap, kksv0061InputMap, kksv0061OutputMap);
		
		// 取得情報の下りマッピング
		kksv0061Mapper.getKKSV006101SC(paramOsBean, kksv0061OutputMap);
		kksv0061Mapper.getKKSV006102SC(paramOsBean, kksv0061OutputMap);
		kksv0061Mapper.getKKSV006103SC(paramOsBean, kksv0061OutputMap);
		kksv0061Mapper.getKKSV006104SC(paramOsBean, kksv0061OutputMap);
		
		// ■KKSV0062
		HashMap<String, Object> kksv0062ParamMap  = new HashMap<String, Object>();
		HashMap<String, Object> kksv0062InputMap  = new HashMap<String, Object>();
		HashMap<String, Object> kksv0062OutputMap = new HashMap<String, Object>();
		
		kksv0062ParamMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0062);
		kksv0062ParamMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0062OP);
		
		// 上りマッピング
		KKSV0062_KKSV0062OPDBMapper kksv0062Mapper = new KKSV0062_KKSV0062OPDBMapper();
		kksv0062Mapper.setKKSV006201SC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_2);
		kksv0062Mapper.setKKSV006202SC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_1);
		kksv0062Mapper.setKKSV006203SC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_1);
		kksv0062Mapper.setKKSV006205SC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_1);
		kksv0062Mapper.setKKSV006206SC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_1);
		kksv0062Mapper.setKKSV006207SC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_6);
		kksv0062Mapper.setKKSV006208SC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_2);
		kksv0062Mapper.setKKSV006209SC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_1);
		kksv0062Mapper.setKKSV006210SC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_2);
		kksv0062Mapper.setKKSV006212SC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_1);
		kksv0062Mapper.setKKSV006221SC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_1);
		// 2016/06/10 ANK-2687-00-00 ADD START
		kksv0062Mapper.setKKSV006222CC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_1);
		// 2016/06/10 ANK-2687-00-00 ADD END
		// IT1-2016-0000100 2016/07/28 ADD START
		kksv0062Mapper.setKKSV006223SC(paramOsBean, kksv0062InputMap, JPCModelConstant.FUNC_CD_2);
		// IT1-2016-0000100 2016/07/28 ADD END
		invokeService(kksv0062ParamMap, kksv0062InputMap, kksv0062OutputMap);
		
		// 取得情報の下りマッピング
		kksv0062Mapper.getKKSV006201SC(paramOsBean, kksv0062OutputMap);
		kksv0062Mapper.getKKSV006205SC(paramOsBean, kksv0062OutputMap);
		kksv0062Mapper.getKKSV006207SC(paramOsBean, kksv0062OutputMap);
		kksv0062Mapper.getKKSV006209SC(paramOsBean, kksv0062OutputMap);
		kksv0062Mapper.getKKSV006210SC(paramOsBean, kksv0062OutputMap);
		kksv0062Mapper.getKKSV006211SC(paramOsBean, kksv0062OutputMap);
		kksv0062Mapper.getKKSV006208SC(paramOsBean, kksv0062OutputMap);
		kksv0062Mapper.getKKSV006221SC(paramOsBean, kksv0062OutputMap);
		Map<?, ?> kksv006201scMap = (Map<?, ?>)kksv0062OutputMap.get("KKSV006201SC");
		List<?> ekk0081a010List = (List<?>)kksv006201scMap.get("EKK0081A010CBSMsg1List");
		Map<?, ?> ekk0081a010Map = (Map<?, ?>)(null != ekk0081a010List && 0 < ekk0081a010List.size() ? ekk0081a010List.get(0) : null);
		String prcGrpCd = (String)(null != ekk0081a010Map ? ekk0081a010Map.get("prc_grp_cd") : "");
		//料金グループコードが、 Wi-Fi／EMobile／UQ-WiMAX の何れかの場合
		if ("07".equals(prcGrpCd) || "08".equals(prcGrpCd) || "09".equals(prcGrpCd) || "10".equals(prcGrpCd))
		{
			kksv0062Mapper.getKKSV006212SC(paramOsBean, kksv0062OutputMap);
		}
		
		// IT1-2016-0000100 2016/07/28 ADD START
		kksv0062Mapper.getKKSV006223SC(paramOsBean, kksv0062OutputMap);
		
		Map<?, ?> kksv006223scMap = (Map<?, ?>)kksv0062OutputMap.get("KKSV006223SC");
		List<?> eKK0081B024List = (List<?>)kksv006223scMap.get("EKK0081B024CBSMsg1List");
		Map<?, ?> eKK0081B024Map = null;
		String svcKeiStat = "";
		
		// サービス契約履歴一覧照会マップ.サービス契約履歴一覧照会明細がNULLでない
		// かつ サービス契約履歴一覧照会マップ.サービス契約履歴一覧照会明細のサイズが0より大きい場合
		if (eKK0081B024List != null && 0 < eKK0081B024List.size()) {
			for (int i = 0; i < eKK0081B024List.size(); i++) {
				eKK0081B024Map = (Map<?, ?>)eKK0081B024List.get(i);
				
				svcKeiStat = (String)eKK0081B024Map.get("svc_kei_stat");
				
				// サービス契約ステータス = "100"(サービス提供中)の場合、
				// サービス提供履歴フラグに"1"(サービス提供履歴あり)を設定する
				if (JKKCommonConst.SVC_KEI_STAT_100.equals(svcKeiStat)) {
					svcTkRrkFlg = "1";
					break;
				}
			}
		}
		// IT1-2016-0000100 2016/07/28 ADD END
		
		// ■KKSV0463
		HashMap<String, Object> kksv0463ParamMap  = new HashMap<String, Object>();
		HashMap<String, Object> kksv0463InputMap  = new HashMap<String, Object>();
		HashMap<String, Object> kksv0463OutputMap = new HashMap<String, Object>();
		
		kksv0463ParamMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0463);
		kksv0463ParamMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0463OP);
		
		// 上りマッピング
		KKSV0463_KKSV0463OPDBMapper kksv0463Mapper = new KKSV0463_KKSV0463OPDBMapper();
		kksv0463Mapper.setKKSV046301SC(paramOsBean, kksv0463InputMap, JPCModelConstant.FUNC_CD_1, idoDiv);
		
		// 異動区分選択異動理由切替サービスを実施
		invokeService(kksv0463ParamMap, kksv0463InputMap, kksv0463OutputMap);
		
		// ■KKSV0551
		HashMap<String, Object> kksv0551ParamMap  = new HashMap<String, Object>();
		HashMap<String, Object> kksv0551InputMap  = new HashMap<String, Object>();
		HashMap<String, Object> kksv0551OutputMap = new HashMap<String, Object>();
		
		kksv0551ParamMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0551);
		kksv0551ParamMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0551OP);
		
		// 上りマッピング
		KKSV0551_KKSV0551OPDBMapper kksv0551Mapper = new KKSV0551_KKSV0551OPDBMapper();
		kksv0551Mapper.setKKSV055101SC(paramOsBean, kksv0551InputMap, JPCModelConstant.FUNC_CD_1, idoRsnDbriCd);
		
		// 異動区分選択異動理由大分類切替サービスを実施
		invokeService(kksv0551ParamMap, kksv0551InputMap, kksv0551OutputMap);
		
		// 異動理由大分類・中分類組合せチェック
		if (!JKKOneStopApiCommonUtil.checkIdoRsnCdPair(kksv0463OutputMap, kksv0551OutputMap, osBean, idoRsnDbriCd, idoRsnCbriCd))
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5017", warnList, funcCode, IF_ID);
			return false;
		}
		
		// サービス契約異動可能チェック
		if (!JKKOneStopApiCommonUtil.checkSvcKeiIdoPsb(kksv0062OutputMap, osBean, idoDiv))
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5004", warnList, funcCode, IF_ID);
			return false;
		}
		
		return true;
	}

	/**
	 * ワンストップ独自先行関連チェック処理です。
	 * <BR>
	 * @return boolean
	 */
	private boolean senkoKnrnChkForOneStop()
	{
		// ルーター機能解約有無　コードチェック
		// コード種別、有無のコード区分に、ルーター機能解約有無と対応する値が存在しない場合、エラー
		String routerKinoDslUm = (String)requestMap.get("router_kino_dsl_um");
		if (!chkCdDivFromMap("CD00002", routerKinoDslUm))
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5006", warnList, funcCode, IF_ID);
			return false;
		}
		
		// 変更後ルーター機能コード　コードチェック
		// 受信データMap.変更後ルーター機能コードに値が設定されているか確認
		String chgRouterKinoCd = (String)requestMap.get("chg_router_kino_cd");
		if (chgRouterKinoCd != null)
		{
			// コード種別、ルーター機能コードのコード区分に、受信データMap.変更後ルーター機能コードが存在しない場合、エラー
			if (!chkCdDivFromMap("CD01613", chgRouterKinoCd))
			{
				JKKOneStopApiCommonUtil.setReturnXml(this, "E5007", warnList, funcCode, IF_ID);
				return false;
			}
		}
// ANK-4287-00-00 ADD START
		// 新料金コース適用フラグ　コードチェック
		// 受信データMap.新料金コース適用フラグに値が設定されているか確認
		String newPcrsAplyFlg = (String)requestMap.get("new_pcrs_aply_flg");
		if (!JKKStringUtil.isNullBlank(newPcrsAplyFlg))
		{
			// コード種別、新料金コース適用フラグのコード区分に、受信データMap.新料金コース適用フラグが存在しない場合、エラー
			if (!chkCdDivFromMap("CD01797", newPcrsAplyFlg))
			{
				JKKOneStopApiCommonUtil.setReturnXml(this, "E5020", warnList, funcCode, IF_ID);
				return false;
			}
		}
// ANK-4287-00-00 ADD END
		
		return true;
	}

	/**
	 * 初期表示処理用DataBean上書き処理です。
	 * (ここでは顧客契約引継情報を上書きます)
     * <BR>
	 */
	private void overwriteDataBeanForInit()
	{
		// 初期処理用の引継リスト作成
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		ArrayList<HashMap<String, Object>> hktgList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> paraMap = new HashMap<String, Object>();
		
		// 異動区分
		inMap.put(JKKCommonConst.HKTGI_IDO_DIV, OS_IDO_DIV);
		// 異動理由コード
		inMap.put(JKKCommonConst.HKTGI_IDO_RSN_CD, new String[]{(String)requestMap.get("ido_rsn_dbri_cd")});
		// 異動理由メモ
		inMap.put(JKKCommonConst.HKTGI_IDO_RSN_MEMO, (String)requestMap.get("ido_rsn_memo"));
		// サービス契約番号
		inMap.put(JKKCommonConst.HKTGI_SVC_KEI_NO, (String)requestMap.get("svc_kei_no"));
		// SYSID
		inMap.put(JKKCommonConst.HKTGI_SYSID, (String)requestMap.get("sysid"));
		
		hktgList.add(inMap);
		paraMap.put(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST, hktgList);
		
		JCCWebCommon.setScreenInfo(this, "KKA15501", paraMap);
		
		// 共有フォームビーンにユーザIDを設定する
		X31SDataBeanAccess  commonBean = super.getCommonInfoBean();
		commonBean.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_SET_VALUE, (String)requestMap.get("user_id"));
	}

	/**
	 *  ワンストップ独自関連チェック処理（初期処理後）です。
	 * <BR>
	 * @return boolean
	 */
	private boolean knrnChkForOneStopAfInit()
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// ネットサービスチェック
		// 料金グループがｅｏ光ネットホームタイプ、ｅｏ光ネットメゾンタイプ、ｅｏ光ネットマンションタイプ以外の場合、エラー
		X31SDataBeanAccessArray ekk0081b010cbsmsglist = bean.getDataBeanArray(KKW03301SFConst.EKK0081B010CBSMSG1LIST);
		X31SDataBeanAccess ekk0081b010cbsmsg = ekk0081b010cbsmsglist.getDataBean(0);
		String prcGrpCd = ekk0081b010cbsmsg.sendMessageString(KKW03301SFConst.PRC_GRP_CD_02, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JKKStrConst.CD00133_02.equals(prcGrpCd)
				&& !JKKStrConst.CD00133_03.equals(prcGrpCd)
				&& !JKKStrConst.CD00133_04.equals(prcGrpCd))
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5005", warnList, funcCode, IF_ID);
			return false;
		}
		
		// 多機能ルーターまたはHGWの行番号
		int takinoRtRowNo = -1;
		
		// 機器提供サービス契約一覧明細の要素
		X31SDataBeanAccess serviceList = null;
		
		// 宅内機器種別コード取得用
		String taknkikiSbtCd = null;
		
		// 機器提供サービス契約ステータス取得用
		String kktkSvcKeiStat = null;
// OM-2019-0000469 2019/05/14 ADD START
		// 機器提供サービス契約ステータス（予約）取得用
		String kktkSvcKeiStatRsv = null;
// OM-2019-0000469 2019/05/14 ADD END
// ANK-4287-00-00 ADD START
		// ルーター機能解約有無
		String routerKinoDslUm = (String)requestMap.get("router_kino_dsl_um");
		// 収容替工事有無フラグ
		String shuyoChgKojiUmFlg = bean.sendMessageString(KKW03301SFConst.SHUYO_CHG_KOJI_UM_FLG, X31CWebConst.DATABEAN_GET_VALUE);
// ANK-4287-00-00 ADD END
		
		// DataBean.機器提供サービス契約一覧明細リストの件数分、処理を行う
		X31SDataBeanAccessArray serviceListArray = bean.getDataBeanArray(KKW03301SFConst.SERVICE_LIST);
		for (int i = 0; i < serviceListArray.getCount(); i++)
		{
			serviceList = serviceListArray.getDataBean(i);

			// 多機能ルーターまたはHGWの存在チェック
			// 機器提供サービス契約一覧明細リスト.宅内機器種別コードが多機能ルーター、HGW以外か確認
			taknkikiSbtCd = serviceList.sendMessageString(KKW03301SFConst.TAKNKIKI_SBT_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
// ANK-4315-00-00 MOD START
//			if (!JKKStrConst.TAKNKIKI_SBT_CD_TAKINORT.equals(taknkikiSbtCd))
			if (!JKKStrConst.TAKNKIKI_SBT_CD_TAKINORT.equals(taknkikiSbtCd)
					&& !JKKStrConst.TAKNKIKI_SBT_CD_HGW.equals(taknkikiSbtCd))
// ANK-4315-00-00 MOD END
			{
				continue;
			}
			
			// 機器提供サービス契約一覧明細リスト.機器提供サービス契約ステータス（予約）が契約変更中 かつ ルーター機能解約有無があり、 -- OM-2019-0000469
			// または、機器提供サービス契約一覧明細リスト.機器提供サービス契約ステータスが -- OM-2019-0000469
			// 解約済、キャンセル済以外か確認 -- OM-2019-0000469
			kktkSvcKeiStat = serviceList.sendMessageString(KKW03301SFConst.KKTK_SVC_KEI_STAT_01, X31CWebConst.DATABEAN_GET_VALUE);
// OM-2019-0000469 2019/05/14 MOD START
//			if (JKKStrConst.CD00056_STAT_KEI_CHG_CHU.equals(kktkSvcKeiStat) ||
			kktkSvcKeiStatRsv = serviceList.sendMessageString(KKW03301SFConst.KKTK_SVC_KEI_STAT_RSV_01, X31CWebConst.DATABEAN_GET_VALUE);
// ANK-4287-00-00 MOD START
//			if (JKKStrConst.CD00056_STAT_KEI_CHG_CHU.equals(kktkSvcKeiStatRsv) ||
			if ((JKKStrConst.CD00056_STAT_KEI_CHG_CHU.equals(kktkSvcKeiStatRsv) && JKKStrConst.CD_DIV_UM_ARI.equals(routerKinoDslUm)) ||
// ANK-4287-00-00 MOD END
// OM-2019-0000469 2019/05/14 MOD END
					JKKStrConst.CD00056_STAT_DSLZUMI.equals(kktkSvcKeiStat) ||
					JKKStrConst.CD00056_STAT_CANCELZUMI.equals(kktkSvcKeiStat))
			{
				continue;
			}
			
			// 複数台チェック
			if (takinoRtRowNo != -1)
			{
				JKKOneStopApiCommonUtil.setReturnXml(this, "E5012", warnList, funcCode, IF_ID);
				return false;
			}
// ANK-4287-00-00 ADD START
			// 契約変更中チェック
			// 機器提供サービス契約一覧明細リスト.機器提供サービス契約ステータス（予約）が「契約変更中」の場合
			if (JKKStrConst.CD00056_STAT_KEI_CHG_CHU.equals(kktkSvcKeiStatRsv))
			{
				// 収容替工事有無フラグが「有」以外の場合、エラー
				if (!JKKStrConst.CD_DIV_UM_ARI.equals(shuyoChgKojiUmFlg))
				{
					JKKOneStopApiCommonUtil.setReturnXml(this, "E5022", warnList, funcCode, IF_ID);
					return false;
				}
			}
// ANK-4287-00-00 ADD END
// ANK-4315-00-00 ADD START
			// 有効なHGWが存在し、ルータ機能を解約する場合はワンストップ上はエラーとする。
			if (JKKStrConst.TAKNKIKI_SBT_CD_HGW.equals(taknkikiSbtCd) && JKKStrConst.CD_DIV_UM_ARI.equals(routerKinoDslUm))
			{
				JKKOneStopApiCommonUtil.setReturnXml(this, "E5023", warnList, funcCode, IF_ID);
				return false;
			}
// ANK-4315-00-00 ADD END
			
			// 多機能ルーターまたはHGWの行番号に現在の要素番号を設定
			takinoRtRowNo = i;
		}
		
		// 存在チェック
		if (takinoRtRowNo == -1)
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5011", warnList, funcCode, IF_ID);
			return false;
		}
		
		// 処理対象の多機能ルーターまたはHGWを選択状態にする
		bean.sendMessageString(KKW03301SFConst.SELECTROW, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(takinoRtRowNo));
		
		return true;
	}
	
	/**
	 * DataBean上書き及び関連チェック処理です。
	 * <br>
	 * @return boolean
	 * @throws Exception
	 */
	private boolean overwriteDataBeanKnrnChk() throws Exception
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		String routerKinoDslUm = (String)requestMap.get("router_kino_dsl_um");
		boolean rtStatFlg = rtStatCheck(bean);
// ANK-4287-00-00 ADD START
		// 新料金コース適用フラグ
		String newPcrsAplyFlg = (String)requestMap.get("new_pcrs_aply_flg");
		// 収容替工事有無フラグ
		String shuyoChgKojiUmFlg = bean.sendMessageString(KKW03301SFConst.SHUYO_CHG_KOJI_UM_FLG, X31CWebConst.DATABEAN_GET_VALUE);
// ANK-4287-00-00 ADD END
		
		// 未変更チェック
		// 受信データMap.ルーター機能解約有無が無、且つ有効なルーター機能コードが存在する（※）か確認
		// ※ DataBean.ルーター機能ステータスが「空文字、解約済、キャンセル済」以外を有効とする
		if (JKKStrConst.CD_DIV_UM_NASHI.equals(routerKinoDslUm) && rtStatFlg)
		{
			// DataBean.ルーター機能料金コースコードと受信データMap.変更後ルーター機能コードが一致するか確認
			String rtPcrsCd = bean.sendMessageString(KKW03301SFConst.RT_PCRS_CD, X31CWebConst.DATABEAN_GET_VALUE);
			if (rtPcrsCd.equals((String)requestMap.get("chg_router_kino_cd")))
			{
				JKKOneStopApiCommonUtil.setReturnXml(this, "E5008", warnList, funcCode, IF_ID);
				return false;
			}
		}
		
		// 解約対象チェック
		// 受信データMap.ルーター機能解約有無が有か確認
		if (JKKStrConst.CD_DIV_UM_ARI.equals(routerKinoDslUm))
		{
			// 有効なルーター機能コードが存在しない（※）か確認
			// ※ DataBean.ルーター機能ステータスが「空文字、解約済、キャンセル済」の場合、存在しないとする
			if(!rtStatFlg)
			{
				JKKOneStopApiCommonUtil.setReturnXml(this, "E5009", warnList, funcCode, IF_ID);
				return false;
			}
		}
		
		// ルーター機能解約年月日
		String rtDslYmd = bean.sendMessageString(KKW03301SFConst.RT_DSL_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 運用年月日
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		
		// 未解約チェック
		// DataBean.ルーター機能解約年月日と運用年月日が一致するか確認
		if (opeDate.equals(rtDslYmd))
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5010", warnList, funcCode, IF_ID);
			return false;
		}
		
// ANK-2789-00-00 ADD START
		// ファミリーパック契約有無チェック
		// ファミリーパック有無取得
		X31SDataBeanAccessArray ekk0081B010cbsmsglist = bean.getDataBeanArray(KKW03301SFConst.EKK0081B010CBSMSG1LIST);
		X31SDataBeanAccess ekk0081b010cbsmsg = ekk0081B010cbsmsglist.getDataBean(0);
		String familyPackUm = ekk0081b010cbsmsg.sendMessageString(KKW03301SFConst.FAMILY_PACK_UM_02, X31CWebConst.DATABEAN_GET_VALUE);
		
		// DataBean.サービス契約共通情報一覧照会明細.ファミリーパック有無が"有"であるか確認
		if(JKKStrConst.CD_DIV_NM_UM_ARI.equals(familyPackUm))
		{
			// ルーター機能料金コースコード
			String rtPcrsCd = bean.sendMessageString(KKW03301SFConst.RT_PCRS_CD, X31CWebConst.DATABEAN_GET_VALUE);
			
			// 変更後ルーター機能コード
			String chgRouterKinoCd = (String)requestMap.get("chg_router_kino_cd");
			
			// DataBean.ルーター機能料金コースコードが無線ルーター機能、かつ
			// 有効なルーター機能コードが存在する（※）、かつ
			// （受信データMap.ルーター機能解約有無が有、または
			// 受信データMap.変更後ルーター機能コードが有線ルーター機能）であるか確認
			// ※ DataBean.ルーター機能ステータスが「空文字、"910"（解約済）、"920"（キャンセル済）」の場合、存在しないとする
			if (JKKStrConst.CD00134_KKOP_MUSEN.equals(rtPcrsCd) && rtStatFlg &&
					(JKKStrConst.CD_DIV_UM_ARI.equals(routerKinoDslUm) ||
							JKKStrConst.CD00134_KKOP_YUSEN.equals(chgRouterKinoCd)))
			{
				JKKOneStopApiCommonUtil.setReturnXml(this, "E5019", warnList, funcCode, IF_ID);
				return false;
			}
		}
// ANK-2789-00-00 ADD END
// ANK-4287-00-00 ADD START
		// 新料金コース適用可否チェック
		// 受信データMap.ルーター機能解約有無が「無」 かつ 新料金コース適用フラグが「新コースから利用する」の場合
		if(JKKStrConst.CD_DIV_UM_NASHI.equals(routerKinoDslUm)
				&& JKKStrConst.NEW_PCRS_APLY_FLG_NEWPCRS.equals(newPcrsAplyFlg))
		{
			// 受信データMap.変更後ルーター機能コードが「無線ルーター機能」以外 または 収容替工事有無フラグが「有」以外の場合
			if(!JKKStrConst.CD00134_KKOP_MUSEN.equals((String)requestMap.get("chg_router_kino_cd"))
					|| !JKKStrConst.CD_DIV_UM_ARI.equals(shuyoChgKojiUmFlg))
			{
				JKKOneStopApiCommonUtil.setReturnXml(this, "E5021", warnList, funcCode, IF_ID);
				return false;
			}
		}
// ANK-4287-00-00 ADD END
		
		// DataBeanの上書き
		// 受信データMap.ルーター機能解約有無が無のとき
		if (JKKStrConst.CD_DIV_UM_NASHI.equals(routerKinoDslUm))
		{
			// ルーター機能解約区分を設定
			bean.sendMessageBoolean(KKW03301SFConst.RT_DSL_KBN, X31CWebConst.DATABEAN_SET_VALUE, false);
			
			// ルーター機能リストの数だけ検索する
			X31SDataBeanAccessArray rutaKinoListArray = bean.getDataBeanArray(KKW03301SFConst.RUTA_KINO);
			X31SDataBeanAccess rutaKinoList = rutaKinoListArray.getDataBean(0);
			int rutaKinoListRowNum = (Integer)rutaKinoList.sendMessage(KKW03301SFConst.CD_DIV_CD_LIST_06, X31CWebConst.DATABEAN_GET_COUNT);
			for (int i = 0; i < rutaKinoListRowNum; i++) 
			{
				// コードタイプコード値
				String cdTypeCd = rutaKinoList.sendMessageString(KKW03301SFConst.CD_DIV_CD_LIST_06, X31CWebConst.DATABEAN_GET_VALUE, i);
				
				// ルーター機能リストのi番目にあるコードタイプコード値と受信データMap.変更後ルーター機能コードを一致するか確認
				if (cdTypeCd.equals((String)requestMap.get("chg_router_kino_cd")))
				{
					// ルーター機能にindexを設定
					rutaKinoList.sendMessageString(KKW03301SFConst.SELECT_INDEX_06, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(i));
					break;
				}
			}
		}
		else
		{
			// ルーター機能解約区分を設定
			bean.sendMessageBoolean(KKW03301SFConst.RT_DSL_KBN, X31CWebConst.DATABEAN_SET_VALUE, true);
			// ルーター機能解約年月日（年）に運用年月日（年）を設定
			bean.sendMessageString(KKW03301SFConst.RT_DSL_YEAR, X31CWebConst.DATABEAN_SET_VALUE, opeDate.substring(0, 4));
			// ルーター機能解約年月日（月）に運用年月日（月）を設定
			bean.sendMessageString(KKW03301SFConst.RT_DSL_MON, X31CWebConst.DATABEAN_SET_VALUE, opeDate.substring(4, 6));
			// ルーター機能解約年月日（日）に運用年月日（日）を設定
			bean.sendMessageString(KKW03301SFConst.RT_DSL_DAY, X31CWebConst.DATABEAN_SET_VALUE, opeDate.substring(6, 8));
		}
// ANK-4287-00-00 ADD START
		// 新料金コース適用フラグを上書きする
		if(JKKStringUtil.isNullBlank(newPcrsAplyFlg))
		{
			// 未設定の場合、「すぐに利用する」とする
			newPcrsAplyFlg = JKKStrConst.NEW_PCRS_APLY_FLG_SOKUJI;
		}
		
		// ルーター機能新料金コース適用フラグ
		bean.sendMessageString(KKW03301SFConst.RT_NEW_PCRS_APLY_FLG, X31CWebConst.DATABEAN_SET_VALUE, newPcrsAplyFlg);
// ANK-4287-00-00 ADD END
		return true;
	}

	/**
	 * ワンストップ用API終了メソッドです。
     * <BR>
     * @param returnCd リターンコード
	 * @throws Exception 
	 */
	private void apiTerminal(String returnCd) throws Exception
	{
		JKKOneStopApiCommonUtil.setReturnXml(this, returnCd, null, warnList, funcCode, IF_ID);
	}

	/**
	 * コード区分チェック部品（コード区分リストMapとのチェック用）
	 * コード区分リスト格納用Mapから指定のコード種別のコード区分リストを取り出し
	 * 対象のコード区分がコード区分リストに存在するかどうかチェックを行います。
	 * <BR>
	 * @param chkCdSbt チェック対象コード種別
	 * @param chkCdDiv チェック対象コード区分
	 * @return true:チェックOK／false:チェックNG
	 */
	private boolean chkCdDivFromMap(String chkCdSbt, String chkCdDiv)
	{
		List<Map<String, String>> cdDivList = cdDivListMap.get(chkCdSbt);
		for (Map<String, String> cdMap : cdDivList)
		{
			String cdDiv = (String)cdMap.get("cd_div");
			if (cdDiv.equals(chkCdDiv))
			{
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 有効ルーター機能コード存在チェック
	 * ルーター機能ステータスが
	 * 「空文字、解約済み、キャンセル済み」以外存在するかチェックを行います
	 * <BR>
	 * @param bean データビーン
	 * @return boolean true:チェックOK/false:チェックNG
	 */
	private boolean rtStatCheck(X31SDataBeanAccess bean)
	{
		String rtStat = bean.sendMessageString(KKW03301SFConst.RT_STAT, X31CWebConst.DATABEAN_GET_VALUE);
		if ("".equals(rtStat)|| 
				JKKStrConst.CD01616_STAT_DSLZUMI.equals(rtStat) ||
				JKKStrConst.CD01616_STAT_CANCELZUMI.equals(rtStat))
		{
			return false;
		}
		return true;
	}
}