/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom, 2011
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：契約管理
 *   モジュール名    ：マンションギガイーサ更新画面
 *   ソースファイル名：KKW22001SFLogic.java
 *   作成者          ：FJ)澤田
 *   日付            ：2017年12月22日
 *＜機能概要＞
 *   マンションギガイーサ更新ビューロジックです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v35.00.00   2017/12/22   FJ)澤田     ANK-3275-00-00  【随時機能化案件】イーサ⇒ギガイーサ切り替え対応
 *   v35.00.01   2018/01/17   FJ)澤田     IT1-2018-0000004 料金スケジュールの取得ミス対応
 *
 **********************************************************************/
package eo.web.webview.KKW22001SF;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.common.JSYwebLog;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
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.KKW12504SF.KKW12504SFConst;
import eo.web.webview.KKW22001SF.KKW22001SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0882_KKSV0882OPDBMapper;
import eo.web.webview.mapping.KKSV0884_KKSV0884OPDBMapper;
import eo.web.webview.mapping.KKSV0881_KKSV0881OPDBMapper;

@SuppressWarnings("serial")
public class KKW22001SFLogic extends JCCWebBusinessLogic 
{
	/** ページング表示モード:表示 */
	private static final String DISP_PAGING_ON = "on";
	
	/** ページング表示モード:非表示 */
	private static final String DISP_PAGING_OFF = "off";

	/** 検索タイプ:初回検索ボタン押下 */
	private static final int SEARCH_TYPE_INIT  = 0;
	
	/** 検索タイプ:検索ボタン押下 */
	private static final int SEARCH_TYPE_SEARCH  = 1;

	/** 検索タイプ:ページング押下 */
	private static final int SEARCH_TYPE_PAGING  = 2;

	/** 検索タイプ:マンションオーナー情報照会からの戻り時 */
	private static final int SEARCH_TYPE_BACK  = 3;

	/** マンション営業支援システム（参照機能）URL取得用キー */
	private static final String ESM_URL_KEY = "KK_OTHER_SYS_004";
	/** マンション営業支援システム（参照機能） randStr取得用キー */
	private static final String ESM_RANDSTR_KEY = "KK_ESM_RANDSTR";
	/**クエリ文字URLエンコーディング用の文字コード取得用キー*/
	private static final String URLENCODE_ENCTYPE_KEY = "KK_URLENCODE_ENCTYPE";
	/** ユーザーID置換え文字 */
	private static final String USER_ID_EXCHANGE_WORD = "%USER_ID%";
	/** P-ID置換え文字 */
	private static final String P_ID_EXCHANGE_WORD = "%P_ID%";
	/** マンションID置換え文字 */
	private static final String MANSION_ID_EXCHANGE_WORD = "%M_ID%";
	/** CAT-ID置換え文字 */
	private static final String CAT_ID_EXCHANGE_WORD = "%CAT_ID%";
	/** randStr置換え文字 */
	private static final String ESM_RANDSTR_EXCHANGE_WORD = "%randStr%";

