/*********************************************************************
 * All Right reserved,Copyright (c) Fujitsu, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：割引サービス解約/キャンセル画面ビューロジック
 *   ソースファイル名：KKA15101SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2012年07月13日
 *＜機能概要＞
 *   割引サービス解約/キャンセル画面のビューロジック。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v3.01.00    2012/07/13   富士通      新規作成 IT2-2012-0001262
 *   v4.01.00    2012/09/07   FJ          ANK-0546-00-00、KAD-2012-0000955
 *   v4.02.00    2013/03/06   FJ          OT-2013-0000259
 *   v4.03.00    2013/03/07   FJ          OT-2013-0000303
 *   v4.04.00    2013/07/07   FJ          LT-2013-0000191
 *   v10.00.00   2014/07/01   FJ)福岡     ANK-2135-00-00
 *   v18.00.00   2015/08/10   FJ)森杉     ANK-2631-00-00 ワンストップ案件（ＳＴＥＰ１）※koptWebBからkoptWebAへコピー
 *   v18.00.01   2015/10/02   FJ)塩津     ST-2015-0000048 ワンストップ案件（ＳＴＥＰ１）申込年月日に運用日の過去月の日付が指定された場合、エラー表示する対応
 *   v18.00.02   2015/10/21   FJ)塩津     ST-2015-0000048 (再)
 *   v26.00.00	 2016/06/10   FJ)笠川    【ANK-2687-00-00】 プレミアムサポート施策
 *   v26.00.01   2016/07/28   FJ)柳      【IT1-2016-0000100】異動区分選択切替マッピング漏れ対応
 *   v37.00.00	 2018/07/13	  FJ)藤本	  【ANK-3383-09-00】標準工事費分割請求（STEP2）自治体特別キャンペーン登録/解約時チェック
 *   v37.00.01   2018/07/25   FJ)謝       【IT1-2018-0000125】対応
 *   v37.00.01   2018/07/27   FJ)謝       【IT1-2018-0000125】対応 ※koptWebBとの資産同期
 *   v57.00.00   2022/03/03   FJ)長江     【OM-2021-0001721】対応 ※koptWebBとの資産同期
 **********************************************************************/

package eo.web.webview.KKA15101SF;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.common.JSYwebLog;
import com.fujitsu.futurity.web.x31.X31CVector;
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.JPCOnlineMessageConstant;
import eo.common.util.JCCFrameworkException;
import eo.common.util.JKKStringUtil;
import eo.common.util.JPCDateUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.KKA15101SF.Items.Closure;
import eo.web.webview.KKA15101SF.Items.Predicater;
import eo.web.webview.KKA15101SF.Items.Transformer;
import eo.web.webview.KKA15101SF.KKW01030SFConst.FunctionCode;
import eo.web.webview.KKA15101SF.KKW01030SFConst.Screen;
import eo.web.webview.KKA15101SF.KKW01030SFConst.Service;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.commonOneStop.JKKCommonConst;
import eo.web.webview.commonOneStop.JKKScreenConst;

// ANK-2631-00-00 ADD START 【ワンストップ用】
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.model.common.check.DatetimeCheck;
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 eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;

import eo.common.util.JPCUtilCommon;

import eo.web.webview.common.JKKOneStopApiCommonUtil;
import eo.web.webview.common.OneStopDataBeanAccess;
import eo.web.webview.commonOneStop.JCCMessageCache;

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;
// ANK-2631-00-00 ADD END   【ワンストップ用】

/**
 * <dd>クラス名：KKW01031SFLogic <dd>クラス説明：割引サービス契約の解約／キャンセルを行う。 <dd>備考：なし。
 * 
 * @author 富士通
 */
@SuppressWarnings("serial")
public class KKA15101SFLogic extends JCCWebBusinessLogic {

	/** ワンストップ返却用ワーニングメッセージ格納Map */
	private static Map<String, String[]> warMsgMap = null;
	
	/** ワンストップ返却用単関連エラーメッセージ格納Map */
	private static Map<String, String[]> tkckErrMsgMap = null;
	
	/** ワンストップ返却用エラーメッセージ格納Map */
	private static Map<String, String[]> errMsgMap = null;
	
	/** ワンストップ返却用SIFエラー格納Map */
	private static Map<String, String[]> sifErrMap = null;
	
	/** ワンストップ用受信パラメタ格納Map */
	private Map<String, Object> requestMap = null;
	
	/** 機能コード */
	private String funcCode = null;
	
	/** インターフェイスID */
	private static final String IF_ID = "KKIFE276";
	
	/** ワンストップ用ワーニング保持リスト */
	private List<Map<String, String>> warnList = null;
	
	/** コード区分リスト格納用Map */
	private Map<String, List<Map<String, String>>> cdDivListMap = null;
	
	/** ワンストップ処理時異動区分(00049:割引情報登録) */
	private static final String OS_IDO_DIV = JKKCommonConst.IDO_DIV_VALUE_00049;

	/** 課金要否フラグ(1:課金) */
	private static final String KAKIN_YOHI_KAKIN = "1";

	/** 課金要否フラグ(2:非課金) */
	private static final String KAKIN_YOHI_HIKAKIN = "2";

	// 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.commonKnrnChkForOneStop())
				{
					// エラー発生の為処理終了
					return true;
				}
				
				// 割引サービス契約契約解約／キャンセル選択 初期処理用DataBean上書き処理
				this.overwriteDataBeanForInit();
				
				/////////////////////////////////////////////
				// 画面 割引サービス契約契約解約／キャンセル選択 初期表示処理
				/////////////////////////////////////////////
				this.actionInit();
				
				// ワンストップ先行独自単関連チェック
				if (!this.senkoKnrnChkForOneStop())
				{
					// エラー発生の為処理終了
					return true;
				}
				
				// 割引サービス契約契約解約／キャンセル選択 更新確認ボタン押下用DataBean上書き処理
				this.overwriteDataBeanForConfirm();
				
				/////////////////////////////////////////////
				// 画面 割引サービス契約契約解約／キャンセル選択 更新確認ボタン押下処理
				/////////////////////////////////////////////
				this.actionConfirm();
				
				// メッセージチェック
				if (!JKKOneStopApiCommonUtil.msgChk(this, warMsgMap, tkckErrMsgMap, errMsgMap, warnList, funcCode, IF_ID))
				{
					// エラー発生の為処理終了
					return true;
				}
				
				// 機能コード"1"の場合のみ、確定ボタン押下処理
				if (JKKCommonConst.FUNC_CODE_1.equals(funcCode))
				{
					/////////////////////////////////////////
					// 画面 割引サービス契約契約解約／キャンセル確認 確定ボタン押下処理
					/////////////////////////////////////////
					this.actionFix();
					
					// メッセージチェック
					if (!JKKOneStopApiCommonUtil.msgChk(this, warMsgMap, tkckErrMsgMap, errMsgMap, warnList, funcCode, IF_ID))
					{
						// エラー発生の為処理終了
						return true;
					}
				}
				
