/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKW00838SFLogic
*   ソースファイル名：KKW00838SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年02月21日
*＜機能概要＞
*   NHK団体一括支払登録画面のビューロジックです
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/02/21   FJ          新規作成
*   v4.00.00    2012/12/20   FJ）野口	 IT1-2012-0002486 対応
*   v4.00.01    2013/07/30   FJ）磯俣	 IT1-2013-0001474 対応
*   v5.00.00	2013/11/01   FJ) 稲岡	【OM-2013-0003630】
*   v5.00.01    2013/11/19   FJ）磯俣	【OM-2013-0004499】過去日付入力を許可
*   
**********************************************************************/

package eo.web.webview.KKW00838SF;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

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 com.fujitsu.futurity.web.x31.X31SRuntimeException;

import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JPCDateChecker;
import eo.common.util.JPCDateUtil;
import eo.common.util.JPCEditString;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0494_KKSV0494OPDBMapper;
import eo.web.webview.mapping.KKSV0495_KKSV0495OPDBMapper;

/**
 * NHK団体一括支払登録画面のビューロジックです
 * 
 * @author 富士通
 */
public class KKW00838SFLogic extends JCCWebBusinessLogic 
{
	
	/** 顧客契約引継情報項目キー */
	private static final String[] CUST_KEI_HKTGI_KEYS = {
		JKKCommonConst.HKTGI_SYSID,
		JKKCommonConst.HKTGI_SVC_KEI_NO,
		JKKCommonConst.HKTGI_IDO_DIV,
		JKKCommonConst.HKTGI_IDO_RSN_CD,
/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		JKKCommonConst.HKTGI_IDO_RSN_MEMO,
/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		JKKCommonConst.HKTGI_OP_SVC_KEI_NO,
		JKKCommonConst.HKTGI_TRAN_DIV,
		JKKCommonConst.HKTGI_MSKM_NO,
		JKKCommonConst.HKTGI_MSKM_DTL_NO,
		JKKCommonConst.HKTGI_TOKUTEI_ID_KMK_NM,
		JKKCommonConst.HKTGI_TOKUTEI_ID_KMK_VALUE,
		JKKCommonConst.HKTGI_POPUP_MODE
	};
	
	/**
	 * 初期表示処理
	 * <br>
	 * @return boolean 処理結果
	 * @exception Exception 例外が発生した場合
	 */
	public boolean init() throws Exception
	{
		
		// ■ 引継情報の取得
		JCCWebCommon.getScreenInfo(this);
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 顧客契約引継リスト
		X31SDataBeanAccessArray custKeiHktgiList =  bean.getDataBeanArray(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess custKeiHktgiInf = custKeiHktgiList.getDataBean(0);
		
		// ＳＹＳＩＤ
		bean.sendMessageString(KKW00838SFConst.SYSID, 
				X31CWebConst.DATABEAN_SET_VALUE,
				custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SYSID, X31CWebConst.DATABEAN_GET_VALUE));
		
		// サービス契約番号
		bean.sendMessageString(KKW00838SFConst.SVC_KEI_NO,
				X31CWebConst.DATABEAN_SET_VALUE,
				custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		
		// オンライン運用日付取得
		String ope_date = JCCWebCommon.getOpeDate(this, null);
		bean.sendMessageString(KKW00838SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, ope_date);
		
		// ■ サービス呼び出し準備
		X31SDataBeanAccess[] paramBean = {bean};
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0494");
		
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		KKSV0494_KKSV0494OPDBMapper mapper = new KKSV0494_KKSV0494OPDBMapper();
		mapper.setKKSV049401SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049402SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049403SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049404SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049405SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		
		// ■ サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		mapper.getKKSV049401SC(paramBean, outputMap);
		mapper.getKKSV049402SC(paramBean, outputMap);
		mapper.getKKSV049403SC(paramBean, outputMap);
		mapper.getKKSV049404SC(paramBean, outputMap);
		mapper.getKKSV049405SC(paramBean, outputMap);
		
		// 既にNHKオプションが存在する場合エラー
		if("1".equals(bean.sendMessageString(KKW00838SFConst.KRN_CHK_ERR_FLG, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// メッセージの設定
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB2230_KW, new String[]{"オプション契約"});
		}
		
		
		// ■ 初期値設定
		bean.sendMessageString(KKW00838SFConst.KEI_YEAR, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toYearFromYmd(ope_date));
		bean.sendMessageString(KKW00838SFConst.KEI_MON, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toMonthFromYmd(ope_date));
		bean.sendMessageString(KKW00838SFConst.KEI_DAY, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toDayFromYmd(ope_date));
		
		// 運用日の翌偶数月
		String nextEvenMonthDate = getNextEvenMonth(ope_date);
		
		bean.sendMessageString(KKW00838SFConst.KEI_PRD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toYearFromYmd(nextEvenMonthDate));
		bean.sendMessageString(KKW00838SFConst.KEI_PRD_MON, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toMonthFromYmd(nextEvenMonthDate));
		bean.sendMessageString(KKW00838SFConst.KEI_PRD_DAY, X31CWebConst.DATABEAN_SET_VALUE, "01");
		
		bean.sendMessageString(KKW00838SFConst.CHRG_STA_YEAR, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toYearFromYmd(nextEvenMonthDate));
		bean.sendMessageString(KKW00838SFConst.CHRG_STA_MON, X31CWebConst.DATABEAN_SET_VALUE, JPCEditString.toMonthFromYmd(nextEvenMonthDate));
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00838);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00838);
		
		return true;
	}
	