	/**
	 * 照会画面初期表示処理
	 * @return 正常終了:true 異常修了:false
	 * @throws Exception 
	 */
	public boolean actionInit() throws Exception
	{
		
		//共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		//サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();

		// マッピング用paramBeanセット
		X31SDataBeanAccess[] paramBean = {svcFormBean};
		
		// セッションから検索条件を取得
		HashMap sessionParam = JCCWebCommon.getScreenInfo(this);
		if (sessionParam != null) 
		{
			// 引継ぎ情報取得
			ArrayList dataArray = (ArrayList)sessionParam.get(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
			if (dataArray != null) 
			{
				HashMap<String, Object> hikiParam = (HashMap<String, Object>)dataArray.get(0);

				if (!JKKStringUtil.isNullBlank((String)hikiParam.get(KKW12504SFConst.MANS_BKN_INF_MANS_ID)))
				{
					// マンションIDをセットする。
					paramBean[0].sendMessageString(KKW22001SFConst.SEARCH_MANS_ID, X31CWebConst.DATABEAN_SET_VALUE, (String)hikiParam.get(KKW12504SFConst.MANS_BKN_INF_MANS_ID));
					//初回検索を実行する。
					actionSearch();
				} 
				//マンションIDがNULLの場合、P-IDで検索する。
				else
				{
					if (!JKKStringUtil.isNullBlank((String)hikiParam.get(KKW12504SFConst.MANS_BKN_INF_P_ID)))
					{
						// P-IDをセットする。
						paramBean[0].sendMessageString(KKW22001SFConst.SEARCH_P_ID, X31CWebConst.DATABEAN_SET_VALUE, (String)hikiParam.get(KKW12504SFConst.MANS_BKN_INF_P_ID));
						//初回検索を実行する。
						actionSearch();
					} 
				}
			}
		}

		//共有フォームBean設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22001);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22001);
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;

	}

	
	/**
	 * 照会画面検索処理
	 * @return 正常終了:true 異常修了:false
	 * @throws Exception 
	 */
	public boolean actionSearch() throws Exception
	{
		//共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();
		
		//サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();
		
		// マッピング用paramBeanセット
		X31SDataBeanAccess[] paramBean = {svcFormBean};
		
		int searchType = SEARCH_TYPE_BACK;
		
		//IT1-2018-0000004 ADD START
		//運用日
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		//当月の月初
		String firstDate = opeDate.substring(0, 6) + "01";
		//IT1-2018-0000004 ADD END
		// 変数の定義
		HashMap<String, Object> paramMap = null;
		HashMap<String, Object> inputMap = null;
		HashMap<String, Object> outputMap = null;
		
		paramMap = new HashMap<String, Object>();		//パラメタ設定用マップ
		inputMap = new HashMap<String, Object>();		//データマップ
		outputMap = new HashMap<String, Object>();		//結果格納用マップ
		
		// パラメタ設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0881);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0881OP);
		
		// 上りマッピング
		KKSV0881_KKSV0881OPDBMapper mapper = new KKSV0881_KKSV0881OPDBMapper();
		mapper.setKKSV088101SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV088104SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV088105SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_3);
		//IT1-2018-0000004 MOD START
		//mapper.setKKSV088108SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2, JPCDateUtil.addDay(JCCWebCommon.getOpeDate(this, null), -1));
		mapper.setKKSV088108SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2, firstDate);
		//IT1-2018-0000004 MOD END
		mapper.setKKSV088109SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV088110SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV088111SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		
		// マンションオーナー照会初期表示サービス実行
		invokeService(paramMap, inputMap, outputMap);

		// 検索エラーフラグの取得
		String searchErrFlg = JCCWebCommon.getSearchErrFlg("KKSV088101SC", outputMap);

		// 検索結果が0件の場合の処理
		if(JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrFlg))
		{
			// メッセージ設定
			String[] msg = {"マンション情報", "M-ID、又はP-ID"};
			JCCWebCommon.setMessageInfo(this, "EKB0300-KW", msg, "search_p_id");
			JCCWebCommon.setMessageInfo(this, "EKB0300-KW", msg, "search_mans_id");

			
			// ページング表示制御（非表示）
			paramBean[0].sendMessageString(KKW22001SFConst.PAGE_LINK_FLG, X31CWebConst.DATABEAN_SET_VALUE, DISP_PAGING_OFF);
			//更新確認ボタン表示区分 非活性化
			paramBean[0].sendMessageString(KKW22001SFConst.UPD_CFM_BTN_DISABLED, X31CWebConst.DATABEAN_SET_VALUE, "true");

			return true;
			
		// 検索結果が最大検索件数超えの場合の処理
		}
		else if(JPCModelConstant.SEARCH_ERR_FLG_OVERMAX.equals(searchErrFlg))
		{
			// メッセージ設定
			String[] msg = {JCCWebCommon.getSearchConst("KKW22001_MAX_SHOW_CNT")};
			JCCWebCommon.setMessageInfo(this, "EKB0340--I", msg);

			// ページング表示制御（非表示）
			paramBean[0].sendMessageString(KKW22001SFConst.PAGE_LINK_FLG, X31CWebConst.DATABEAN_SET_VALUE, DISP_PAGING_OFF);
			//更新確認ボタン表示区分 非活性化
			paramBean[0].sendMessageString(KKW22001SFConst.UPD_CFM_BTN_DISABLED, X31CWebConst.DATABEAN_SET_VALUE, "true");

			return true;

		// 表示ページに該当するデータがない場合の処理
		}
		else if(JPCModelConstant.SEARCH_ERR_FLG_NODATA.equals(searchErrFlg))
		{
			// メッセージ設定
			JCCWebCommon.setMessageInfo(this, "EKB0350--I");

			// ページング表示制御（非表示）
			paramBean[0].sendMessageString(KKW22001SFConst.PAGE_LINK_FLG, X31CWebConst.DATABEAN_SET_VALUE, DISP_PAGING_OFF);
			//更新確認ボタン表示区分 非活性化
			paramBean[0].sendMessageString(KKW22001SFConst.UPD_CFM_BTN_DISABLED, X31CWebConst.DATABEAN_SET_VALUE, "true");

		}
		else
		{
			// ページング表示制御（表示）
			paramBean[0].sendMessageString(KKW22001SFConst.PAGE_LINK_FLG, X31CWebConst.DATABEAN_SET_VALUE, DISP_PAGING_ON);
			//更新確認ボタン表示区分 活性化
			paramBean[0].sendMessageString(KKW22001SFConst.UPD_CFM_BTN_DISABLED, X31CWebConst.DATABEAN_SET_VALUE, "false");

		}
		
		// 取得情報の下りマッピング
		mapper.getKKSV088101SC(paramBean, outputMap);
		mapper.getKKSV088104SC(paramBean, outputMap);
		mapper.getKKSV088105SC(paramBean, outputMap);
		mapper.getKKSV088108SC(paramBean, outputMap);
		mapper.getKKSV088109SC(paramBean, outputMap);
		mapper.getKKSV088110SC(paramBean, outputMap);
		mapper.getKKSV088111SC(paramBean, outputMap);

		//当月の料金計算日
		String prcYmd = paramBean[0].sendMessageString(KKW22001SFConst.PRC_YMD, X31CWebConst.DATABEAN_GET_VALUE);
		//IT1-2018-0000004 DEL START