				// API用終了処理(リターンコード00(正常終了))
				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)
		{
			// 例外発生時はリターンコード99(システムエラー)
			JKKOneStopApiCommonUtil.printErrorLog(getSessionId(), "KKIFE276_割引サービス契約解約／キャンセル(ワンストップ)にて例外が発生しました。", e);
			this.apiTerminal("99");
		}
		return true;
	}



	/**
	 * ワンストップ用API初期処理メソッドです。
     * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	public boolean apiInit() throws Exception
	{
		// 受信データXML⇒Map変換
		requestMap = (Map<String, Object>)JKKOneStopApiCommonUtil.getReceiveXml(getSessionId()).get(IF_ID + "_RECEIVE");
		
		// 機能コード取得(業務規制チェック用に単項目チェック前に取得)
		funcCode = (String) requestMap.get("func_code");
		
		// 機能コードが"2"以外の場合、業務規制チェック
		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[]>();
		String wribSvcCd = (String)requestMap.get("wrib_svc_cd");
		if (JKKStrConst.WRIB_SVC_SOKU_WRIB.equals(wribSvcCd)) {
			warMsgMap.put(JCCMessageCache.getMessage("EKBD390--Q", new String[]{"即割"}), new String[]{"W0001", ""});
		} else if (JKKStrConst.WRIB_SVC_CHOKI_KEIZK_USE_WRIB.equals(wribSvcCd)) {
			warMsgMap.put(JCCMessageCache.getMessage("EKBD390--Q", new String[]{"長期継続利用割引"}), new String[]{"W0001", ""});
		}
// 2015.10.2 ST-2015-0000048 START
//		warMsgMap.put(JCCMessageCache.getMessage("EKBB070--Q"), new String[]{"W0002", ""});
// 2015.10.2 ST-2015-0000048 END
		warMsgMap.put(JCCMessageCache.getMessage("EKBB080--Q"), new String[]{"W0003", ""});
		
		// 単関連エラーメッセージ格納Map組み立て（※なし）
		tkckErrMsgMap = new HashMap<String, String[]>();
		
		// エラーメッセージ格納Map組み立て（※なし）
		errMsgMap = new HashMap<String, String[]>();
// 2015.10.2 ST-2015-0000048 START
		errMsgMap.put(JCCMessageCache.getMessage("EKBB070--Q"), new String[]{"E5002", ""});
// 2015.10.2 ST-2015-0000048 END		
		// サービスIFエラー格納Map組み立て
		// KEY=『サービスインターフェイスID,ステータス,エラー返却項目,エラーフラグ』
		sifErrMap = new HashMap<String, String[]>();
 //2015.10.21 ST-2015-0000048 ADD START		
		sifErrMap.put("EKK0451C030,1100,wrib_svc_kei_no,EC",  new String[]{"E5002", ""});
		sifErrMap.put("EKK0451C030,1100,wrib_svc_kei_no,ED",  new String[]{"E5002", ""});
 //2015.10.21 ST-2015-0000048 ADD 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 = "wrib_svc_cd";
		if (!JKKOneStopApiCommonUtil.checkRequireNotNull(requestMap, itemName))
		{
			// 必須チェックエラー
			errList.add(JKKOneStopApiCommonUtil.getReqErrInfMap(itemName));
		}
		else
		{
			if (requestMap.containsKey(itemName))
			{
				itemValue = (String)requestMap.get(itemName);
				if (!HalfCharCheck.isEnNumber1Check(itemValue))
				{
					// 形式チェックエラー
					errList.add(JKKOneStopApiCommonUtil.getFormErrInfMap(itemName));
				}
				if (!LengthCheck.isLength1Check(itemValue, 9))
				{
					// 桁数チェックエラー
					errList.add(JKKOneStopApiCommonUtil.getLenErrInfMap(itemName));
				}
				if (!(JKKStrConst.WRIB_SVC_FAMIPA.equals(itemValue) ||
						JKKStrConst.WRIB_SVC_SOKU_WRIB.equals(itemValue) ||
							JKKStrConst.WRIB_SVC_CHOKI_KEIZK_USE_WRIB.equals(itemValue)))
				{
					// リファレンスチェックエラー
					errList.add(JKKOneStopApiCommonUtil.getRefErrInfMap(itemName));
				}
			}
		}
		
		// 申込年月日
		itemName = "mskm_ymd";
		if (!JKKOneStopApiCommonUtil.checkRequireNotNull(requestMap, itemName))
		{
			// 必須チェックエラー
			errList.add(JKKOneStopApiCommonUtil.getReqErrInfMap(itemName));
		}
		else
		{
			if (requestMap.containsKey(itemName))
			{
				itemValue = (String)requestMap.get(itemName);
				if (!DatetimeCheck.isDateCheck(itemValue)
						|| !JPCUtilCommon.checkDate(itemValue, 8))
				{
					// 形式チェックエラー
					errList.add(JKKOneStopApiCommonUtil.getFormErrInfMap(itemName));
				}
				if (!LengthCheck.isLength1Check(itemValue, 8))
				{
					// 桁数チェックエラー
					errList.add(JKKOneStopApiCommonUtil.getLenErrInfMap(itemName));
				}
			}
		}
		
		// 課金要否
		itemName = "kakin_yohi";
		if (!JKKOneStopApiCommonUtil.checkRequireFailNullUpd(requestMap, itemName))
		{
			// 必須チェックエラー
			errList.add(JKKOneStopApiCommonUtil.getReqErrInfMap(itemName));
		}
		else
		{
			if (requestMap.containsKey(itemName))
			{
				itemValue = (String)requestMap.get(itemName);
				if (!HalfCharCheck.isEnNumber1Check(itemValue))
				{
					// 形式チェックエラー
					errList.add(JKKOneStopApiCommonUtil.getFormErrInfMap(itemName));
				}
				if (!LengthCheck.isLength1Check(itemValue, 1))
				{
					// 桁数チェックエラー
					errList.add(JKKOneStopApiCommonUtil.getLenErrInfMap(itemName));
				}
				if (!(KAKIN_YOHI_KAKIN.equals(itemValue) ||
						KAKIN_YOHI_HIKAKIN.equals(itemValue)))
				{
					// リファレンスチェックエラー
					errList.add(JKKOneStopApiCommonUtil.getRefErrInfMap(itemName));
				}
			}
		}
		
		// エラーが存在する場合
		if (errList.size() > 0)
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "10", errList, warnList, funcCode, IF_ID);
			return false;
		}
		
		return true;
	}



	/**
	 * ワンストップ用共通関連チェックメソッドです。
	 * <BR>
	 * @return boolean
	 * @throws Exception 
	 */
	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>();
		
		// 運用日付
		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, "E5005", warnList, funcCode, IF_ID);
			return false;
		}
		
		// サービス契約番号存在チェック
		if (!JKKOneStopApiCommonUtil.checkExistSvcKeiNo(kksv0820OutputMap))
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5006", warnList, funcCode, IF_ID);
			return false;
		}
		
		// ユーザID存在チェック
		if (!JKKOneStopApiCommonUtil.checkExistUserId(kksv0820OutputMap))
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5007", 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, "E5008", warnList, funcCode, IF_ID);
			return false;
		}
		
		// サービス契約異動可能チェック
		if (!JKKOneStopApiCommonUtil.checkSvcKeiIdoPsb(kksv0062OutputMap, osBean, idoDiv))
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5002", warnList, funcCode, IF_ID);
			return false;
		}
		
		return true;
	}


	/**
	 * ワンストップ先行独自関連チェック処理です。
	 * <BR>
	 * @return boolean
	 */
	private boolean senkoKnrnChkForOneStop()
	{
		// 存在チェック
		// 選択されたキャンペーン一覧の件数が０件の場合エラー
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		// SFBean書き出し
		BeanMap beanMap = Mover.getBeanMapFromDataBean(bean, KKW01030SFConst.SFBEAN);

		// 選択されているキャンペーンを抽出。
		ArrayList<BeanMap> campaignIcrn = (ArrayList<BeanMap>)beanMap.get(KKW01030SFConst.CAMPAIGN_ICRN);
		if (campaignIcrn.size() == 0)
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5004", warnList, funcCode, IF_ID);
			return false;
		}
		
		// 日付相関チェック
		// 運用日付の取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		// 運用日付 + 90日を取得
		String opeDateAdd90 = JPCDateUtil.addDay(opeDate, 90);
		// 申込年月日の取得
		String mskmYmd = (String)requestMap.get("mskm_ymd");
		// 申込年月日が運用日付 + 90日 以上の場合エラー
		if (mskmYmd.compareTo(opeDateAdd90) >= 0)
		{
			JKKOneStopApiCommonUtil.setReturnXml(this, "E5003", warnList, funcCode, IF_ID);
			return false;
		}
		
		// 課金要否チェック
		// 割引サービスコード
		String wribSvcCd = (String) requestMap.get("wrib_svc_cd");
		// 課金要否
		String kakinYohi = (String) requestMap.get("kakin_yohi");
		// 割引サービスコード = ファミリーパック の場合
		if (!JKKStrConst.WRIB_SVC_FAMIPA.equals(wribSvcCd)) {
			return true;
		}
		for (BeanMap map : campaignIcrn) {
			// 選択されたキャンペーン一覧で登録済みの課金要否が"null"
			if (wribSvcCd.equals(map.get(KKW01030SFConst.WRIB_SVC_CD_02)) &&
					JKKStringUtil.isNullBlank(map.get(KKW01030SFConst.KAKIN_YOHI_02).toString())) 
			{
				// 受信データの課金要否が"2"の場合エラー
				if (KAKIN_YOHI_HIKAKIN.equals(kakinYohi)) {
					JKKOneStopApiCommonUtil.setReturnXml(this, "E5009", warnList, funcCode, IF_ID);
					return false;
				}
			}
		}
		
		return true;
	}