	/**
	 * 契約内容コンボボックス選択処理
	 * <br>
	 * @return boolean
	 * @throws Exception
	 */
	public boolean changeKeiNaiyo() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 選択インデックスから対応するコードを取得
		X31SDataBeanAccess subbean = (bean.getDataBeanArray(KKW00838SFConst.KEI_NAIYO)).getDataBean(0);
		String index = subbean.sendMessageString(KKW00838SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		String select_cd = subbean.sendMessageString(KKW00838SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
		
		if (!"".equals(select_cd))
		{
			// ゼロサプレス
			Matcher mtc = Pattern.compile("^0+([0-9]+.*)").matcher(select_cd);
			if (mtc.matches())
			{
				select_cd = mtc.group(1);
			}
		}
		
		bean.sendMessageString(KKW00838SFConst.SEIKY_KNK, X31CWebConst.DATABEAN_SET_VALUE, select_cd);
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00838);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00838);
		
		return true;
	}
	
	/**
	 * 登録確認ボタン押下処理
	 * <br>
	 * @return boolean
	 * @throws Exception
	 */
	public boolean forwardAddCfm() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// オンライン運用日付取得
		String ope_date = JCCWebCommon.getOpeDate(this, null);
		bean.sendMessageString(KKW00838SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, ope_date);
		
		// オンライン運用日付取得
		String ope_date_time_stamp = JCCWebCommon.getOpeDateTimeStamp(this, null);
		bean.sendMessageString(KKW00838SFConst.OPE_DATE_DTM, X31CWebConst.DATABEAN_SET_VALUE, ope_date_time_stamp);
		
		// 契約日
		StringBuilder sb = new StringBuilder();
		sb.append(bean.sendMessageString(KKW00838SFConst.KEI_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(bean.sendMessageString(KKW00838SFConst.KEI_MON, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(bean.sendMessageString(KKW00838SFConst.KEI_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(KKW00838SFConst.KEI_YMD, X31CWebConst.DATABEAN_SET_VALUE, sb.toString());
		
		// 契約期間(自)
		sb = new StringBuilder();
		sb.append(bean.sendMessageString(KKW00838SFConst.KEI_PRD_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(bean.sendMessageString(KKW00838SFConst.KEI_PRD_MON, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(bean.sendMessageString(KKW00838SFConst.KEI_PRD_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(KKW00838SFConst.KEI_PRD_STA_YMD, X31CWebConst.DATABEAN_SET_VALUE, sb.toString());
		
		// 課金開始年月
		sb = new StringBuilder();
		sb.append(bean.sendMessageString(KKW00838SFConst.CHRG_STA_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(bean.sendMessageString(KKW00838SFConst.CHRG_STA_MON, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(KKW00838SFConst.CHRG_STA_YM, X31CWebConst.DATABEAN_SET_VALUE, sb.toString());
		
		// 課金開始年月日
		sb = new StringBuilder();
		sb.append(bean.sendMessageString(KKW00838SFConst.CHRG_STA_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(bean.sendMessageString(KKW00838SFConst.CHRG_STA_MON, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append("01");
		bean.sendMessageString(KKW00838SFConst.CHRG_STA_YMD, X31CWebConst.DATABEAN_SET_VALUE, sb.toString());
		
/* ++++++++++ v5.00.01 変更開始 ++++++++++ */
		// ■関連チェック
//		if(!checkNextEvenMonth(bean) || !checkPastDate(bean))
		if(!checkNextEvenMonth(bean))
		{
/* ++++++++++ v5.00.01 変更終了 ++++++++++ */
			// 画面遷移
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00838);
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00838);
			return true;
		}
		
		// ■ サービス呼び出し準備
		X31SDataBeanAccess[] paramBean = {bean};
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0495");
		
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		KKSV0495_KKSV0495OPDBMapper mapper = new KKSV0495_KKSV0495OPDBMapper();
		mapper.setKKSV049501SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049502SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049503SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
// ++++++++++ v5.00.00 削除開始 ++++++++++
//		mapper.setKKSV049504SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
// ++++++++++ v5.00.00 削除開始 ++++++++++
		mapper.setKKSV049505SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049506SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV049507SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		mapper.setKKSV0495WORK01(paramBean, inputMap);
		
		// ■ サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// ■ インフォメーションメッセージ設定
		// メッセージエリアにインフォメーションメッセージを表示する。
		// EKB0370--I：＜＜以下の内容で%1%を行います。よろしいですか？＞＞
		JCCWebCommon.setMessageInfo(this, "EKB0370--I", new String[]{"ＮＨＫ団体一括支払の登録"});
		
		// ■ 警告メッセージ設定
		
		// 運用日＋未来日許容期間を求める
		int future_day_prd = Integer.parseInt(bean.sendMessageString(KKW00838SFConst.FUTURE_DAY_PRD, X31CWebConst.DATABEAN_GET_VALUE));
		String ope_date_future_day_prd = JPCDateUtil.addDay(ope_date, future_day_prd);
		
		String kei_ymd = bean.sendMessageString(KKW00838SFConst.KEI_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		String kei_prd_sta_ymd = bean.sendMessageString(KKW00838SFConst.KEI_PRD_STA_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		String chrg_sta_ymd = bean.sendMessageString(KKW00838SFConst.CHRG_STA_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 入力された契約日が運用日＋未来日許容期間を超過していた場合
		if (JPCDateChecker.isFutureDate(kei_ymd, ope_date_future_day_prd, "0"))
		{
			// メッセージエリアに警告メッセージを表示する。
			// EKB2990--Q：%1%に%2%日より未来の日付が入力されています。登録してよろしいですか？
			JCCWebCommon.setMessageInfo(this, "EKB2990--Q", new String[]{"契約日", editReplaceMessage(ope_date_future_day_prd)});
		}
		
		// 入力された契約期間（自）が運用日＋未来日許容期間を超過していた場合
		if (JPCDateChecker.isFutureDate(kei_prd_sta_ymd, ope_date_future_day_prd, "0"))
		{
			// メッセージエリアに警告メッセージを表示する。
			// EKB2990--Q：%1%に%2%日より未来の日付が入力されています。登録してよろしいですか？
			JCCWebCommon.setMessageInfo(this, "EKB2990--Q", new String[]{"契約期間（自）", editReplaceMessage(ope_date_future_day_prd)});
		}
		
		// 入力された課金開始年月が運用日＋未来日許容期間を超過していた場合
		if (JPCDateChecker.isFutureDate(chrg_sta_ymd, ope_date_future_day_prd, "0"))
		{
			// メッセージエリアに警告メッセージを表示する。
			// EKB2990--Q：%1%に%2%日より未来の日付が入力されています。登録してよろしいですか？
			JCCWebCommon.setMessageInfo(this, "EKB2990--Q", new String[]{"課金開始年月", editReplaceMessage(ope_date_future_day_prd)});
		}
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00839);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00839);
		
		return true;
	}
	
	/**
	 * 戻るボタン押下処理
	 * <br>
	 * @return boolean
	 */
	public boolean back()
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 顧客契約内引継ぎデータ作成
		HashMap<String, Object> dataMap = getHktgiDataMap(bean, KKW00838SFConst.HKTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
		
		// 引継情報を設定
		JCCWebCommon.setScreenInfo(this, JCCWebCommon.getScreenId(this) + "0PJP", dataMap);
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		
		return true;
	}
	
	/**
	 * 修正ボタン押下処理
	 * <br>
	 * @return boolean
	 */
	public boolean forwardShusei()
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00838);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00838);
		
		return true;
	}
	
	/**
	 * 確定ボタン押下処理
	 * <br>
	 * @return boolean
	 * @throws Exception
	 */
	public boolean forwardFix() throws Exception
	{
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// オンライン運用日付取得
		String ope_date = JCCWebCommon.getOpeDate(this, null);
		bean.sendMessageString(KKW00838SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, ope_date);
		
		// オンライン運用日付取得
		String ope_date_time_stamp = JCCWebCommon.getOpeDateTimeStamp(this, null);
		bean.sendMessageString(KKW00838SFConst.OPE_DATE_DTM, X31CWebConst.DATABEAN_SET_VALUE, ope_date_time_stamp);
		
/* ++++++++++ v5.00.01 変更開始 ++++++++++ */
//		// ■関連チェック
//		if(!checkPastDate(bean))
//		{
//			// 画面遷移
//			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00839);
//			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00839);
//			return true;
//		}
/* ++++++++++ v5.00.01 変更終了 ++++++++++ */
		
		// ■ サービス呼び出し準備
		X31SDataBeanAccess[] paramBean = {bean};
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0495");
		
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		
		KKSV0495_KKSV0495OPDBMapper mapper = new KKSV0495_KKSV0495OPDBMapper();
		mapper.setKKSV049501SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049502SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049503SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
// ++++++++++ v5.00.00 削除開始 ++++++++++
//		mapper.setKKSV049504SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
// ++++++++++ v5.00.00 削除開始 ++++++++++
		mapper.setKKSV049505SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049506SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV049507SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV0495WORK01(paramBean, inputMap);
		
		// ■ サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// ■ インフォメーションメッセージ設定
		// メッセージエリアにインフォメーションメッセージを表示する。
		// EKB4390--I：＜＜%1%が完了しました。＞＞
		JCCWebCommon.setMessageInfo(this, "EKB4390--I", new String[]{"ＮＨＫ団体一括支払の登録"});
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00840);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00840);
		
		return true;
	}
	
	/**
	 * 一覧照会へボタン押下処理
	 * <br>
	 * @return boolean
	 */
	public boolean forwardFin()
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();
		
		// サービスフォームBeanの取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 顧客契約内引継ぎデータ作成
		HashMap<String, Object> dataMap = getHktgiDataMap(bean, KKW00838SFConst.HKTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
		
		// 引継情報を設定
		JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW02301 + "0PJP", dataMap);
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02301);
		
		return true;
	}
	
	/**
	 * 過去日チェックを行います。
	 * <br>
	 * エラーの場合、エラーメッセージを設定し、falseを返却する。
	 * 
	 * @param bean
	 * @return 処理の成否
	 */
	private boolean checkPastDate(X31SDataBeanAccess bean)
	{
		
		// 運用日
		String ope_date = bean.sendMessageString(KKW00838SFConst.OPE_DATE, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 契約日
		String kei_ymd = bean.sendMessageString(KKW00838SFConst.KEI_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 契約日が運用日より過去日であった場合
		if (JPCDateChecker.isPastDate(kei_ymd, ope_date, "0"))
		{
			// メッセージエリアにエラーメッセージを表示する。
			// EKB0690-NW：%1%には運用日より%2%の日付を入力できません。
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"契約日", "過去"}, "kei_year");
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"契約日", "過去"}, "kei_mon");
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"契約日", "過去"}, "kei_day");
			return false;
		}
		
		// 契約期間（自）
		String kei_prd_sta_ymd = bean.sendMessageString(KKW00838SFConst.KEI_PRD_STA_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 契約期間（自）が運用日より過去日であった場合
		if (JPCDateChecker.isPastDate(kei_prd_sta_ymd, ope_date, "0"))
		{
			// メッセージエリアにエラーメッセージを表示する。
			// EKB0690-NW：%1%には運用日より%2%の日付を入力できません。
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"契約期間（自）", "過去"}, "kei_prd_year");
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"契約期間（自）", "過去"}, "kei_prd_mon");
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"契約期間（自）", "過去"}, "kei_prd_day");
			return false;
		}
		
		// 課金開始年月日
		String chrg_sta_ymd = bean.sendMessageString(KKW00838SFConst.CHRG_STA_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		String yyyy = JPCEditString.toYearFromYmd(ope_date);
		String mm = JPCEditString.toMonthFromYmd(ope_date);
		String ymd = yyyy + mm + "01";
		
		// 課金開始年月が運用日の年月より過去月であった場合
		if (JPCDateChecker.isPastDate(chrg_sta_ymd, ymd, "0"))
		{
			// メッセージエリアにエラーメッセージを表示する。
			// EKB0690-NW：%1%には運用日より%2%の日付を入力できません。
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"課金開始年月", "過去"}, "chrg_sta_year");
			JCCWebCommon.setMessageInfo(this, "EKB0690-NW", new String[]{"課金開始年月", "過去"}, "chrg_sta_mon");
			return false;
		}
		
		return true;
	}
	
	/**
	 * 翌偶数月チェックを行います。
	 * <br>
	 * エラーの場合、エラーメッセージを設定し、falseを返却する。
	 * 
	 * @param bean
	 * @return 処理の成否
	 * @throws ParseException 
	 */
	private boolean checkNextEvenMonth(X31SDataBeanAccess bean) throws ParseException
	{
		
		// 契約日
		String kei_ymd = bean.sendMessageString(KKW00838SFConst.KEI_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		// 契約期間（自）
		String kei_prd_sta_ymd = bean.sendMessageString(KKW00838SFConst.KEI_PRD_STA_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		// 課金開始年月日
		String chrg_sta_ymd = bean.sendMessageString(KKW00838SFConst.CHRG_STA_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 契約日の翌偶数月
		String kei_ymd_next_even_mon = getNextEvenMonth(kei_ymd);
		
		String yyyy = JPCEditString.toYearFromYmd(kei_prd_sta_ymd);
		String mm = JPCEditString.toMonthFromYmd(kei_prd_sta_ymd);
		String ymd = yyyy + mm + "01";
		
		// 契約期間（自）が契約日の翌偶数月でない場合
		if (!JPCDateChecker.isEqualDate(ymd, kei_ymd_next_even_mon))
		{
			// メッセージエリアにエラーメッセージを表示する。
			// EKB5590-KW：%1%の指定に誤りがあります。
			JCCWebCommon.setMessageInfo(this, "EKB5590-KW", new String[]{"契約期間（自）"}, "kei_prd_year");
			JCCWebCommon.setMessageInfo(this, "EKB5590-KW", new String[]{"契約期間（自）"}, "kei_prd_mon");
			JCCWebCommon.setMessageInfo(this, "EKB5590-KW", new String[]{"契約期間（自）"}, "kei_prd_day");
			return false;
		}
		
		// 課金開始年月が契約日の翌偶数月でない場合
		if (!JPCDateChecker.isEqualDate(chrg_sta_ymd, kei_ymd_next_even_mon))
		{
			// メッセージエリアにエラーメッセージを表示する。
			// EKB5590-KW：%1%の指定に誤りがあります。
			JCCWebCommon.setMessageInfo(this, "EKB5590-KW", new String[]{"課金開始年月"}, "chrg_sta_year");
			JCCWebCommon.setMessageInfo(this, "EKB5590-KW", new String[]{"課金開始年月"}, "chrg_sta_mon");
			return false;
		}
		
		return true;
	}
	
	/**
	 * 引数に指定した日付の翌偶数月(yyyyMM01)を返します。
	 * 
	 * @param date
	 * @return 翌偶数月
	 * @throws ParseException 
	 */
	private String getNextEvenMonth(String date) throws ParseException
	{
		String yyyy = JPCEditString.toYearFromYmd(date);
		String mm = JPCEditString.toMonthFromYmd(date);
		String ymd = yyyy + mm + "01";
		
		int addMonth = ((Integer.parseInt(mm) % 2 == 0) ? 2 : 1);
		
		return JPCDateUtil.addMonth(ymd, addMonth);
	}
	
	/**
	 * 引数に指定した年月日を警告メッセージに出力するための置換文字列に編集します。
	 * 
	 * @param ymd
	 * @return yyyy年mm月dd
	 */
	private String editReplaceMessage(String ymd)
	{
		String yyyy = JPCEditString.toYearFromYmd(ymd);
		String mm = JPCEditString.toMonthFromYmd(ymd);
		String dd = JPCEditString.toDayFromYmd(ymd);
		
		return yyyy + "年" + mm + "月" + dd;
	}
	
	/**	
	 * <dd>メソッド名：引継情報データマップ取得
	 * <dd>メソッド説明：引数のサービスフォームBeanより引継情報データマップの生成を行う。
	 * <dd>備考：引継情報データタイプの可変項目はString[]のみ対応。
	 * @param bean サービスフォームBean
	 * @param hktgiKey 引継情報データタイプのキー
	 * @param hktgiPrmKeys 引継情報データタイプの項目キーリスト	
	 * @return HashMap<String, Object> 引継情報データマップ
	 */
	private HashMap<String, Object> getHktgiDataMap(X31SDataBeanAccess bean, String hktgiKey, String[] hktgiPrmKeys)
	{
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		List<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();

		X31SDataBeanAccessArray infList =  bean.getDataBeanArray(hktgiKey);
		HashMap<String, Object> inMap = null;
		for (int i = 0; i < infList.getCount(); i++)
		{
			inMap = new HashMap<String, Object>();
			X31SDataBeanAccess inf = infList.getDataBean(i);
			for (int j = 0; j < hktgiPrmKeys.length; j++)
			{
				try
				{
					inMap.put(hktgiPrmKeys[j], inf.sendMessageObject(hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_VALUE));
				}
				catch (X31SRuntimeException ex)
				{
					// 可変項目の場合(String[]のみ対応)	
					int length = (Integer)inf.sendMessage(hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_COUNT);
					String[] obj = new String[length];
					for (int k = 0; k < length; k++)
					{
						obj[k] = inf.sendMessageString(hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_VALUE, k);
					}
					inMap.put(hktgiPrmKeys[j], obj);
				}
			}
			dataList.add(inMap);
		}
		dataMap.put(hktgiKey, dataList);
		return dataMap;	
	}
}
