/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：開通前支払方法変更受付画面
*   ソースファイル名：FUW00701FLogic.java
*   作成者          ：富士通
*   日付            ：2018年5月10日
*＜機能概要＞
*   開通前支払方法変更受付のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v37.00      2018/05/10   FJ) 岡井    【ANK-3119-00-00】開通前でもＷｅｂから支払方法を変更可能とする
*   v39.00      2018/11/13   FJ) 岡井    【OM-2018-0001090】ゆうちょ口座の通帳記号不正
*   v41.00      2019/03/12   FJ) 岡井    【ANK-3577-00-00】アンケートWeb化対応
*   v46.00      2019/07/24   FJ) 岡井    【ANK-3602-00-00】特定クレジットカードの売上オーソリ実施対応
*   v45.00      2019/09/03   FJ) 岡井    【ANK-3551-00-00】クレカ有効性NG時の支払方法変更対応
**********************************************************************/
package eo.web.webview.FUW00701SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;
import static eo.common.constant.JFUStrConst.ERROR_CODE_0201;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;

import com.fujitsu.futurity.common.JSYwebLog;
import com.fujitsu.futurity.model.common.check.HalfCharCheck;
import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CHashMap;
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.X31CMessageResult.X31CMessageMoreInfo;
import com.fujitsu.futurity.web.x33.X33CUtil;
import com.fujitsu.futurity.web.x33.X33WSessionController;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JCCcomEncryptionUtil;
import eo.common.util.JFUCommonUtil;
import eo.common.util.JZMFormatForMask;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JFUScreenConst;
import eo.web.webview.common.JFUWebCommon;
import eo.web.webview.mapping.FUSV0316_FUSV0316OPDBMapper;
import eo.web.webview.mapping.FUSV0317_FUSV0317OPDBMapper;