//v18.00.00 ADD START 【ワンストップ用】
	/**
	 * 割引契約サービス契約解約／キャンセル選択 初期表示処理用DataBean上書き処理です。
     * <BR>
	 */
	private void overwriteDataBeanForInit()
	{
		// 顧客契約引継ぎ情報を生成する
		// 初期処理用の引継List作成
		// (a) 引継ぎ情報格納Mapを生成
		HashMap<String, Object> inMap = new HashMap<String, Object>();
		// (b) 引継ぎ情報格納Listを生成
		ArrayList<HashMap<String, Object>> hktgList = new ArrayList<HashMap<String, Object>>();
		// (c) 画面情報格納Mapを生成
		HashMap<String, Object> paraMap = new HashMap<String, Object>();
		
		// (d) 引継ぎ情報格納Mapにデータ設定
		// 異動区分(00049:オプション設定 固定)
		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"));
		// SYSID
		inMap.put(JKKCommonConst.HKTGI_SYSID,   (String)requestMap.get("sysid"));
		// サービス契約番号
		inMap.put(JKKCommonConst.HKTGI_SVC_KEI_NO,   (String)requestMap.get("svc_kei_no"));
		
		// (e) 引継ぎ情報格納リストに引継ぎ情報格納Mapを格納
		hktgList.add(inMap);
		// (f) 画面情報格納Mapに引継ぎ情報格納Listを格納
		paraMap.put(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST, hktgList);
		
		JCCWebCommon.setScreenInfo(this, "KKA15101", paraMap);
		
		// 共有フォームビーンにユーザIDを設定する
		X31SDataBeanAccess  commonBean = super.getCommonInfoBean();
		commonBean.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_SET_VALUE, (String)requestMap.get("user_id"));
	}

	/**
	 * 割引契約サービス契約解約／キャンセル選択 更新確認ボタン押下処理用DataBean上書き処理です。
     * <BR>
	 */
	private void overwriteDataBeanForConfirm()
	{
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		// SFBean書き出し
		BeanMap beanMap = Mover.getBeanMapFromDataBean(bean, KKW01030SFConst.SFBEAN);

		// 選択されているキャンペーンを抽出。
		ArrayList<BeanMap> campaignIcrn = (ArrayList<BeanMap>)beanMap.get(KKW01030SFConst.CAMPAIGN_ICRN);
		
		// 選択されたキャンペーンの契約番号を取得
		String selectedKeiNo=(String)campaignIcrn.get(0).take(KKW01030SFConst.NO_02);
		String[] keiNoList=new String[]{selectedKeiNo};
		// 選択されたキャンペーンの契約種別を取得
		String selectedKeiKind=(String)campaignIcrn.get(0).take(KKW01030SFConst.KEI_KIND_02);
		String[] keiKindList=new String[]{selectedKeiKind};
		
		// 遷移先画面で必要な引継情報を設定
		// 契約番号リスト設定
		beanMap.pair(KKW01030SFConst.HKTGI_KEI_NO_LIST,keiNoList);
		// 契約種別リスト設定
		beanMap.pair(KKW01030SFConst.HKTGIKEI_KIND_LIST,keiKindList);
		// 選択であることを設定
		beanMap.pair(KKW01030SFConst.SELECT_TYPE,JKKCommonConst.WRIB_DSL_CNCL);
		
		// 割引サービスコード
		String wribSvcCd = (String) requestMap.get("wrib_svc_cd");
		// 課金要否
		String kakinYohi = (String) requestMap.get("kakin_yohi");
		// 割引サービスコード = ファミリーパック の場合
		if (!JKKStrConst.WRIB_SVC_FAMIPA.equals(wribSvcCd)) {
			return;
		}
		for (BeanMap map : campaignIcrn) {
			// 選択されたキャンペーン一覧の課金要否を設定
			map.put(KKW01030SFConst.KAKIN_YOHI_03, kakinYohi);
		}

		// SFBeanへ書き戻し
		Mover.setBeanMapToDataBean(beanMap, bean);

	}