//		//運用日
//		String opeDate = JCCWebCommon.getOpeDate(this, null);
//		//当月の月初
//		String firstDate = opeDate.substring(0, 6) + "01";
		//IT1-2018-0000004 DEL END
		//運用日の月初から料金計算日が範囲内の場合、更新確認ボタンは非活性にする。
		if (firstDate.compareTo(opeDate) <= 0 && opeDate.compareTo(prcYmd) <= 0)
		{
			//更新確認ボタン表示区分 非活性化
			paramBean[0].sendMessageString(KKW22001SFConst.UPD_CFM_BTN_DISABLED, X31CWebConst.DATABEAN_SET_VALUE, "true");
		}
		
		//  月額料金の制御
		setSeikyAmnt(paramBean);
		
		//ページ番号のリセット
		if (SEARCH_TYPE_INIT == searchType) 
		{
			// ページ番号のリセット
			JCCWebCommon.clearPageLinkInfo(this, JKKScreenConst.SCREEN_ID_KKW22001);
		}
		
		// マンション子契約一覧検索共通処理を呼び出す。
		searchKokeiyakuItiran(svcFormBean, JCCWebCommon.getScreenInfo(this), searchType);
		
		// 遷移元画面IDを取得
		String baseScreenId = JCCWebCommon.getScreenId(this, JKKScreenConst.SCREEN_ID_KKW22001);
		// 遷移元がマンション契約一覧照会画面の場合
		if(JKKScreenConst.SCREEN_ID_KKW12504.equals(baseScreenId))
		{
			paramBean[0].sendMessageString(KKW22001SFConst.DISP_MODE, X31CWebConst.DATABEAN_SET_VALUE, "1");
		// 上記以外の遷移元の場合
		} 
		else 
		{

			paramBean[0].sendMessageString(KKW22001SFConst.DISP_MODE, X31CWebConst.DATABEAN_SET_VALUE, "0");
		}
		
		//eSM画面ＵＲＬの取得
		String esmUrl = JCCWebCommon.getApplicationConst(ESM_URL_KEY);
		//ユーザIDの取得
		String userID = commonInfoBean.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 特定項目置換用の文字コード取得
		String encType = JCCWebCommon.getApplicationConst(URLENCODE_ENCTYPE_KEY);
		// 特定項目置換処理
		esmUrl = esmUrl.replaceAll(USER_ID_EXCHANGE_WORD, encode(userID, encType))												// ユーザーID
						.replaceAll(P_ID_EXCHANGE_WORD, encode(svcFormBean.sendMessageString(KKW22001SFConst.MANS_BKN_INF_P_ID, X31CWebConst.DATABEAN_GET_VALUE), encType))	// P-ID
						.replaceAll(MANSION_ID_EXCHANGE_WORD, encode(svcFormBean.sendMessageString(KKW22001SFConst.MANS_BKN_INF_MANS_ID, X31CWebConst.DATABEAN_GET_VALUE), encType))		// マンションID
						.replaceAll(CAT_ID_EXCHANGE_WORD, encode(svcFormBean.sendMessageString(KKW22001SFConst.MANS_BKN_INF_CAT_ID, X31CWebConst.DATABEAN_GET_VALUE), encType))			// CAT-ID
						.replaceAll(ESM_RANDSTR_EXCHANGE_WORD, encode(getPassword(ESM_RANDSTR_KEY), encType));					// randStr（複合化した値）
		
		//値の設定
		svcFormBean.sendMessageString(KKW22001SFConst.ESM_URL, X31CWebConst.DATABEAN_SET_VALUE, esmUrl);
		
		//共有フォームBean設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22001);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22001);
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;
	}

	/**
	 * ページングリンク処理を行います。
	 * <br>
	 * @return true:正常
	 * @exception Exceptionがスローされます。
	 */
	public boolean actionPaging() throws Exception
	{
		
		//共有Bean アクセスクラスの取得
		X31SDataBeanAccess commonInfoBean = super.getCommonInfoBean();

		//サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();

		// マンション一覧検索共通処理を呼び出す。
		searchKokeiyakuItiran(svcFormBean, JCCWebCommon.getScreenInfo(this), SEARCH_TYPE_PAGING);
		
		//共有フォームBean設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22001);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22001);
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;
	}

	/**
	 * マンション子契約一覧検索処理共通処理。
	 * <br>
	 * @param svcFormBean 
	 * @param searchConditionMap 
	 * @param search_type 
	 * @return true:正常
	 * @exception Exceptionがスローされます。
	 */
	public void searchKokeiyakuItiran(X31SDataBeanAccess svcFormBean, HashMap<String, Object> searchConditionMap, int search_type) throws Exception 
	{

		// マッピング用paramBeanセット
		X31SDataBeanAccess[] paramBean = {svcFormBean};
		
		// マンションオーナー一覧初期化
		paramBean[0].getDataBeanArray(KKW22001SFConst.MANS_KO_KEI_LIST).clearArray();

		if (search_type == SEARCH_TYPE_SEARCH) 
		{	
			//ページ番号のリセット
			JCCWebCommon.clearPageLinkInfo(this, JKKScreenConst.SCREEN_ID_KKW22001);
			
		}
		
		// 変数の定義
		HashMap<String, Object> paramMap = null;
		HashMap<String, Object> inputMap = null;
		HashMap<String, Object> outputMap = null;
		
		paramMap = new HashMap<String, Object>();		//パラメタ設定用マップ
		inputMap = new HashMap<String, Object>();		//データマップ
		outputMap = new HashMap<String, Object>();		//結果格納用マップ
		
		// パラメタ設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0884);
		paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0884OP);

		// マンション一覧検索パラメータ各種設定
		KKSV0884_KKSV0884OPDBMapper mapper = new KKSV0884_KKSV0884OPDBMapper();
		boolean bol = paramBean[0].sendMessageBoolean(KKW22001SFConst.SONOTA_SYORI_TAISYOGAI, X31CWebConst.DATABEAN_GET_VALUE);
		String func_cd = JPCModelConstant.FUNC_CD_4;
		//処理対象外のみにチェック無しの場合、全件検索する。有りの場合は、更新対象外の契約を取得する。
		if (bol == false) 
		{
			func_cd = JPCModelConstant.FUNC_CD_4;
		} 
		else
		{
			func_cd = JPCModelConstant.FUNC_CD_5;

		}
		mapper.setKKSV088401SC(paramBean, inputMap, func_cd);

		// ページング情報の設定
		JCCWebCommon.upmapperPageLinkInfo(this, "0", "KKSV088401SC", inputMap);

		// マンションオーナー初期表示サービス実行
		invokeService(paramMap, inputMap, outputMap);	
		
		// ページング表示制御（表示）
		paramBean[0].sendMessageString(KKW22001SFConst.PAGE_LINK_FLG, X31CWebConst.DATABEAN_SET_VALUE, DISP_PAGING_ON);

		// 取得情報の下りマッピング
		mapper.getKKSV088401SC(paramBean, outputMap);
		
		// 検索エラーフラグの取得
		String searchErrFlg = JCCWebCommon.getSearchErrFlg("KKSV088401SC", outputMap);
		
		if(JPCModelConstant.SEARCH_ERR_FLG_OVERMAX.equals(searchErrFlg))
		{
			// メッセージ設定
			String[] msg = {JCCWebCommon.getSearchConst("KKW22001_MAX_SHOW_CNT")};
			JCCWebCommon.setMessageInfo(this, "EKB0340--I", msg);

			// ページング表示制御（非表示）
			paramBean[0].sendMessageString(KKW22001SFConst.PAGE_LINK_FLG, X31CWebConst.DATABEAN_SET_VALUE, DISP_PAGING_OFF);
			//更新確認ボタン表示区分 非活性化
			paramBean[0].sendMessageString(KKW22001SFConst.UPD_CFM_BTN_DISABLED, X31CWebConst.DATABEAN_SET_VALUE, "true");

			return;

		// 表示ページに該当するデータがない場合の処理
		}
		else
		{
			// ページング表示制御（表示）
			paramBean[0].sendMessageString(KKW22001SFConst.PAGE_LINK_FLG, X31CWebConst.DATABEAN_SET_VALUE, DISP_PAGING_ON);
		}
		
		// ページング情報の設定
		JCCWebCommon.downmapperPageLinkInfo(this,  "0", "KKSV088401SC", outputMap);

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, "paging");

		return;
	}
	
	/**
	 * 更新確認ボタン
	 * 
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean actionCfm() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = { bean };
		
		//運用日
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		
		// 料金適用開始年月日の取得
		String ymdYear = paramBean[0].sendMessageString(KKW22001SFConst.UPDATE_PCRS_STA_YMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		String ymdMonth = paramBean[0].sendMessageString(KKW22001SFConst.UPDATE_PCRS_STA_YMD_MON, X31CWebConst.DATABEAN_GET_VALUE);
		String ymdDay = paramBean[0].sendMessageString(KKW22001SFConst.UPDATE_PCRS_STA_YMD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
		
		String updatePcrsYmd = ymdYear + ymdMonth + ymdDay;
		//料金適用開始年月日未来日チェック
		if (opeDate.compareTo(updatePcrsYmd) < 0)
		{
			//料金適用開始年月日が未来日(当日は含まない)の場合はエラー。
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB7800_KW, new String[]{ "料金適用開始年月日"}, "update_pcrs_sta_ymd_year");
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB7800_KW, new String[]{ "料金適用開始年月日"}, "update_pcrs_sta_ymd_mon");
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB7800_KW, new String[]{ "料金適用開始年月日"}, "update_pcrs_sta_ymd_day");
			return false;
		}
		
		//料金適用開始年月日妥当性チェック
		if (JPCDateUtil.subtractMonth(opeDate, updatePcrsYmd) != 0)
		{
			//料金適用開始年月日が当月以外の場合はエラー。
			JCCWebCommon.setMessageInfo(this, "EKBF010-KW", new String[]{ "料金適用開始年月日"}, "update_pcrs_sta_ymd_year");
			JCCWebCommon.setMessageInfo(this, "EKBF010-KW", new String[]{ "料金適用開始年月日"}, "update_pcrs_sta_ymd_mon");
			JCCWebCommon.setMessageInfo(this, "EKBF010-KW", new String[]{ "料金適用開始年月日"}, "update_pcrs_sta_ymd_day");
			return false;
		}
		
		paramBean[0].sendMessageString(KKW22001SFConst.UPDATE_PCRS_STA_YMD, X31CWebConst.DATABEAN_SET_VALUE, JKKStringUtil.nullToBlank(updatePcrsYmd));
		
		// 上りマッピング(サービス項目-DataBean項目マッピング)
		KKSV0882_KKSV0882OPDBMapper mapper = new KKSV0882_KKSV0882OPDBMapper();
		// 変数の定義
		HashMap<String, Object> paramMap  = new HashMap<String, Object>();
		
		HashMap<String, Object> inputMap  = new HashMap<String, Object>();
		HashMap<String, Object> outputMap  = new HashMap<String, Object>();
		
		// パラメタ設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0882");
		
		mapper.setKKSV088201CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2, opeDate);
		
		invokeService(paramMap, inputMap, outputMap);
		
		// 取得情報の下りマッピング
		mapper.getKKSV088201CC(paramBean, outputMap);

		//契約一時金対象サービス契約番号一覧
		X31SDataBeanAccessArray kicjkn_list = paramBean[0].getDataBeanArray("契約一時金対象サービス契約番号一覧");
		
		//契約一時金対象サービス契約番号一覧が0件ではない場合
		if (kicjkn_list.getCount() != 0)
		{
			//警告ﾒｯｾｰｼﾞを表示する。
			JCCWebCommon.setMessageInfo(this, "EKBE980--Q");
		}
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		// 自画面の画面名を設定
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22002);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22002);

		return true;
	}
	
	/**
	 * 修正ボタン処理を行います。（マンションギガイーサ更新画面）
	 * <br>
	 * @return true:正常
	 * @throws Exception
	 */
	public boolean moveToKkw22002() throws Exception
	{

		// 遷移先情報の設定 （マンションギガイーサ更新画面）
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,   X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22001);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22001);
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		return true;
	}
	
	/**
	 * 更新ボタン押下処理
	 * 
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean actionUpdate() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = { bean };
		
		// 運用日付を取得
		String unyoYmd = JCCWebCommon.getOpeDate(this, null);
		
		// 上りマッピング(サービス項目-DataBean項目マッピング)
		KKSV0882_KKSV0882OPDBMapper mapper = new KKSV0882_KKSV0882OPDBMapper();
		// 変数の定義
		HashMap<String, Object> paramMap  = new HashMap<String, Object>();
		
		HashMap<String, Object> inputMap  = new HashMap<String, Object>();
		HashMap<String, Object> outputMap  = new HashMap<String, Object>();
		
		// パラメタ設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0882");
		
		mapper.setKKSV088201CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1, unyoYmd);
		
		invokeService(paramMap, inputMap, outputMap);
		
		// 取得情報の下りマッピング
		mapper.getKKSV088201CC(paramBean, outputMap);
		
		String[] msg = {"更新"};
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB4390__I, msg);
		
		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		
		// 自画面の画面名を設定
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW22003);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW22003);

		return true;
	}
	
	/**
	 * 完了ボタン押下処理
	 * 
	 * @return	true : 正常終了
	 * @throws Exception 
	 */
	public boolean actionToAdd() throws Exception
	{
		//クリアボタン処理
		actionReset();
		return true;
	}
	
	/**
	 * リセットボタン押下処理<br>
	 * 
	 * @return 正常の場合は true、そうでない場合は false
	 * @throws Exception 例外が発生した場合
	 */
	public boolean actionReset() throws Exception 
	{
		// サービスフォームBeanのアクセスクラス取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		
		// 引継元表示項目をクリア
		serviceFormBean.sendMessageString(KKW22001SFConst.SEARCH_MANS_ID, X31CWebConst.DATABEAN_SET_VALUE, "");
		serviceFormBean.sendMessageString(KKW22001SFConst.SEARCH_P_ID, X31CWebConst.DATABEAN_SET_VALUE, "");
		serviceFormBean.sendMessageString(KKW22001SFConst.UPDATE_PAIR_ID, X31CWebConst.DATABEAN_SET_VALUE, "");
		serviceFormBean.sendMessageString(KKW22001SFConst.UPDATE_KANYU_KEI_SEIKY_AMNT_100M, X31CWebConst.DATABEAN_SET_VALUE, "");
		serviceFormBean.sendMessageString(KKW22001SFConst.UPDATE_KANYU_KEI_SEIKY_AMNT, X31CWebConst.DATABEAN_SET_VALUE, "");
		serviceFormBean.sendMessageString(KKW22001SFConst.UPDATE_OWNR_KEI_SEIKY_AMNT, X31CWebConst.DATABEAN_SET_VALUE, "");
		serviceFormBean.sendMessageString(KKW22001SFConst.UPDATE_PCRS_STA_YMD, X31CWebConst.DATABEAN_SET_VALUE, "");
		serviceFormBean.sendMessageString(KKW22001SFConst.UPDATE_PCRS_STA_YMD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, "");
		serviceFormBean.sendMessageString(KKW22001SFConst.UPDATE_PCRS_STA_YMD_MON, X31CWebConst.DATABEAN_SET_VALUE, "");
		serviceFormBean.sendMessageString(KKW22001SFConst.UPDATE_PCRS_STA_YMD_DAY, X31CWebConst.DATABEAN_SET_VALUE, "");
		serviceFormBean.sendMessageBoolean(KKW22001SFConst.SONOTA_PCRS_CD_HUITTI, X31CWebConst.DATABEAN_SET_VALUE, false);
		serviceFormBean.sendMessageBoolean(KKW22001SFConst.SONOTA_SYORI_TAISYOGAI, X31CWebConst.DATABEAN_SET_VALUE, false);		
		
		// 契約一時金対象サービス契約番号一覧のクリア
		X31SDataBeanAccessArray kicjkn_list = serviceFormBean.getDataBeanArray(KKW22001SFConst.KICJKN_LIST);
		if (kicjkn_list != null)
		{
			kicjkn_list.clearArray();
		}
		
		// マンション子契約一覧のクリア
		X31SDataBeanAccessArray mans_ko_kei_list = serviceFormBean.getDataBeanArray(KKW22001SFConst.MANS_KO_KEI_LIST);
		if (mans_ko_kei_list != null)
		{
			mans_ko_kei_list.clearArray();
		}
		
		// ページング表示制御（非表示）
		serviceFormBean.sendMessageString(KKW22001SFConst.PAGE_LINK_FLG, X31CWebConst.DATABEAN_SET_VALUE, DISP_PAGING_OFF);
		//更新確認ボタン表示区分 非活性化
		serviceFormBean.sendMessageString(KKW22001SFConst.UPD_CFM_BTN_DISABLED, X31CWebConst.DATABEAN_SET_VALUE, "true");
		
		// 初期表示処理を呼び出す
		actionInit();
				
		
		return true;
	}

	/**
	 * 同じ提供方式契約番号で月額料金が複数件存在する場合、
	 * 1行にまとめて出力する処理を行う。
	 * @param paramBean KKSV048101SC下りマッピングの結果
	 * @throws Exception 例外
	 */
	private void setSeikyAmnt(X31SDataBeanAccess[] paramBean) throws Exception 
	{
		//  下りマッピングからリストを取得
		X31SDataBeanAccessArray isTkHosikiKeiList = paramBean[0].getDataBeanArray(KKW22001SFConst.TK_HOSHIKI_KEI_LIST);
		
		//  リストの個数分繰り返す
		for (int i = 0; i < isTkHosikiKeiList.getCount(); i++)
		{
			// 
			X31SDataBeanAccess subbean = null;
			if(isTkHosikiKeiList.getCount() - 1 >= i)
			{
				subbean = isTkHosikiKeiList.getDataBean(i);
			}
			else
			{
				subbean = isTkHosikiKeiList.addDataBean();
			}

			// 提供方式契約番号を設定
			String isTkHosikiKeiNo = null;
			isTkHosikiKeiNo = subbean.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_TK_HOSHIKI_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
			
			//  リストのコピー分繰り返す
			for (int j = 0; j < isTkHosikiKeiList.getCount(); j++)
			{
					
				//  コピーリストの作成
				X31SDataBeanAccess copy = isTkHosikiKeiList.getDataBean(j);
				
				String isTkHosikiKeiNoCopy = null;
				String isPrcSkbtCdCopy = null;
				// 提供方式契約番号を設定
				isTkHosikiKeiNoCopy = copy.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_TK_HOSHIKI_KEI_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
				// マンション料金識別コードを設定
				isPrcSkbtCdCopy = copy.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_MANS_PRC_SKBT_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
				
				//  コピーと同じリストではないか判定
				if (!(i == j)) 
				{
					//  提供方式契約番号が同じか判定
					if (isTkHosikiKeiNoCopy.equals(isTkHosikiKeiNo))
					{
						//  マンション料金識別コードが001(="基本料金")か判定
						if (isPrcSkbtCdCopy.equals("001"))
						{
						
							String is100M = null;
							String is1G = null;
							String is100MLight = null;
							String isOya = null;
						
		 					// 月額料金（子）（１００Ｍ）を設定
							is100M = copy.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_GTGK_PRC_KO_100M_01, X31CWebConst.DATABEAN_GET_VALUE);
							
							if (!(is100M == null || "".equals(is100M.trim())))
							{
								subbean.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_GTGK_PRC_KO_100M_01, X31CWebConst.DATABEAN_SET_VALUE, is100M);
							}
							
							// 月額料金（子）（１Ｇ）を設定
							is1G = copy.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_GTGK_PRC_KO_1G_01, X31CWebConst.DATABEAN_GET_VALUE);
							if (!(is1G == null || "".equals(is1G.trim())))
							{
								subbean.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_GTGK_PRC_KO_1G_01, X31CWebConst.DATABEAN_SET_VALUE, is1G);
							}
							
							// 月額料金（子）（１００Ｍライト）を設定
							is100MLight = copy.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_GTGK_PRC_KO_100M_LIGHT_01, X31CWebConst.DATABEAN_GET_VALUE);
							if (!(is100MLight == null || "".equals(is100MLight.trim())))
							{
								subbean.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_GTGK_PRC_KO_100M_LIGHT_01, X31CWebConst.DATABEAN_SET_VALUE, is100MLight);
							}
							// 月額料金（親）を設定
							isOya = copy.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_GTGK_PRC_OYA_01, X31CWebConst.DATABEAN_GET_VALUE);
							if (!(isOya == null || "".equals(isOya.trim())))
							{
								subbean.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_GTGK_PRC_OYA_01, X31CWebConst.DATABEAN_SET_VALUE, isOya);
							}
							
							//  コピーからデータを設定した際、コピーを行ったbeanのリストを削除する
							isTkHosikiKeiList.removeDataBean(j);
							//  削除後リストが一つずれる為修正
							j = j - 1;
						}
					}
				}
			}
		}

		//  下りマッピングからリストを取得
		X31SDataBeanAccessArray isTkHosikiKeiListScr = paramBean[0].getDataBeanArray(KKW22001SFConst.TK_HOSHIKI_KEI_LIST);
		
		//  リストの個数分繰り返す
		for (int i = 0; i < isTkHosikiKeiListScr.getCount(); i++)
		{
			X31SDataBeanAccess subbean = isTkHosikiKeiListScr.getDataBean(i);
			
			String prcSkbtCd = subbean.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_MANS_PRC_SKBT_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			
			//  マンション料金識別コードが001(="基本料金")か判定
			if ("001".equals(prcSkbtCd))
			{
				// 月額料金（親）を設定
				String isOya = subbean.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_GTGK_PRC_OYA_01, X31CWebConst.DATABEAN_GET_VALUE);
				if (!(isOya == null || "".equals(isOya.trim())))
				{					
					// 加入契約支払い方式コード
					String kanyuuPayCd = subbean.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_KANYU_KEI_PAY_HOSHIKI_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
					// 総戸数
					String ttlKosu = subbean.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_TTL_KOSU_01, X31CWebConst.DATABEAN_GET_VALUE);
					JSYwebLog.println(JSYwebLog.DEBUG, getClass(), "総戸数" + ttlKosu  , null, null, null);
					JSYwebLog.println(JSYwebLog.DEBUG, getClass(),  "加入契約支払い方式コード" + kanyuuPayCd   , null, null, null);

					if(kanyuuPayCd != null && JKKStrConst.KANYUKEI_PAY_HOSHIKI_ZENKO.equals(kanyuuPayCd))
					{
						if(ttlKosu != null && !"".equals(ttlKosu))
						{
							long iTtlKosu = Long.parseLong(ttlKosu);
							
							if(iTtlKosu != 0) 
							{
								long iIsOya = Long.parseLong(isOya);
								long iOyaTanka = iIsOya / iTtlKosu;
								
								JSYwebLog.println(JSYwebLog.DEBUG, getClass(),  "親単価" + Long.toString(iOyaTanka)   , null, null, null);
								
								subbean.sendMessageString(KKW22001SFConst.TK_HOSI_KEI_INF_GTGK_PRC_OYA_01, X31CWebConst.DATABEAN_SET_VALUE, Long.toString(iOyaTanka));

							}
						}
					}
				}
			}
		}
	}

	// プロパティファイルからパスワードを取得→復号化して返す
	private String getPassword(String key)
	{
		return JCCWebCommon.getDecryptResultPassword(JCCWebCommon.getApplicationConst(key));
	}
	
	// URLエンコーダ
	private String encode(String endVal, String encType) throws UnsupportedEncodingException
	{
		return URLEncoder.encode(endVal, encType);
	}
}