/**
 * 支払方法変更受付のビューロジッククラスです。<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00701SFLogic extends JCCWebBusinessLogic
{

	// ***** サービス関係 *****
	/** サービスID：初期表示 */
	private static final String FUSV_ID_INIT = "FUSV0316";
	/** サービスID：申し込む */
	private static final String FUSV_ID_MSKM = "FUSV0317";

	/** 開通前支払方法変更関連チェックCC */
	private static final String FUSV031602CC = "FUSV031602CC";
	/** OUT：最終更新年月日時分秒(請求契約) */
	private static final String OUT_SEIKY_LAST_UPD_DTM = "out_seiky_last_upd_dtm";
	/** OUT：サービス契約リスト(請求契約) */
	private static final String OUT_SEIKY_KEI_SVC_KEI_LIST = "out_seiky_kei_svc_kei_list";
	/** 項目ID：サービス契約ステータス */
	private static final String SVC_KEI_STAT = "svc_kei_stat";

	/** 初期費用一覧照会CC */
	private static final String FUSV031603CC = "FUSV031603CC";
	/** 初期費用一覧照会明細 */
	private static final String EKK0721A010CBSMSG1LIST = "EKK0721A010CBSMsg1List";

	/** 同一請求先照会SC */
	private static final String FUSV031601SC = "FUSV031601SC";
	/** 同一請求先照会明細 */
	private static final String EKK0321B501CBSMSG1LIST = "EKK0321B501CBSMsg1List";

	/** テンプレートID(申込書番号（申込書明細番号）存在チェック一覧参照) */
	private static final String TEMPLATE_ID_EKK0021B504 = "EKK0021B504";
	/** エラー項目ID：mskm_no_not_found_err */
	private static final String ERROR_ITEM_MSKM_NO_NOT_FOUND = "mskm_no_not_found";

	/** テンプレートID(申込明細一意照会) */
	private static final String TEMPLATE_ID_EKK0021A010 = "EKK0021A010";
	/** エラー項目ID：sysid_not_search_err */
	private static final String ERROR_ITEM_SYSID_NOT_SEARCH = "sysid_not_search";

	/** テンプレートID(お客様一意照会) */
	private static final String TEMPLATE_ID_ECK0011A010 = "ECK0011A010";
	/** エラー項目ID：tel_no_not_found_err */
	private static final String ERROR_ITEM_TEL_NO_NOT_FOUND = "tel_no_not_found";

	/** テンプレートID(請求契約一覧照会（予約手続中）) */
	private static final String TEMPLATE_ID_EKK0491B508 = "EKK0491B508";
	/** エラー項目ID：same_seikyno_rsv_err */
	private static final String ERROR_ITEM_SAME_SEIKYNO_RSV = "same_seikyno_rsv";
	/** エラー項目ID：diff_seikyno_rsv_err */
	private static final String ERROR_ITEM_DIFF_SEIKYNO_RSV = "diff_seikyno_rsv";
	/** エラー項目ID：cust_nm_fukusu_err */
	private static final String ERROR_ITEM_CUST_NM_FUKUSU = "cust_nm_fukusu";

	/** テンプレートID(請求契約一覧照会（サービス契約番号）) */
	private static final String TEMPLATE_ID_EKK0491B507 = "EKK0491B507";
	/** エラー項目ID：seiky_kei_not_found_err */
	private static final String ERROR_ITEM_SEIKY_KEI_NOT_FOUND = "seiky_kei_not_found";
	/** エラー項目ID：seiky_kei_fukusu_err */
	private static final String ERROR_ITEM_SEIKY_KEI_FUKUSU = "seiky_kei_fukusu";
	/** エラー項目ID：mansion_owner_id_err */
	private static final String ERROR_ITEM_MANSION_OWNER_ID = "mansion_owner_id";

	/** テンプレートID(請求抑止一覧照会（口座番号表示抑止制御）) */
	private static final String TEMPLATE_ID_EKK0541B502 = "EKK0541B502";
	/** エラー項目ID：seiky_yoksi_cd_err */
	private static final String ERROR_ITEM_SEIKY_YOKSI_CD = "seiky_yoksi_cd";

	/** テンプレートID(サービス契約一意照会) */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	/** エラー項目ID：web_op_add_kh_err */
	private static final String ERROR_ITEM_WEB_OP_ADD_KH = "web_op_add_kh";
	/** エラー項目ID：svc_kei_stat_err */
	private static final String ERROR_ITEM_SVC_KEI_STAT = "svc_kei_stat";
	/** エラー項目ID：svc_kei_prc_grp_cd_err */
	private static final String ERROR_ITEM_SVC_KEI_PRC_GRP_CD = "svc_kei_prc_grp_cd";
	/** エラー項目ID：svc_kei_not_found_err */
	private static final String ERROR_ITEM_SVC_KEI_NOT_FOUND = "svc_kei_not_found";

	/** テンプレートID(解約済以外サービス契約一覧照会（SYSID）) */
	private static final String TEMPLATE_ID_EKK0081B003 = "EKK0081B003";

	/** テンプレートID：審査済クレジットカード登録 */
	private static final String TEMPLATE_ID_EKK0521D020 = "EKK0521D020";
	/** アイテムID：クレジットカード番号 */
	private static final String ITEM_ID_CRECARD_COMP_CD = "crecard_comp_cd";

	/** テンプレートID：請求支払先変更 */
	private static final String TEMPLATE_ID_EKK0491C240 = "EKK0491C240";
	/** アイテムID：請求契約番号 */
	private static final String ITEM_ID_SEIKY_KEI_NO = "seiky_kei_no";
	/** アイテムID：更新年月日時分秒(更新前) */
	private static final String ITEM_ID_UPD_DTM_BF = "upd_dtm_bf";

	/** テンプレートID：口振手続 */
	private static final String TEMPLATE_ID_EKK0501D010 = "EKK0501D010";
	/** アイテムID：金融機関コード */
	private static final String ITEM_ID_BANK_CD = "bank_cd";
	// ***** サービス関係 *****

	// ***** 初期表示 *****
	/** パラメータキー：申込番号 */
	private static final String KEY_MSKM_NO = "mskm_no";
	// ***** 初期表示 *****

	// ***** 口座振替関係 *****
	/** 口座振替申込のボタン押下回数 */
	private static final String FU_KFR_PUSH_COUNT = "0";

	/** アクションパラメータを取得するキー */
	private static final String POST_ID_ACTION = "action";
	/** アクション（kouza_change） */
	private static final String ACTION_BF_OPEN_KOUZA_CHANGE = "bf_open_kouza_change";

	/** OSID（FUIFE140_口座振替受付起動依頼） */
	private static final String OSID_FUIFE140 = "OS005";
	/** 暗号化方式 */
	private static final String ENCRYPT_FORMAT = "Blowfish"; // 
	/** 暗号化キーの暗号化に使用 */
	private static final String TRUE_KEY = "ENCRYPT_KEY";
	/** 1byteのデータから生成される文字数 */
	private static final int STRING_SIZE = 2; // 
	/** アプリケーションプロパティから共通暗号化キーを取得するキー (口座振替) */
	private static final String KOUZA_FURIKAE_ENCRYPTION_KEY_2 = "KOUZA_FURIKAE_ENCRYPTION_KEY_2";

	/** 口座振替への画面遷移フラグ(口座振替への画面に遷移する) */
	private static final String KOUFURI_FLG_TO = "1";
	/** 口座振替への画面遷移フラグ(口座振替からの戻りの処理) */
	private static final String KOUFURI_FLG_RET = "2";

	/** 事業者コード */
	private static final String BODY_KEY_SHOP_CD = "shop_cd";
	/** お客様番号 */
	private static final String BODY_KEY_CUSTMOER_NUMBER = "customer_number";
	/** 契約者カナ氏名 */
	private static final String BODY_KEY_NAME_KANA = "name_kana";
	/** クリアパス取扱年月日 */
	private static final String BODY_KEY_CLEARPASS_DATE = "clearpass_date";
	/** クリアパス取扱時刻 */
	private static final String BODY_KEY_CLEARPASS_TIME = "clearpass_time";
	/** クリアパス取扱番号 */
	private static final String BODY_KEY_CLEARPASS_NUMBER = "clearpass_number";
	/** 金融機関取扱年月日 */
	private static final String BODY_KEY_BANK_DATE = "bank_date";
	/** 金融機関取扱時刻 */
	private static final String BODY_KEY_BANK_TIME = "bank_time";
	/** 金融機関取扱番号 */
	private static final String BODY_KEY_BANK_NUMBER = "bank_number";
	/** 銀行コード */
	private static final String BODY_KEY_BANK_CD = "bank_cd";
	/** 支店コード */
	private static final String BODY_KEY_BRANCH_CD = "branch_cd";
	/** 預金種目 */
	private static final String BODY_KEY_DEPODIT_ITEM = "depodit_item";
	/** 口座番号 */
	private static final String BODY_KEY_ACCOUNT_NUMBER = "account_number";
	/** 口座名義人（カナ） */
	private static final String BODY_KEY_ACCOUNT_HOLDER = "account_holder";
	/** ステータス */
	private static final String BODY_KEY_STATUS = "status";
	/** 処理結果コード */
	private static final String BODY_KEY_RESULT_CD = "result_cd";
	/** メッセージ */
	private static final String BODY_KEY_MESSAGE = "message";
	/** 付加情報 */
	private static final String BODY_KEY_ADD_INFO = "add_info";
	/** 暗号化キー(口座振替) */
	private static final String BODY_KEY_CK_KOUZA = "CK";

	/** クリアパスステータス 2：正常 */
	private static final String CLEARPASS_STATUS_NORMAL = "2";
	/** クリアパスステータス 99：その他エラー */
	private static final String CLEARPASS_STATUS_ERR = "99";
	/** クリアパスステータス 999：キャンセルボタン */
	private static final String CLEARPASS_STATUS_CANCEL = "999";

	/** テストモード："ON"(テストモード) */
	private static final String TEST_MODE_ON = "ON";

	/** 金融機関コード：ゆうちょ銀行 */
	private static final String BANK_CD_POSTAL = "9900";
	/** 支店コード：ゆうちょ銀行 */
	private static final String BRANCH_CD_POSTAL = "001";

    /** 金融機関名(ゆうちょ銀行) */
	private static final String YUCHO_BANK_NM = "ゆうちょ銀行"; // 
	// ***** 口座振替関係 *****

	// ***** クレジットカード(オーソリ)関係 *****
	/** クリアパスAPI処理結果コード(100)  */
	private static final String RESULT_CD_100 = "100";
	/** クリアパスAPI処理結果コード詳細(0100)  */
	private static final String RESULT_CD_100_DETAIL_0100 = "0100";
	/** クリアパスAPI処理結果コード詳細(0101)  */
	private static final String RESULT_CD_100_DETAIL_0101 = "0101";
	/** クリアパスAPI処理結果コード詳細(0107)  */
	private static final String RESULT_CD_100_DETAIL_0107 = "0107";
	/** クリアパスAPI処理結果コード詳細(0110)  */
	private static final String RESULT_CD_100_DETAIL_0110 = "0110";
	/** クリアパスAPI処理結果コード詳細(0121)  */
	private static final String RESULT_CD_100_DETAIL_0121 = "0121";
	/** クリアパスAPI処理結果コード詳細(0200)  */
	private static final String RESULT_CD_100_DETAIL_0200 = "0200";
	/** クリアパスAPI処理結果コード(200)  */
	private static final String RESULT_CD_200 = "200";
	/** クリアパスAPI処理結果コード詳細(0208)  */
	private static final String RESULT_CD_200_DETAIL_0208 = "0208";
	// ***** クレジットカード(オーソリ)関係 *****

	// ***** クレジットカード(トークン)関係 *****
	/** クリアパストーク取得結果コードリスト */
	private static final List<String> CLP_TKN_RSLT_CD_LIST = Arrays.asList(JFUStrConst.CLP_RESULT_CD_0, JFUStrConst.CLP_RESULT_CD_8);
	/** クリアパストーク取得エラーコードリスト */
	private static final List<String> CLP_TKN_ERR_CD_LIST = Arrays.asList(JFUStrConst.CLP_ERROR_CD_6, JFUStrConst.CLP_ERROR_CD_7,
			JFUStrConst.CLP_ERROR_CD_9);
	// ***** クレジットカード(トークン)関係 *****

	// ***** エラーメッセージID *****
	/** エラーメッセージID(EKF0400-TW) */
	private static final String ERR_MSG_ID_EKF0400_TW = "EKF0400-TW";
	/** エラーメッセージID(EKF1870-CE) */
	private static final String ERR_MSG_ID_EKF1870_CE = "EKF1870-CE";
	/** エラーメッセージID(EKF1880-TW) */
	private static final String ERR_MSG_ID_EKF1880_TW = "EKF1880-TW";
	/** エラーメッセージID(EKF1890-TW) */
	private static final String ERR_MSG_ID_EKF1890_TW = "EKF1890-TW";
	/** エラーメッセージID(EKF2010-NW) */
	private static final String ERR_MSG_ID_EKF2010_NW = "EKF2010-NW";
	// ***** エラーメッセージID *****

	// ***** エラーメッセージ引数 *****
	/** エラーメッセージ引数(クレジットカード番号) */
	private static final String ERR_MSG_PARAM_CREDIT = "クレジットカード番号";
	// ***** エラーメッセージ引数 *****

	// ***** エラーメッセージ表示項目 *****
	/** エラーメッセージ領域(申込番号) */
	private static final String ERR_MSG_AREA_ID_MSKM_NO = "mskm_no";
	/** エラーメッセージ領域(クレジットカード会社) */
	private static final String ERR_MSG_AREA_ID_COMPANY = "credit_comp_nm";
	/** エラーメッセージ領域(クレジットカード番号) */
	private static final String ERR_MSG_AREA_ID_CRECARD_NO = "crecard_no";
	/** エラーメッセージ領域(有効期限) */
	private static final String ERR_MSG_AREA_ID_PREIOD = "crecard_no_yk_kigen";
	// ***** エラーメッセージ表示項目 *****

	// ***** その他 *****
	/** 画面遷移付加情報：0PJP */
	private static final String ADD_0PJP = "0PJP";

	/** クレジットカード会社：初期選択 */
	private static final String SELECT_DEFAULT_MSG = "選択してください";
	/** 様 */
	private static final String SAMA = "様";

	/** カード名義人選択：0(契約者と同じ) */
	private static final String CUST_NM_SLCT_0 = "0";
	/** 契約者と同じ*/
	private static final String KEISHA_SAME = "契約者と同じ";

	/** 月数 */
	private static final int MONTH = 12;
	/** 月フォーマット */
	private static final String MONTH_FORMAT = "%02d";
	/** 表示年数取得ID */
	private static final String CRECARD_DISP_YEARS = "crecard_disp_years";

	/** プロパティファイル取得文字列 */
	private static final String QUERY_PATH = "DISPSETTING/SETTING[@screenId='FUW00701']/DISPTEXT[@groupid='svc_kind']";
	/** 属性名 */
	private static final String QUERY_ATTR_NAME = "id";

	/** 請求書払い*/
	private static final String SEIKYSY_HARAI = "未設定（請求書でのお支払い）";
	/** 定義ファイルテキスト取得ID：001 */
	private static final String GET_TXT_ID_001 = "001";
	/** 定義ファイルテキスト取得ID：002 */
	private static final String GET_TXT_ID_002 = "002";

	/** 料金グループコード */
	private static final String PRC_GRP_CD = "prc_grp_cd";
	/** 区分：確認ボタン */
	private static final String KBN_NEXT = "next";
	/** 区分：申込ボタン */
	private static final String KBN_MSKM = "mskm";
	// ***** その他 *****

	/**
	 * 初期処理です。
	 * 
	 * <br>
	 * @return true
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean init() throws Exception
	{
		DEBUG_LOG.debug("----- FUW00701SFLogic_init Start -----");

		// 共有フォームBeanを取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// 共有フォームBeanからフロント共有情報を取得。
		X31SDataBeanAccessArray beanFrontArr = commonInfoBean.getDataBeanArray(CommonInfoCFConst.FRONT_COMMON_INFO);
		if (beanFrontArr.getCount() == 0)
		{
			beanFrontArr.addDataBean();
		}
		X31SDataBeanAccess beanFront = beanFrontArr.getDataBean(0);

		// フロント区分
		beanFront.sendMessageString(CommonInfoCFConst.FU_KBN_05, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.FU_KBN_C);

		// 画面情報を取得し、サービスフォームBeanに設定
		JFUWebCommon.getScreenInfo(this);

		// ヘッダー情報出力
		outReqHeader();

		// ●口座振替遷移判定処理
		if (isKouzahurikae())
		{
			DEBUG_LOG.debug("----- FUW00701SFLogic_init isKouzahurikae Start -----");

			// 口座振替受付画面遷移に必要な情報をサービスフォームBeanに設定します。
			setKouzaFurikaeRedirectData();

			DEBUG_LOG.debug("----- FUW00701SFLogic_init isKouzahurikae End -----");

			// 以降の処理はしない
			return true;
		}

		// ●口座振替戻り判定処理
		if (isKouzahurikaeRet())
		{
			DEBUG_LOG.debug("----- FUW00701SFLogic_init isKouzahurikaeRet Start -----");

			X31CHashMap postedRequests = this.getRequestParams();
			String shopCd = (String)postedRequests.get(BODY_KEY_SHOP_CD);
			String ck = (String)postedRequests.get(BODY_KEY_CK_KOUZA);

			if(JFUWebCommon.isNull(shopCd) && JFUWebCommon.isNull(ck))
			{
				// 口座振替受付(キャンセルボタン押下)からのリダイレクト処理
				DEBUG_LOG.debug("----- FUW00701SFLogic_init kouzaFurikaeCancelRedirect -----");
				kouzaFurikaeCancelRedirect();
			}
			else
			{
				// 口座振替受付画面からの遷移に必要な情報をサービスフォームBeanに設定。
				DEBUG_LOG.debug("----- FUW00701SFLogic_init setKouzaFurikaeRedirectRetData -----");
				setKouzaFurikaeRedirectRetData();
			}

			// 遷移先画面IDを設定
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
					JFUScreenConst.SCREEN_ID_FUW00702);
			// 遷移先画面名を設定
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
					JFUScreenConst.SCREEN_NAME_FUW00702);

			DEBUG_LOG.debug("----- FUW00701SFLogic_init isKouzahurikaeRet End -----");

			// 以降の処理はしない
			return true;
		}

		// ＷＥＢ変更情報
		X31SDataBeanAccess webChgInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		// クリアパス情報
		X31SDataBeanAccess clearPassInfoBean = null;
		if(webChgInfoBean != null)
		{
			clearPassInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.CLEAR_PASS_INFO).getDataBean(0);
		}

		X31SDataBeanAccess webNewInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		X31SDataBeanAccess redirectInfoBean = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO).getDataBean(0);

		// 口座振替付加情報
		String addInfo = JFUStrConst.EMPTY;
		if(clearPassInfoBean != null)
		{
			addInfo = clearPassInfoBean.sendMessageString(CommonInfoCFConst.ADD_INFO_61, X31CWebConst.DATABEAN_GET_VALUE);
		}

		if(!JFUWebCommon.isNull(addInfo))
		{
			// クリアパス情報が存在する場合は、クリアパスからの戻りと判断
			redirectInfoBean.sendMessageString(CommonInfoCFConst.RED_TRANSFER_PTN_17, X31CWebConst.DATABEAN_SET_VALUE, KOUFURI_FLG_RET);
			serviceInfoBean.sendMessageString(FUW00701SFConst.KOUFURI_TRANS_FLG, X31CWebConst.DATABEAN_SET_VALUE, KOUFURI_FLG_RET);
		}

		// 口座振替受付画面遷移フラグ
		String koufuriTransFlg = getkoufuriTransFlg();

		if (KOUFURI_FLG_RET.equals(koufuriTransFlg))
		{
			// 口座振替から戻り

			// クリアパス返却値をサービスフォームBeanに設定
			setKozaInfoToSvcFormBean();

			// クリアパスのステータス
			String clearpassStatus = serviceInfoBean.sendMessageString(FUW00701SFConst.CLEAR_PASS_STATUS, X31CWebConst.DATABEAN_GET_VALUE);

			if (CLEARPASS_STATUS_CANCEL.equals(clearpassStatus))
			{
				// 口座振替キャンセル
				DEBUG_LOG.debug("----- FUW00701SFLogic_init 口座振替キャンセル Start -----");

				// 遷移フラグをクリア
				redirectInfoBean.sendMessageString(CommonInfoCFConst.RED_TRANSFER_PTN_17, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

				// 割り込み設定
				super.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00702 + ADD_0PJP);
				// 遷移先画面IDを設定
				commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
						JFUScreenConst.SCREEN_ID_FUW00702);
				// 遷移先画面名を設定
				commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
						JFUScreenConst.SCREEN_NAME_FUW00702);

				DEBUG_LOG.debug("----- FUW00701SFLogic_init 口座振替キャンセル End -----");

				// 以降の処理はしない
				return true;
			}
			else if (!CLEARPASS_STATUS_NORMAL.equals(clearpassStatus))
			{
				// クリアパスのステータスがNG
				DEBUG_LOG.debug("----- FUW00701SFLogic_init 口座振替NG Start -----");
				outputBusLog("----- FUW00701SFLogic_login：口座振替NG -----");

				// 支払方法をクリア
				serviceInfoBean.sendMessageString(FUW00701SFConst.PAY_WAY_SLCT, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
				// 遷移フラグをクリア
				redirectInfoBean.sendMessageString(CommonInfoCFConst.RED_TRANSFER_PTN_17, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

				// 割り込み設定
				super.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00702 + ADD_0PJP);
				// 遷移先画面IDを設定
				commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
						JFUScreenConst.SCREEN_ID_FUW00702);
				// 遷移先画面名を設定
				commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
						JFUScreenConst.SCREEN_NAME_FUW00702);

				DEBUG_LOG.debug("----- FUW00701SFLogic_init 口座振替NG End -----");

				// 以降の処理はしない
				return true;
			}
			else
			{
				// クリアパスのステータスがOK
				DEBUG_LOG.debug("----- FUW00701SFLogic_init 口座振替OK Start -----");

				// ログインと確認するボタン押下処理
				login();
				next();

				String bankCd = clearPassInfoBean.sendMessageString(CommonInfoCFConst.BANK_CD_61, X31CWebConst.DATABEAN_GET_VALUE);
				if (BANK_CD_POSTAL.equals(bankCd))
				{
					// ゆうちょ銀行の場合、金融機関名にゆうちょ銀行をセット
					serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_BANK_NM, X31CWebConst.DATABEAN_SET_VALUE, YUCHO_BANK_NM);
				}

				// 金融機関名が取得できない場合は、ステータスを変更してエラー表示を行う
				if (JFUCommonUtil.isNull(serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_BANK_NM, X31CWebConst.DATABEAN_GET_VALUE)))
				{
					// クリアパスのステータス
					clearpassStatus = serviceInfoBean.sendMessageString(FUW00701SFConst.CLEAR_PASS_STATUS, X31CWebConst.DATABEAN_SET_VALUE, CLEARPASS_STATUS_ERR);
				}

				if (!CLEARPASS_STATUS_NORMAL.equals(clearpassStatus))
				{
					// クリアパスのステータスがNG
					DEBUG_LOG.debug("----- FUW00701SFLogic_init 口座振替NG(銀行未存在) Start -----");
					outputBusLog("----- FUW00701SFLogic_login：口座振替NG 銀行未存在エラー -----");

					// 支払方法をクリア
					serviceInfoBean.sendMessageString(FUW00701SFConst.PAY_WAY_SLCT, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
					// 遷移フラグをクリア
					redirectInfoBean.sendMessageString(CommonInfoCFConst.RED_TRANSFER_PTN_17, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

					// 割り込み設定
					super.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00702 + ADD_0PJP);
					// 遷移先画面IDを設定
					commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
							JFUScreenConst.SCREEN_ID_FUW00702);
					// 遷移先画面名を設定
					commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
							JFUScreenConst.SCREEN_NAME_FUW00702);

					DEBUG_LOG.debug("----- FUW00701SFLogic_init 口座振替NG(銀行未存在) End -----");

					// 以降の処理はしない
					return true;
				}

				// 確認画面に遷移させる
				// 割り込み設定
				super.setTransferPageId(JFUScreenConst.SCREEN_ID_FUW00703 + ADD_0PJP);
				// 遷移先画面IDを設定
				commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
						JFUScreenConst.SCREEN_ID_FUW00703);
				// 遷移先画面名を設定
				commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
						JFUScreenConst.SCREEN_NAME_FUW00703);

				DEBUG_LOG.debug("----- FUW00701SFLogic_init 口座振替OK End -----");

				// 以降の処理はしない
				return true;
			}
		}

		// ●申込番号(ログイン)にデフォルト値を設定
		X31CHashMap reqParams  = this.getRequestParams();
		if(reqParams.containsKey(KEY_MSKM_NO) && !JFUWebCommon.isNull((String)reqParams.get(KEY_MSKM_NO)))
		{
			// パラメータの値を設定
			serviceInfoBean.sendMessageString(FUW00701SFConst.MSKM_NO_LOGIN, X31CWebConst.DATABEAN_SET_VALUE, (String)reqParams.get(KEY_MSKM_NO));
		}
		else
		{
			// 未設定
			serviceInfoBean.sendMessageString(FUW00701SFConst.MSKM_NO_LOGIN, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		}

		// クリアパス押下回数クリア（初期表示用）
		serviceInfoBean.sendMessageString(FUW00701SFConst.CLEAR_PASS_PUSH_CNT, X31CWebConst.DATABEAN_SET_VALUE, FU_KFR_PUSH_COUNT);

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00701);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00701);

		DEBUG_LOG.debug("----- FUW00701SFLogic_init End -----");

		return true;
	}

	/**
	 * ログインボタン押下時の処理です。
	 * 
	 * <br>
	 * @return true
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean login() throws Exception
	{
		DEBUG_LOG.debug("----- FUW00701SFLogic_login Start -----");

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// 口座振替受付画面遷移フラグ
		String koufuriTransFlg = getkoufuriTransFlg();

		if (!KOUFURI_FLG_RET.equals(koufuriTransFlg) && !chkLoginInput())
		{
			// 画面項目入力チェックエラーの為、以降の処理は実施しない
			outputBusLog("----- FUW00701SFLogic_login：画面項目入力チェックエラー -----");
			return true;
		}

		//=====================================================================
		// 運用日付の設定
		//=====================================================================
		String opeDate = setFuOpedate(commonInfoBean);

		// 運用日付をセット
		serviceInfoBean.sendMessageString(FUW00701SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate);

		// クレジットカード事業コードとして 固定値 "2":FTTH事業 をセット
		serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_JIGYO_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00420_2);
		// 異動詳細コードに 固定値 "002":請求契約併合・分割・変更をセット
		serviceInfoBean.sendMessageString(FUW00701SFConst.IDO_RSV_DTL_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD01167_002);

		// サービスを呼び出す前にクレジットカード情報をクリア
		X31SDataBeanAccessArray lst_array = null;
		X31SDataBeanAccess tmp_bean = null;
		lst_array = serviceInfoBean.getDataBeanArray(FUW00701SFConst.CRECARD_COMP_LST);
		lst_array.clearArray();
		tmp_bean = getDataBeanZero(lst_array);

		// クレジットカード情報に１行目を設定する
		tmp_bean.sendMessageString(FUW00701SFConst.CRECARD_COMP_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, JFUStrConst.S_ZERO);
		tmp_bean.sendMessageString(FUW00701SFConst.CRECARD_COMP_ALI_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, SELECT_DEFAULT_MSG);
		tmp_bean.sendMessageString(FUW00701SFConst.CREDIT_KOKAN_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, JFUStrConst.EMPTY);
		tmp_bean.sendMessageString(FUW00701SFConst.MEMBSTR_NO_15_01, X31CWebConst.DATABEAN_ADD_VALUE, JFUStrConst.EMPTY);
		tmp_bean.sendMessageString(FUW00701SFConst.MEMBSTR_NO_12_01, X31CWebConst.DATABEAN_ADD_VALUE, JFUStrConst.EMPTY);

		// クレジットカード番号をクリアする
		serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_NO1, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_NO2, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_NO3, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_NO4, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// クリアパス返却値をクリアする
		serviceInfoBean.sendMessageString(FUW00701SFConst.RESULT_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceInfoBean.sendMessageString(FUW00701SFConst.ERROR_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceInfoBean.sendMessageString(FUW00701SFConst.TOKEN, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceInfoBean.sendMessageString(FUW00701SFConst.CARD_NO_UNDER_4, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// ●サービス呼出処理
		Map paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, FUSV_ID_INIT);

		FUSV0316_FUSV0316OPDBMapper mapper = new FUSV0316_FUSV0316OPDBMapper();
		// サービス条件格納用マップ
		HashMap inputMap = new HashMap<String, Map<String, String>>();
		// サービス結果格納用マップ
		HashMap outputMap = new HashMap<String, String>();

		// ●上りマッピング
		X31SDataBeanAccess[] paramBean = { serviceInfoBean, commonInfoBean };

		// 開通前支払方法変更ログインチェックCC
		mapper.setFUSV031601CC(paramBean, inputMap);
		// 支払方法変更受付関連チェックCC
		mapper.setFUSV031602CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 同一請求先照会
		mapper.setFUSV031601SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 請求契約一意照会
		mapper.setFUSV031602SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 請求抑止一覧照会（口座番号表示抑止制御）
		mapper.setFUSV031603SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 口座一意照会
		mapper.setFUSV031604SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// クレジットカード一意照会
		mapper.setFUSV031605SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// クレジットカード会社一覧照会
		mapper.setFUSV031606SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 異動予約一覧照会
		mapper.setFUSV031607SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// マンション物件一意照会
		mapper.setFUSV031608SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 課金先一覧照会
		mapper.setFUSV031609SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 金融機関一意照会
		mapper.setFUSV031610SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 業務パラメータ管理一意照会
		mapper.setFUSV031611SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 初期費用一覧照会CC
		mapper.setFUSV031603CC(paramBean, inputMap);

		try
		{
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// エラー時はログに入力された申込番号(受付番号)を出力する。
			String mskmNoLogin = serviceInfoBean.sendMessageString(FUW00701SFConst.MSKM_NO_LOGIN, X31CWebConst.DATABEAN_GET_VALUE);
			outputBusLog("----- FUW00701SFLogic_login：申込番号(受付番号)：" + mskmNoLogin + " -----");

			// ログインチェック
			if (jdgeLogin(se))
			{
				// 関連チェックエラー判定
				chkServiceErrorLogin(se);

				// サービス契約ステータスチェック
				if(!chkSvcStat(se))
				{
					// 上記エラーでなく、サービス契約ステータスのエラーの場合は
					// ログイン画面に戻り、開通後メッセージに切り替える
					outputBusLog("----- FUW00701SFLogic_login：開通後お客様と判定 -----");
					serviceInfoBean.sendMessageString(FUW00701SFConst.TEL_NO_LOGIN, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
					serviceInfoBean.sendMessageString(FUW00701SFConst.AF_OPEN_FLG, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00002_1);
					return true;
				}
				else
				{
					// 上記以外
					outputBusLog("----- FUW00701SFLogic_login：システムエラー -----");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
				}
			}
			else
			{
				// ログインチェックでエラーの場合はログイン画面に戻り、
				// 電話番号の入力値を空にして、エラーメッセージを表示する
				serviceInfoBean.sendMessageString(FUW00701SFConst.TEL_NO_LOGIN, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
				return true;
			}
		}

		// ●下りマッピング
		X31SDataBeanAccess[] paramBeanOut = { serviceInfoBean };

		// 開通前支払方法変更ログインチェックCC
		mapper.getFUSV031601CC(paramBeanOut, outputMap);
		// 開通前支払方法変更関連チェックCC
		mapper.getFUSV031602CC(paramBeanOut, outputMap);

		// 同一請求先照会
		mapper.getFUSV031601SC(paramBeanOut, outputMap);
		// 支払方法情報請求契約一覧照会
		mapper.getFUSV031602SC(paramBeanOut, outputMap);
		// 請求抑止一覧照会（口座番号表示抑止制御）
		mapper.getFUSV031603SC(paramBeanOut, outputMap);

		// 請求方法コード
		String seikyWayCd = serviceInfoBean.sendMessageString(FUW00701SFConst.NOW_SEIKY_WAY_CD, X31CWebConst.DATABEAN_GET_VALUE);
		// 口座一意照会
		mapper.getFUSV031604SC(paramBeanOut, outputMap, seikyWayCd);

		// クレジットカード一意照会
		mapper.getFUSV031605SC(paramBeanOut, outputMap);
		// クレジットカード会社一覧照会
		mapper.getFUSV031606SC(paramBeanOut, outputMap);
		// 異動予約一覧照会
		mapper.getFUSV031607SC(paramBeanOut, outputMap);
		// マンション物件一意照会
		mapper.getFUSV031608SC(paramBeanOut, outputMap);
		// 課金先一覧照会（請求契約番号/サービス契約番号）
		mapper.getFUSV031609SC(paramBeanOut, outputMap);
		// 金融機関一意照会
		mapper.getFUSV031610SC(paramBeanOut, outputMap);

		// ●料金表
		// 料金表表示現在日設定処理
		JFUWebCommon.setPrcDspNowDay(this);
		// 料金表マッピング
		JFUWebCommon.setPrcInfoArea(serviceInfoBean, outputMap, null, FUSV031603CC, JFUScreenConst.SCREEN_ID_FUW00701);

		// ●無料フラグを設定
		serviceInfoBean.sendMessageBoolean(FUW00701SFConst.MRYO_FLG, X31CWebConst.DATABEAN_SET_VALUE, setFreeFlg(outputMap));

		// ●クレジットカード払いの月年選択リストを作成
		setMonthYearList(serviceInfoBean);

		// ●契約者名、契約サービス名を設定
		setKeiyakuInfo(serviceInfoBean);

		// ●現在の支払方法情報を設定
		setNowPayWayInfo(serviceInfoBean);

		// ●mineo情報を設定
		setMineoInfo(serviceInfoBean, outputMap);

		// ●共有フォームBeanに設定
		setCommonInfoBean(outputMap);

		// ●サービス契約情報
		setSvcKeiInfoBean(outputMap);

		// ●アンケート情報を設定
		setAnqInfo();

		// ●設備卸チェック
		JFUWebCommon.checkOrosi(this);

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00702);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00702);

		DEBUG_LOG.debug("----- FUW00701SFLogic_login End -----");

		return true;
	}

	/**
	 * 確認するボタン押下時の処理です。
	 * 
	 * <br>
	 * @return true
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean next() throws Exception
	{
		DEBUG_LOG.debug("----- FUW00701SFLogic_next Start -----");

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		String payWaySlct = serviceInfoBean.sendMessageString(FUW00701SFConst.PAY_WAY_SLCT, X31CWebConst.DATABEAN_GET_VALUE);
		if(JFUWebCommon.isNull(payWaySlct))
		{
			outputBusLog("----- FUW00701SFLogic_next：支払方法未選択エラー -----");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// ＷＥＢ変更情報
		X31SDataBeanAccess webChgInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		// 現顧客契約情報
		X31SDataBeanAccess genCustKeiInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0);

		// クレジットカード払いの場合、トークン取得結果判定を実施する
		if (JFUStrConst.PAYWAY_CREDIT.equals(payWaySlct))
		{
			// クリアパスのトークン取得結果判定
			if (!chkTokenResult())
			{
				outputBusLog("----- FUW00701SFLogic_next クリアパストークン取得エラー START -----");

				outputBusLog("sysid     = " + genCustKeiInfoBean.sendMessageString(CommonInfoCFConst.SYSID_22, X31CWebConst.DATABEAN_GET_VALUE));
				outputBusLog("result_cd = " + serviceInfoBean.sendMessageString(FUW00701SFConst.RESULT_CD, X31CWebConst.DATABEAN_GET_VALUE));
				outputBusLog("error_cd  = " + serviceInfoBean.sendMessageString(FUW00701SFConst.ERROR_CD, X31CWebConst.DATABEAN_GET_VALUE));

				if (JFUWebCommon.isNull(serviceInfoBean.sendMessageString(FUW00701SFConst.TOKEN, X31CWebConst.DATABEAN_GET_VALUE)))
				{
					outputBusLog("その他エラー：トークンが未設定");
				}
				if (JFUWebCommon.isNull(serviceInfoBean.sendMessageString(FUW00701SFConst.CARD_NO_UNDER_4, X31CWebConst.DATABEAN_GET_VALUE)))
				{
					outputBusLog("その他エラー：カード番号下4桁が未設定");
				}

				outputBusLog("----- FUW00701SFLogic_next クリアパストークン取得エラー END -----");

				return true;
			}
		}

		// クリア処理
		if (JFUStrConst.PAYWAY_CREDIT.equals(payWaySlct))
		{
			// クレジットカード払い選択時
			// ステータスをクリア
			serviceInfoBean.sendMessageString(FUW00701SFConst.CLEAR_PASS_STATUS, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		}
		else if (JFUStrConst.PAYWAY_BANK_POSTAL.equals(payWaySlct))
		{
			// 口座振替選択時
			// クレジットカード情報をクリア
			serviceInfoBean.sendMessageString(FUW00701SFConst.CARD_SELECTED_IDX, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_NO1, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_NO2, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_NO3, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_NO4, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			serviceInfoBean.sendMessageString(FUW00701SFConst.CUST_NM_SLCT, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_MEIGIN_SEI, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_MEIGIN_NM, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_YK_KIGEN_MONTH, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_YK_KIGEN_YEAR, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		}

		// ●サービス呼び出し
		Map paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, FUSV_ID_MSKM);

		// DataBean-BPマッピング
		FUSV0317_FUSV0317OPDBMapper mapper = new FUSV0317_FUSV0317OPDBMapper();

		// サービス検索条件格納用マップ
		HashMap inputMap = new HashMap<String, Map<String, String>>();
		// サービス処理結果格納用マップ
		HashMap outputMap = new HashMap<String, String>();

		X31SDataBeanAccess[] paramBean = { commonInfoBean, serviceInfoBean };

		// ●サービスインターフェイスパラメータの設定
		setInParamFusv0317();

		// ●上りマッピング
		// 開通前支払方法変更関連チェックCC
		mapper.setFUSV031701CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 初回オーソリ依頼SC
		mapper.setFUSV031701SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 申込内容承認登録SC
		mapper.setFUSV031702SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 審査済クレジットカード登録SC
		mapper.setFUSV031703SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 請求口座追加CC
		mapper.setFUSV031702CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 請求契約一意照会SC
		mapper.setFUSV031709SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 請求支払先変更SC
		mapper.setFUSV031704SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 請求契約一意照会SC
		mapper.setFUSV031705SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 請求契約内容変更SC
		mapper.setFUSV031706SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 進捗登録SC
		mapper.setFUSV031707SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 申込明細照査・後続業務依頼SC
		mapper.setFUSV031708SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);

		try
		{
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// エラーチェック
			chkServiceErrorNextMskm(se, KBN_NEXT);
		}

		X31SDataBeanAccess[] paramBeanOut = { commonInfoBean, serviceInfoBean };

		// 支払方法選択
		String payway = serviceInfoBean.sendMessageString(FUW00701SFConst.PAY_WAY_SLCT, X31CWebConst.DATABEAN_GET_VALUE);

		// クレジットカード払いの場合
		if (JFUStrConst.PAYWAY_CREDIT.equals(payway))
		{
			// ●オーソリ結果チェック

			// 初回オーソリ依頼SC
			mapper.getFUSV031701SC(paramBeanOut, outputMap);

			// クリアパス処理結果コード
			String authorityStat = serviceInfoBean.sendMessageString(FUW00701SFConst.CR_RESULTCODE, X31CWebConst.DATABEAN_GET_VALUE);

			// 初回オーソリ依頼の処理結果コードの先頭1桁目が"0"以外の場合
			if (authorityStat == null || authorityStat.length() == 0
					|| !JFUStrConst.S_ZERO.equals(authorityStat.substring(JFUStrConst.I_ZERO, JFUStrConst.I_ONE)))
			{
				// 結果コード
				String resultCd = null;
				// 結果コード詳細
				String detailCd = null;

				if (authorityStat != null && authorityStat.length() == JFUStrConst.I_SEVEN)
				{
					// 結果コード
					resultCd = authorityStat.substring(JFUStrConst.I_ZERO, JFUStrConst.I_THREE);
					// 結果コード詳細
					detailCd = authorityStat.substring(JFUStrConst.I_THREE, JFUStrConst.I_SEVEN);

					outputBusLog("----- FUW00701SFLogic_next 初回オーソリ依頼 エラー情報 START -----");
					outputBusLog("SYSID　　　　 ："
							+ genCustKeiInfoBean.sendMessageString(CommonInfoCFConst.SYSID_22, X31CWebConst.DATABEAN_GET_VALUE));
					outputBusLog("結果コード　　：" + resultCd);
					outputBusLog("結果コード詳細：" + detailCd);
					outputBusLog("----- FUW00701SFLogic_next 初回オーソリ依頼 エラー情報 END -----");
				}

				if (RESULT_CD_100.equals(resultCd) && RESULT_CD_100_DETAIL_0100.equals(detailCd))
				{
					// クレジットカード会社エラー表示
					JFUWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1880_TW, ERR_MSG_AREA_ID_COMPANY);
				}
				else if (RESULT_CD_100.equals(resultCd) && RESULT_CD_100_DETAIL_0101.equals(detailCd))
				{
					// 有効期限エラー表示
					JFUWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1890_TW, ERR_MSG_AREA_ID_PREIOD);
				}
				else if (RESULT_CD_100.equals(resultCd) && RESULT_CD_100_DETAIL_0107.equals(detailCd))
				{
					// クレジットカード会社エラー表示
					JFUWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1880_TW, ERR_MSG_AREA_ID_COMPANY);
				}
				else if (RESULT_CD_100.equals(resultCd) && RESULT_CD_100_DETAIL_0110.equals(detailCd))
				{
					// クレジットカード会社エラー表示
					JFUWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1880_TW, ERR_MSG_AREA_ID_COMPANY);
				}
				else if (RESULT_CD_100.equals(resultCd) && RESULT_CD_100_DETAIL_0121.equals(detailCd))
				{
					// クレジットカード番号エラー表示
					JFUWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF0400_TW, new String[] { ERR_MSG_PARAM_CREDIT }, ERR_MSG_AREA_ID_CRECARD_NO);
				}
				else if (RESULT_CD_100.equals(resultCd) && RESULT_CD_100_DETAIL_0200.equals(detailCd))
				{
					// クレジットカード会社エラー表示
					JFUWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1880_TW, ERR_MSG_AREA_ID_COMPANY);
				}
				else if (RESULT_CD_200.equals(resultCd) && RESULT_CD_200_DETAIL_0208.equals(detailCd))
				{
					// 有効期限エラー表示
					JFUWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1890_TW, ERR_MSG_AREA_ID_PREIOD);
				}
				else
				{
					// クレジットカード会社エラー表示
					JFUWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, ERR_MSG_AREA_ID_COMPANY);
				}

				return true;
			}

			//変更後のクレジット会社名
			// クレジットカード会社選択値（index）
			String co = nullToZero(serviceInfoBean.sendMessageString(FUW00701SFConst.CARD_SELECTED_IDX, X31CWebConst.DATABEAN_GET_VALUE));

			// NULL値対策
			int idx = Integer.parseInt(co);

			// クレジットカード会社リスト
			X31SDataBeanAccessArray creBean_array = serviceInfoBean.getDataBeanArray(FUW00701SFConst.CRECARD_COMP_LST);
			if (creBean_array.getCount() == 0)
			{
				creBean_array.addDataBean();
			}

			X31SDataBeanAccess crecard_comp_list = creBean_array.getDataBean(0);
			// 選択したクレジットカード会社コードを保持
			String crecardCompAli =
					crecard_comp_list.sendMessageString(FUW00701SFConst.CRECARD_COMP_ALI_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, idx);
			serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_CRECARD_COMP_NM, X31CWebConst.DATABEAN_SET_VALUE, crecardCompAli);

			// 選択したクレジットカード会社コードに紐付くクレジット交換コードを保持
			String creditKokanCd =
					crecard_comp_list.sendMessageString(FUW00701SFConst.CREDIT_KOKAN_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, idx);
			serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_CREDIT_KOKAN_CD, X31CWebConst.DATABEAN_SET_VALUE, creditKokanCd);

			//表示用クレジットカード番号（ハイフン・マスク編集）
			String chafCrecadNo = getCrecadNo();
			serviceInfoBean.sendMessageString(FUW00701SFConst.DSP_CRECARD_NO, X31CWebConst.DATABEAN_SET_VALUE,
					JZMFormatForMask.crecardExcBL1(chafCrecadNo));

			//表示用クレジットカードの有効期限（年月編集）
			String mmYyyy = getMonthYearListValue(serviceInfoBean);
			serviceInfoBean.sendMessageString(FUW00701SFConst.DSP_CRECARD_YK_KIGEN, X31CWebConst.DATABEAN_SET_VALUE,
					mmYyyy.substring(0, 2) + JFUStrConst.TUKI + JFUStrConst.HALF_SPACE + mmYyyy.substring(2, 6) + JFUStrConst.NEN);

			// カード種別
			serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_CRECARD_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE,
					serviceInfoBean.sendMessageString(FUW00701SFConst.CR_CARD_TYPE, X31CWebConst.DATABEAN_GET_VALUE));

			// イシュア区分
			serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_CRDT_ISSUER_DIV, X31CWebConst.DATABEAN_SET_VALUE,
					serviceInfoBean.sendMessageString(FUW00701SFConst.CR_ISSUER_CLASS, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00703);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00703);

		DEBUG_LOG.debug("----- FUW00701SFLogic_next End -----");

		return true;
	}

	/**
	 * 戻るボタン押下時の処理です。
	 * <br>
	 * @return boolean true(固定)
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		DEBUG_LOG.debug("----- FUW00701SFLogic_back Start -----");

		// 共有フォームBeanを取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBeanを取得
		X31SDataBeanAccess bean = getServiceFormBean();

		X31SDataBeanAccess webNewInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		X31SDataBeanAccess redirectInfoBean = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO).getDataBean(0);

		// 口座振替受付画面遷移フラグをクリア
		redirectInfoBean.sendMessageString(CommonInfoCFConst.RED_TRANSFER_PTN_17, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// クリアパス返却値をクリアする
		bean.sendMessageString(FUW00701SFConst.RESULT_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		bean.sendMessageString(FUW00701SFConst.ERROR_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		bean.sendMessageString(FUW00701SFConst.TOKEN, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		bean.sendMessageString(FUW00701SFConst.CARD_NO_UNDER_4, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00702);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00702);

		DEBUG_LOG.debug("----- FUW00701SFLogic_back End -----");

		return true;
	}

	/**
	 * 申し込むボタン押下時の処理です。
	 * 
	 * <br>
	 * @return true
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean mskm() throws Exception
	{
		DEBUG_LOG.debug("----- FUW00701SFLogic_mskm Start -----");

		// 共有フォームBeanを取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBeanを取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		String payWaySlct = serviceInfoBean.sendMessageString(FUW00701SFConst.PAY_WAY_SLCT, X31CWebConst.DATABEAN_GET_VALUE);
		if(JFUWebCommon.isNull(payWaySlct))
		{
			outputBusLog("----- FUW00701SFLogic_mskm：支払方法未選択エラー -----");
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
		}

		// 運用日付を設定
		String operateDate = JFUWebCommon.getOpeDate(this, null);
		serviceInfoBean.sendMessageString(FUW00701SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, operateDate);

		// クレジットカード事業コードに「"2":FTTH事業」を設定
		serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_JIGYO_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00420_2);

		// ●サービス呼び出し
		Map paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, FUSV_ID_MSKM);

		// DataBean-BPマッピング
		FUSV0317_FUSV0317OPDBMapper mapper = new FUSV0317_FUSV0317OPDBMapper();

		// サービス検索条件格納用マップ
		HashMap inputMap = new HashMap<String, Map<String, String>>();
		// サービス処理結果格納用マップ
		HashMap outputMap = new HashMap<String, String>();

		X31SDataBeanAccess[] paramBean = { commonInfoBean, serviceInfoBean };

		// ●上りマッピング(初回オーソリ依頼SCは呼ばない)
		// 開通前支払方法変更関連チェックCC
		mapper.setFUSV031701CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 申込内容承認登録SC
		mapper.setFUSV031702SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 審査済クレジットカード登録SC
		mapper.setFUSV031703SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 請求口座追加CC
		mapper.setFUSV031702CC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 請求契約一意照会SC
		mapper.setFUSV031709SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 請求支払先変更SC
		mapper.setFUSV031704SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 請求契約一意照会SC
		mapper.setFUSV031705SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		// 請求契約内容変更SC
		mapper.setFUSV031706SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 進捗登録SC
		mapper.setFUSV031707SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// 申込明細照査・後続業務依頼SC
		mapper.setFUSV031708SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		try
		{
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// エラーチェック
			chkServiceErrorNextMskm(se, KBN_MSKM);
		}

		// ※申込完了メールは送信しない

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00704);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00704);

		DEBUG_LOG.debug("----- FUW00701SFLogic_mskm End -----");

		return true;
	}

	/**
	 * 口座振替申込ボタン押下時の処理です。
	 * <br>
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	public boolean kfrMsk() throws Exception
	{
		// ビジネスログへの出力
		outputBusLog("----- FUW00701Logic_kfrMsk 口座振替画面起動 -----");

		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBean取得
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		X31SDataBeanAccess webNewInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		X31SDataBeanAccess redirectInfoBean = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO).getDataBean(0);

		// 口座振替受付画面遷移フラグをサービスフォームBeanに設定
		redirectInfoBean.sendMessageString(CommonInfoCFConst.RED_TRANSFER_PTN_17, X31CWebConst.DATABEAN_SET_VALUE, KOUFURI_FLG_TO);

		// ===================================================================
		// 画面間引き継ぎ情報の生成
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// 申込番号(ログイン)
		dataMap.put(FUW00701SFConst.MSKM_NO_LOGIN,
				serviceFormBean.sendMessageString(FUW00701SFConst.MSKM_NO_LOGIN, X31CWebConst.DATABEAN_GET_VALUE));
		// 電話番号(ログイン)
		dataMap.put(FUW00701SFConst.TEL_NO_LOGIN,
				serviceFormBean.sendMessageString(FUW00701SFConst.TEL_NO_LOGIN, X31CWebConst.DATABEAN_GET_VALUE));

		// 画面間引き継ぎ情報の設定
		JCCWebCommon.setScreenInfo(this, JFUScreenConst.SCREEN_ID_FUW00701, dataMap);
		// ===================================================================

		// 遷移先画面IDを設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00701);
		// 遷移先画面名を設定
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00701);

		return true;
	}

	/**
	 * 口座振替リダイレクト処理(他サイト連携)です。
	 * <br>
	 * @return true(固定)
	 */
	public boolean redirectKouzaFurikae()
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// 遷移先画面ＩＤに口座振替のosidを指定して他サイト連携
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, OSID_FUIFE140);

		outputBusLog("----- FUW00701SFLogic_redirectKouzaFurikae 口座振替画面起動 -----");

		return true;
	}

	/**
	 * 口座振替受付へのリダイレクト処理です。
	 * <br>
	 * 口座振替受付画面への遷移に必要な情報をサービスフォームBeanに設定します。
	 */
	private void setKouzaFurikaeRedirectData()
	{
		// 共有フォームBeanを取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBeanを取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// ＷＥＢ新規情報
		X31SDataBeanAccess webNewInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		// 支払方法情報
		X31SDataBeanAccess paywayInfoBean = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.PAYWAY_INFO).getDataBean(0);

		// ＷＥＢ変更情報
		X31SDataBeanAccess webChgInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		// 現顧客契約情報
		X31SDataBeanAccess genCustKeiInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0);

		// アプリケーションプロパティから事業者コードを取得
		String shopCd = JFUWebCommon.getApplicationConst(JFUStrConst.FU_KFR_SHOP_CD_BF_OPEN);
		String securityKey = JFUWebCommon.getApplicationConst(JFUStrConst.FU_KFR_BF_OPEN_SECURITYKEY);
		String customerNumber = JFUWebCommon.getApplicationConst(JFUStrConst.FU_KFR_CUSTOMER_NUMBER);

		// 契約者カナ
		String custNmKana = genCustKeiInfoBean.sendMessageString(CommonInfoCFConst.CUST_KANA_22, X31CWebConst.DATABEAN_GET_VALUE);

		// 契約者カナ氏名  30文字まで(31文字以降は切り取る
		if (!JFUCommonUtil.isNull(custNmKana) && custNmKana.length() > 30)
		{
			custNmKana = custNmKana.substring(0, 30);
		}

		// SYSID取得
		String sysid = genCustKeiInfoBean.sendMessageString(CommonInfoCFConst.SYSID_22, X31CWebConst.DATABEAN_GET_VALUE);
		// SYSIDを英数字を大文字に変換
		String sysidUpper = sysid.toUpperCase();

		// 現在の押下回数を取得
		String pushCnt = serviceInfoBean.sendMessageString(FUW00701SFConst.CLEAR_PASS_PUSH_CNT, X31CWebConst.DATABEAN_GET_VALUE);
		if (JFUWebCommon.isNull(pushCnt))
		{
			pushCnt = paywayInfoBean.sendMessageString(CommonInfoCFConst.KFR_OUKA_COUNT_15, X31CWebConst.DATABEAN_GET_VALUE);

			if(JFUWebCommon.isNull(pushCnt))
			{
				pushCnt = FU_KFR_PUSH_COUNT;
			}
		}

		// カウントアップ
		pushCnt = String.valueOf(Long.valueOf(pushCnt) + 1);

		// 現在の押下回数を設定
		serviceInfoBean.sendMessageString(FUW00701SFConst.CLEAR_PASS_PUSH_CNT, X31CWebConst.DATABEAN_SET_VALUE, pushCnt);
		paywayInfoBean.sendMessageString(CommonInfoCFConst.KFR_OUKA_COUNT_15, X31CWebConst.DATABEAN_SET_VALUE, pushCnt);

		// 付加情報作成
		String addInfo =
				sysidUpper + JFUStrConst.HALF_SPACE + JFUWebCommon.getApplicationConst(JFUStrConst.FU_KFR_SVKEI_NUMBER)
				+ JFUStrConst.HALF_SPACE + pushCnt + JFUStrConst.HALF_SPACE + this.getSessionId();

		// ランダムキー
		String randomKey = JFUCommonUtil.createRondomKey();

		// 暗号化前パラメータを出力
		DEBUG_LOG.debug("---------- 暗号化前パラメータを出力 START ----------");
		DEBUG_LOG.debug("shop_cd = " + shopCd);
		DEBUG_LOG.debug("security_key = " + securityKey);
		DEBUG_LOG.debug("customer_number = " + customerNumber);
		DEBUG_LOG.debug("name_kana = " + custNmKana);
		DEBUG_LOG.debug("add_info = " + addInfo);
		DEBUG_LOG.debug("ck = " + randomKey);
		DEBUG_LOG.debug("---------- 暗号化前パラメータを出力 END ----------");

		// 文字コード変換＆暗号化
		shopCd = charCodeChange(randomKey, shopCd, false, false);
		securityKey = charCodeChange(randomKey, securityKey, true, false);
		customerNumber = charCodeChange(randomKey, customerNumber, false, false);
		custNmKana = charCodeChange(randomKey, custNmKana, true, true);
		String addInfoChg = charCodeChange(randomKey, addInfo, true, false);
		String ck = getCodeCk(randomKey);

		// 暗号化後パラメータを出力
		DEBUG_LOG.debug("---------- 暗号化後パラメータを出力 START ----------");
		DEBUG_LOG.debug("shop_cd = " + shopCd);
		DEBUG_LOG.debug("security_key = " + securityKey);
		DEBUG_LOG.debug("customer_number = " + customerNumber);
		DEBUG_LOG.debug("name_kana = " + custNmKana);
		DEBUG_LOG.debug("add_info = " + addInfoChg);
		DEBUG_LOG.debug("ck = " + randomKey);
		DEBUG_LOG.debug("---------- 暗号化後パラメータを出力 END ----------");

		//サービスフォームBeanに値を設定
		serviceInfoBean.sendMessageString(FUW00701SFConst.SHOP_CD, X31CWebConst.DATABEAN_SET_VALUE, shopCd);
		serviceInfoBean.sendMessageString(FUW00701SFConst.SECURITY_KEY, X31CWebConst.DATABEAN_SET_VALUE, securityKey);
		serviceInfoBean.sendMessageString(FUW00701SFConst.CUSTOMER_NUMBER, X31CWebConst.DATABEAN_SET_VALUE, customerNumber);
		serviceInfoBean.sendMessageString(FUW00701SFConst.NAME_KANA, X31CWebConst.DATABEAN_SET_VALUE, custNmKana);
		serviceInfoBean.sendMessageString(FUW00701SFConst.ADD_INFO, X31CWebConst.DATABEAN_SET_VALUE, addInfoChg);
		serviceInfoBean.sendMessageString(FUW00701SFConst.CK, X31CWebConst.DATABEAN_SET_VALUE, ck);
	}

	/**
	 * 口座振替遷移判定処理を行います。
	 * 
	 * @return 処理結果 :true なら口座振替画面へ遷移
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public boolean isKouzahurikae() throws Exception
	{
		// 口座振替画面遷移フラグを取得
		String koufuri_flg = getkoufuriTransFlg();

		// POST情報
		X31CHashMap postedRequests = this.getRequestParams();

		Object tmp_obj = null;
		String action = null;

		tmp_obj = postedRequests.get(POST_ID_ACTION);
		action = (tmp_obj == null) ? (JFUStrConst.EMPTY) : (tmp_obj.toString().trim());

		if (KOUFURI_FLG_TO.equals(koufuri_flg) && action.compareTo(ACTION_BF_OPEN_KOUZA_CHANGE) != 0)
		{
			return true;
		}

		return false;
	}

	/**
	 * 口座振替戻り判定処理を行います。
	 * 
	 * @return 処理結果 :true なら口座振替画面へ遷移
	 * @throws Exception 例外
	 */
	@SuppressWarnings("unchecked")
	public boolean isKouzahurikaeRet() throws Exception
	{
		// POST情報
		X31CHashMap postedRequests = this.getRequestParams();

		Object tmp_obj = null;
		String action = null;

		tmp_obj = postedRequests.get(POST_ID_ACTION);
		action = (tmp_obj == null) ? (JFUStrConst.EMPTY) : (tmp_obj.toString().trim());

		if (action.compareTo(ACTION_BF_OPEN_KOUZA_CHANGE) == 0)
		{
			return true;
		}

		return false;
	}

	/**
	 * 口座振替受付(キャンセルボタン押下)からのリダイレクト処理です。
	 * 
	 * <br>
	 */
	private void kouzaFurikaeCancelRedirect()
	{
		// 共有フォームBeanを取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBean取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// ＷＥＢ変更情報
		X31SDataBeanAccess webChgInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		// クリアパス情報
		X31SDataBeanAccess clearPassInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.CLEAR_PASS_INFO).getDataBean(0);

		X31SDataBeanAccess webNewInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		X31SDataBeanAccess redirectInfoBean = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO).getDataBean(0);

		// 口座振替画面遷移フラグを設定
		redirectInfoBean.sendMessageString(CommonInfoCFConst.RED_TRANSFER_PTN_17, X31CWebConst.DATABEAN_SET_VALUE, KOUFURI_FLG_RET);
		serviceInfoBean.sendMessageString(FUW00701SFConst.KOUFURI_TRANS_FLG, X31CWebConst.DATABEAN_SET_VALUE, KOUFURI_FLG_RET);

		// クリアパスのステータス
		clearPassInfoBean.sendMessageString(CommonInfoCFConst.STATUS_61, X31CWebConst.DATABEAN_SET_VALUE, CLEARPASS_STATUS_CANCEL);
	}

	/**
	 * 口座振替受付からのリダイレクト処理です。
	 * <br>
	 * 口座振替受付画面からの遷移に必要な情報をサービスフォームBeanに設定します。
	 * <br>
	 * @return true(固定)
	 */
	private void setKouzaFurikaeRedirectRetData()
	{
		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBean取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		X31SDataBeanAccess webNewInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		X31SDataBeanAccess redirectInfoBean = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO).getDataBean(0);

		// 口座振替画面遷移フラグを設定
		redirectInfoBean.sendMessageString(CommonInfoCFConst.RED_TRANSFER_PTN_17, X31CWebConst.DATABEAN_SET_VALUE, KOUFURI_FLG_RET);
		serviceInfoBean.sendMessageString(FUW00701SFConst.KOUFURI_TRANS_FLG, X31CWebConst.DATABEAN_SET_VALUE, KOUFURI_FLG_RET);

		// 復号化と文字コード変換
		setKozaParams();
	}

	/**
	 * 口座振替のパラメータを取得し、復号化と文字コード変換を行います。
	 * 
	 * <br>
	 */
	@SuppressWarnings("unchecked")
	private void setKozaParams()
	{
		// 共有フォームBeanを取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();

		// ＷＥＢ変更情報
		X31SDataBeanAccess webChgInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		// 現顧客契約情報
		X31SDataBeanAccess genCustKeiInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0);
		// クリアパス情報
		X31SDataBeanAccess clearPassInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.CLEAR_PASS_INFO).getDataBean(0);

		// POST情報
		X31CHashMap postedRequests = this.getRequestParams();

		// ●パラメータ(復号化前)の取得
		// 事業者コード
		String shopCd = (String)postedRequests.get(BODY_KEY_SHOP_CD);
		// お客様番号
		String customerNumber = (String)postedRequests.get(BODY_KEY_CUSTMOER_NUMBER);
		// 契約者カナ氏名
		String nameKana = (String)postedRequests.get(BODY_KEY_NAME_KANA);
		// クリアパス取扱年月日
		String clearpassDate = (String)postedRequests.get(BODY_KEY_CLEARPASS_DATE);
		// クリアパス取扱時刻
		String clearpassTime = (String)postedRequests.get(BODY_KEY_CLEARPASS_TIME);
		// クリアパス取扱番号
		String clearpassNumber = (String)postedRequests.get(BODY_KEY_CLEARPASS_NUMBER);
		// 金融機関取扱年月日
		String bankDate = (String)postedRequests.get(BODY_KEY_BANK_DATE);
		// 金融機関取扱時刻
		String bankTime = (String)postedRequests.get(BODY_KEY_BANK_TIME);
		// 金融機関取扱番号
		String bankNumber = (String)postedRequests.get(BODY_KEY_BANK_NUMBER);
		// 銀行コード
		String bankCd = (String)postedRequests.get(BODY_KEY_BANK_CD);
		// 支店コード
		String branchCd = (String)postedRequests.get(BODY_KEY_BRANCH_CD);
		// 預金種目
		String depoditItem = (String)postedRequests.get(BODY_KEY_DEPODIT_ITEM);
		// 口座番号
		String accountNumber = (String)postedRequests.get(BODY_KEY_ACCOUNT_NUMBER);
		// 口座名義人（カナ）
		String accountHolder = (String)postedRequests.get(BODY_KEY_ACCOUNT_HOLDER);
		// ステータス
		String status = (String)postedRequests.get(BODY_KEY_STATUS);
		// 処理結果コード
		String resultCd = (String)postedRequests.get(BODY_KEY_RESULT_CD);
		// メッセージ
		String message = (String)postedRequests.get(BODY_KEY_MESSAGE);
		// 付加情報
		String addInfo = (String)postedRequests.get(BODY_KEY_ADD_INFO);
		// 暗号化キー取得
		String ck = (String)postedRequests.get(BODY_KEY_CK_KOUZA);

		// SYSID
		String sysid = genCustKeiInfoBean.sendMessageString(CommonInfoCFConst.SYSID_22, X31CWebConst.DATABEAN_GET_VALUE);

		outputBusLog("----- FUW00701SFLogic 口座振替画面からの戻り値 START -----");
		outputBusLog("sysid = " + sysid);
		outputBusLog("status = " + status);
		outputBusLog("----- FUW00701SFLogic 口座振替画面からの戻り値 END -----");

		// パラメータをログに出力
		DEBUG_LOG.debug("----- FUW00701SFLogic 復号化前のパラメータを出力 START -----");
		DEBUG_LOG.debug("ck = " + ck);
		DEBUG_LOG.debug("shop_cd=" + shopCd);
		DEBUG_LOG.debug("customer_number=" + customerNumber);
		DEBUG_LOG.debug("name_kana=" + nameKana);
		DEBUG_LOG.debug("clearpass_date=" + clearpassDate);
		DEBUG_LOG.debug("clearpass_time=" + clearpassTime);
		DEBUG_LOG.debug("clearpass_number=" + clearpassNumber);
		DEBUG_LOG.debug("bank_date=" + bankDate);
		DEBUG_LOG.debug("bank_time=" + bankTime);
		DEBUG_LOG.debug("bank_number=" + bankNumber);
		DEBUG_LOG.debug("bank_cd=" + bankCd);
		DEBUG_LOG.debug("branch_cd=" + branchCd);
		DEBUG_LOG.debug("depodit_item=" + depoditItem);
		DEBUG_LOG.debug("account_number=" + accountNumber);
		DEBUG_LOG.debug("account_holder=" + accountHolder);
		DEBUG_LOG.debug("status=" + status);
		DEBUG_LOG.debug("result_cd=" + resultCd);
		DEBUG_LOG.debug("message=" + message);
		DEBUG_LOG.debug("add_info=" + addInfo);
		DEBUG_LOG.debug("----- FUW00701SFLogic 復号化前のパラメータを出力 END -----");

		// 各取得パラメータの設定値チェック
		boolean errorFlg = false;
		if (CLEARPASS_STATUS_NORMAL.equals(status))
		{
			if (JFUWebCommon.isNull(ck) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(shopCd) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(customerNumber) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(nameKana) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(clearpassDate) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(clearpassTime) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(clearpassNumber) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(bankDate) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(bankTime) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(bankNumber) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(bankCd) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(branchCd) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(depoditItem) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(accountNumber) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(accountHolder) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(resultCd) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(message) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(addInfo) == true)
			{
				errorFlg = true;
			}
		}
		else
		{
			DEBUG_LOG.debug("----- FUW00701SFLogic 口座振替：各取得パラメータの設定値チェックでエラー -----");
			errorFlg = true;
		}
	
		// 各取得パラメータのエラーチェック判定
		if (errorFlg)
		{
			// クリアパスのステータス
			clearPassInfoBean.sendMessageString(CommonInfoCFConst.STATUS_61, X31CWebConst.DATABEAN_SET_VALUE, CLEARPASS_STATUS_ERR);
			// パラメータのエラー時は以降の処理をしない
			return;
		}

		// 共通暗号化キーをAPLConstから取得
		String comKey = JCCWebCommon.getApplicationConst(KOUZA_FURIKAE_ENCRYPTION_KEY_2);

		// 共通暗号化キーのチェック
		if (JFUWebCommon.isNull(comKey))
		{
			// エラー処理
			DEBUG_LOG.debug("※アプリケーションプロパティに指定されたキーが存在しません。KEY：" + comKey);
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0009);
		}

		// パラメータの復号化
		try
		{
			ck = JCCcomEncryptionUtil.decrypt(comKey, ck);
			nameKana = decrypt_euc(ck, nameKana);
			bankCd = JCCcomEncryptionUtil.decryptKey(ck, bankCd);
			branchCd = JCCcomEncryptionUtil.decryptKey(ck, branchCd);
			depoditItem = JCCcomEncryptionUtil.decryptKey(ck, depoditItem);
			accountNumber = JCCcomEncryptionUtil.decryptKey(ck, accountNumber);
			accountHolder = decrypt_euc(ck, accountHolder);
			addInfo = JCCcomEncryptionUtil.decryptKey(ck, addInfo);

			DEBUG_LOG.debug("----- FUW00701SFLogic 復号化のパラメータを出力 START -----");
			DEBUG_LOG.debug("name_kana = " + nameKana);
			DEBUG_LOG.debug("bank_cd = " + bankCd);
			DEBUG_LOG.debug("branch_cd = " + branchCd);
			DEBUG_LOG.debug("depodit_item = " + depoditItem);
			DEBUG_LOG.debug("account_number = " + accountNumber);
			DEBUG_LOG.debug("account_holder = " + accountHolder);
			DEBUG_LOG.debug("add_info = " + addInfo);
			DEBUG_LOG.debug("----- FUW00701SFLogic 復号化のパラメータを出力 END -----");
		}
		catch (Exception e)
		{
			DEBUG_LOG.debug("----- FUW00701SFLogic 口座振替：パラメータの復号化処理でエラー -----");
			DEBUG_LOG.debug(e.toString());

			// エラーフラグON
			errorFlg = true;
		}

		// 文字コード変換
		try
		{
			// 事業者コード
			shopCd = new String(shopCd.getBytes("UTF8"), "UTF8");
			// お客様番号
			customerNumber = new String(customerNumber.getBytes("UTF8"), "UTF8");
			// 契約者カナ氏名
			nameKana = new String(nameKana.getBytes("SJIS"), "SJIS");
			nameKana = new String(nameKana.getBytes("UTF8"), "UTF8");
			// クリアパス取扱年月日
			clearpassDate = new String(clearpassDate.getBytes("UTF8"), "UTF8");
			// クリアパス取扱時刻
			clearpassTime = new String(clearpassTime.getBytes("UTF8"), "UTF8");
			// クリアパス取扱番号
			clearpassNumber = new String(clearpassNumber.getBytes("UTF8"), "UTF8");
			// 金融機関取扱年月日
			bankDate = new String(bankDate.getBytes("UTF8"), "UTF8");
			// 金融機関取扱時刻
			bankTime = new String(bankTime.getBytes("UTF8"), "UTF8");
			// 金融機関取扱番号
			bankNumber = new String(bankNumber.getBytes("UTF8"), "UTF8");
			// 銀行コード
			bankCd = new String(bankCd.getBytes("UTF8"), "UTF8");
			// 支店コード
			branchCd = new String(branchCd.getBytes("UTF8"), "UTF8");
			// 預金種目
			depoditItem = new String(depoditItem.getBytes("UTF8"), "UTF8");
			// 口座番号
			accountNumber = new String(accountNumber.getBytes("UTF8"), "UTF8");
			// 口座名義人（カナ）
			accountHolder = new String(accountHolder.getBytes("SJIS"), "SJIS");
			accountHolder = new String(accountHolder.getBytes("UTF8"), "UTF8");
			// ステータス
			status = new String(status.getBytes("UTF8"), "UTF8");
			// 処理結果コード
			resultCd = new String(resultCd.getBytes("UTF8"), "UTF8");
			// メッセージ
			message = new String(message.getBytes("SJIS"), "SJIS");
			message = new String(message.getBytes("UTF8"), "UTF8");
			// 付加情報
			addInfo = new String(addInfo.getBytes("UTF8"), "UTF8");

			// パラメータをログに出力
			DEBUG_LOG.debug("----- FUW00701SFLogic 文字コード変換後のパラメータを出力 START -----");
			DEBUG_LOG.debug("ck = " + ck);
			DEBUG_LOG.debug("shop_cd=" + shopCd);
			DEBUG_LOG.debug("customer_number=" + customerNumber);
			DEBUG_LOG.debug("name_kana=" + nameKana);
			DEBUG_LOG.debug("clearpass_date=" + clearpassDate);
			DEBUG_LOG.debug("clearpass_time=" + clearpassTime);
			DEBUG_LOG.debug("clearpass_number=" + clearpassNumber);
			DEBUG_LOG.debug("bank_date=" + bankDate);
			DEBUG_LOG.debug("bank_time=" + bankTime);
			DEBUG_LOG.debug("bank_number=" + bankNumber);
			DEBUG_LOG.debug("bank_cd=" + bankCd);
			DEBUG_LOG.debug("branch_cd=" + branchCd);
			DEBUG_LOG.debug("depodit_item=" + depoditItem);
			DEBUG_LOG.debug("account_number=" + accountNumber);
			DEBUG_LOG.debug("account_holder=" + accountHolder);
			DEBUG_LOG.debug("status=" + status);
			DEBUG_LOG.debug("result_cd=" + resultCd);
			DEBUG_LOG.debug("message=" + message);
			DEBUG_LOG.debug("add_info=" + addInfo);
			DEBUG_LOG.debug("----- FUW00701SFLogic 文字コード変換後のパラメータを出力 END -----");
		}
		catch (Exception e)
		{
			DEBUG_LOG.debug("----- FUW00701SFLogic 口座振替：UTF8へ文字コード変換処理でエラー -----");
			DEBUG_LOG.debug(e.toString());

			// エラーフラグON
			errorFlg = true;
		}

		// 各取得パラメータのエラーチェック判定（パラメータをログに出力後）
		if (errorFlg)
		{
			// クリアパスのステータス
			clearPassInfoBean.sendMessageString(CommonInfoCFConst.STATUS_61, X31CWebConst.DATABEAN_SET_VALUE, CLEARPASS_STATUS_ERR);
			// パラメータのエラー時は以降の処理をしない
			return;
		}

		// 付加情報
		String[] addInfoArray = addInfo.split(JFUStrConst.HALF_SPACE);
		// 付加情報からセッションIDを取り出す
		String sessionId = addInfoArray[3];
		// 口座振替受付から遷移の場合のセッションIDをチェック
		chkSession(sessionId);

		outputBusLog("----- FUW00701SFLogic_setKouzaFurikaeRedirectRetData 復号化・文字コード変換後パラメータ START -----");
		outputBusLog("bank_cd = " + bankCd);
		outputBusLog("branch_cd = " + branchCd);
		outputBusLog("----- FUW00701SFLogic_setKouzaFurikaeRedirectRetData 復号化・文字コード変換後パラメータ END -----");

		// 各取得パラメータの設定値チェック(文字コード変換後にもう一度チェック)
		if (CLEARPASS_STATUS_NORMAL.equals(status))
		{
			if (JFUWebCommon.isNull(shopCd) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(customerNumber) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(nameKana) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(clearpassDate) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(clearpassTime) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(clearpassNumber) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(bankDate) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(bankTime) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(bankNumber) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(bankCd) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(branchCd) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(depoditItem) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(accountNumber) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(accountHolder) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(resultCd) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(message) == true)
			{
				errorFlg = true;
			}
			if (JFUWebCommon.isNull(addInfo) == true)
			{
				errorFlg = true;
			}
		}
		else
		{
			errorFlg = true;
		}

		// 各取得パラメータのエラーチェック判定
		if (errorFlg)
		{
			// クリアパスのステータス
			clearPassInfoBean.sendMessageString(CommonInfoCFConst.STATUS_61, X31CWebConst.DATABEAN_SET_VALUE, CLEARPASS_STATUS_ERR);
			// パラメータのエラー時は以降の処理をしない
			return;
		}

		// 変換後のパラメータ値を共有フォームBeanに設定
		clearPassInfoBean.sendMessageString(CommonInfoCFConst.BANK_CD_61, X31CWebConst.DATABEAN_SET_VALUE, bankCd);
		clearPassInfoBean.sendMessageString(CommonInfoCFConst.BRANCH_CD_61, X31CWebConst.DATABEAN_SET_VALUE, branchCd);
		clearPassInfoBean.sendMessageString(CommonInfoCFConst.DEPODIT_ITEM_61, X31CWebConst.DATABEAN_SET_VALUE, depoditItem);
		clearPassInfoBean.sendMessageString(CommonInfoCFConst.ACCOUNT_NUMBER_61, X31CWebConst.DATABEAN_SET_VALUE, accountNumber);
		clearPassInfoBean.sendMessageString(CommonInfoCFConst.ACCOUNT_HOLDER_61, X31CWebConst.DATABEAN_SET_VALUE,
				JFUCommonUtil.convertToZenkaku(accountHolder));
		clearPassInfoBean.sendMessageString(CommonInfoCFConst.ADD_INFO_61, X31CWebConst.DATABEAN_SET_VALUE, addInfo);
		clearPassInfoBean.sendMessageString(CommonInfoCFConst.STATUS_61, X31CWebConst.DATABEAN_SET_VALUE, status);
	}

	/**
	 * 共有フォームBeanからサービスフォームBeanに口座情報を設定します。
	 * 
	 * <br>
	 */
	private void setKozaInfoToSvcFormBean()
	{
		// 共有フォームBeanを取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBeanに値を設定
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// ＷＥＢ新規情報
		X31SDataBeanAccess webNewInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO).getDataBean(0);
		// 支払方法情報
		X31SDataBeanAccess paywayInfoBean = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.PAYWAY_INFO).getDataBean(0);

		// ＷＥＢ変更情報
		X31SDataBeanAccess webChgInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		// クリアパス情報
		X31SDataBeanAccess clearPassInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.CLEAR_PASS_INFO).getDataBean(0);

		String bankCd = clearPassInfoBean.sendMessageString(CommonInfoCFConst.BANK_CD_61, X31CWebConst.DATABEAN_GET_VALUE);
		String branchCd = clearPassInfoBean.sendMessageString(CommonInfoCFConst.BRANCH_CD_61, X31CWebConst.DATABEAN_GET_VALUE);
		String branchCdYucho = clearPassInfoBean.sendMessageString(CommonInfoCFConst.BRANCH_CD_61, X31CWebConst.DATABEAN_GET_VALUE);
		String depoditItem = clearPassInfoBean.sendMessageString(CommonInfoCFConst.DEPODIT_ITEM_61, X31CWebConst.DATABEAN_GET_VALUE);
		String accountNumber = clearPassInfoBean.sendMessageString(CommonInfoCFConst.ACCOUNT_NUMBER_61, X31CWebConst.DATABEAN_GET_VALUE);
		String accountHolder = clearPassInfoBean.sendMessageString(CommonInfoCFConst.ACCOUNT_HOLDER_61, X31CWebConst.DATABEAN_GET_VALUE);
		String addInfo = clearPassInfoBean.sendMessageString(CommonInfoCFConst.ADD_INFO_61, X31CWebConst.DATABEAN_GET_VALUE);
		String status = clearPassInfoBean.sendMessageString(CommonInfoCFConst.STATUS_61, X31CWebConst.DATABEAN_GET_VALUE);

		// 付加情報
		String pushCnt = JFUStrConst.EMPTY;
		if(!JFUWebCommon.isNull(addInfo) && addInfo.split(JFUStrConst.HALF_SPACE).length > 2)
		{
			String[] addInfoArray = addInfo.split(JFUStrConst.HALF_SPACE);
			// 押下回数
			pushCnt = addInfoArray[2];
		}
		else
		{
			// 付加情報から取得できない場合は共有フォームBeanから押下回数を取得
			pushCnt = paywayInfoBean.sendMessageString(CommonInfoCFConst.KFR_OUKA_COUNT_15, X31CWebConst.DATABEAN_GET_VALUE);
		}

		// クリアパスの押下回数
		serviceInfoBean.sendMessageString(FUW00701SFConst.CLEAR_PASS_PUSH_CNT, X31CWebConst.DATABEAN_SET_VALUE, pushCnt);
		paywayInfoBean.sendMessageString(CommonInfoCFConst.KFR_OUKA_COUNT_15, X31CWebConst.DATABEAN_SET_VALUE, pushCnt);
		// クリアパスのステータス
		serviceInfoBean.sendMessageString(FUW00701SFConst.CLEAR_PASS_STATUS, X31CWebConst.DATABEAN_SET_VALUE, status);
		// 支払方法選択
		serviceInfoBean.sendMessageString(FUW00701SFConst.PAY_WAY_SLCT, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.PAYWAY_BANK_POSTAL);

		if(CLEARPASS_STATUS_NORMAL.equals(status))
		{
			// 変更後の銀行コード
			serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_BANK_CD, X31CWebConst.DATABEAN_SET_VALUE, bankCd);

			if (BANK_CD_POSTAL.equals(bankCd))
			{
				branchCd = BRANCH_CD_POSTAL;
			}

			// 変更後の支店コード
			serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_BRANCH_CD, X31CWebConst.DATABEAN_SET_VALUE, branchCd);
			// 変更後の口座番号
			serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_ACCOUNT_NUMBER, X31CWebConst.DATABEAN_SET_VALUE, accountNumber);
			// 変更後の口座番号(表示用) 右4桁以外を"*"でマスク
			serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_ACCOUNT_NUMBER_DSP, X31CWebConst.DATABEAN_SET_VALUE,
					JZMFormatForMask.maskExcRight4(accountNumber));
			// 変更後の口座名義人（カナ）
			serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_ACCOUNT_HOLDER, X31CWebConst.DATABEAN_SET_VALUE, accountHolder);

			if (BANK_CD_POSTAL.equals(bankCd))
			{
				// ゆうちょ銀行の場合

				// 金融機関名にゆうちょ銀行をセット
				serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_BANK_NM, X31CWebConst.DATABEAN_SET_VALUE, YUCHO_BANK_NM);

				// 変更後の通帳記号
				serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_TUTYO_KIGO, X31CWebConst.DATABEAN_SET_VALUE, branchCdYucho);
				// 変更後の通帳番号
				serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_TUTYO_NO, X31CWebConst.DATABEAN_SET_VALUE,
						accountNumber + JFUStrConst.S_ONE);
				// 変更後の通帳番号(表示用)
				serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_TUTYO_NO_DSP, X31CWebConst.DATABEAN_SET_VALUE,
						JZMFormatForMask.maskExcRight4(accountNumber + JFUStrConst.S_ONE));
			}
			else
			{
				// 銀行の場合

				// 変更後の預金種別
				serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_DEPODIT_ITEM, X31CWebConst.DATABEAN_SET_VALUE, depoditItem);
				// 変更後の口座番号
				serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_ACCOUNT_NUMBER, X31CWebConst.DATABEAN_SET_VALUE, accountNumber);
				// 変更後の口座番号(表示用)
				serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_ACCOUNT_NUMBER_DSP, X31CWebConst.DATABEAN_SET_VALUE,
						JZMFormatForMask.maskExcRight4(accountNumber));
				// 変更後の口座名義
				serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_ACCOUNT_HOLDER, X31CWebConst.DATABEAN_SET_VALUE, accountHolder);
			}
		}
	}

	/**
	 * 口座振替画面遷移フラグを取得します。
	 * 
	 * <br>
	 * @return 口座振替画面遷移フラグ
	 */
	private String getkoufuriTransFlg()
	{
		String koufuriTransFlg = JFUStrConst.EMPTY;

		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBeanに値を設定
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		X31SDataBeanAccessArray webNewInfoArray = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfoBean = null;
		if(webNewInfoArray == null || webNewInfoArray.getCount() == 0)
		{
			webNewInfoBean = webNewInfoArray.addDataBean();
		}
		else
		{
			webNewInfoBean = webNewInfoArray.getDataBean(0);
		}

		X31SDataBeanAccessArray redirectInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO);
		X31SDataBeanAccess redirectInfoBean = null;
		if(redirectInfoArray == null || redirectInfoArray.getCount() == 0)
		{
			redirectInfoBean = redirectInfoArray.addDataBean();
		}
		else
		{
			redirectInfoBean = redirectInfoArray.getDataBean(0);
		}

		koufuriTransFlg = redirectInfoBean.sendMessageString(CommonInfoCFConst.RED_TRANSFER_PTN_17, X31CWebConst.DATABEAN_GET_VALUE);

		// 口座振替受付画面遷移フラグ
		serviceInfoBean.sendMessageString(FUW00701SFConst.KOUFURI_TRANS_FLG, X31CWebConst.DATABEAN_SET_VALUE, koufuriTransFlg);

		return koufuriTransFlg;
	}

	/**
	 * UTF8からEUC_JPへ変換します。
	 * <br>
	 * @param randomKey
	 * @param str
	 * @param encryptFlg
	 * @param sjisFlg (一旦SJISへ変換するかどうか)
	 * @return String
	 */
	private String charCodeChange(String randomKey, String str, boolean encryptFlg, boolean sjisFlg)
	{
		String retString = str;

		try
		{
			// 文字コード変換(UTF8からEUC_JPへ)
			if (sjisFlg)
			{
				retString = new String(retString.getBytes("SJIS"), "SJIS");
			}
			retString = new String(retString.getBytes("EUC_JP"), "EUC_JP");
			randomKey = new String(randomKey.getBytes("EUC_JP"), "EUC_JP");

			// 暗号化
			if (encryptFlg)
			{
				// パラメータの暗号化
				// セキュリティキー
				retString = encrypt_euc(randomKey, retString);
			}
		}
		catch (Exception e)
		{
			DEBUG_LOG.debug("※口座振替：EUC_JPへ文字コード変換処理でエラー");
			DEBUG_LOG.debug(e.toString());
		}

		return retString;
	}

	/**
	 * 暗号キー(CK)を取得します。
	 * <br>
	 * @param randomKey
	 * @return 暗号キー(CK)
	 */
	private String getCodeCk(String randomKey)
	{
		// CK
		String ck = JFUStrConst.EMPTY;
		// 共通暗号化キーをAPLConstから取得
		String comkey = JCCWebCommon.getApplicationConst(KOUZA_FURIKAE_ENCRYPTION_KEY_2);

		// 暗号化
		try
		{
			// 共通暗号化キーで暗号化キーを暗号化
			ck = JCCcomEncryptionUtil.encrypt(comkey, randomKey);
		}
		catch (Exception e)
		{
			DEBUG_LOG.debug("※口座振替：暗号化処理でエラー");
			DEBUG_LOG.debug(e.toString());
		}

		return ck;
	}

	/**
	 * EUC-JPで変換して暗号化キーの暗号化処理を行います。
	 * 
	 * <br>
	 * @param key
	 * @param text
	 * @return String
	 * @throws IllegalBlockSizeException
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws UnsupportedEncodingException
	 * @throws BadPaddingException
	 * @throws NoSuchPaddingException
	 */
	public static String encryptKey_euc(String key, String text) throws IllegalBlockSizeException, InvalidKeyException, NoSuchAlgorithmException,
			UnsupportedEncodingException, BadPaddingException, NoSuchPaddingException
	{
		key = decrypt_euc(TRUE_KEY, key);

		SecretKeySpec sksSpec = new SecretKeySpec(key.getBytes(), ENCRYPT_FORMAT);
		Cipher cipher = Cipher.getInstance(ENCRYPT_FORMAT);
		cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, sksSpec);
		byte[] encrypted = cipher.doFinal(text.getBytes("EUC_JP"));
		return byteArrayToHexString(encrypted);
	}

	/**
	 * EUC-JPで変換して暗号化処理を行います。
	 * 
	 * <br>
	 * @param key
	 * @param text
	 * @return String
	 * @throws IllegalBlockSizeException
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws UnsupportedEncodingException
	 * @throws BadPaddingException
	 * @throws NoSuchPaddingException
	 */
	public static String encrypt_euc(String key, String text) throws IllegalBlockSizeException, InvalidKeyException, NoSuchAlgorithmException,
			UnsupportedEncodingException, BadPaddingException, NoSuchPaddingException
	{
		SecretKeySpec sksSpec = new SecretKeySpec(key.getBytes(), ENCRYPT_FORMAT);
		Cipher cipher = Cipher.getInstance(ENCRYPT_FORMAT);
		cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, sksSpec);
		byte[] encrypted = cipher.doFinal(text.getBytes("EUC_JP"));
		return byteArrayToHexString(encrypted);
	}

	/**
	 * EUC-JPで変換して複合化処理を行います。
	 * 
	 * <br>
	 * @param key
	 * @param encrypted
	 * @return String
	 * @throws IllegalBlockSizeException
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws UnsupportedEncodingException
	 * @throws BadPaddingException
	 * @throws NoSuchPaddingException
	 */
	public static String decrypt_euc(String key, String encrypted) throws IllegalBlockSizeException, InvalidKeyException, NoSuchAlgorithmException,
			UnsupportedEncodingException, BadPaddingException, NoSuchPaddingException
	{
		SecretKeySpec sksSpec = new SecretKeySpec(key.getBytes(), ENCRYPT_FORMAT);
		Cipher cipher = Cipher.getInstance(ENCRYPT_FORMAT);
		cipher.init(javax.crypto.Cipher.DECRYPT_MODE, sksSpec);
		byte[] decrypted = cipher.doFinal(hexStringToByteArray(encrypted));
		return new String(decrypted, "EUC_JP");
	}

	/**
	 * バイト配列を16進数の文字列に変換します。
	 * <br>
	 * @param arg      バイト配列
	 * @return String  16進数に変換した文字列
	 */
	private static String byteArrayToHexString(byte[] arg)
	{
		StringBuffer byteArray = new StringBuffer();
		for (int i = 0; i < arg.length; i++)
		{
			// 暗号化されたバイト配列の要素を2進表現の文字列に変換
			String strByteCode = Integer.toHexString((int)arg[i]);
			// STRING_SIZEの桁数に整形
			if (strByteCode.length() >= STRING_SIZE)
			{
				strByteCode = strByteCode.substring(strByteCode.length() - STRING_SIZE, strByteCode.length());
			}
			else
			{
				while (strByteCode.length() < STRING_SIZE)
				{
					strByteCode = "0" + strByteCode;
				}
			}
			byteArray.append(strByteCode);
		}
		return byteArray.toString();
	}

    /**
	 * 16進数の文字列をバイト配列に変換します。
	 * <br>
	 * @param arg      16進数の文字列
	 * @return byte[]  バイト配列
	 */
	private static byte[] hexStringToByteArray(String arg)
	{
		byte[] byteArray = new byte[arg.length() / STRING_SIZE];
		int j = 0;
		for (int i = 0; i < arg.length() / STRING_SIZE; i++)
		{
			// 文字列を1byteづつ取得
			byteArray[i] = Integer.valueOf(arg.substring(j, j + STRING_SIZE), 16).byteValue();
			j += STRING_SIZE;
		}
		return byteArray;
	}

	/**
	 * 口座振替受付から遷移の場合のセッションチェックを行います。
	 * <br>
	 * @param koufuri_sessionId
	 */

	private void chkSession(String koufuri_sessionId)
	{
		// アプリケーションプロパティより口座振替テストモード設定を取得
		String koufuri_test_mode = JFUWebCommon.getApplicationConst(JFUStrConst.FU_N_KOUFURI_TEST_MODE);

		// テストモードが"ON"の場合、セッションＩＤチェックを行わない
		if (!TEST_MODE_ON.equals(koufuri_test_mode))
		{
			// セッションID の正当性をチェックする =========
			String current_session_id = this.getSessionId();

			if (current_session_id.compareTo(koufuri_sessionId) != 0)
			{
				// セッションIDが異なるため改変の可能性があるためアクセスエラーとして共通エラー画面に遷移
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0009);
			}
		}
	}

	/**
	 * 共有フォームBeanに値を設定します。
	 * 
	 * <br>
	 * @return 共有フォームBean
	 */
	@SuppressWarnings("unchecked")
	private void setCommonInfoBean(HashMap outputMap)
	{
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// ＷＥＢ新規情報
		X31SDataBeanAccessArray webNewInfoArray = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfoBean = null;
		if(webNewInfoArray.getCount() == 0)
		{
			webNewInfoBean = webNewInfoArray.addDataBean();
		}
		else
		{
			webNewInfoBean = webNewInfoArray.getDataBean(0);
		}

		// 契約サービス情報
		X31SDataBeanAccessArray keiSvcInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiSvcInfoBean = null;
		if(keiSvcInfoArray.getCount() == 0)
		{
			keiSvcInfoBean = keiSvcInfoArray.addDataBean();
		}
		else
		{
			keiSvcInfoBean = keiSvcInfoArray.getDataBean(0);
		}

		// リダイレクト情報
		X31SDataBeanAccessArray redirectInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.REDIRECT_INFO);
		if(redirectInfoArray.getCount() == 0)
		{
			redirectInfoArray.addDataBean();
		}

		// 支払方法情報
		X31SDataBeanAccessArray paywayInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.PAYWAY_INFO);
		X31SDataBeanAccess paywayInfoBean = null;
		if(paywayInfoArray.getCount() == 0)
		{
			paywayInfoBean = paywayInfoArray.addDataBean();
		}
		else
		{
			paywayInfoBean = paywayInfoArray.getDataBean(0);
		}

		// ＷＥＢ変更情報
		X31SDataBeanAccessArray webChgInfoArray = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO);
		X31SDataBeanAccess webChgInfoBean = null;
		if(webChgInfoArray.getCount() == 0)
		{
			webChgInfoBean = webChgInfoArray.addDataBean();
		}
		else
		{
			webChgInfoBean = webChgInfoArray.getDataBean(0);
		}

		// 現顧客契約情報
		X31SDataBeanAccessArray genCustKeiInfoArray = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO);
		X31SDataBeanAccess genCustKeiInfoBean = null;
		if(genCustKeiInfoArray.getCount() == 0)
		{
			genCustKeiInfoBean = genCustKeiInfoArray.addDataBean();
		}
		else
		{
			genCustKeiInfoBean = genCustKeiInfoArray.getDataBean(0);
		}

		// クリアパス情報
		X31SDataBeanAccessArray clearPassInfoArray = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.CLEAR_PASS_INFO);
		if(clearPassInfoArray.getCount() == 0)
		{
			clearPassInfoArray.addDataBean();
		}

		// サービス契約情報
		X31SDataBeanAccessArray svcKeiInfoArray = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO);
		X31SDataBeanAccess svcKeiInfoBean = null;
		if(svcKeiInfoArray.getCount() == 0)
		{
			svcKeiInfoBean = svcKeiInfoArray.addDataBean();
		}
		else
		{
			svcKeiInfoBean = svcKeiInfoArray.getDataBean(0);
		}

		// サービス契約回線内訳情報
		X31SDataBeanAccessArray svcKeiKaisenUwInfoArray = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_KAISEN_UCWK_INFO);
		X31SDataBeanAccess svcKeiKaisenUwInfoBean = null;
		if(svcKeiKaisenUwInfoArray.getCount() == 0)
		{
			svcKeiKaisenUwInfoBean = svcKeiKaisenUwInfoArray.addDataBean();
		}
		else
		{
			svcKeiKaisenUwInfoBean = svcKeiKaisenUwInfoArray.getDataBean(0);
		}

		// 請求契約情報
		X31SDataBeanAccessArray seikyKeiInfoArray = svcKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SEIKY_KEI_INFO);
		X31SDataBeanAccess seikyKeiInfoBean = null;
		if(seikyKeiInfoArray.getCount() == 0)
		{
			seikyKeiInfoBean = seikyKeiInfoArray.addDataBean();
		}
		else
		{
			seikyKeiInfoBean = seikyKeiInfoArray.getDataBean(0);
		}

		// 申込番号
		if(!JFUWebCommon.isNull(serviceInfoBean.sendMessageString(FUW00701SFConst.MSKM_NO_LOGIN, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			keiSvcInfoBean.sendMessageString(CommonInfoCFConst.TTDKI_NO_10, X31CWebConst.DATABEAN_SET_VALUE,
					serviceInfoBean.sendMessageString(FUW00701SFConst.MSKM_NO_LOGIN, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// SYSID
		if(!JFUWebCommon.isNull(serviceInfoBean.sendMessageString(FUW00701SFConst.SYSID, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			genCustKeiInfoBean.sendMessageString(CommonInfoCFConst.SYSID_22, X31CWebConst.DATABEAN_SET_VALUE,
					serviceInfoBean.sendMessageString(FUW00701SFConst.SYSID, X31CWebConst.DATABEAN_GET_VALUE));

			webNewInfoBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_SET_VALUE,
					serviceInfoBean.sendMessageString(FUW00701SFConst.SYSID, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// 契約者タイプコード
		if(!JFUWebCommon.isNull(serviceInfoBean.sendMessageString(FUW00701SFConst.KEISHA_TYPE_CD, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			genCustKeiInfoBean.sendMessageString(CommonInfoCFConst.KEISHA_TYPE_CD_22, X31CWebConst.DATABEAN_SET_VALUE,
					serviceInfoBean.sendMessageString(FUW00701SFConst.KEISHA_TYPE_CD, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// お客様名
		if(!JFUWebCommon.isNull(serviceInfoBean.sendMessageString(FUW00701SFConst.KEI_CUST_NM, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			genCustKeiInfoBean.sendMessageString(CommonInfoCFConst.CUST_NM_22, X31CWebConst.DATABEAN_SET_VALUE,
					serviceInfoBean.sendMessageString(FUW00701SFConst.KEI_CUST_NM, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// お客様カナ名
		if(!JFUWebCommon.isNull(serviceInfoBean.sendMessageString(FUW00701SFConst.KEI_CUST_NM_KANA, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			genCustKeiInfoBean.sendMessageString(CommonInfoCFConst.CUST_KANA_22, X31CWebConst.DATABEAN_SET_VALUE,
					serviceInfoBean.sendMessageString(FUW00701SFConst.KEI_CUST_NM_KANA, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// マンション物件番号
		if(!JFUWebCommon.isNull(serviceInfoBean.sendMessageString(FUW00701SFConst.MANSION_BUKKEN_NO, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			svcKeiKaisenUwInfoBean.sendMessageString(CommonInfoCFConst.MANSION_BUKKEN_NO_26, X31CWebConst.DATABEAN_SET_VALUE,
					serviceInfoBean.sendMessageString(FUW00701SFConst.MANSION_BUKKEN_NO, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// 請求契約番号
		if(!JFUWebCommon.isNull(serviceInfoBean.sendMessageString(FUW00701SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			seikyKeiInfoBean.sendMessageString(CommonInfoCFConst.SEIKY_KEI_NO_32, X31CWebConst.DATABEAN_SET_VALUE,
					serviceInfoBean.sendMessageString(FUW00701SFConst.SEIKY_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// 請求方法コード
		if(!JFUWebCommon.isNull(serviceInfoBean.sendMessageString(FUW00701SFConst.NOW_SEIKY_WAY_CD, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			seikyKeiInfoBean.sendMessageString(CommonInfoCFConst.SEIKY_WAY_CD_32, X31CWebConst.DATABEAN_SET_VALUE,
					serviceInfoBean.sendMessageString(FUW00701SFConst.NOW_SEIKY_WAY_CD, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// 最終更新年月日時分秒(請求契約)
		String seikyLastUpdDtm = getSeikyLastUpdDtm(outputMap);
		if(!JFUWebCommon.isNull(seikyLastUpdDtm))
		{
			seikyKeiInfoBean.sendMessageString(CommonInfoCFConst.LAST_UPD_DTM_32, X31CWebConst.DATABEAN_SET_VALUE, seikyLastUpdDtm);
		}

		// 口座振替押下回数
		paywayInfoBean.sendMessageString(CommonInfoCFConst.KFR_OUKA_COUNT_15, X31CWebConst.DATABEAN_SET_VALUE,
				serviceInfoBean.sendMessageString(FUW00701SFConst.CLEAR_PASS_PUSH_CNT, X31CWebConst.DATABEAN_GET_VALUE));
	}

	/**
	 * 請求契約の最終更新年月日時分秒を取得します。
	 * 
	 * <br>
	 * @param outputMap 結果マップ
	 * @return 最終更新年月日時分秒(請求契約)
	 */
	@SuppressWarnings("unchecked")
	private String getSeikyLastUpdDtm(HashMap outputMap)
	{
		String seikyLastUpdDtm = JFUStrConst.EMPTY;

		HashMap parentMap = null;
		if (outputMap.containsKey(FUSV031602CC))
		{
			parentMap = (HashMap)outputMap.get(FUSV031602CC);
		}

		// 最終更新年月日時分秒(請求契約)
		if (parentMap != null && !JFUWebCommon.isNull((String)parentMap.get(OUT_SEIKY_LAST_UPD_DTM)))
		{
			seikyLastUpdDtm = (String)parentMap.get(OUT_SEIKY_LAST_UPD_DTM);
		}

		return seikyLastUpdDtm;
	}

	/**
	 * サービス契約情報を設定します。
	 * 
	 * <br>
	 * @param outputMap 結果マップ
	 */
	@SuppressWarnings("unchecked")
	private void setSvcKeiInfoBean(HashMap outputMap)
	{
		// 共有フォームBean情報を取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		X31SDataBeanAccess webChgInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		X31SDataBeanAccess genCustKeiInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0);
		X31SDataBeanAccess svcKeiInfoBean = genCustKeiInfoBean.getDataBeanArray(CommonInfoCFConst.SVC_KEI_INFO).getDataBean(0);

		HashMap parentMap = null;
		if (outputMap.containsKey(FUSV031602CC))
		{
			parentMap = (HashMap)outputMap.get(FUSV031602CC);
		}

		// 請求契約番号に紐付くサービス契約リストを取得
		List<HashMap> svcKeiList = null;
		if(parentMap != null && parentMap.containsKey(OUT_SEIKY_KEI_SVC_KEI_LIST))
		{
			svcKeiList = (List<HashMap>)parentMap.get(OUT_SEIKY_KEI_SVC_KEI_LIST);
		}
		else
		{
			return;
		}

		if(svcKeiList == null || svcKeiList.size() == 0)
		{
			return;
		}

		Collections.sort(svcKeiList, new Comparator()
		{

			/**
			 * サービス契約情報をサービス契約ステータスで昇順にする
			 * <br>
			 * @param o1
			 * @param o2
			 * @return int
			 */
			public int compare(Object o1, Object o2)
			{
				HashMap map1 = (HashMap)o1;
				HashMap map2 = (HashMap)o2;
				String str1 = (String)map1.get(SVC_KEI_STAT);
				String str2 = (String)map2.get(SVC_KEI_STAT);
				return str2.compareTo(str1);
			}
		});

		// ソートした1番目の情報(一番大きいサービス契約ステータス)を取得
		HashMap svcKeiMap = svcKeiList.get(0);

		// サービス契約ステータス
		svcKeiInfoBean.sendMessageString(CommonInfoCFConst.SVC_KEI_STAT_23, X31CWebConst.DATABEAN_SET_VALUE,
				(String)svcKeiMap.get(SVC_KEI_STAT));
	}

	/**
	 * アンケート情報を設定します。
	 * 
	 * <br>
	 * @param outputMap 結果マップ
	 * @throws Exception 
	 */
	private void setAnqInfo() throws Exception
	{
		// サービスフォームBean情報を取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// アンケート用受付番号(申込書番号)
		String ukNo = serviceInfoBean.sendMessageString(FUW00701SFConst.ANQ_UK_NO, X31CWebConst.DATABEAN_GET_VALUE);

		// マンション物件コード
		String mansionBukkenCd = JFUStrConst.EMPTY;
		X31SDataBeanAccessArray mansionBukkenInfo = serviceInfoBean.getDataBeanArray(FUW00701SFConst.MANSION_BUKKEN_INFO);
		if(mansionBukkenInfo != null && mansionBukkenInfo.getCount() > 0)
		{
			X31SDataBeanAccess mansionBukkenInfoBean = mansionBukkenInfo.getDataBean(0);
			mansionBukkenCd = mansionBukkenInfoBean.sendMessageString(FUW00701SFConst.MANSION_BUKKEN_CD_10, X31CWebConst.DATABEAN_GET_VALUE);
		}

		if(JFUWebCommon.isNull(ukNo))
		{
			// アンケート用受付番号(申込書番号)が未設定の場合は処理を終了する
			serviceInfoBean.sendMessageString(FUW00701SFConst.ANQ_URL, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			return;
		}

		// アンケート用URLの設定
		String anqUrl = JFUWebCommon.getEnqueteWebUrl(JFUScreenConst.SCREEN_ID_FUW00704, mansionBukkenCd, ukNo);
		serviceInfoBean.sendMessageString(FUW00701SFConst.ANQ_URL, X31CWebConst.DATABEAN_SET_VALUE, anqUrl);
	}

	/**
	 * ログイン画面の入力チェック処理です。
	 * 
	 * <br>
	 * @return true:OK / false:NG
	 */
	private boolean chkLoginInput()
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = getServiceFormBean();

		boolean result = true;

		// 申込番号
		String mskmNo = bean.sendMessageString(FUW00701SFConst.MSKM_NO_LOGIN, X31CWebConst.DATABEAN_GET_VALUE);
		if (JFUWebCommon.isNull(mskmNo))
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0010_TW,
					new String[] { "申込番号または受付番号" }, "mskm_no");
			result = false;
		}
		else if (!HalfCharCheck.isEnNumber8Check(mskmNo))
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0150_TW,
					new String[] { "申込番号または受付番号" }, "mskm_no");
			result = false;
		}
		else if (mskmNo.length() > 10)
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0020_TW,
					new String[] { "申込番号または受付番号", "10" }, "mskm_no");
			result = false;
		}

		// 電話番号
		String telNo = bean.sendMessageString(FUW00701SFConst.TEL_NO_LOGIN, X31CWebConst.DATABEAN_GET_VALUE);
		if (JFUWebCommon.isNull(telNo))
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0010_TW,
					new String[] { "電話番号" }, "tel_no");
			result = false;
		}
		else if (!HalfCharCheck.isNumber1Check(telNo))
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0140_TW,
					new String[] { "電話番号" }, "tel_no");
			result = false;
		}
		else if (telNo.length() < 9 || telNo.length() > 11)
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKF0040_TW,
					new String[] { "電話番号", "9", "11" }, "tel_no");
			result = false;
		}

		return result;
	}

	/**
	 * ログイン可否判定をします。
	 * 
	 * <br>
	 * @param se JCCWebServiceException
	 * @return チェック結果
	 */
	private boolean jdgeLogin(JCCWebServiceException se)
	{
		boolean result = true;

		// 例外情報を取得
		X31CMessageResult msgResult = se.getMessageList();

		for (X31CMessageMoreInfo moreInfo : Arrays.asList(msgResult.getMessageMoreInfoList()))
		{
			String templateid = moreInfo.getTemplateId();
			String status = moreInfo.getStatus();
			String errFlg = moreInfo.getItemCheckErr();
			String itemid = moreInfo.getItemId();

			// 申込番号未取得エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0021B504.equals(templateid)
					&& ERROR_ITEM_MSKM_NO_NOT_FOUND.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：申込番号未取得エラー -----");
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF2010_NW, ERR_MSG_AREA_ID_MSKM_NO);
				result = false;
			}
			// 電話番号紐付けエラー
			else if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_ECK0011A010.equals(templateid)
					&& ERROR_ITEM_TEL_NO_NOT_FOUND.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：電話番号紐付けエラー -----");
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF2010_NW, ERR_MSG_AREA_ID_MSKM_NO);
				result = false;
			}
		}

		return result;
	}

	/**
	 * サービス(初期表示)処理結果の例外判定をします。
	 * 
	 * <br>
	 * @param se JCCWebServiceException
	 */
	private void chkServiceErrorLogin(JCCWebServiceException se)
	{
		// 例外情報を取得
		X31CMessageResult msgResult = se.getMessageList();

		for (X31CMessageMoreInfo moreInfo : Arrays.asList(msgResult.getMessageMoreInfoList()))
		{
			String templateid = moreInfo.getTemplateId();
			String status = moreInfo.getStatus();
			String errFlg = moreInfo.getItemCheckErr();
			String itemid = moreInfo.getItemId();

			// SYSID取得不可エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0021A010.equals(templateid)
					&& ERROR_ITEM_SYSID_NOT_SEARCH.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：SYSID取得不可エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// サービス契約未取得エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0081A010.equals(templateid)
					&& ERROR_ITEM_SVC_KEI_NOT_FOUND.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：サービス契約未取得エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// サービス契約未取得エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0081B003.equals(templateid)
					&& ERROR_ITEM_SVC_KEI_NOT_FOUND.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：サービス契約未取得エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// 同一請求予約エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491B508.equals(templateid)
					&& ERROR_ITEM_SAME_SEIKYNO_RSV.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：同一請求予約エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// 同一請求以外予約エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491B508.equals(templateid)
					&& ERROR_ITEM_DIFF_SEIKYNO_RSV.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：同一請求以外予約エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// お客様名複数エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491B508.equals(templateid)
					&& ERROR_ITEM_CUST_NM_FUKUSU.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：お客様名複数エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// マンションオーナーIDエラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491B507.equals(templateid)
					&& ERROR_ITEM_MANSION_OWNER_ID.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：マンションオーナーIDエラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// 請求抑止コード｢05：WEB請求情報公開要否｣エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0541B502.equals(templateid)
					&& ERROR_ITEM_SEIKY_YOKSI_CD.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：請求抑止コード｢05：WEB請求情報公開要否｣エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// 請求契約番号未取得エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491B507.equals(templateid)
					&& ERROR_ITEM_SEIKY_KEI_NOT_FOUND.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：請求契約番号未取得エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// 請求契約番号複数エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491B507.equals(templateid)
					&& ERROR_ITEM_SEIKY_KEI_FUKUSU.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：請求契約番号複数エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// WEBオプション追加可否「1:否」エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0081A010.equals(templateid)
					&& ERROR_ITEM_WEB_OP_ADD_KH.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：WEBオプション追加可否「1:否」エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// 対象サービスエラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0081A010.equals(templateid)
					&& ERROR_ITEM_SVC_KEI_PRC_GRP_CD.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：対象サービスエラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
		}
	}

	/**
	 * サービス情報の関連チェックをします。
	 * 
	 * <br>
	 * @param se JCCWebServiceException
	 * @return チェック結果
	 */
	private boolean chkSvcStat(JCCWebServiceException se)
	{
		boolean result = true;

		// 例外情報を取得
		X31CMessageResult msgResult = se.getMessageList();

		for (X31CMessageMoreInfo moreInfo : Arrays.asList(msgResult.getMessageMoreInfoList()))
		{
			String templateid = moreInfo.getTemplateId();
			String status = moreInfo.getStatus();
			String errFlg = moreInfo.getItemCheckErr();
			String itemid = moreInfo.getItemId();

			// 対象ステータスエラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0081A010.equals(templateid)
					&& ERROR_ITEM_SVC_KEI_STAT.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_login：対象ステータスエラー -----");
				result = false;
			}
		}

		return result;
	}

	/**
	 * サービス(確認/申込)処理結果の例外判定をします。
	 * 
	 * <br>
	 * @param se JCCWebServiceException
	 * @param kbn 区分
	 */
	private void chkServiceErrorNextMskm(JCCWebServiceException se, String kbn)
	{
		// 共有フォームBeanを取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// ＷＥＢ変更情報
		X31SDataBeanAccess webChgInfoBean = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_CHG_INFO).getDataBean(0);
		// 現顧客契約情報
		X31SDataBeanAccess genCustKeiInfoBean = webChgInfoBean.getDataBeanArray(CommonInfoCFConst.GEN_CUST_KEI_INFO).getDataBean(0);

		outputBusLog("----- FUW00701SFLogic_" + kbn + " SYSID：" 
				+ genCustKeiInfoBean.sendMessageString(CommonInfoCFConst.SYSID_22, X31CWebConst.DATABEAN_GET_VALUE) + " -----");

		// 例外情報を取得
		X31CMessageResult msgResult = se.getMessageList();

		for (X31CMessageMoreInfo moreInfo : Arrays.asList(msgResult.getMessageMoreInfoList()))
		{
			String templateid = moreInfo.getTemplateId();
			String status = moreInfo.getStatus();
			String errFlg = moreInfo.getItemCheckErr();
			String itemid = moreInfo.getItemId();

			// ●契約状態チェック系エラー
			// 同一請求予約エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491B508.equals(templateid)
					&& ERROR_ITEM_SAME_SEIKYNO_RSV.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_" + kbn + "：同一請求予約エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// 同一請求以外予約エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491B508.equals(templateid)
					&& ERROR_ITEM_DIFF_SEIKYNO_RSV.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_" + kbn + "：同一請求以外予約エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// お客様名複数エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491B508.equals(templateid)
					&& ERROR_ITEM_CUST_NM_FUKUSU.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_" + kbn + "：お客様名複数エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// マンションオーナーIDエラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491B507.equals(templateid)
					&& ERROR_ITEM_MANSION_OWNER_ID.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_" + kbn + "：マンションオーナーIDエラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// 請求抑止コード｢05：WEB請求情報公開要否｣エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0541B502.equals(templateid)
					&& ERROR_ITEM_SEIKY_YOKSI_CD.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_" + kbn + "：請求抑止コード｢05：WEB請求情報公開要否｣エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// 請求契約番号未取得エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491B507.equals(templateid)
					&& ERROR_ITEM_SEIKY_KEI_NOT_FOUND.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_" + kbn + "：請求契約番号未取得エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// 請求契約番号複数エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491B507.equals(templateid)
					&& ERROR_ITEM_SEIKY_KEI_FUKUSU.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_" + kbn + "：請求契約番号複数エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// WEBオプション追加可否「1:否」エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0081A010.equals(templateid)
					&& ERROR_ITEM_WEB_OP_ADD_KH.equals(itemid) && JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_" + kbn + "：WEBオプション追加可否「1:否」エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}

			// ●登録系エラー
			// 審査済クレジットカード登録(クレジットカード番号)エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0521D020.equals(templateid)
					&& ITEM_ID_CRECARD_COMP_CD.equals(itemid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_" + kbn + "：審査済クレジットカード登録(クレジットカード番号)エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// 請求支払先変更(請求契約番号)エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491C240.equals(templateid)
					&& ITEM_ID_SEIKY_KEI_NO.equals(itemid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_" + kbn + "：請求支払先変更(請求契約番号)エラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0102);
			}
			// 金融機関存在チェックエラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0501D010.equals(templateid)
					&& ITEM_ID_BANK_CD.equals(itemid) && JFUStrConst.RELATION_CHECK_ERR_EC.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_" + kbn + "：金融機関存在チェックエラー -----");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0101);
			}
			// お客様情報変更エラー
			if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(status) && TEMPLATE_ID_EKK0491C240.equals(templateid)
					&& ITEM_ID_UPD_DTM_BF.equals(itemid) && JFUStrConst.RELATION_CHECK_ERR_EA.equals(errFlg))
			{
				outputBusLog("----- FUW00701SFLogic_" + kbn + "：お客様情報変更エラー -----");
				throw new JCCBusinessException(ERROR_CODE_0201);
			}
		}

		// 上記以外
		outputBusLog("----- FUW00701SFLogic_" + kbn + "：システムエラー -----");
		throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
	}

	/**
	 * 無料フラグを設定します。
	 * <br>
	 * @param bean
	 * @param outputMap
	 * @return true:無料 / false:有料
	 */
	@SuppressWarnings("unchecked")
	private boolean setFreeFlg(HashMap<String, Object> outputMap)
	{
		boolean res = true;
		HashMap parentMap = null;

		if (outputMap.containsKey(FUSV031603CC))
		{
			parentMap = (HashMap)outputMap.get(FUSV031603CC);
		}

		if (null != parentMap && parentMap.containsKey(EKK0721A010CBSMSG1LIST))
		{
			ArrayList childList = (ArrayList)parentMap.get(EKK0721A010CBSMSG1LIST);

			if (childList != null && childList.size() > 0)
			{
				// 初期費用がある場合(有料)
				res = false;
			}
			else
			{
				// 初期費用がない場合(無料)
				res = true;
			}
		}

		return res;
	}

	/**
	 * 月年選択リストを作成を行います。
	 * <br>
	 * @param service_form_bean サービスフォームBeanへのアクセサ
	 * @throws Exception
	 */
	private void setMonthYearList(X31SDataBeanAccess bean) throws Exception
	{
		// クレジットカードの有効期限を入力するプルダウンを作成する
		X31SDataBeanAccessArray beanArray = null;
		X31SDataBeanAccess monthList = null;
		X31SDataBeanAccess yearList = null;

		// 月リスト、年リストをクリア
		beanArray = bean.getDataBeanArray(FUW00701SFConst.MONTH_LIST);
		beanArray.clearArray();
		monthList = getDataBeanZero(beanArray);
		beanArray = bean.getDataBeanArray(FUW00701SFConst.YEAR_LIST);
		beanArray.clearArray();
		yearList = getDataBeanZero(beanArray);

		// ●月リスト作成
		// 月の初期値
		monthList.sendMessageString(FUW00701SFConst.MONTH_VALUE_LIST_08, X31CWebConst.DATABEAN_SET_VALUE, 0, JFUStrConst.S_ZERO);
		monthList.sendMessageString(FUW00701SFConst.MONTH_LABEL_LIST_08, X31CWebConst.DATABEAN_SET_VALUE, 0, JFUStrConst.HALF_SPACE);

		String m_moji = JFUStrConst.EMPTY;
		for (int m = 1; m <= MONTH; m++)
		{
			m_moji = String.format(MONTH_FORMAT, m);

			monthList.sendMessageString(FUW00701SFConst.MONTH_VALUE_LIST_08, X31CWebConst.DATABEAN_SET_VALUE, m, m_moji);
			monthList.sendMessageString(FUW00701SFConst.MONTH_LABEL_LIST_08, X31CWebConst.DATABEAN_SET_VALUE, m, m_moji);
		}

		// ●年リスト作成
		// 年の初期値
		yearList.sendMessageString(FUW00701SFConst.YEAR_VALUE_LIST_09, X31CWebConst.DATABEAN_ADD_VALUE, JFUStrConst.S_ZERO);
		yearList.sendMessageString(FUW00701SFConst.YEAR_LABEL_LIST_09, X31CWebConst.DATABEAN_ADD_VALUE, JFUStrConst.HALF_SPACE);

		// 運用日付の年を保持
		String opeYear = JFUWebCommon.getOpeDate(this, null).substring(0, 4);

		// 画面定義ファイルよりクレジットカードの表示年数を取得します
		String crecardDispYears = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00701, CRECARD_DISP_YEARS);

		for (int i = 0; i < Integer.parseInt(crecardDispYears); i++)
		{
			// セットする年を計算
			int intYear = Integer.parseInt(opeYear) + i;
			yearList.sendMessageString(FUW00701SFConst.YEAR_VALUE_LIST_09, X31CWebConst.DATABEAN_ADD_VALUE, String.valueOf(intYear));
			yearList.sendMessageString(FUW00701SFConst.YEAR_LABEL_LIST_09, X31CWebConst.DATABEAN_ADD_VALUE, String.valueOf(intYear));
		}
	}

	/**
	 * 契約サービス名を設定します。
	 * 
	 * <br>
	 * @param serviceInfoBean サービスフォームbean
	 * @throws Exception 
	 */
	private void setKeiyakuInfo(X31SDataBeanAccess serviceInfoBean) throws Exception
	{
		X31SDataBeanAccessArray beanArray = null;
		X31SDataBeanAccess doitSeikySykiListBean = null;

		// 同一請求先照会リスト
		beanArray = serviceInfoBean.getDataBeanArray(FUW00701SFConst.DOIT_SEIKY_SYKI_LST);

		// サービス種類名称を取得
		Map<String, String> svcKindMap = JFUWebCommon.getDispItemsAsMap(QUERY_PATH, QUERY_ATTR_NAME);

		//取得件数が2件以上の場合、メッセージを表示する
		int cnt = beanArray.getCount();
		if (cnt > 1)
		{
			// メッセージ表示フラグ
			serviceInfoBean.sendMessageBoolean(FUW00701SFConst.MSG_DISP_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);
		}

		String grpNm = JFUStrConst.EMPTY;
		String svcKeiNm = JFUStrConst.EMPTY;
		for (int i = 0; i < cnt; i++)
		{
			doitSeikySykiListBean = beanArray.getDataBean(i);
			// サービス種類名を取得
			grpNm = svcKindMap.get(doitSeikySykiListBean.sendMessageString(FUW00701SFConst.PRC_GRP_CD_02, X31CWebConst.DATABEAN_GET_VALUE));

			// ご契約サービス名にサービス種類名をセット
			if (svcKeiNm.length() > 0)
			{
				svcKeiNm = svcKeiNm + JFUStrConst.TOUTEN + grpNm;
			}
			else
			{
				svcKeiNm = grpNm;
			}
		}

		// ご契約サービス名
		serviceInfoBean.sendMessageString(FUW00701SFConst.KEI_SVC_NM, X31CWebConst.DATABEAN_SET_VALUE, svcKeiNm);
	}

	/**
	 * 現在の支払方法情報を設定します。
	 * 
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 * @throws Exception 
	 */
	private void setNowPayWayInfo(X31SDataBeanAccess serviceInfoBean) throws Exception
	{
		// 請求方法コード
		String seikyWayCd = serviceInfoBean.sendMessageString(FUW00701SFConst.NOW_SEIKY_WAY_CD, X31CWebConst.DATABEAN_GET_VALUE);

		// 請求抑止リスト
		X31SDataBeanAccessArray skyBeanArray = serviceInfoBean.getDataBeanArray(FUW00701SFConst.SEIKY_YKS);
		X31SDataBeanAccess skybean = skyBeanArray.getDataBean(0);

		// 請求抑止コード取得
		String seikyYoksiCd = JFUStrConst.EMPTY;
		if (!(skybean == null))
		{
			seikyYoksiCd = skybean.sendMessageString(FUW00701SFConst.SEIKY_YOKSI_CD_03, X31CWebConst.DATABEAN_GET_VALUE);
		}

		//現在のお支払い方法をセット
		if (JFUStrConst.CD00166_1.equals(seikyWayCd))
		{
			// 請求方法コード 「"1":窓口払い」
			serviceInfoBean.sendMessageString(FUW00701SFConst.NOW_PAYWAY, X31CWebConst.DATABEAN_SET_VALUE, SEIKYSY_HARAI);
		}
		else if ((JFUStrConst.CD00166_2.equals(seikyWayCd)) || (JFUStrConst.CD00166_3.equals(seikyWayCd)))
		{
			//「"2":預金口座振替」「"3":郵便自動振込」

			// 	口座一意照会リスト
			X31SDataBeanAccessArray kzsBeanArray = serviceInfoBean.getDataBeanArray(FUW00701SFConst.KOZA_LST);
			X31SDataBeanAccess kzsbean = kzsBeanArray.getDataBean(0);

			// 金融機関コード名
			String bankCdNm = JFUWebCommon.trim(kzsbean.sendMessageString(FUW00701SFConst.BANK_CD_NM_05, X31CWebConst.DATABEAN_GET_VALUE));
			// 金融機関支店コード名
			String banShitenCdNm =
					JFUWebCommon.trim(kzsbean.sendMessageString(FUW00701SFConst.BANK_SHITEN_CD_NM_05, X31CWebConst.DATABEAN_GET_VALUE));
			// 預金種目コード名
			String yokinShumokuCdNm = kzsbean.sendMessageString(FUW00701SFConst.YOKIN_SHUMOKU_CD_NM_05, X31CWebConst.DATABEAN_GET_VALUE);
			// 口座番号
			String kozaNo = kzsbean.sendMessageString(FUW00701SFConst.KOZA_NO_05, X31CWebConst.DATABEAN_GET_VALUE);
			// 口座名義カナ
			String kozaMeiginKana = kzsbean.sendMessageString(FUW00701SFConst.KOZA_MEIGIN_KANA_05, X31CWebConst.DATABEAN_GET_VALUE);
			// 支払い審査結果コード
			String paySkekkaCd = kzsbean.sendMessageString(FUW00701SFConst.PAY_SKEKKA_CD_05, X31CWebConst.DATABEAN_GET_VALUE);

			// 請求抑止コードが｢03｣：口座番号表示抑止の場合
			if (JFUStrConst.CD00111_03.equals(seikyYoksiCd))
			{
				//金融機関コード名に「＊＊＊＊＊＊＊」をセット
				bankCdNm = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00701, GET_TXT_ID_001);

				banShitenCdNm = JFUStrConst.EMPTY;
				yokinShumokuCdNm = JFUStrConst.EMPTY;
				kozaNo = JFUStrConst.EMPTY;

				//請求先名に「口座番号等の表示について、非表示のお申し出を受けております。（支払方法変更受付は可能です）」をセット
				serviceInfoBean.sendMessageString(FUW00701SFConst.SEIKY_CUST_NM, X31CWebConst.DATABEAN_SET_VALUE,
						JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00701, GET_TXT_ID_002));
			}
			else
			{
				// 請求先名に口座名義人カナ名＋「様」をセット
				serviceInfoBean.sendMessageString(FUW00701SFConst.SEIKY_CUST_NM, X31CWebConst.DATABEAN_SET_VALUE,
						kozaMeiginKana + JFUStrConst.SPACE + SAMA);
			}

			if (JFUStrConst.CD00166_3.equals(seikyWayCd))
			{
				// ゆうちょ
				if (JFUStrConst.PAY_SKEKKA_CD_31.equals(paySkekkaCd))
				{
					// 支払い審査結果コードが"31"（郵便自動振込申請ＮＧ）
					serviceInfoBean.sendMessageString(FUW00701SFConst.NOW_PAYWAY, X31CWebConst.DATABEAN_SET_VALUE, SEIKYSY_HARAI);
					serviceInfoBean.sendMessageString(FUW00701SFConst.PAY_WAY_NG_FLG, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00002_1);
				}
				else
				{
					// 上記以外
					serviceInfoBean.sendMessageString(FUW00701SFConst.NOW_PAYWAY, X31CWebConst.DATABEAN_SET_VALUE,
							bankCdNm + JFUStrConst.HALF_SPACE + kozaNo);
				}
			}
			else
			{
				// 銀行
				if (JFUStrConst.PAY_SKEKKA_CD_21.equals(paySkekkaCd))
				{
					// 支払い審査結果コードが"21"（口座振替申請ＮＧ）
					serviceInfoBean.sendMessageString(FUW00701SFConst.NOW_PAYWAY, X31CWebConst.DATABEAN_SET_VALUE, SEIKYSY_HARAI);
					serviceInfoBean.sendMessageString(FUW00701SFConst.PAY_WAY_NG_FLG, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00002_1);
				}
				else
				{
					// 上記以外
					serviceInfoBean.sendMessageString(FUW00701SFConst.NOW_PAYWAY, X31CWebConst.DATABEAN_SET_VALUE,
							bankCdNm + JFUStrConst.HALF_SPACE + banShitenCdNm + JFUStrConst.HALF_SPACE
							+ yokinShumokuCdNm + JFUStrConst.HALF_SPACE + kozaNo);
				}
			}
		}
		else if (JFUStrConst.CD00166_4.equals(seikyWayCd))
		{
			//「"4":クレジットカード」

			// 	クレジットカードリスト
			X31SDataBeanAccessArray cslBeanArray = serviceInfoBean.getDataBeanArray(FUW00701SFConst.CRECARD_SYKI_LST);
			X31SDataBeanAccess cslbean = cslBeanArray.getDataBean(0);

			// クレジットカード会社コード名
			String crecardCompCdNm =
					JFUWebCommon.trim(cslbean.sendMessageString(FUW00701SFConst.CRECARD_COMP_CD_NM_06, X31CWebConst.DATABEAN_GET_VALUE));
			// クレジットカード番号
			String crecardNo = cslbean.sendMessageString(FUW00701SFConst.CRECARD_NO_06, X31CWebConst.DATABEAN_GET_VALUE);
			// クレジットカード名義カナ名
			String crecardNmKana = cslbean.sendMessageString(FUW00701SFConst.CRECARD_NM_KANA_06, X31CWebConst.DATABEAN_GET_VALUE);
			// クレジットカード有効期限
			String crecardYkKigen = cslbean.sendMessageString(FUW00701SFConst.CRECARD_YK_KIGEN_06, X31CWebConst.DATABEAN_GET_VALUE);
			// クレジットカードステータス
			String crecardStat = cslbean.sendMessageString(FUW00701SFConst.CRECARD_STAT_06, X31CWebConst.DATABEAN_GET_VALUE);
			// クレジットカード無効年月
			String crecaMkYm = cslbean.sendMessageString(FUW00701SFConst.CRECA_MK_YM_06, X31CWebConst.DATABEAN_GET_VALUE);
			// オンライン運用日付（年月）
			String opeDateYm = JFUWebCommon.getOpeDate(this, null).substring(0, 6);

			//クレジットカード番号の編集
			crecardNo = JZMFormatForMask.crecardExcBL1(crecardNo);

			//クレジットカード有効期限の編集
			StringBuffer crecardYkKigen_Buff = new StringBuffer();
			// 年
			crecardYkKigen_Buff.append(crecardYkKigen.substring(0, 4).trim());
			crecardYkKigen_Buff.append(JFUStrConst.NEN);
			// 月
			crecardYkKigen_Buff.append(crecardYkKigen.substring(4, 6).trim());
			crecardYkKigen_Buff.append(JFUStrConst.TUKI);
			// 結合文字列
			crecardYkKigen = crecardYkKigen_Buff.toString();

			// 現在のお支払い方法
			if (JFUStrConst.CD00805_100.equals(crecardStat) && !JFUWebCommon.isNull(crecaMkYm) && Integer.parseInt(crecaMkYm) <= Integer.parseInt(opeDateYm))
			{
				// クレジットカードステータスが"100"（審査済）、かつ、無効年月に値が設定されている、かつ、無効年月が未来月ではない
				serviceInfoBean.sendMessageString(FUW00701SFConst.NOW_PAYWAY, X31CWebConst.DATABEAN_SET_VALUE, SEIKYSY_HARAI);
				serviceInfoBean.sendMessageString(FUW00701SFConst.PAY_WAY_NG_FLG, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00002_1);
			}
			else if (JFUStrConst.CD00805_190.equals(crecardStat))
			{
				// クレジットカードステータスが"190"（無効）
				serviceInfoBean.sendMessageString(FUW00701SFConst.NOW_PAYWAY, X31CWebConst.DATABEAN_SET_VALUE, SEIKYSY_HARAI);
				serviceInfoBean.sendMessageString(FUW00701SFConst.PAY_WAY_NG_FLG, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00002_1);
			}
			else
			{
				// 上記以外
				serviceInfoBean.sendMessageString(FUW00701SFConst.NOW_PAYWAY, X31CWebConst.DATABEAN_SET_VALUE,
						crecardCompCdNm + JFUStrConst.HALF_SPACE + crecardNo);
			}

			// 請求先名
			serviceInfoBean.sendMessageString(FUW00701SFConst.SEIKY_CUST_NM, X31CWebConst.DATABEAN_SET_VALUE,
					crecardNmKana + JFUStrConst.SPACE + SAMA);
			// クレジットカード有効期限
			serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_YK_KIGEN, X31CWebConst.DATABEAN_SET_VALUE, crecardYkKigen);
		}
	}

	/**
	 * mineo情報を設定します。
	 * 
	 * <br>
	 * @param serviceInfoBean サービスフォームBean
	 * @param outputMap サービス結果
	 */
	@SuppressWarnings("unchecked")
	private void setMineoInfo(X31SDataBeanAccess serviceInfoBean, HashMap outputMap)
	{
		// SCマップ情報取得
		HashMap parentMap = (HashMap)outputMap.get(FUSV031601SC);

		int mineoOnly = 0;
		int other = 0;
		int mineoOrMobileOnly = 0;
		int mineoOrMobileOther = 0;

		if (parentMap != null && !isNullForList((ArrayList)parentMap.get(EKK0321B501CBSMSG1LIST)))
		{
			// 明細取得
			ArrayList childList = (ArrayList)parentMap.get(EKK0321B501CBSMSG1LIST);

			// 料金グループコード比較
			for (int i = 0; i < childList.size(); i++)
			{
				HashMap childMap = (HashMap)childList.get(i);
				String prcGrpCd = (String)childMap.get(PRC_GRP_CD);

				if (JFUStrConst.CD00133_51.equals(prcGrpCd))
				{
					mineoOnly++;
				}
				else
				{
					other++;
				}

				if (JFUStrConst.CD00133_51.equals(prcGrpCd) || JFUStrConst.CD00133_07.equals(prcGrpCd) ||
					JFUStrConst.CD00133_08.equals(prcGrpCd) || JFUStrConst.CD00133_09.equals(prcGrpCd))
				{
					mineoOrMobileOnly++;
				}
				else
				{
					mineoOrMobileOther++;
				}
			}
		}

		if (mineoOnly > 0 && other == 0)
		{
			// mineo契約が有り、且つmineo以外の契約ない場合（mineo単独）、mineo単独フラグをtrueにする
			serviceInfoBean.sendMessageBoolean(FUW00701SFConst.MINEO_ONLY_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);
		}
		else
		{
			// 上記以外の場合（mineo以外の契約がある場合）、 mineo単独フラグをfalseにする
			serviceInfoBean.sendMessageBoolean(FUW00701SFConst.MINEO_ONLY_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);
		}

		if (mineoOrMobileOnly > 0 && mineoOrMobileOther == 0)
		{
			// mineoまたはモバイル契約が有り、且つ左記以外の契約がない場合、口座振替可能フラグをfalseにする
			serviceInfoBean.sendMessageBoolean(FUW00701SFConst.KOUFURI_ENABLED_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);
		}
		else
		{
			// 上記以外の場合（mineoまたはモバイル以外の契約がある場合）、口座振替可能フラグをtrueにする
			serviceInfoBean.sendMessageBoolean(FUW00701SFConst.KOUFURI_ENABLED_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);
		}
	}

	/**
	 * クリアパスのトークン取得結果判定処理です。
	 * 
	 * <br>
	 * @return チェック結果(true:OK / false:NG)
	 */
	private boolean chkTokenResult()
	{
		X31SDataBeanAccess bean = getServiceFormBean();
		boolean result = true;

		// 結果コード判定
		String resultCd = bean.sendMessageString(FUW00701SFConst.RESULT_CD, X31CWebConst.DATABEAN_GET_VALUE);
		if (!CLP_TKN_RSLT_CD_LIST.contains(resultCd))
		{
			// 「0」(正常終了)、「8」(発行前確認エラー)以外の場合エラー
			JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, ERR_MSG_AREA_ID_CRECARD_NO);
			return false;
		}

		// エラーコード判定
		String errCd = bean.sendMessageString(FUW00701SFConst.ERROR_CD, X31CWebConst.DATABEAN_GET_VALUE);
		if (JFUStrConst.CLP_RESULT_CD_8.equals(resultCd))
		{
			// 結果コードが「8」
			if (CLP_TKN_ERR_CD_LIST.contains(errCd))
			{
				// エラーコードが下記のいずれかの場合エラー
				// 「100011006」「100011007」「100011009」
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF0400_TW, new String[] { ERR_MSG_PARAM_CREDIT }, ERR_MSG_AREA_ID_CRECARD_NO);
				return false;
			}
			else
			{
				// 上記のエラーコード以外の場合エラー
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, ERR_MSG_AREA_ID_CRECARD_NO);
				return false;
			}
		}

		// トークンチェック
		String token = bean.sendMessageString(FUW00701SFConst.TOKEN, X31CWebConst.DATABEAN_GET_VALUE);
		if (JFUWebCommon.isNull(token))
		{
			// トークンが未設定の場合エラー
			JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, ERR_MSG_AREA_ID_CRECARD_NO);
			return false;
		}

		// カード番号下4桁チェック
		String cardNoUnder4 = bean.sendMessageString(FUW00701SFConst.CARD_NO_UNDER_4, X31CWebConst.DATABEAN_GET_VALUE);
		if (JFUWebCommon.isNull(cardNoUnder4))
		{
			// カード番号下4桁が未設定の場合エラー
			JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, ERR_MSG_AREA_ID_CRECARD_NO);
			return false;
		}

		return result;
	}

	/**
	 * クレジットカード番号１〜４を連結編集します。
	 * <br>
	 * @return 連結編集したクレジットカード番号
	 */
	private String getCrecadNo()
	{
		// サービスフォームBean取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		StringBuffer crecardNo_Buff = new StringBuffer();

		crecardNo_Buff.append(JFUStrConst.CREDIT_CARD_NO_0000);
		crecardNo_Buff.append(JFUStrConst.CREDIT_CARD_NO_0000);
		crecardNo_Buff.append(JFUStrConst.CREDIT_CARD_NO_0000);
		crecardNo_Buff.append(serviceInfoBean.sendMessageString(FUW00701SFConst.CARD_NO_UNDER_4, X31CWebConst.DATABEAN_GET_VALUE));

		String crecadNo = crecardNo_Buff.toString().trim();

		return crecadNo;
	}

	/**
	 * 月年リストの選択値を取得します。
	 * <br>
	 * @param service_form_bean サービスフォームBeanへのアクセス
	 * @return 月年リストの選択値
	 * 
	 */
	private String getMonthYearListValue(X31SDataBeanAccess service_form_bean)
	{
		X31SDataBeanAccess month_list = null;
		X31SDataBeanAccess year_list = null;
		X31SDataBeanAccessArray bean_array = null;

		// サービスフォームBean.有効期限（月）リスト配列を取得
		bean_array = service_form_bean.getDataBeanArray(FUW00701SFConst.MONTH_LIST);
		month_list = getDataBeanZero(bean_array);

		// サービスフォームBean.有効期限（年）リスト配列を取得
		bean_array = service_form_bean.getDataBeanArray(FUW00701SFConst.YEAR_LIST);
		year_list = getDataBeanZero(bean_array);

		// 月の選択値(0-12)
		Object mo = service_form_bean.sendMessageObject(FUW00701SFConst.CRECARD_YK_KIGEN_MONTH, X31CWebConst.DATABEAN_GET_VALUE);
		// 年の選択値(0-n)
		Object yo = service_form_bean.sendMessageObject(FUW00701SFConst.CRECARD_YK_KIGEN_YEAR, X31CWebConst.DATABEAN_GET_VALUE);

		// NULL値対策
		String ms = (mo != null) ? (mo.toString()) : (JFUStrConst.EMPTY);
		String ys = (yo != null) ? (yo.toString()) : (JFUStrConst.EMPTY);

		// 数値化(数値にならない場合:JFUStrConst.EMPTY)
		String mv = JFUStrConst.EMPTY;
		String yv = JFUStrConst.EMPTY;

		// 月
		try
		{
			int mi = Integer.parseInt(ms, 10);
			mv = month_list.sendMessageString(FUW00701SFConst.MONTH_VALUE_LIST_08, X31CWebConst.DATABEAN_GET_VALUE, mi);
		}
		catch (NumberFormatException nfe)
		{
			// エラーの場合は空文字を設定
			mv = JFUStrConst.EMPTY;
		}

		// 年
		try
		{
			int yi = Integer.parseInt(ys, 10);
			yv = year_list.sendMessageString(FUW00701SFConst.YEAR_VALUE_LIST_09, X31CWebConst.DATABEAN_GET_VALUE, yi);
		}
		catch (NumberFormatException nfe)
		{
			// エラーの場合は空文字を設定
			yv = JFUStrConst.EMPTY;
		}

		return mv + yv;
	}

	/**
	 * サービスインターフェイスパラメータの設定を行います。
	 */
	private void setInParamFusv0317()
	{
		// デバッグログ
		DEBUG_LOG.debug("----- FUW07701SFLogic_setInParamFusv0317 Start -----");

		// 共有フォームBean取得
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		// サービスフォームBean取得
		X31SDataBeanAccess serviceInfoBean = getServiceFormBean();

		// 現顧客契約情報の取得
		X31SDataBeanAccess genCustKeiInfo = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.GEN_CUST_KEI_INFO);
		// サービス契約情報の取得
		X31SDataBeanAccess svcKeiInfo = JFUWebCommon.getDataBeanTypeByPath(commonInfoBean, JFUWebCommon.SVC_KEI_INFO);

		// クレジットカード事業コードとして 固定値 "2":FTTH事業 をセット
		serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_JIGYO_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00420_2);

		// -------------------------------------------------
		// 初回オーソリ依頼SC
		// -------------------------------------------------
		// ●取引年月日、●取引時間
		String opeDate = JFUWebCommon.getOpeDateTimeStamp(this, null);
		String opeDate_date = opeDate.substring(0, 8);
		String opeDate_time = opeDate.substring(8, 14);
		String opeDate_time_stamp = opeDate.substring(8, 17);

		serviceInfoBean.sendMessageString(FUW00701SFConst.CR_ORDERDATE, X31CWebConst.DATABEAN_SET_VALUE, opeDate_date);
		serviceInfoBean.sendMessageString(FUW00701SFConst.CR_ORDERTIME, X31CWebConst.DATABEAN_SET_VALUE, opeDate_time);

		// ●運用日付をセット
		serviceInfoBean.sendMessageString(FUW00701SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate_date);
		// ●運用日付（時間）
		serviceInfoBean.sendMessageString(FUW00701SFConst.UNYO_TIME, X31CWebConst.DATABEAN_SET_VALUE, opeDate_time_stamp);

		// 決済金額
		serviceInfoBean.sendMessageString(FUW00701SFConst.CR_AMOUNT, X31CWebConst.DATABEAN_SET_VALUE, "1");

		// クレジットカード会社選択値（index）
		String co = nullToZero(serviceInfoBean.sendMessageString(FUW00701SFConst.CARD_SELECTED_IDX, X31CWebConst.DATABEAN_GET_VALUE));
		// NULL値対策
		int idx = Integer.parseInt(co);

		// クレジットカード会社リスト
		X31SDataBeanAccessArray creBean_array = serviceInfoBean.getDataBeanArray(FUW00701SFConst.CRECARD_COMP_LST);
		if (creBean_array.getCount() == 0)
		{
			creBean_array.addDataBean();
		}
		X31SDataBeanAccess crecard_comp_list = creBean_array.getDataBean(0);

		// 選択したクレジットカード会社コードを保持
		String selectedCrecardCompCd =
				crecard_comp_list.sendMessageString(FUW00701SFConst.CRECARD_COMP_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, idx);
		String selectedMembstrNo = JFUStrConst.EMPTY;

		// クレジットカード会社が「NICOS」の場合
		if (JFUStrConst.KK0531_CRECARD_COMP_CD_00009.equals(selectedCrecardCompCd))
		{
			// クレジットカード会社リストのクレジットカード 加盟店番号（１２桁）を設定
			selectedMembstrNo = crecard_comp_list.sendMessageString(FUW00701SFConst.MEMBSTR_NO_12_01, X31CWebConst.DATABEAN_GET_VALUE, idx);
		}
		else
		{
			// クレジットカード会社が「NICOS」以外
			// クレジットカード会社リストのクレジットカード 加盟店番号（１５桁）を設定
			selectedMembstrNo = crecard_comp_list.sendMessageString(FUW00701SFConst.MEMBSTR_NO_15_01, X31CWebConst.DATABEAN_GET_VALUE, idx);
		}

		// トリムを行う
		selectedMembstrNo = selectedMembstrNo.trim();

		// クレジット契約番号は先頭から11桁に編集
		if (selectedMembstrNo.length() >= 12)
		{
			selectedMembstrNo = selectedMembstrNo.substring(0, 11);
		}

		// ●クレジット契約番号
		serviceInfoBean.sendMessageString(FUW00701SFConst.CR_CCID, X31CWebConst.DATABEAN_SET_VALUE, selectedMembstrNo);

		// -------------------------------------------------
		// 審査済クレジットカード登録SC
		// -------------------------------------------------
		// ●変更後のクレジット会社コード
		serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_CRECARD_COMP_CD, X31CWebConst.DATABEAN_SET_VALUE, selectedCrecardCompCd);

		// ●変更後クレジットカード番号（編集なし）
		serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_CRECARD_NO, X31CWebConst.DATABEAN_SET_VALUE, getCrecadNo());

		// ●変更後のクレジットカードの有効期限（編集なし）
		String yyyyMm = getMonthYearListValue(serviceInfoBean);
		if (!JFUCommonUtil.isNull(yyyyMm))
		{
			yyyyMm = yyyyMm.substring(2, 6) + yyyyMm.substring(0, 2);
			serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_CRECARD_YK_KIGEN, X31CWebConst.DATABEAN_SET_VALUE, yyyyMm);
		}

		// ●変更後の会員名義カナ
		String payWaySlct = serviceInfoBean.sendMessageString(FUW00701SFConst.PAY_WAY_SLCT, X31CWebConst.DATABEAN_GET_VALUE);
		String custNmSlct = serviceInfoBean.sendMessageString(FUW00701SFConst.CUST_NM_SLCT, X31CWebConst.DATABEAN_GET_VALUE);

		if (JFUStrConst.PAYWAY_CREDIT.equals(payWaySlct))
		{
			// クレジットカードの場合
			if (CUST_NM_SLCT_0.equals(custNmSlct))
			{
				// 契約者と同じ場合
				serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_KIIN_MEIGI_KANA, X31CWebConst.DATABEAN_SET_VALUE,
						JFUWebCommon.getDataBeanItemByPath(genCustKeiInfo, CommonInfoCFConst.CUST_KANA_22));
				serviceInfoBean.sendMessageString(FUW00701SFConst.DSP_KIIN_MEIGI_KANA, X31CWebConst.DATABEAN_SET_VALUE, KEISHA_SAME);
			}
			else
			{
				// 契約者と異なる場合
				String kanaSei = serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_MEIGIN_SEI, X31CWebConst.DATABEAN_GET_VALUE);
				String kanaMei = serviceInfoBean.sendMessageString(FUW00701SFConst.CRECARD_MEIGIN_NM, X31CWebConst.DATABEAN_GET_VALUE);
				serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_KIIN_MEIGI_KANA, X31CWebConst.DATABEAN_SET_VALUE,
						kanaSei + JFUStrConst.SPACE + kanaMei);
				serviceInfoBean.sendMessageString(FUW00701SFConst.DSP_KIIN_MEIGI_KANA, X31CWebConst.DATABEAN_SET_VALUE,
						kanaSei + JFUStrConst.SPACE + kanaMei);
			}
		}
		else
		{
			// 口座振替の場合
			serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_KIIN_MEIGI_KANA, X31CWebConst.DATABEAN_SET_VALUE,
					serviceInfoBean.sendMessageString(FUW00701SFConst.CHAF_ACCOUNT_HOLDER, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// -------------------------------------------------
		// 請求支払先変更SC
		// -------------------------------------------------
		String svcKeiStat = JFUWebCommon.getDataBeanItemByPath(svcKeiInfo, CommonInfoCFConst.SVC_KEI_STAT_23);
		int mskm_dd = Integer.parseInt(opeDate.substring(6, 8)); //運用日付
		String mskm_yyyymmdd = JFUStrConst.EMPTY;

		// 予約適用年月日
		if (!JFUStrConst.CD00037_010.equals(svcKeiStat) && mskm_dd < 10)
		{
			// サービス契約ステータスが全て「010：受付済」以外で申込日付が1〜9日は当月10日適用日
			mskm_dd = 10;
			mskm_yyyymmdd = opeDate.substring(0, 6) + String.valueOf(mskm_dd);
		}
		else
		{
			// 申込日付が10〜31日の場合申込日を適用日とする対応
			mskm_yyyymmdd = opeDate.substring(0, 8);
		}

		// ●予約適用年月日
		serviceInfoBean.sendMessageString(FUW00701SFConst.RSV_APLY_YMD, X31CWebConst.DATABEAN_SET_VALUE, mskm_yyyymmdd);

		// デバッグログ
		DEBUG_LOG.debug("----- FUW07701SFLogic_setInParamFusv0317 End -----");
	}

	/**
	 * リクエストヘッダをログに出力します。(INFO:テスト確認用メソッド)
	 * <br>
	 */
	@SuppressWarnings("unchecked")
	private void outReqHeader()
	{
		X33WSessionController sessionCtrl = X33CUtil.getSession(getSessionId());
		HttpServletRequest request = sessionCtrl.getServletRequest();
		java.util.Enumeration<String> enumH = request.getHeaderNames();

		while (enumH.hasMoreElements())
		{
			String name = enumH.nextElement();
			String tmpHeader = request.getHeader(name);
			DEBUG_LOG.debug("【リクエストヘッダ】" + name + "■" + tmpHeader);
		}
	}

	/**
	 * NULLの場合に"0"を返却します。
	 * <br>
	 * @param str 文字列
	 * @return 結果
	 */
	private String nullToZero(String str)
	{
		String ret = str;

		if (JFUCommonUtil.isNull(ret))
		{
			ret = JFUStrConst.S_ZERO;
		}

		return ret;
	}

	/**
	 * リストがNULLであるか判定します。
	 * 
	 * <br>
	 * @param list
	 * @return 結果
	 */
	@SuppressWarnings("unchecked")
	private boolean isNullForList(ArrayList list)
	{
		return list == null || list.size() == 0;
	}

	/**
	 * Beanの子要素の配列1番目を取得（子要素無い場合作成）を行います。
	 * <br>
	 * @param i_bean_array Beanアクセサの配列
	 * @return 子要素配列１番目へのアクセサ
	 */
	private X31SDataBeanAccess getDataBeanZero(X31SDataBeanAccessArray i_bean_array)
	{
		if (i_bean_array.getCount() <= 0)
		{
			i_bean_array.addDataBean();
		}

		return i_bean_array.getDataBean(0);
	}

	/**
	 * ビジネスログへの出力処理
	 *
	 * @param msg ログ情報
	 */
	private void outputBusLog(String msg)
	{
		JSYwebLog.println(JSYwebLog.EXECUTION, getClass(), msg, "CS0003I", null, null);
	}

	/**
	 * 運用日付(OPEDATE)の設定
	 *
	 * 共通フォームBean.フロント共有情報.フロント運用日付に運用日付(OPEDATE)を設定。
	 *
	 * @param commonInfoBean
	 * @return 運用日付(OPEDATE:yyyyMMdd)
	 */
	private String setFuOpedate(X31SDataBeanAccess commonInfoBean)
	{
		String opeDate = JCCWebCommon.getOpeDate(this, null);

		//=====================================================================
		// 運用日付の設定
		//=====================================================================
		setFuOpedate(commonInfoBean, opeDate);
		return opeDate;
	}

	/**
	 * 運用日付(OPEDATE)の設定
	 *
	 * 共通フォームBean.フロント共有情報.フロント運用日付に運用日付(OPEDATE)を設定。
	 *
	 * @param commonInfoBean 共通フォームBean
	 * @param opeDate 運用日付(OPEDATE)
	 */
	private void setFuOpedate(X31SDataBeanAccess commonInfoBean, String opeDate)
	{
		//=====================================================================
		// 運用日付の設定
		//=====================================================================
		// 共通フォームBean.フロント共有情報
		X31SDataBeanAccess frontInfo = commonInfoBean.getDataBeanArray(CommonInfoCFConst.FRONT_COMMON_INFO).getDataBean(0);
		// フロント共有情報.フロント運用日付を設定します。
		frontInfo.sendMessageString(CommonInfoCFConst.FU_OPEDATE_05, X31CWebConst.DATABEAN_SET_VALUE, opeDate);

	}
}