//v18.00.00 ADD END   【ワンストップ用】
	
	
	/**
	 * ワンストップ用API終了メソッドです。
     * <BR>
     * @param returnCd リターンコード
	 * @throws Exception 
	 */
	public void apiTerminal(String returnCd) throws Exception
	{
		JKKOneStopApiCommonUtil.setReturnXml(this, returnCd, null, warnList, funcCode, IF_ID);
	}


	/**
	 * <dd>メソッド名：初期表示処理 <dd>メソッド説明：選択画面の初期表示を行う。 <dd>備考：なし。
	 * 
	 * @return true
	 * @throws Exception 
	 */
	public boolean actionInit() throws Exception
	{
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		JCCWebCommon.getScreenInfo(this);
		// サービスフォームBeanから顧客契約引継リストを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
// v18.00.00 MOD START 【ワンストップ用】
		X31SDataBeanAccessArray custKeiHktgiListArray = Mover.getBeanArray(bean, KKW01030SFConst.CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess custKeiHktgiList = custKeiHktgiListArray.getDataBean(0);
		
		//SYSIDを転記
		String sysid = Mover.getString(custKeiHktgiList, KKW01030SFConst.SYSID_01);
		Mover.setString(bean, KKW01030SFConst.SYSID, sysid);
		//サービス契約番号を転記
		String svcKeiNo = Mover.getString(custKeiHktgiList, KKW01030SFConst.SVC_KEI_NO_01);
		Mover.setString(bean, KKW01030SFConst.SVC_KEI_NO, svcKeiNo);
		//異動区分を転記
		String idoDiv = Mover.getString(custKeiHktgiList, KKW01030SFConst.IDO_DIV_01);
		Mover.setString(bean, KKW01030SFConst.IDO_DIV, idoDiv);
		//異動理由コードを転記
		String[] idoRsnCd = Mover.getStringArray(custKeiHktgiList, KKW01030SFConst.IDO_RSN_CD_01);
		Mover.setStringArray(bean, KKW01030SFConst.IDO_RSN_CD, idoRsnCd);
		//異動理由メモを転記
		String idoRsnMemo = Mover.getString(custKeiHktgiList, KKW01030SFConst.IDO_RSN_MEMO_01);
		Mover.setString(bean, KKW01030SFConst.IDO_RSN_MEMO, idoRsnMemo);
		//申込番号を転記
		String mskmNo = Mover.getString(custKeiHktgiList, KKW01030SFConst.MSKM_NO_01);
		Mover.setString(bean, KKW01030SFConst.MSKM_NO, mskmNo);
// v18.00.00 MOD END   【ワンストップ用】
		
		// 割引キャンペーン一覧リストの作成
		editWribCampaignList(bean, Screen.KKW01030);
		//SFBean書き出し
		BeanMap beanMap=Mover.getBeanMapFromDataBean(bean, KKW01030SFConst.SFBEAN);

// v18.00.00 MOD START 【ワンストップ用】
//		//申込年月日=運用日としておく
//		String mskmDate = JCCWebCommon.getOpeDate(this, null);
		//申込年月日=requestMap.申込年月日としておく
		String mskmDate = (String)requestMap.get("mskm_ymd");
// v18.00.00 MOD END   【ワンストップ用】
		beanMap.put(KKW01030SFConst.MSKM_DATE,mskmDate );
		//申込年月日(年,月,日)の解決
		String mskmYmdYear = mskmDate.substring(0, 4);
		String mskmYmdMon = mskmDate.substring(4, 6);
		String mskmYmdDay = mskmDate.substring(6, 8);
		beanMap.put(KKW01030SFConst.MSKM_YMD_YEAR, mskmYmdYear );
		beanMap.put(KKW01030SFConst.MSKM_YMD_MON, mskmYmdMon );
		beanMap.put(KKW01030SFConst.MSKM_YMD_DAY, mskmYmdDay );
// v18.00.00 MOD START 【ワンストップ用】
//		beanMap.pair(KKW01030SFConst.OPE_DATE, mskmDate);
		beanMap.pair(KKW01030SFConst.OPE_DATE, JCCWebCommon.getOpeDate(this, null));
// v18.00.00 MOD END   【ワンストップ用】
		
		//SFBean書き戻し
		Mover.setBeanMapToDataBean(beanMap, bean);
		
		//画面名設定
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW01030);

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		return true;
	}
	
	
	/**
	 * <dd>メソッド名：変更確認ボタン押下 <dd>メソッド説明：解約／キャンセル選択画面の変更確認ボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @param
	 * @return true
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	public boolean actionConfirm()throws Exception 
	{
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		// SFBean書き出し
		BeanMap beanMap = Mover.getBeanMapFromDataBean(bean, KKW01030SFConst.SFBEAN);

		//申込年月日を転記
		String mskmYmdYear=(String)beanMap.take(KKW01030SFConst.MSKM_YMD_YEAR);
		String mskmYmdMon=(String)beanMap.take(KKW01030SFConst.MSKM_YMD_MON);
		String mskmYmdDay=(String)beanMap.take(KKW01030SFConst.MSKM_YMD_DAY);
		String mskmDate=mskmYmdYear+mskmYmdMon+mskmYmdDay;
		beanMap.pair(KKW01030SFConst.MSKM_DATE, mskmDate);
		// 更新されたキャンペーン一覧をSFBeanへ書き戻し
		Mover.setBeanMapToDataBean(beanMap, bean);
				
		// 選択されているキャンペーンを抽出。
		ArrayList<BeanMap> campaignIcrn = (ArrayList<BeanMap>)beanMap.get(KKW01030SFConst.CAMPAIGN_ICRN);

		//（選択内容「解約/キャンセル」または「一括解約/キャンセル」）の情報取得
		String select_type_tmp = (String)beanMap.get(KKW01030SFConst.SELECT_TYPE);
		if(JKKCommonConst.WRIB_DSL_CNCL.equals(select_type_tmp)){
			campaignIcrn.get(0).put(KKW01030SFConst.CHOICE_02,Boolean.TRUE);
		}
		BeanMapListFilter filter = new BeanMapListFilter(KKW01030SFConst.CHOICE_02, Boolean.TRUE);
		ArrayList<BeanMap> selectedCampaignIcrn = Items.select(campaignIcrn, filter);
		// 選択されているキャンペーンから割引サービスコード／データ抽出項目コードを生成
		BeanMapValuesPicker wribSvcCdPicker = new BeanMapValuesPicker(KKW01030SFConst.WRIB_SVC_CD_02);
		ArrayList<String> wribSvcCdList = Items.map(selectedCampaignIcrn, wribSvcCdPicker);
		String[] wribSvcCds = wribSvcCdList.toArray(new String[0]);
		for (String wribSvcCd : wribSvcCds)
		{
			if (JKKCommonConst.WRIB_SVC_CD_CHO_WARI.equals(wribSvcCd))
			{
				// 解約/キャンセル対象に長期利用割引が含まれている場合、業務エラー
				String[] repStr = new String[] {"選択内容", "長期利用割引", "解約/キャンセル"};
				JCCWebCommon.setMessageInfo(this, "EKB0290-JW", repStr);
				return false;
			}
		}
		
		// ++++++++++++++ 2012/09/07 v4.01.00 変更開始 ++++++++++++++++ //
		
		// 選択されているキャンペーンからタイプコードリストを生成：エラーチェック用
		BeanMapValuesPicker wribTypeCdPicker   = new BeanMapValuesPicker(KKW01030SFConst.TYPE_CD_02);
		ArrayList<String> wribTypeCdList       = Items.map(selectedCampaignIcrn, wribTypeCdPicker);
		String[] wribTypeCds                   = wribTypeCdList.toArray(new String[0]);
		// キャンペーンからタイプコード名称リストを生成：置換文字列用
		BeanMapValuesPicker wribTypeCdNmPicker = new BeanMapValuesPicker(KKW01030SFConst.TYPE_CD_NM_02);
		ArrayList<String> wribTypeCdNmList     = Items.map(selectedCampaignIcrn, wribTypeCdNmPicker);
		String[] wribTypeCdNms                 = wribTypeCdNmList.toArray(new String[0]);
		
		// 選択されたキャンペーンの割引タイプコードをチェック
		int validCnt = 0;
		boolean errFlg = true;
		for (String wribTypeCd : wribTypeCds)
		{
			// 選択キャンペーン全てチェック実施.
			if (!isNotErrChkWribTypeCd( wribTypeCd, "割引(" + wribTypeCdNms[validCnt] + " " + wribSvcCds[validCnt] + ")", "解約/キャンセル"))
			{
				errFlg = false;
			}
			validCnt++;
		}
		
		// 不正なタイプコードの場合,処理終了.
		// エラー情報は一括で出力する.
		if (!errFlg)
		{
			return true;
		}
		// ++++++++++++++ 2012/09/07 v4.01.00 変更終了 ++++++++++++++++ //
		
		// 選択されているキャンペーンから契約番号リストを生成
		BeanMapValuesPicker keiNoPicker = new BeanMapValuesPicker(KKW01030SFConst.NO_02);
		ArrayList<String> keiNoList = Items.map(selectedCampaignIcrn, keiNoPicker);
		String[] keiNos = keiNoList.toArray(new String[0]);
		// 選択されているキャンペーンから契約種別リストを生成
		BeanMapValuesPicker keiKindPicker = new BeanMapValuesPicker(KKW01030SFConst.KEI_KIND_02);
		ArrayList<String> keiKindList = Items.map(selectedCampaignIcrn, keiKindPicker);
		String[] keiKinds = keiKindList.toArray(new String[0]);
		// 画面引渡し情報取得
		ArrayList<BeanMap> custKeiHktgiList = (ArrayList<BeanMap>)beanMap.get(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);

		//選択した割引サービス用「選択キャンペーン一覧」の要素数の取得
		beanMap.put(KKW01030SFConst.CAMPAIGN_ICRN_SUM,String.valueOf(selectedCampaignIcrn.size()));
		
		// 課金要否フラグの表示設定
		setKakinYohiDisp(selectedCampaignIcrn);
		
// v10.00.00 ADD START
		
		// 違約金表示設定
		setPnltyNm(selectedCampaignIcrn);
// v10.00.00 ADD END
		
		//選択キャンペーン一覧の複製
		selectedCampaignIcrn=Items.map(selectedCampaignIcrn, new Items.Transformer<BeanMap, BeanMap>(){
			@Override
			public BeanMap transform(BeanMap input) {
				return (BeanMap)input.clone();
			}});
		// 更新後終了年月日の初期値設定
		setDefaultEndymdAf(selectedCampaignIcrn);

		//選択した割引サービス用「選択キャンペーン一覧」のマッピング
		beanMap.put(KKW01030SFConst.SELECT_CAMPAIGN_ICRN, selectedCampaignIcrn);
		//SFBean書き戻し
		Mover.setBeanMapToDataBean(beanMap, bean);
		
		///// メッセージ表示処理 /////
// 2013.03.06 OT-2013-0000259 Start
		//処理概要メッセージ
//		String[] messages = {"割引サービス契約の解約"};
//		JCCWebCommon.setMessageInfo(this, "EKB0370--I", messages);
//		String[] messages2 = {"割引サービス契約のキャンセル"};
//		JCCWebCommon.setMessageInfo(this, "EKB0370--I", messages2);
		// ANK-3383-09-00 DEL START
//		String[] messages = {"割引サービス契約の解約/キャンセル"};
//		JCCWebCommon.setMessageInfo(this, "EKB0370--I", messages);
		// ANK-3383-09-00 DEL END
// 2013.03.06 OT-2013-0000259 End
		
// ++++++++++++++++ 2013/03/07 v4.03.00 追加開始  ++++++++++++++++ //
		
		// サービス呼び出し
		// ANK-3383-09-00 MOD START
//		Service.KKSV0240.invokeAndApplySFBean(this, bean, FunctionCode.CHECK_ONLY.getCode());
		HashMap<String, Object> out = new HashMap<String, Object>();
		Service.KKSV0240.invokeAndApplySFBean(this, bean, FunctionCode.CHECK_ONLY.getCode(), out);
		// ANK-3383-09-00 MOD END

		// ANK-3383-09-00 ADD START
		// 自治体特別キャンペーン解約時チェック
		if (!checkJctSpclCp(out))
		{
			errFlg = false;
		}
		// エラーの場合
		if (!errFlg)
		{
			return true;
		}
		
		// OM-2021-0001721 ADD START 【ワンストップ用】
		// 割引課金終了日チェック
		// キャンペーン名称リストを生成：置換文字列用
		BeanMapValuesPicker campaignNmPicker = new BeanMapValuesPicker(KKW01030SFConst.CAMPAIGN_NM_02);
		ArrayList<String> campaignNmList     = Items.map(selectedCampaignIcrn, campaignNmPicker);
		String[] campaignNms                 = campaignNmList.toArray(new String[0]);
		// 選択されているキャンペーンから課金終了日リストを生成：エラーチェック用
		BeanMapValuesPicker wribKknFinPicker   = new BeanMapValuesPicker(KKW01030SFConst.ENDYMD_02);
		ArrayList<String> wribKknFinList       = Items.map(selectedCampaignIcrn, wribKknFinPicker);
		String[] wribKknFins                   = wribKknFinList.toArray(new String[0]);
		
		// 選択された課金終了日のチェック
		validCnt = 0;
		errFlg = true;
		for (String wribKknFin : wribKknFins)
		{
			// 選択キャンペーン全てチェック実施.
			if (!checkWaribikiKakinFin(wribKknFin, campaignNms[validCnt], "解約/キャンセル"))
			{
				errFlg = false;
			}
			validCnt++;
		}
		
		// エラーの場合
		if (!errFlg)
		{
			return false;
		}
		// OM-2021-0001721 ADD END 【ワンストップ用】

		String[] messages = {"割引サービス契約の解約/キャンセル"};
		JCCWebCommon.setMessageInfo(this, "EKB0370--I", messages);
		// ANK-3383-09-00 ADD END

		String warning = Mover.getString(bean, KKW01030SFConst.PENALTY_WARNING);
		
		if (!JKKStringUtil.isNullBlank(warning)) {
			
			if ("1".equals(warning)) {
				JCCWebCommon.setMessageInfo(this, "EKBD390--Q", new String[] {"長期継続利用割引"});
				
			} else if ("2".equals(warning)) {
				JCCWebCommon.setMessageInfo(this, "EKBD390--Q", new String[] {"即割"});
				
			} else if ("3".equals(warning)) {
				
				JCCWebCommon.setMessageInfo(this, "EKBD390--Q", new String[] {"長期継続利用割引"});
				JCCWebCommon.setMessageInfo(this, "EKBD390--Q", new String[] {"即割"});
			}
		}
// ++++++++++++++++ 2013/03/07 v4.03.00 追加終了  ++++++++++++++++ //
		//警告メッセージ
		editWarningMessage(mskmDate);
		// 画面引渡し情報編集設定
		BeanMap target = new BeanMap();
		target.pair(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST, custKeiHktgiList);
		target.pair(KKW01030SFConst.KEI_NO_LIST, keiNos);
		target.pair(KKW01030SFConst.KEI_KIND_LIST, keiKinds);
		// 画面引渡し情報設定
		JCCWebCommon.setScreenInfo(this, Screen.KKW01031.getScreenId(), target);
		// 画面遷移
		moveToNextSameScreen(Screen.KKW01031);
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		return true;
	}

// v10.00.00 ADD START
	/**
	 * 違約金に関する表示内容設定
	 */
	private void setPnltyNm(ArrayList<BeanMap> selectedCampaignIcrn) {
		
		for (BeanMap map : selectedCampaignIcrn)
		{
			Boolean pnlty = (Boolean) map.get(KKW01030SFConst.PNLTY_CD_03);
			if (pnlty)
			{
				map.put(KKW01030SFConst.PNLTY_NM_03, "無");
			} else {
				map.put(KKW01030SFConst.PNLTY_NM_03, "有");
			}
		}
	}
// v10.00.00 ADD END
	
	/**
	 * 課金要否に関する表示内容設定
	 * 
	 * @param selectedCampaignIcrn
	 */
	private void setKakinYohiDisp(ArrayList<BeanMap> selectedCampaignIcrn)
	{
		for (BeanMap map : selectedCampaignIcrn)
		{
			String kakinYohiFlg = (String)map.get(KKW01030SFConst.KAKIN_YOHI_03);
			if ("1".equals(kakinYohiFlg))
			{
				map.put(KKW01030SFConst.KAKIN_YOHI_NM_03, "1.課金");
			}
			else if ("2".equals(kakinYohiFlg))
			{
				map.put(KKW01030SFConst.KAKIN_YOHI_NM_03, "2.非課金");
			}
		}
	}
	
	/**
	 * 更新後終了年月日初期値設定
	 * 
	 * @param selectedCampaignIcrn
	 */
	private void setDefaultEndymdAf(ArrayList<BeanMap> selectedCampaignIcrn)
	{
		for (BeanMap campaign : selectedCampaignIcrn)
		{
			//更新後終了年月日 (初期値:空)を設定
			campaign.pair(KKW01030SFConst.ENDYMD_AF_03, "");
		}
	}

	/**
	 * <dd>メソッド名：確定ボタン押下 <dd>メソッド説明：解約／キャンセル確認画面の確定ボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @return true
	 */

	public boolean actionFix() throws Exception {
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		/* サービスを呼び出し、削除対象となる割引のチェック、登録を行い
		 * 問題なければ完了画面へ遷移 */
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		BeanMap beanMap=Mover.getBeanMapFromDataBean(bean, KKW01030SFConst.SFBEAN);
		// サービス呼び出し
		Service.KKSV0240.invokeAndApplySFBean(this, bean, FunctionCode.CHECK_AND_CHANGE.getCode());
		moveToNextSameScreen(Screen.KKW01032);
		///// メッセージ表示処理 /////
// 2013.03.06 OT-2013-0000259 Start
//		String[] messages1 = {"割引サービス契約の解約"};
//		JCCWebCommon.setMessageInfo(this, "EKB4390--I", messages1);
//		String[] messages2 = {"割引サービス契約のキャンセル"};
//		JCCWebCommon.setMessageInfo(this, "EKB4390--I", messages2);
		String[] messages1 = {"割引サービス契約の解約/キャンセル"};
		JCCWebCommon.setMessageInfo(this, "EKB4390--I", messages1);
// 2013.03.06 OT-2013-0000259 End
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		return true;
	}

	/**
	 * <dd>メソッド名：一覧照会へボタン押下 <dd>メソッド説明：解約／キャンセルの修正ボタン押下時処理及び完了画面の一覧照会へボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @return true
	 */

	public boolean actionReturnToIcrn() throws Exception {
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		//画面遷移
		backToNextOtherScreen();
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		return true;
	}
	
	/**
	 * <dd>メソッド名：修正ボタン押下 <dd>メソッド説明：確認画面の修正ボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @param
	 * @return true
	 */

	public boolean actionReturn() throws Exception {
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		//画面遷移
		moveToNextSameScreen(Screen.KKW01030);
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		return true;
	}
	
	/**
	 * <dd>メソッド名：お客様一覧照会へボタン押下 <dd>メソッド説明：完了画面のお客様一覧照会へボタン押下時処理を行う。 <dd>備考：なし。
	 * 
	 * @return true
	 */

	public boolean actionReturnToCustIcrn() throws Exception {
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		//画面遷移
		moveToNextOtherScreen(Screen.CKW00101);
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		return true;
	}

	// ++++++++++++++ 2012/09/07 v4.01.00 変更開始 ++++++++++++++++ //
	/**
	 * <dl>
	 * <dt>処理概要:
	 * <dd>割引タイプチェックを実施する。
	 * <dd>[42:割賦契約割引]であるか否かの判定を実施する。
	 * <dt>処理補足:
	 * <dd>・[42:割賦契約割引]の場合　　：エラー情報を設定し、falseを返却
	 * <dd>・[42:割賦契約割引]以外の場合：trueを返却
	 * </dl>
	 * 
	 * @param  typeCd  チェック対象となる割引タイプコード
	 * @param  errMsg1 エラー埋め込み文字１個目
	 * @param  errMsg2 エラー埋め込み文字２個目
	 * @return true：正常、false：異常
	 */
	private boolean isNotErrChkWribTypeCd(String typeCd, String errMsg1, String errMsg2) 
	{
		// タイプコードの取得可否判定
		if (typeCd != null) 
		{
			// 
			// 割引タイプチェック
			// 選択対象が[42:割賦契約割引]の場合,エラー情報設定後に処理終了.
			// 
			if (JKKCommonConst.WRIB_TYPE_CD_CUP_KEI_WRIB.equals(typeCd)) 
			{
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB5420_JW, new String[] {errMsg1, errMsg2});
				return false;
			}
		}
		return true;
	}
	// ++++++++++++++ 2012/09/07 v4.01.00 変更終了 ++++++++++++++++ //
	
	
	/**
	 * <dl>
	 * <dt>処理概要:
	 * <dd>割引サービス契約一覧照会サービスを呼び出し、割引キャンペーン一覧のリストを作成する。
	 * <dt>処理補足:
	 * <dd>・一覧照会画面では、有効なステータスの割引キャンペーンのみ表示する。
	 * <dd>・履歴照会画面では、サービスで取得した全レコードを表示する。
	 * </dl>
	 * 
	 * @param bean
	 *            割引サービス契約一覧照会サービスフォームBean
	 * @param screenId
	 *            割引キャンペーン一覧を表示する画面の画面ID
	 */
	@SuppressWarnings("unchecked")
	private void editWribCampaignList(X31SDataBeanAccess bean, Screen screen) throws Exception  
	{
// v4.04.00 DEL START
//		// 一覧ソート条件
//		Comparator<BeanMap> comparator=new IcrnComparator();
// v4.04.00 DEL END
		
		// サービス呼び出し 
		Service.KKSV0229.invokeAndApplySFBean(this, bean,FunctionCode.ICRN_SHOKAI.getCode());
		
		// SFBean書き出し
		BeanMap beanMap = Mover.getBeanMapFromDataBean(bean, KKW01030SFConst.SFBEAN);
		ArrayList<BeanMap> resultList = new ArrayList<BeanMap>(100);
		
		// 割引キャンペーンを取得。
		ArrayList<BeanMap> campaignIcrn = (ArrayList<BeanMap>)beanMap.get(KKW01030SFConst.CAMPAIGN_ICRN);
		
		// 一覧照会画面の場合は有効なステータスの割引キャンペーンのみ表示
		if(Screen.KKW01030.equals(screen)){
			
// v4.03.00 DEL START （一覧情報の取得方法変更でサービスIF側にてソートが行われるためソート処理を削除）
//			ArrayList<BeanMap> selectedCampaignIcrn = Items.select(campaignIcrn,new BeanMapListMultiFilter(KKW01030SFConst.KEI_KIND_02, new Object[]{"w"}));
//			//有効なステータス
//			Object[] aliveStat={
//					JKKCommonConst.WRIB_SVC_KEI_STAT_UK_ZM,//受付済
//					JKKCommonConst.WRIB_SVC_KEI_STAT_SVCTK_CHU,//サービス提供中
//					};
//			//有効なステータスのキャンペーンのみを抽出
//			BeanMapListMultiFilter aliveFilter=new BeanMapListMultiFilter(KKW01030SFConst.STAT_02,aliveStat);
//			selectedCampaignIcrn=Items.select(selectedCampaignIcrn, aliveFilter);
//			Collections.sort(selectedCampaignIcrn, comparator);
//			resultList.addAll(selectedCampaignIcrn);
//			
//			selectedCampaignIcrn=Items.select(campaignIcrn,new BeanMapListMultiFilter(KKW01030SFConst.KEI_KIND_02, new Object[]{"d"}));
//			//有効なステータスのキャンペーンのみを抽出
//			selectedCampaignIcrn=Items.select(selectedCampaignIcrn, new BeanMapListMultiFilter(KKW01030SFConst.STAT_02,new Object[]{"010"}));
//			Collections.sort(selectedCampaignIcrn, comparator);
//			resultList.addAll(selectedCampaignIcrn);
			
			for(BeanMap dataBean : campaignIcrn)
			{
				// KKW01030では、該当のステータスのデータのみ表示を行う
				String wribDchskmKbn  = (String)dataBean.get(KKW01030SFConst.KEI_KIND_02);
				String wribDchskmStat = (String)dataBean.get(KKW01030SFConst.STAT_02);
				if("w".equals(wribDchskmKbn) && 
					(JKKCommonConst.WRIB_SVC_KEI_STAT_UK_ZM.equals(wribDchskmStat) || JKKCommonConst.WRIB_SVC_KEI_STAT_SVCTK_CHU.equals(wribDchskmStat)))
				{
					// 割引サービス契約の場合、"受付済"・"サービス提供中"のものを画面表示する
					resultList.add(dataBean);
				}
				else if("d".equals(wribDchskmKbn) && JKKCommonConst.WRIB_SVC_KEI_STAT_UK_ZM.equals(wribDchskmStat))
				{
					// データ抽出項目設定の場合、"受付済"のものを画面表示する
					resultList.add(dataBean);
				}
			}
		}else{
//			ArrayList<BeanMap> selectedCampaignIcrn = Items.select(campaignIcrn,new BeanMapListMultiFilter(KKW01030SFConst.KEI_KIND_02, new Object[]{"w"}));
//			Collections.sort(selectedCampaignIcrn, comparator);
//			resultList.addAll(selectedCampaignIcrn);
//			
//			selectedCampaignIcrn=Items.select(campaignIcrn,new BeanMapListMultiFilter(KKW01030SFConst.KEI_KIND_02, new Object[]{"d"}));
//			Collections.sort(selectedCampaignIcrn, comparator);
//			resultList.addAll(selectedCampaignIcrn);
			
			resultList.addAll(campaignIcrn);
// v4.03.00 DEL END
		}
		
// ANK-2631-00-00 MOD START 【ワンストップ用】
		//（選択内容「解約/キャンセル」または「一括解約/キャンセル」）の情報取得
//		String select_type_tmp = (String)beanMap.get(KKW01030SFConst.SELECT_TYPE);
		String select_type_tmp = JKKCommonConst.WRIB_DSL_CNCL;
// ANK-2631-00-00 MOD END   【ワンストップ用】
		
// ANK-2631-00-00 ADD START 【ワンストップ用】
//		//「解約/キャンセル」をボタン押下した場合選択した割引サービスのみ選択
//		//引き継ぎ情報の取得
//		String[] hktgi_kei_no_list_tmp = (String[])beanMap.get(KKW01030SFConst.HKTGI_KEI_NO_LIST);
//		String[] hktgikei_kind_list_tmp = (String[])beanMap.get(KKW01030SFConst.HKTGIKEI_KIND_LIST);
		
		// 割引サービスコード
		String selectedWribSvcCd = (String)requestMap.get("wrib_svc_cd");
// ANK-2631-00-00 ADD END   【ワンストップ用】
		
		//詰め替え用
		ArrayList<BeanMap> selectList = new ArrayList<BeanMap>(100);
		for(BeanMap databean : resultList){
// ANK-2631-00-00 MOD START 【ワンストップ用】
//			String  data_no_tmp = (String)databean.get(KKW01030SFConst.NO_02);
//			String  data_kei_kind__tmp = (String)databean.get(KKW01030SFConst.KEI_KIND_02);
//			
//			//一覧紹介画面で選択した割引サービスが存在した場合
//			if(data_no_tmp.equals((String)hktgi_kei_no_list_tmp[0]) && data_kei_kind__tmp.equals((String)hktgikei_kind_list_tmp[0])){
			// キャンペーン一覧.割引サービスコード
			String wribSvcCd = (String)databean.get(KKW01030SFConst.WRIB_SVC_CD_02);

			if(selectedWribSvcCd.equals(wribSvcCd))
			{
// ANK-2631-00-00 MOD END   【ワンストップ用】

				//日付対応（2099/12/31の場合表示なし）
				String  data_tem_staymd = (String)databean.get(KKW01030SFConst.STAYMD_02);
				String  data_tem_end_ymd = (String)databean.get(KKW01030SFConst.ENDYMD_02);
				String  data_tem_msk_ymd = (String)databean.get(KKW01030SFConst.MSKM_YMD_02);

				if(null == data_tem_staymd.trim() || 8 != data_tem_staymd.trim().length() || JKKCommonConst.MAX_YMD.equals(data_tem_staymd.trim()))
				{
					databean.put(KKW01030SFConst.STAYMD_02,"");
				}
				if(null == data_tem_end_ymd.trim() || 8 != data_tem_end_ymd.trim().length() || JKKCommonConst.MAX_YMD.equals(data_tem_end_ymd.trim()))
				{
					databean.put(KKW01030SFConst.ENDYMD_02,"");
				}
				if(null == data_tem_msk_ymd.trim() || 8 != data_tem_msk_ymd.trim().length() || JKKCommonConst.MAX_YMD.equals(data_tem_msk_ymd.trim()))
				{
					databean.put(KKW01030SFConst.MSKM_YMD_02,"");
				}
				
				selectList.add(databean);
			}
		}
		
		if(JKKCommonConst.WRIB_DSL_CNCL_ALL.equals(select_type_tmp)){
			for(BeanMap databean : resultList){
				String  data_tem_staymd = (String)databean.get(KKW01030SFConst.STAYMD_02);
				String  data_tem_end_ymd = (String)databean.get(KKW01030SFConst.ENDYMD_02);
				String  data_tem_msk_ymd = (String)databean.get(KKW01030SFConst.MSKM_YMD_02);
			
				if(null == data_tem_staymd.trim() || 8 != data_tem_staymd.trim().length() || JKKCommonConst.MAX_YMD.equals(data_tem_staymd.trim()))
				{
					databean.put(KKW01030SFConst.STAYMD_02,"");
				}
				if(null == data_tem_end_ymd.trim() || 8 != data_tem_end_ymd.trim().length() || JKKCommonConst.MAX_YMD.equals(data_tem_end_ymd.trim()))
				{
					databean.put(KKW01030SFConst.ENDYMD_02,"");
				}
				if(null == data_tem_msk_ymd.trim() || 8 != data_tem_msk_ymd.trim().length() || JKKCommonConst.MAX_YMD.equals(data_tem_msk_ymd.trim()))
				{
					databean.put(KKW01030SFConst.MSKM_YMD_02,"");
				}
			}
		}
// ANK-2631-00-00 MOD START 【ワンストップ用】
		// 選択されたキャンペーンの申込年月日を取得
//		BeanMap beanMap_tmp = selectList.get(0);
//		String selectedMskmYmd=(String)beanMap_tmp.get(KKW01030SFConst.MSKM_YMD_02);		
//		// キャンペーン一覧に対して選択されたキャンペーンと同一の申込年月日をもつ
//		// 全てのキャンペーンについてチェックボックス選択状態へ更新
//		MskmYmdCheckUpdater updater=new MskmYmdCheckUpdater(selectedMskmYmd);
//		Items.each(resultList, updater);
		if (selectList.size() > 0) {
			// 選択されたキャンペーンの申込年月日を取得
			BeanMap beanMap_tmp = selectList.get(0);
			String selectedMskmYmd=(String)beanMap_tmp.get(KKW01030SFConst.MSKM_YMD_02);		
			// キャンペーン一覧に対して選択されたキャンペーンと同一の申込年月日をもつ
			// 全てのキャンペーンについてチェックボックス選択状態へ更新
			MskmYmdCheckUpdater updater=new MskmYmdCheckUpdater(selectedMskmYmd);
			Items.each(resultList, updater);
		}
// ANK-2631-00-00 MOD END   【ワンストップ用】
		
		//抽出後のキャンペーン一覧をSFBeanへ書き戻し
		//「解約／キャンセル」の場合
		if(JKKCommonConst.WRIB_DSL_CNCL.equals(select_type_tmp)){
			beanMap.pair(KKW01030SFConst.CAMPAIGN_ICRN, selectList);
// IT1-2018-0000125 ADD START
			beanMap.pair(KKW01030SFConst.CAMPAIGN_ICRN_ALL, resultList);
// IT1-2018-0000125 ADD END
		}else{
			beanMap.pair(KKW01030SFConst.CAMPAIGN_ICRN, resultList);
		}
		Mover.setBeanMapToDataBean(beanMap, bean);
	}
	
	private void moveToNextSameScreen(String nextScreenId, String nextScreenNm) 
	{
		// 遷移先情報の設定
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, nextScreenNm);
	}

	private void moveToNextSameScreen(Screen next) 
	{
		moveToNextSameScreen(next.getScreenId(), next.getScreenName());
	}

	private void moveToNextOtherScreen(String nextScreenId) 
	{
		// 遷移先情報の設定
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
	}

	private void moveToNextOtherScreen(Screen next) 
	{
		moveToNextOtherScreen(next.getScreenId());
	}


	private void backToNextOtherScreen() 
	{
		// 遷移先情報の設定
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon
				.getScreenId(this));
	}
	
	/**
	 * 注意メッセージの表示判定および編集処理を行う。
	 * @param mskmDate 申込年月日
	 * @throws Excepiton
	 */
	private void editWarningMessage(String mskmDate) throws Exception
	{
		// 注意メッセージの表示
		String opeYmd=JCCWebCommon.getOpeDate(this, null);
		
		String preMonth = JPCDateUtil.addMonth(opeYmd, -1).substring(0, 6);
		
		// 申込日が操作日より過去月の場合、注意メッセージを表示
		if (preMonth.compareTo(mskmDate.substring(0, 6)) >= 0) 
		{
			JCCWebCommon.setMessageInfo(this, "EKBB070--Q");
		}
		// 申込日が操作日より未来日の場合、注意メッセージを表示
		// (3か月(90日)以上のチェックはクライアント側で実施)
		else if (opeYmd.compareTo(mskmDate) < 0) 
		{
			JCCWebCommon.setMessageInfo(this, "EKBB080--Q");
		}
	}	

	// ANK-3383-09-00 ADD START
	/**
	 * 自治体特別ＣＰ解約時チェックを実行します。
	 * <br>
	 * @param outputMap サービス実行結果
	 * @return チェックエラーの場合はfalse、チェックエラーでない場合はtrue
	 */
	@SuppressWarnings("unchecked")
	private boolean checkJctSpclCp(HashMap<String, Object> outputMap)
	{
		HashMap<String, Object> outMap = (HashMap<String, Object>)outputMap.get("KKSV024001CC");
		if (outMap != null)
		{
			ArrayList<HashMap<String, Object>> jctSpclCpCheckList = (ArrayList<HashMap<String, Object>>)outMap.get("jct_spcl_cp_check_list");
			if (jctSpclCpCheckList != null)
			{
				// メッセージ設定
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBF190_KW);
				return false;
			}
		}
		return true;
	}
	// ANK-3383-09-00 ADD END
	
	// OM-2021-0001721 ADD START 【ワンストップ用】
	/**
	 * 割引課金終了日チェックを実行します。
	 * <br>
	 * @param wribKknFin 比較課金終了日
	 * @param errMsg1 エラー文言1
	 * @param errMsg2 エラー文言2
	 * @return チェックエラーの場合はfalse、チェックエラーでない場合はtrue
	 */
	private boolean checkWaribikiKakinFin(String wribKknFin, String errMsg1, String errMsg2)
	{
		// 運用日の表示
		String opeYmd=JCCWebCommon.getOpeDate(this, null);
		
		// 月初かつ課金終了日に日付が入っている場合
		if (("01".equals(opeYmd.substring(6,8))) && (wribKknFin.length() == 8)){
			// 運用日が課金終了日より未来日の場合、エラーメッセージを表示
			if (wribKknFin.compareTo(opeYmd) < 0) 
			{
				// メッセージ設定
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBF660_KW, new String[] {errMsg1, errMsg2});
				return false;
			}
		}
		
		return true;
	}
	// OM-2021-0001721 ADD END 【ワンストップ用】
}

@SuppressWarnings("serial")
class BeanMap extends HashMap<String, Object>
{
	static final int DEFAULT_HASH_SIZE=50;

	public BeanMap(HashMap<String, Object> beanMap)
	{
		super(beanMap);
	}

	public BeanMap()
	{
		super(DEFAULT_HASH_SIZE);
	}

	public BeanMap pair(String item, Object value)
	{
		super.put(item, value);
		return this;
	}

	public Object take(String item)
	{
		return super.get(item);
	}
}

class Mover
{

	enum ValueType
	{
		NULL(null), ARRAY_LIST(ArrayList.class), STRING(String.class), LONG(Long.class), BOOLEAN(Boolean.class), STRINGS(
				String[].class), LONGS(Long[].class), BOOLEANS(Boolean[].class), ;

		Class<?> type;

		private ValueType(Class<?> type)
		{
			this.type = type;
		}

		public boolean isMatch(Object value)
		{
			if (null == value)
			{
				return (this.equals(NULL));
			}
			if (this.equals(NULL))
			{
				return false;
			}
			else
			{
				return this.type.isInstance(value);
			}
		}

		static public ValueType resolve(Object value)
		{
			ValueType[] types = ValueType.values();
			for (ValueType type : types)
			{
				if (type.isMatch(value))
				{
					return type;
				}
			}
			return ValueType.NULL;
		}
	}

	enum StructureType
	{
		NULL(null), DATABEAN(Object[].class), STRING(String.class), LONG(Long.class), BOOLEAN(Boolean.class), STRINGS(
				String[].class), LONGS(Long[].class), BOOLEANS(Boolean[].class), ;

		Class<?> type;

		private StructureType(Class<?> type)
		{
			this.type = type;
		}

		public boolean isMatch(Object value)
		{
			if (null == value)
			{
				return (this.equals(NULL));
			}
			if (this.equals(NULL))
			{
				return false;
			}
			if (value instanceof Class<?>)
			{
				return this.type.equals(value);
			}
			else
			{
				return this.type.equals(value.getClass());
			}
		}

		static public StructureType resolve(Object value)
		{
			StructureType[] types = StructureType.values();
			for (StructureType type : types)
			{
				if (type.isMatch(value))
				{
					return type;
				}
			}
			return StructureType.NULL;
		}
	}

	public static void setString(X31SDataBeanAccess bean, String item, String value)
	{
		bean.sendMessageString(item, X31CWebConst.DATABEAN_SET_VALUE, value);
	}

	public static void setLong(X31SDataBeanAccess bean, String item, Long value)
	{
		bean.sendMessageLong(item, X31CWebConst.DATABEAN_SET_VALUE, value);
	}

	public static void setBoolean(X31SDataBeanAccess bean, String item, Boolean value)
	{
		bean.sendMessageBoolean(item, X31CWebConst.DATABEAN_SET_VALUE, value);
	}

	public static void setStringArrayAt(X31SDataBeanAccess bean, String item, int index, String value)
	{
		bean.sendMessageString(item, X31CWebConst.DATABEAN_SET_VALUE, index, value);
	}

	public static void setLongAt(X31SDataBeanAccess bean, String item, int index, Long value)
	{
		bean.sendMessageLong(item, X31CWebConst.DATABEAN_SET_VALUE, index, value);
	}

	public static void setBooleanAt(X31SDataBeanAccess bean, String item, int index, Boolean value)
	{
		bean.sendMessageBoolean(item, X31CWebConst.DATABEAN_SET_VALUE, index, value);
	}

	public static void setStringArray(X31SDataBeanAccess bean, String item, String[] values)
	{
		X31CVector<String> vector = new X31CVector<String>();
		for (String value : values)
		{
			vector.add(value);
		}
		bean.sendMessageStringArray(item, X31CWebConst.DATABEAN_SET_DEF_VALUE, vector);
	}

	public static void setLongArray(X31SDataBeanAccess bean, String item, Long[] values)
	{
		X31CVector<Long> vector = new X31CVector<Long>();
		for (Long value : values)
		{
			vector.add(value);
		}
		bean.sendMessageLongArray(item, X31CWebConst.DATABEAN_SET_DEF_VALUE, vector);
	}

	public static void setBooleanArray(X31SDataBeanAccess bean, String item, Boolean[] values)
	{
		X31CVector<Boolean> vector = new X31CVector<Boolean>();
		for (Boolean value : values)
		{
			vector.add(value);
		}
		bean.sendMessageBooleanArray(item, X31CWebConst.DATABEAN_SET_DEF_VALUE, vector);
	}

	public static void clearBeanArray(X31SDataBeanAccess bean, String item)
	{
		X31SDataBeanAccessArray beanArray = bean.getDataBeanArray(item);
		beanArray.clearArray();
	}

	public static X31SDataBeanAccessArray getBeanArray(X31SDataBeanAccess bean, String item)
	{
		return bean.getDataBeanArray(item);
	}

	public static String getString(X31SDataBeanAccess bean, String item)
	{
		return bean.sendMessageString(item, X31CWebConst.DATABEAN_GET_VALUE);
	}

	public static Long getLong(X31SDataBeanAccess bean, String item)
	{
		return bean.sendMessageLong(item, X31CWebConst.DATABEAN_GET_VALUE);
	}

	public static Boolean getBoolean(X31SDataBeanAccess bean, String item)
	{
		return bean.sendMessageBoolean(item, X31CWebConst.DATABEAN_GET_VALUE);
	}

	public static String getStringAt(X31SDataBeanAccess bean, String item, int index)
	{
		return bean.sendMessageString(item, X31CWebConst.DATABEAN_GET_VALUE, index);
	}

	public static Long getLongAt(X31SDataBeanAccess bean, String item, int index)
	{
		return bean.sendMessageLong(item, X31CWebConst.DATABEAN_GET_VALUE, index);
	}

	public static Boolean getBooleanAt(X31SDataBeanAccess bean, String item, int index)
	{
		return bean.sendMessageBoolean(item, X31CWebConst.DATABEAN_GET_VALUE, index);
	}

	public static int getArrayCount(X31SDataBeanAccess bean, String item)
	{
		Integer count = (Integer)bean.sendMessage(item, X31CWebConst.DATABEAN_GET_COUNT);
		return count.intValue();
	}

	public static String[] getStringArray(X31SDataBeanAccess bean, String item)
	{
		int count = getArrayCount(bean, item);
		ArrayList<String> result = new ArrayList<String>(count);
		for (int i = 0; i < count; i++)
		{
			String element = getStringAt(bean, item, i);
			result.add(element);
		}
		return (String[])result.toArray(new String[0]);
	}

	public static Long[] getLongArray(X31SDataBeanAccess bean, String item)
	{
		int count = getArrayCount(bean, item);
		ArrayList<Long> result = new ArrayList<Long>(count);
		for (int i = 0; i < count; i++)
		{
			Long element = getLongAt(bean, item, i);
			result.add(element);
		}
		return (Long[])result.toArray(new Long[0]);
	}

	public static Boolean[] getBooleanArray(X31SDataBeanAccess bean, String item)
	{
		int count = getArrayCount(bean, item);
		ArrayList<Boolean> result = new ArrayList<Boolean>(count);
		for (int i = 0; i < count; i++)
		{
			Boolean element = getBooleanAt(bean, item, i);
			result.add(element);
		}
		return (Boolean[])result.toArray(new Boolean[0]);
	}

	public static X31SDataBeanAccess createBeanFromArray(X31SDataBeanAccessArray beanArray)
	{
		return beanArray.addDataBean();
	}

	public static BeanMap getBeanMapFromDataBean(X31SDataBeanAccess bean, Object[] structure)
	{
		BeanMap result = new BeanMap();
		for (Object node : structure)
		{
			Object[] pair = (Object[])node;
			String item = (String)pair[0];
			Object value = pair[1];

			StructureType type = StructureType.resolve(value);

			switch (type)
			{
			case DATABEAN:
			{
				X31SDataBeanAccessArray beanArray = Mover.getBeanArray(bean, item);
				ArrayList<BeanMap> content = getBeanMapListFromDataBeanArray(beanArray, (Object[])value);
				result.pair(item, content);
			}
				break;
			case STRING:
			{
				String content = Mover.getString(bean, item);
				result.pair(item, content);
			}
				break;
			case LONG:
			{
				Long content = Mover.getLong(bean, item);
				result.pair(item, content);
			}
				break;
			case BOOLEAN:
			{
				Boolean content = Mover.getBoolean(bean, item);
				result.pair(item, content);
			}
				break;
			case STRINGS:
			{
				String[] content = Mover.getStringArray(bean, item);
				result.pair(item, content);
			}
				break;
			case LONGS:
			{
				Long[] content = Mover.getLongArray(bean, item);
				result.pair(item, content);
			}
				break;
			case BOOLEANS:
			{
				Boolean[] content = Mover.getBooleanArray(bean, item);
				result.pair(item, content);
			}
				break;

			default:
				break;
			}
		}
		return result;
	}

	public static ArrayList<BeanMap> getBeanMapListFromDataBeanArray(X31SDataBeanAccessArray beanArray, Object[] structure)
	{
		int count = beanArray.getCount().intValue();
		ArrayList<BeanMap> result = new ArrayList<BeanMap>(count);
		for (int i = 0; i < count; i++)
		{
			X31SDataBeanAccess bean = beanArray.getDataBean(i);
			BeanMap content = getBeanMapFromDataBean(bean, structure);
			result.add(content);
		}
		return result;
	}

	@SuppressWarnings("unchecked")
	public static void setBeanMapToDataBean(BeanMap beanMap, X31SDataBeanAccess bean)
	{
		for (String key : beanMap.keySet())
		{
			Object value = beanMap.get(key);
			ValueType type = ValueType.resolve(value);

			switch (type)
			{
			case NULL:
				break;
			case STRING:
				Mover.setString(bean, key, (String)value);
				break;
			case LONG:
				Mover.setLong(bean, key, (Long)value);
				break;
			case BOOLEAN:
				Mover.setBoolean(bean, key, (Boolean)value);
				break;
			case STRINGS:
			{
				X31CVector<String> vec = new X31CVector<String>();
				for (String s : (String[])value)
				{
					vec.add(s);
				}
				bean.sendMessageStringArray(key, X31CWebConst.DATABEAN_SET_DEF_VALUE, vec);
			}
				break;
			case LONGS:
			{
				X31CVector<Long> vec = new X31CVector<Long>();
				for (Long s : (Long[])value)
				{
					vec.add(s);
				}
				bean.sendMessageLongArray(key, X31CWebConst.DATABEAN_SET_DEF_VALUE, vec);
			}
				break;
			case BOOLEANS:
			{
				X31CVector<Boolean> vec = new X31CVector<Boolean>();
				for (Boolean s : (Boolean[])value)
				{
					vec.add(s);
				}
				bean.sendMessageBooleanArray(key, X31CWebConst.DATABEAN_SET_DEF_VALUE, vec);
			}
				break;
			case ARRAY_LIST:
			{
				X31SDataBeanAccessArray subBeanArray = null;
				subBeanArray = bean.getDataBeanArray(key);
				setBeanMapListForDataBeanArray(subBeanArray, (ArrayList<BeanMap>)value);
			}
				break;

			default:
				throw new JCCFrameworkException("JCCWebCommon#getScreenInfoでサポートされていないオブジェクトの型です。");
			}
		}
	}

	public static void setBeanMapListForDataBeanArray(X31SDataBeanAccessArray beanArray, ArrayList<BeanMap> beanMapList)
	{
		beanArray.clearArray();
		for (BeanMap beanMap : beanMapList)
		{
			X31SDataBeanAccess bean = beanArray.addDataBean();
			// 再帰呼び出し
			setBeanMapToDataBean(beanMap, bean);
		}
	}

	public static void addBeanMapForDataBeanArray(X31SDataBeanAccessArray beanArray, BeanMap beanMap)
	{
		X31SDataBeanAccess bean = beanArray.addDataBean();
		setBeanMapToDataBean(beanMap, bean);
	}

}

class BeanMapValuesPicker implements Transformer<BeanMap, String>
{

	String key;

	public BeanMapValuesPicker(String key)
	{
		this.key = key;
	}

	@Override
	public String transform(BeanMap in)
	{
		String out = (String)in.get(this.key);
		return out;
	}
}	


class BeanMapListFilter implements Predicater<BeanMap>
{

	String key;
	Object value;

	public BeanMapListFilter(String key, Object value)
	{
		this.key = key;
		this.value = value;
	}

	@Override
	public boolean evaluate(BeanMap item)
	{
		Object itemValue = item.get(key);
		return this.value.equals(itemValue);
	}
}

class Items
{

	interface Transformer<I, O>
	{

		O transform(I input);
	}

	interface Closure<I>
	{

		void execute(I input);
	}

	interface Predicater<I>
	{

		boolean evaluate(I input);
	}

	public static <I, O> ArrayList<O> map(ArrayList<I> in, final Transformer<I, O> transformer)
	{
		final ArrayList<O> result = new ArrayList<O>(in.size());
		each(in, new Closure<I>()
		{

			@Override
			public void execute(I input)
			{
				result.add(transformer.transform(input));
			}
		});
		return result;
	}

	public static <I> void each(ArrayList<I> in, Closure<I> closure)
	{
		for (I item : in)
		{
			closure.execute(item);
		}
	}

	public static <I> ArrayList<I> select(ArrayList<I> in, Predicater<I> predicater)
	{
		ArrayList<I> result = new ArrayList<I>(in.size());
		for (I item : in)
		{
			if (predicater.evaluate(item))
			{
				result.add(item);
			}
		}
		return result;
	}

	public static <I> boolean exist(ArrayList<I> in, Predicater<I> predicater)
	{
		for (I item : in)
		{
			if (predicater.evaluate(item))
			{
				return true;
			}
		}
		return false;
	}

	public static <I> I find(ArrayList<I> in, Predicater<I> predicater)
	{
		for (I item : in)
		{
			if (predicater.evaluate(item))
			{
				return item;
			}
		}
		return null;
	}
	
}

// v4.04.00 DEL START
//class IcrnComparator implements Comparator<BeanMap>
//{
//	@Override
//	public int compare(BeanMap left, BeanMap right)
//	{
//		String leftMskmYmd=(String)left.take(KKW01030SFConst.MSKM_YMD_02);
//		String rightMskmYmd=(String)right.take(KKW01030SFConst.MSKM_YMD_02);
//		int compareResult =leftMskmYmd.compareTo(rightMskmYmd);
//		int reversedResult=compareResult * (-1);
//		return reversedResult;
//	}
//}
// v4.04.00 DEL END


class BeanMapListMultiFilter implements Predicater<BeanMap>
{
	String key;
	Object[] values;

	public BeanMapListMultiFilter(String key, Object[] values)
	{
		this.key = key;
		this.values = values;
	}

	@Override
	public boolean evaluate(BeanMap item)
	{
		Object itemValue = item.get(key);

		for (Object value : values)
		{
			if (value.equals(itemValue))
			{
				return true;
			}
		}
		return false;
	}
}

class MskmYmdCheckUpdater implements Closure<BeanMap>
{

	String mskmYmd;

	public MskmYmdCheckUpdater(String mskmYmd)
	{
		this.mskmYmd = mskmYmd;
	}

	@Override
	public void execute(BeanMap item)
	{
		String mskmYmd = (String)item.get(KKW01030SFConst.MSKM_YMD_02);
		if (this.mskmYmd.equals(mskmYmd))
		{
			Boolean choice = Boolean.TRUE;
			item.put(KKW01030SFConst.CHOICE_02, choice);
		}
	}
}


