/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：お支払い方法入力(量販・訪販)
*   ソースファイル名：FUW00945SFLogic.java
*   作成者          ：富士通
*   日付            ：2017年01月19日
*＜機能概要＞
*   お支払い方法入力(量販・訪販)画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者		修正内容
*   v29.00.00   2017/01/19   FJ)謝      【ANK-3112-00-00】訪販チャネルのタブレット対応 新規作成
*   v36.00      2017/12/01   FJ)岡井    【ANK-3313-00-00】クレジットカード非通過対応
*   v36.00      2017/12/14   FJ)岡井    【ANK-3313-00-00】クレジットカード非通過対応【案件内仕変2:申し込み時の５大カードブランド聞き取り化】
*   v39.00.00   2018/10/29   FJ)黒田(耕)【ANK-3518-00-00】量販・訪販Webのサービス追加
*   v50.00.00   2020/06/20   FJ)吉田	【OM-2020-0000735】量販・訪販でお支払方法選択の必須チェックがされていない
*   v58.00.00   2022/05/09   FJ)新谷    【ANK-3846-00-00】【クレカ】クリアパス→ペイジェント移行
*   v73.00.00   2024/10/30   FJ）浅井   【ANK-4427-00-00】NTT卸対応
*   v73.01.00   2024/09/24   FJ）福山   【ANK-4570-00-00】コンテンツ新規同時申込み時契約仕様見直し対応
*   v74.00.00   2025/01/09   FJ)余野木  【ANK-4592-00-00】テレビ新コース（スカパー用）導入対応
**********************************************************************/
package eo.web.webview.FUW00945SF;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.common.JSYwebLog;
import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SRuntimeException;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JZMCreditcardValid;
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.FUSV0301_FUSV0301OPDBMapper;
import eo.web.webview.mapping.FUSV0302_FUSV0302OPDBMapper;

/**
 * 
 * @author 富士通
 */
@SuppressWarnings("serial")
public class FUW00945SFLogic extends JCCWebBusinessLogic
{
	/** クレジットカード名義人同意(未チェック)（共有フォームBean用（サービスフォーム側はBoolean）） */
	private static final String DOI_UNKNOWN = "";

	/** クレジットカード名義人同意（共有フォームBean用（サービスフォーム側はBoolean）） */
	private static final String DOI_OK = "1";

	/** クレジット・名義人種別（同じフラグ（契約者と異なるか不明））（共有フォームBean用） */
	private static final String SAME_UNKNOWN = "";

	/** クレジット・名義人種別（同じフラグ（契約者と同じ））（共有フォームBean用） */
	private static final String SAME_YES = "1";

	/** クレジット・名義人種別（異なるフラグ（契約者と異なるか不明））（共有フォームBean用） */
	private static final String DIFF_UNKNOWN = "";

	/** クレジット・名義人種別（異なるフラグ（契約者と異なる））（共有フォームBean用） */
	private static final String DIFF_YES = "1";

	/** クレジット・名義人種別（未選択）（サービスフォームBean用） */
	private static final String MEIGININ_SBT_UNKNOWN = "";

	/** クレジット・名義人種別（同じフラグ）（サービス用） */
	private static final String MEIGININ_SBT_SAME = "0";

	/** クレジット・名義人種別（異なるフラグ）（サービス用） */
	private static final String MEIGININ_SBT_DIFF = "1";

	/** ユースケースID（FUSV0301） */
	private static final String USECASE_ID_FUSV0301 = "FUSV0301";

	/** ユースケースID（FUSV0302） */
	private static final String USECASE_ID_FUSV0302 = "FUSV0302";

	/** 選択してください */
	private static final String SELECT_INFO = "選択してください";

	/** リスト初期値 */
	private static final String LIST_DEF_VALUE = "0";

	/** エラー表示用文 */
	private static final String CRECARD_NO = "クレジットカード番号";

// ANK-3518-00-00 ADD START
	/** エラー表示用文 */
	private static final String TRAT_CD = "正しい取扱コード";

	/** エラー表示用文 */
	private static final String INPUT = "入力";
// ANK-3518-00-00 ADD END
	
// OM-2020-0000735 ADD START
	/** エラー表示用文 */
	private static final String PAYWAY_CONTINUE = "お支払い方法引き継ぎ";

	/** エラー表示用文 */
	private static final String CHOICE = "選択";
// OM-2020-0000735 ADD END

	/** エラー表示用項目ID */
	private static final String CRECARD_NUM = "creditCardNumber";

	/** エラー表示用項目ID */
	private static final String CRECARD_COM = "creditCampany";

	/** エラー表示用項目ID */
	private static final String CRECARD_EXP_ERR = "expirationDateMonthAndYear";

// ANK-3518-00-00 ADD START
	/** エラー表示用項目ID */
	private static final String HANDLE_CD = "handleCd";
// ANK-3518-00-00 ADD END
	
// OM-2020-0000735 ADD START
	/** エラー表示用項目ID */
	private static final String PAYTYPE_3_4 = "payType3and4";
// OM-2020-0000735 ADD END

	/** エラーメッセージ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(EKF0400-TW) */
	private static final String ERR_CD_EKT0400_TW = "EKF0400-TW";

// ANK-3518-00-00 ADD START
	/** エラーメッセージID(EKF0420-TW) */
	private static final String ERR_CD_EKF0420_TW = "EKF0420-TW";
// ANK-3518-00-00 ADD END

	/** エラー表示用文 */
	private static final String CARD_NO = "カード番号";
	/** エラー表示用文 */
	private static final String EXP_DATE = "有効期限";
	/** エラー表示用文 */
	private static final String SECURITY_CD = "セキュリティコード";
	/** エラー表示用項目ID */
	private static final String SECURITY_CD_ERR = "securityCd";
	/** エラー表示用文 */
	private static final String CRECARD_NAME = "カード名義人";
	/** エラー表示用項目ID */
	private static final String CRECARD_NAME_ERR = "cardHolderTotalNameKana";
	/** エラー表示用定数 */
	private static final String ERR_MSG_ID_EKF2280_CE = "EKF2280-CE";

	/** 画面定義ファイル照会値 クレジットカード表示年数 */
	private static final String CRECARD_DISP_YEARS = "crecardDispYears";

	/** 戻るボタン表示フラグ（0:テレビ単独） */
	private static final String ZERO = "0";

	/** 戻るボタン表示フラグ（1:それ以外） */
	private static final String ONE = "1";

	/** クリアパストーク取得結果コードリスト */
	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);

// ANK-3518-00-00 ADD START
	/** 項目表示フラグ：true表示 */
	private static final boolean ITEM_DSP_FLG_DISP = true;

	/** 項目表示フラグ：false非表示 */
	private static final boolean ITEM_DSP_FLG_NO_DISP = false;
// ANK-3518-00-00 ADD END

	/**
	 * 初期化処理
	 * @return boolean true(固定)
	 * @throws Exception 
	 */
	public boolean init() throws Exception
	{
		// 共有フォームBeanを取得する
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		
		// サービスフォームBeanを取得する
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();
		
		// 共有フォームBean.ＷＥＢ新規情報を取得する
		X31SDataBeanAccessArray webNewInfoArray = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfoBean = getDataBeanZero(webNewInfoArray);
		
		// 共有フォームBean.支払い方法情報を取得する
		X31SDataBeanAccessArray paywayInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.PAYWAY_INFO);
		X31SDataBeanAccess paywayInfoBean = getDataBeanZero(paywayInfoArray);
		
// ANK-3518-00-00 ADD START
		// 契約サービス情報
		X31SDataBeanAccessArray keiSvcInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiSvcInfoBean = getDataBeanZero(keiSvcInfoArray);
		
		// その他情報
		X31SDataBeanAccessArray elseInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.ELSE_INFO);
		X31SDataBeanAccess elseInfoBean = getDataBeanZero(elseInfoArray);
		
		// 申込区分 (0:未定 1:新規申込 2:追加申込)
		String mskmKbn = webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 回線場所選択 (1:契約中の回線に追加 2:新しい場所に回線追加)
		String  kaisenSelect = elseInfoBean.sendMessageString(CommonInfoCFConst.KAISEN_SELECT_18, X31CWebConst.DATABEAN_GET_VALUE);
		
		// eo電気契約有無区分（0:なし 1:あり）
		String eoDenkiKei = keiSvcInfoBean.sendMessageString(CommonInfoCFConst.NOW_SVC_DENKI_10, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 支払方法引継ぎ表示フラグ（非表示）
		serviceFormBean.sendMessageBoolean(FUW00945SFConst.PAYWAY_HKTGI_FLG, X31CWebConst.DATABEAN_SET_VALUE, ITEM_DSP_FLG_NO_DISP);
		// 支払方法引継ぎ（引き継ぐ）表示フラグ（非表示）
		serviceFormBean.sendMessageBoolean(FUW00945SFConst.PAYWAY_HKTGI_HKTG_FLG, X31CWebConst.DATABEAN_SET_VALUE, ITEM_DSP_FLG_NO_DISP);
		
		if ((JFUStrConst.MSKM_KBN_ADD.equals(mskmKbn) && JFUStrConst.KAISEN_SELECT_ADD_KEI.equals(kaisenSelect))
				|| (JFUStrConst.KAISEN_SELECT_ADD_NEW_PLACE.equals(kaisenSelect) && JFUStrConst.ELEC_MSKM_UM_ARI.equals(eoDenkiKei)))
		{
			// 支払方法引継ぎ表示フラグ（表示）
			serviceFormBean.sendMessageBoolean(FUW00945SFConst.PAYWAY_HKTGI_FLG, X31CWebConst.DATABEAN_SET_VALUE, ITEM_DSP_FLG_DISP);
			
			if (JFUStrConst.MSKM_KBN_ADD.equals(mskmKbn) && JFUStrConst.KAISEN_SELECT_ADD_KEI.equals(kaisenSelect))
			{
				// 支払方法引継ぎ（引き継ぐ）表示フラグ（表示）
				serviceFormBean.sendMessageBoolean(FUW00945SFConst.PAYWAY_HKTGI_HKTG_FLG, X31CWebConst.DATABEAN_SET_VALUE, ITEM_DSP_FLG_DISP);
			}
		}
// ANK-3518-00-00 ADD END
		
		// クレジットカード会社リストの先頭行にブランク行を設定する
		X31SDataBeanAccessArray crecardCompArray = serviceFormBean.getDataBeanArray(FUW00945SFConst.CRECARD_COMP_LIST);
		crecardCompArray.clearArray();
		X31SDataBeanAccess crecardCompBean = getDataBeanZero(crecardCompArray);
		crecardCompBean.sendMessageString(FUW00945SFConst.CRECARD_COMP_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, LIST_DEF_VALUE);
		crecardCompBean.sendMessageString(FUW00945SFConst.CRECARD_COMP_NM_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, SELECT_INFO);
		crecardCompBean.sendMessageString(FUW00945SFConst.MEMBSTR_NO_15_01, X31CWebConst.DATABEAN_ADD_VALUE, JFUStrConst.EMPTY);
		crecardCompBean.sendMessageString(FUW00945SFConst.MEMBSTR_NO_12_01, X31CWebConst.DATABEAN_ADD_VALUE, JFUStrConst.EMPTY);
		crecardCompBean.sendMessageString(FUW00945SFConst.CREDIT_KOKAN_CD_LIST_01, X31CWebConst.DATABEAN_ADD_VALUE, JFUStrConst.EMPTY);
		
		
		// サービス呼出処理
		// クレジットカード事業コード "2":FTTH事業
		serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_JIGYO_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00420_2);
		
		// ユースケースIDをセットする
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0301);
		
		// マッパー引数用Bean配列を生成する
// ANK-3518-00-00 MOD START
//		X31SDataBeanAccess[] paramBean = { serviceFormBean };
		X31SDataBeanAccess[] paramBean = { serviceFormBean, commonInfoBean };
// ANK-3518-00-00 MOD END
		
		// 設定値格納用マップを生成する
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		
		// 検索結果格納用マップを生成する
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// DataBean-BPマッピングを生成する
		FUSV0301_FUSV0301OPDBMapper mapper = new FUSV0301_FUSV0301OPDBMapper();
		mapper.setFUSV030101SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setFUSV030102SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		
// ANK-3518-00-00 ADD START
		mapper.setFUSV030103SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_4);
		mapper.setFUSV030104SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_4);
		mapper.setFUSV030105SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_4);
// ANK-3518-00-00 ADD END
		mapper.setFUSV030106SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		
		// サービス呼出処理を行う
		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (JCCWebServiceException se)
		{
			// 上記以外の場合システムエラーとし、業務共通例外クラス（JCCBusinessException）をスローする
			throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
		}
		
		// サービス処理結果からクレジットカード会社リストにデータを移送する
		mapper.getFUSV030101SC(paramBean, outputMap);
		
// ANK-3518-00-00 ADD START
		mapper.getFUSV030103SC(paramBean, outputMap);
		mapper.getFUSV030104SC(paramBean, outputMap);
		mapper.getFUSV030105SC(paramBean, outputMap);
// ANK-3518-00-00 ADD END
		mapper.getFUSV030106SC(paramBean, outputMap);
		
		// 月年リストを作成する
		setMonthYearList(serviceFormBean);
		
		// サービスフォームBeanに共有フォームBeanの値を復元する
// ANK-3518-00-00 ADD START
		cpStr(serviceFormBean, FUW00945SFConst.PAYWAY_CONTINUE, paywayInfoBean, CommonInfoCFConst.PAYWAY_CONTINUE_15);					// 支払方法引継
// ANK-3518-00-00 ADD END
		cpStr(serviceFormBean, FUW00945SFConst.PAYWAY, paywayInfoBean, CommonInfoCFConst.PAYWAY_15);									// 支払方法選択
		cpStr(serviceFormBean, FUW00945SFConst.CRECARD_COMP_CD, paywayInfoBean, CommonInfoCFConst.CRECARD_COMP_CD_15);					// クレジットカード会社コード
//		cpStr(serviceFormBean, FUW00945SFConst.CRECARD_NO1, paywayInfoBean, CommonInfoCFConst.CRECARD_NO1_15);							// クレジットカード番号1
//		cpStr(serviceFormBean, FUW00945SFConst.CRECARD_NO2, paywayInfoBean, CommonInfoCFConst.CRECARD_NO2_15);							// クレジットカード番号2
//		cpStr(serviceFormBean, FUW00945SFConst.CRECARD_NO3, paywayInfoBean, CommonInfoCFConst.CRECARD_NO3_15);							// クレジットカード番号3
//		cpStr(serviceFormBean, FUW00945SFConst.CRECARD_NO4, paywayInfoBean, CommonInfoCFConst.CRECARD_NO4_15);							// クレジットカード番号4
		serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_NO1, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_NO2, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_NO3, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_NO4, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		cpStr(serviceFormBean, FUW00945SFConst.CUST_NM_KANA_SEI, paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_SEI_15);				// カード名義人(カナ・姓)
		cpStr(serviceFormBean, FUW00945SFConst.CUST_NM_KANA_NM, paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_NM_15);					// カード名義人(カナ・名)
		cpStr(serviceFormBean, FUW00945SFConst.CUST_NM_KANA, paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_15);						// カード名擬人(カナ)
		cpStr(serviceFormBean, FUW00945SFConst.CRECARD_YK_KIGEN_MONTH, paywayInfoBean, CommonInfoCFConst.CRECARD_YK_KIGEN_MONTH_15);	// カード有効期限(月)
		cpStr(serviceFormBean, FUW00945SFConst.CRECARD_YK_KIGEN_YEAR, paywayInfoBean, CommonInfoCFConst.CRECARD_YK_KIGEN_YEAR_15);		// カード有効期限(年)

		serviceFormBean.sendMessageString(FUW00945SFConst.RESULT_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceFormBean.sendMessageString(FUW00945SFConst.ERROR_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceFormBean.sendMessageString(FUW00945SFConst.TOKEN, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceFormBean.sendMessageString(FUW00945SFConst.CARD_NO_UNDER_4, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		serviceFormBean.sendMessageString(FUW00945SFConst.MASKED_CARD_NO, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		// カード名義人選択
		String meigininSelectFlag = MEIGININ_SBT_UNKNOWN;
		Object isSame = paywayInfoBean.sendMessageObject(CommonInfoCFConst.CUST_NM_SBT_SAME_15, X31CWebConst.DATABEAN_GET_VALUE);
		Object isDiff = paywayInfoBean.sendMessageObject(CommonInfoCFConst.CUST_NM_SBT_DIFF_15, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 共有フォームBeanのクレジット・名義人種別（契約者と同じ）  が "1" の場合は "0"
		// 共有フォームBeanのクレジット・名義人種別（契約者と異なる）が "1" の場合は "1"
		// 上記以外は ブランク"" として非選択状態とする
		meigininSelectFlag = ((isSame != null) && (SAME_YES.equals(isSame.toString()))) ? (MEIGININ_SBT_SAME) : (meigininSelectFlag);
		meigininSelectFlag = ((isDiff != null) && (DIFF_YES.equals(isDiff.toString()))) ? (MEIGININ_SBT_DIFF) : (meigininSelectFlag);
		serviceFormBean.sendMessageString(FUW00945SFConst.CUST_NM_SLCT, X31CWebConst.DATABEAN_SET_VALUE, meigininSelectFlag);
		
		// クレジットカード名義人同意
		boolean meiginDoiFlag = false;
		Object meiginDoi = paywayInfoBean.sendMessageObject(CommonInfoCFConst.CRECARD_MEIGIN_DOI_15, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 共有フォームBeanの名義人同意が String であるため boolean に変更する
		meiginDoiFlag = (meiginDoi != null) && (DOI_OK.equals(meiginDoi.toString()));
		serviceFormBean.sendMessageBoolean(FUW00945SFConst.CRECARD_MEIGIN_DOI, X31CWebConst.DATABEAN_SET_VALUE, meiginDoiFlag);
		
		// クレジット会社名リストの選択インデックスを得る
		setCardCompListIndex(serviceFormBean);
		
		// 月年リストの選択インデックスを得る
		setMonthYearListIndex(serviceFormBean);
		
		// システム日付を設定する
		serviceFormBean.sendMessageString(FUW00945SFConst.SYS_DATE, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getSysDate());
		
		// 戻るボタン表示フラグ設定処理
		boolean tvSingleflg = tvSingleCheck(commonInfoBean);
		
// ANK-4570-00-00 MOD START
		boolean campaignFlg = JFUWebCommon.isCamapaignList(webNewInfoBean, JCCWebCommon.getOpeDate(this, null));
		// FUW00931(登録完了)から遷移してきた場合(テレビ単独(地デジ・BS、WiFi・WiMAX&白ロム) かつ 対象キャンペーンが存在しない場合)
		if (tvSingleflg && !campaignFlg)
// ANK-4570-00-00 MOD END
		{
			serviceFormBean.sendMessageString(FUW00945SFConst.BACK_BTN_FLG, X31CWebConst.DATABEAN_SET_VALUE, ZERO);
		}
		// それ以外
		else
		{
			serviceFormBean.sendMessageString(FUW00945SFConst.BACK_BTN_FLG, X31CWebConst.DATABEAN_SET_VALUE, ONE);
		}
		
		// 初回オーソリ依頼の処理結果コードが"1"の場合
		if (JFUStrConst.CR_RESULTCODE_NG.equals(paywayInfoBean.sendMessageString(CommonInfoCFConst.CR_RESULTCODE_15,
				X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// クレジットカード番号を正しく入力してください。
			JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF0400_TW, new String[] { CRECARD_NO }, CRECARD_NUM);

			// 処理結果コードを初期化する。
			paywayInfoBean.sendMessageString(CommonInfoCFConst.CR_RESULTCODE_15, X31CWebConst.DATABEAN_SET_VALUE, "");
		}

		// 初回オーソリ依頼の処理結果コードが"2"の場合
		if (JFUStrConst.CR_RESULTCODE_NG_2.equals(paywayInfoBean.sendMessageString(CommonInfoCFConst.CR_RESULTCODE_15,
				X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// クレジットカードの有効期限が切れているか、有効期限の入力誤りがあります。正しく入力してください。
			JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1890_TW, CRECARD_EXP_ERR);

			// 処理結果コードを初期化する。
			paywayInfoBean.sendMessageString(CommonInfoCFConst.CR_RESULTCODE_15, X31CWebConst.DATABEAN_SET_VALUE, "");
		}
		
		// 初回オーソリ依頼の処理結果コードが"3"の場合
		if (JFUStrConst.CR_RESULTCODE_NG_3.equals(paywayInfoBean.sendMessageString(CommonInfoCFConst.CR_RESULTCODE_15,
				X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// 現在、お申し込みを受け付けできません
			//JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, CRECARD_COM);
			JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, CRECARD_NUM);

			// 処理結果コードを初期化する。
			paywayInfoBean.sendMessageString(CommonInfoCFConst.CR_RESULTCODE_15, X31CWebConst.DATABEAN_SET_VALUE, "");
		}
		
		// 初回オーソリ依頼の処理結果コードが"4"の場合
		if (JFUStrConst.CR_RESULTCODE_NG_4.equals(paywayInfoBean.sendMessageString(CommonInfoCFConst.CR_RESULTCODE_15,
				X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// ご利用いただけないクレジットカードです。
			//JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1880_TW, CRECARD_COM);
			JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1880_TW, CRECARD_NUM);

			// 処理結果コードを初期化する。
			paywayInfoBean.sendMessageString(CommonInfoCFConst.CR_RESULTCODE_15, X31CWebConst.DATABEAN_SET_VALUE, "");
		}
		
		return true;
	}
	
	/**
	 * 遷移処理（次へ）
	 * @return boolean true(固定)
	 * @throws Exception 
	 */
	public boolean next() throws Exception
	{
		subNextAndBackKakunin();
		return true;
	}
	
	/**
	 * 遷移処理（確認画面に戻る）
	 * @return boolean true(固定)
	 * @throws Exception 
	 */
	public boolean backKakunin() throws Exception
	{
		subNextAndBackKakunin();
		return true;
	}
	
	/**
	 * 遷移処理（戻る）
	 * @return boolean true(固定)
	 * @throws Exception 
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBeanを取得する
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		
		// 共有フォームBean.ＷＥＢ新規情報を取得する
		X31SDataBeanAccessArray webNewInfoArray = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfoBean = getDataBeanZero(webNewInfoArray);
		
		// 共有フォームBean.支払い方法情報を取得する
		X31SDataBeanAccessArray paywayInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.PAYWAY_INFO);
		X31SDataBeanAccess paywayInfoBean = getDataBeanZero(paywayInfoArray);
		
		// 共有フォームBean.契約サービス情報を取得する
		X31SDataBeanAccessArray keiyakuSvcInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiyakuSvcInfoBean = getDataBeanZero(keiyakuSvcInfoArray);
		
		// 共有フォームBean.ｅｏ光テレビを取得する
		X31SDataBeanAccessArray eotvArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.EOTV);
		X31SDataBeanAccess eotvBean = getDataBeanZero(eotvArray);
		
		// 選択サービス(ネット)を取得する
		String selSvcNet = keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 選択サービス(電話)を取得する
		String selSvcTel = keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 選択サービス(テレビ)を取得する
		String selSvcTv = keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_TV_10, X31CWebConst.DATABEAN_GET_VALUE);
		
		// テレビコース（ｅｏ光テレビ入力）を取得する
		String tvCourse = eotvBean.sendMessageString(CommonInfoCFConst.EO_TV_COURSE_13, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 引継情報を作成する
		// 画面遷移モード "0":通常遷移
		webNewInfoBean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.SCREEN_MODE_DEF);
		clStr(paywayInfoBean, CommonInfoCFConst.PAYWAY_15);						// 支払方法選択
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_COMP_CD_15);			// クレジット会社コード
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_COMP_NM_15);			// クレジット会社名
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO1_15);				// クレジット番号（１）
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO2_15);				// クレジット番号（２）
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO3_15);				// クレジット番号（３）
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO4_15);				// クレジット番号（４）
		clStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_SBT_SAME_15);			// クレジット・名義人種別（契約者と同じ）
		clStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_SBT_DIFF_15);			// クレジット・名義人種別（契約者と異なる）
		clStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_SEI_15);			// クレジット・名義人（カナ・姓）
		clStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_NM_15);			// クレジット・名義人（カナ・名）
		clStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_15);				// クレジット・名義人（カナ）
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_MEIGIN_DOI_15);			// クレジットカード名義人同意
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_YK_KIGEN_MONTH_15);		// カード有効期限(月)
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_YK_KIGEN_YEAR_15);		// カード有効期限(年)
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_KEI_NO_15);				// クレジット契約番号
		clStr(paywayInfoBean, CommonInfoCFConst.MEMBSTR_NO_15);					// 加盟店番号
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_SHIKOSAKI_COMP_CD_15);	// 仕向先カード会社コード（クレジットカード）
		clStr(paywayInfoBean, CommonInfoCFConst.TOKEN_15);						// トークン
		clStr(paywayInfoBean, CommonInfoCFConst.CARD_NO_UNDER_4_15);			// カード番号下４桁
		clStr(paywayInfoBean, CommonInfoCFConst.MASKED_CARD_NO_15);				// マスクされたカード番号
		
		// 遷移先画面を設定する
// ANK-3473-00-00 ADD START
		// 選択可能キャンペーンリスト存在フラグ
// ANK-3642-00-00 MOD START
		Boolean campaignFlg = JFUWebCommon.isCamapaignList(webNewInfoBean, JCCWebCommon.getOpeDate(this, null));
// ANK-3642-00-00 MOD END
		// 申込区分
		String mskmKbn = webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_KBN_06, X31CWebConst.DATABEAN_GET_VALUE);
// ANK-4427-00-00 MOD START
//		if (campaignFlg)
		String typenFlg = webNewInfoBean.sendMessageString(CommonInfoCFConst.TYPEN_FLG_06, X31CWebConst.DATABEAN_GET_VALUE);
		//NTT卸の場合
		if (!JFUWebCommon.isNull(typenFlg))
		{
			JCCWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00945, JFUScreenConst.SCREEN_ID_FUW00916);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00916);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00916);
		}
		else if (campaignFlg)
// ANK-4427-00-00 MOD END
		{
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00959);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00959);
		}
// ANK-4570-00-00 MOD START
		else if(JFUStrConst.MSKM_KBN_NEW.equals(mskmKbn) && JFUStrConst.SELECT_SVC_NET_CHOICE.equals(selSvcNet))
// ANK-4570-00-00 MOD END
		{
			JCCWebCommon.setScreenId(this, JFUScreenConst.SCREEN_ID_FUW00945, JFUScreenConst.SCREEN_ID_FUW00965);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00965);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00965);
		}
// ANK-4592-00-00 MOD START
		else if(JFUStrConst.SELECT_SVC_CHOICE.equals(selSvcTv) && (JFUStrConst.EO_TV_COURSE_BASIC.equals(tvCourse)
				|| JFUStrConst.EO_TV_COURSE_CS_PRE.equals(tvCourse) || JFUStrConst.EO_TV_COURSE_CS_BAS.equals(tvCourse)))
// ANK-4592-00-00 MOD END
//ANK-3473-00-00 ADD END
		{
			// テレビ選択あり(HDコース)(CSプレミアム)(CSベーシック)：eo光テレビオプション選択(量販･訪販)画面に遷移する
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00919);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00919);
		}
		else if(JFUStrConst.SELECT_SVC_CHOICE.equals(selSvcTel))
		{
			// 電話選択あり：eo光電話オプション選択(量販･訪販)画面に遷移する
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00917);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00917);
		}
		else if(JFUStrConst.SELECT_SVC_CHOICE.equals(selSvcNet))
		{
			// ネット選択あり：eo光ネットオプション選択(量販･訪販)画面に遷移する
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00916);
			commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00916);
		}
		
		return true;
	}
	
	/**
	 * サービス呼び出しの共通処理部位
	 * @throws Exception
	 */
	private void subNextAndBackKakunin() throws Exception
	{
		// 共有フォームBeanを取得する
		X31SDataBeanAccess commonInfoBean = getCommonInfoBean();
		
		// サービスフォームBeanを取得する
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();
		
		// 共有フォームBean.ＷＥＢ新規情報を取得する
		X31SDataBeanAccessArray webNewInfoArray = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfoBean = getDataBeanZero(webNewInfoArray);
		
		// 共有フォームBean.支払い方法情報を取得する
		X31SDataBeanAccessArray paywayInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.PAYWAY_INFO);
		X31SDataBeanAccess paywayInfoBean = getDataBeanZero(paywayInfoArray);
		
// ANK-3518-00-00 ADD START
		// 共有フォームBean.契約サービス情報を取得する
		X31SDataBeanAccessArray keiyakuSvcInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiyakuSvcInfoBean = getDataBeanZero(keiyakuSvcInfoArray);
// ANK-3518-00-00 ADD END
		
// OM-2020-0000735 ADD START
		// 共有フォームBean.その他情報を取得する
		X31SDataBeanAccessArray elseInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.ELSE_INFO);
		X31SDataBeanAccess elseInfoBean = getDataBeanZero(elseInfoArray);
// OM-2020-0000735 ADD END
		
		// 支払方法選択を取得する
		String payway = serviceFormBean.sendMessageString(FUW00945SFConst.PAYWAY, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 支払方法選択がクレジットの場合
		if (JFUStrConst.PAYWAY_CREDIT.equals(payway))
		{
			// クレジットカード関連チェック
//			if (!checkCreditNo())
//			{
//				// エラー表示
//				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF0400_TW, new String[] { CRECARD_NO }, CRECARD_NUM);
//				return;
//			}
			
			// トークン取得結果判定
			//if (!chkTokenResult())
			if (!chkTokenResultPaygent())
			{
				outputBusLog("----- FUW00945SFLogic subNextAndBackKakunin トークン取得エラー START -----");

				outputBusLog("sysid     = " + webNewInfoBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE));
				outputBusLog("result_cd = " + serviceFormBean.sendMessageString(FUW00945SFConst.RESULT_CD, X31CWebConst.DATABEAN_GET_VALUE));
				//outputBusLog("error_cd  = " + serviceFormBean.sendMessageString(FUW00945SFConst.ERROR_CD, X31CWebConst.DATABEAN_GET_VALUE));

				if (JFUWebCommon.isNull(serviceFormBean.sendMessageString(FUW00945SFConst.TOKEN, X31CWebConst.DATABEAN_GET_VALUE)))
				{
					outputBusLog("トークンが未設定");
				}
				if (JFUWebCommon.isNull(serviceFormBean.sendMessageString(FUW00945SFConst.CARD_NO_UNDER_4, X31CWebConst.DATABEAN_GET_VALUE)))
				{
					outputBusLog("マスクされたカード番号が未設定");
				}

				outputBusLog("----- FUW00945SFLogic subNextAndBackKakunin トークン取得エラー END -----");

				return;
			}
			
			// 選択プルダウンの値をサービスBean項目に設定する
			getCardCompListValue(serviceFormBean);
			getMonthYearListValue(serviceFormBean);
		}
		
		// サービス呼出処理
		// 異動区分 "00001":新規契約
		serviceFormBean.sendMessageString(FUW00945SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00576_00001);
		
		// 請求方法コード
		// 支払方法選択がクレジットの場合、請求方法コード "4":クレジット
		if (JFUStrConst.PAYWAY_CREDIT.equals(payway))
		{
			serviceFormBean.sendMessageString(FUW00945SFConst.SEIKY_WAY_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00166_4);
		}
		// それ以外
		else
		{
			serviceFormBean.sendMessageString(FUW00945SFConst.SEIKY_WAY_CD, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CD00166_1);
		}
		
// ANK-3518-00-00 ADD START
		// 運用日付（日付）
		serviceFormBean.sendMessageString(FUW00945SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDateTimeStamp(this, null).substring(0, 8));
// ANK-3518-00-00 ADD END
		
		// ユースケースIDをセットする
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0302);
		
		// マッパー引数用Bean配列を生成する
		X31SDataBeanAccess[] paramBean = { serviceFormBean, commonInfoBean };
		
		// 設定値格納用マップを生成する
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		
		// 検索結果格納用マップを生成する
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// DataBean-BPマッピングを生成する
		FUSV0302_FUSV0302OPDBMapper mapper = new FUSV0302_FUSV0302OPDBMapper();
		mapper.setFUSV030201SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV030202SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
// ANK-3518-00-00 ADD START
		mapper.setFUSV030203SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setFUSV030204SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
// ANK-3518-00-00 ADD END
		
		// サービス呼出処理を行う
		try
		{
			invokeService(paramMap, inputMap, outputMap);
		}
		catch (X31SRuntimeException ex)
		{
			return;
		}
		
// ANK-3518-00-00 ADD START
		// サービスBeanの取扱コードを取得
		String tradCd = serviceFormBean.sendMessageString(FUW00945SFConst.TRAT_CD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 取扱コードの入力があった場合、取扱コードの存在チェックを行う。
		if (!"".equals(tradCd))
		{
			// ■代理店情報取得
			X31SDataBeanAccessArray agnt_bean_array = serviceFormBean.getDataBeanArray(FUW00945SFConst.AGNT_INFO);
			X31SDataBeanAccess agnt_info_bean = getDataBeanZero(agnt_bean_array);

			Object obj = agnt_info_bean.sendMessage(FUW00945SFConst.AGNT_CD_05, X31CWebConst.DATABEAN_GET_COUNT);
			int count = 0;
			if (obj != null)
			{
				count = (Integer)obj;
			}

			if (count == 0)
			{
				// 取扱コードの存在チェックエラー表示
				JCCWebCommon.setMessageInfo(this, ERR_CD_EKF0420_TW, new String[] { TRAT_CD, INPUT }, HANDLE_CD);
				return;
			}
		}
// ANK-3518-00-00 ADD START
		
		// 引継情報を一旦全てクリアする
		clStr(paywayInfoBean, CommonInfoCFConst.PAYWAY_CONTINUE_15);			// 支払方法引継
		clStr(paywayInfoBean, CommonInfoCFConst.PAYWAY_15);						// 支払方法選択
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_COMP_CD_15);			// クレジット会社コード
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_COMP_NM_15);			// クレジット会社名
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO1_15);				// クレジット番号（１）
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO2_15);				// クレジット番号（２）
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO3_15);				// クレジット番号（３）
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO4_15);				// クレジット番号（４）
		clStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_SBT_SAME_15);			// クレジット・名義人種別（契約者と同じ）
		clStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_SBT_DIFF_15);			// クレジット・名義人種別（契約者と異なる）
		clStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_SEI_15);			// クレジット・名義人（カナ・姓）
		clStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_NM_15);			// クレジット・名義人（カナ・名）
		clStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_15);				// クレジット・名義人（カナ）
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_MEIGIN_DOI_15);			// クレジットカード名義人同意
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_YK_KIGEN_MONTH_15);		// カード有効期限(月)
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_YK_KIGEN_YEAR_15);		// カード有効期限(年)
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_KEI_NO_15);				// クレジット契約番号
		clStr(paywayInfoBean, CommonInfoCFConst.MEMBSTR_NO_15);					// 加盟店番号
		clStr(paywayInfoBean, CommonInfoCFConst.CRECARD_SHIKOSAKI_COMP_CD_15);	// 仕向先カード会社コード（クレジットカード）
		clStr(paywayInfoBean, CommonInfoCFConst.TOKEN_15);						// トークン
		clStr(paywayInfoBean, CommonInfoCFConst.CARD_NO_UNDER_4_15);			// カード番号下４桁
		clStr(paywayInfoBean, CommonInfoCFConst.HKTGI_SEIKY_KEI_NO_15);			// 引継（請求契約番号）
		clStr(paywayInfoBean, CommonInfoCFConst.HKTGI_UPD_DTM_SEIKY_KEI_15);	// 引継（更新年月日時分秒（請求契約））
		clStr(paywayInfoBean, CommonInfoCFConst.MASKED_CARD_NO_15);				// マスクされたカード番号

		// 常に引き継ぐ
		// 画面遷移モード "0":通常遷移
		webNewInfoBean.sendMessageString(CommonInfoCFConst.SCREEN_MODE_06, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.SCREEN_MODE_DEF);
		
// ANK-3518-00-00 ADD START
		// 支払方法引継ぎ選択
		String paywayContinue = serviceFormBean.sendMessageString(FUW00945SFConst.PAYWAY_CONTINUE, X31CWebConst.DATABEAN_GET_VALUE);
		
		// OM-2020-0000735 ADD START
		// 回線場所選択 (1:契約中の回線に追加 2:新しい場所に回線追加)
		String  kaisenSelect = elseInfoBean.sendMessageString(CommonInfoCFConst.KAISEN_SELECT_18, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 契約中の回線に追加する場合
		if(JFUStrConst.KAISEN_SELECT_ADD_KEI.equals(kaisenSelect)){
			// 支払方法引継ぎ選択が設定されていなければエラー
			if (paywayContinue.isEmpty())
			{
				JCCWebCommon.setMessageInfo(this, ERR_CD_EKF0420_TW, new String[] { PAYWAY_CONTINUE, CHOICE }, PAYTYPE_3_4);
				return;
			}
		}
		// OM-2020-0000735 ADD END
		
		// 支払方法を引き継ぐ場合
		if (JFUStrConst.PAYWAY_CONTINUE_CONTINUE.equals(paywayContinue))
		{
			// 引継支払方法（ネット）を取得する
			X31SDataBeanAccessArray hktgiPaywayNetArray = serviceFormBean.getDataBeanArray(FUW00945SFConst.HKTGI_PAYWAY_NET);
			X31SDataBeanAccess hktgiPaywayNetBean = getDataBeanZero(hktgiPaywayNetArray);
			
			// 引継支払方法（電話）を取得する
			X31SDataBeanAccessArray hktgiPaywayTelArray = serviceFormBean.getDataBeanArray(FUW00945SFConst.HKTGI_PAYWAY_TEL);
			X31SDataBeanAccess hktgiPaywayTelBean = getDataBeanZero(hktgiPaywayTelArray);
			
			// 引継支払方法（テレビ）を取得する
			X31SDataBeanAccessArray hktgiPaywayTvArray = serviceFormBean.getDataBeanArray(FUW00945SFConst.HKTGI_PAYWAY_TV);
			X31SDataBeanAccess hktgiPaywayTvBean = getDataBeanZero(hktgiPaywayTvArray);
			
			// 契約中サービス（ネット）を取得する
			String nowSvcNet = keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.NOW_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE);
			// 契約中サービス（電話）を取得する
			String nowSvcTel = keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.NOW_SVC_TEL_10, X31CWebConst.DATABEAN_GET_VALUE);
			// 契約中サービス（テレビ）を取得する
			String nowSvcTv  = keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.NOW_SVC_TV_10, X31CWebConst.DATABEAN_GET_VALUE);
			
			// 契約中サービスのネット→電話→テレビの優先度で支払方法を引き継ぐ
			if (JFUStrConst.NOW_SVC_NET_KEI_CHU.equals(nowSvcNet)
					&& !JFUWebCommon.isNull(hktgiPaywayNetBean.sendMessageString(FUW00945SFConst.SEIKY_KEI_NO_04, X31CWebConst.DATABEAN_GET_VALUE, 0)))
			{
				cpStr2(paywayInfoBean, CommonInfoCFConst.HKTGI_SEIKY_KEI_NO_15, hktgiPaywayNetBean, FUW00945SFConst.SEIKY_KEI_NO_04);
				cpStr2(paywayInfoBean, CommonInfoCFConst.HKTGI_UPD_DTM_SEIKY_KEI_15, hktgiPaywayNetBean, FUW00945SFConst.UPD_DTM_04);
			}
			else if (JFUStrConst.NOW_SVC_TEL_KEI_CHU.equals(nowSvcTel)
						&& !JFUWebCommon.isNull(hktgiPaywayTelBean.sendMessageString(FUW00945SFConst.SEIKY_KEI_NO_04, X31CWebConst.DATABEAN_GET_VALUE, 0)))
			{
				cpStr2(paywayInfoBean, CommonInfoCFConst.HKTGI_SEIKY_KEI_NO_15, hktgiPaywayTelBean, FUW00945SFConst.SEIKY_KEI_NO_04);
				cpStr2(paywayInfoBean, CommonInfoCFConst.HKTGI_UPD_DTM_SEIKY_KEI_15, hktgiPaywayTelBean, FUW00945SFConst.UPD_DTM_04);
			}
			else if (JFUStrConst.NOW_SVC_TV_KEI_CHU.equals(nowSvcTv)
						&& !JFUWebCommon.isNull(hktgiPaywayTvBean.sendMessageString(FUW00945SFConst.SEIKY_KEI_NO_04, X31CWebConst.DATABEAN_GET_VALUE, 0)))
			{
				cpStr2(paywayInfoBean, CommonInfoCFConst.HKTGI_SEIKY_KEI_NO_15, hktgiPaywayTvBean, FUW00945SFConst.SEIKY_KEI_NO_04);
				cpStr2(paywayInfoBean, CommonInfoCFConst.HKTGI_UPD_DTM_SEIKY_KEI_15, hktgiPaywayTvBean, FUW00945SFConst.UPD_DTM_04);
			}
		}
		else
		{
// ANK-3518-00-00 ADD END
			// 支払方法選択
			cpStr(paywayInfoBean, CommonInfoCFConst.PAYWAY_15, serviceFormBean, FUW00945SFConst.PAYWAY);
			
			// 支払方法選択がクレジットの場合
			if (JFUStrConst.PAYWAY_CREDIT.equals(payway))
			{
				// 引継情報を作成する
				cpStr(paywayInfoBean, CommonInfoCFConst.CRECARD_COMP_CD_15, serviceFormBean, FUW00945SFConst.CRECARD_COMP_CD);					// クレジット会社コード
				cpStr(paywayInfoBean, CommonInfoCFConst.CRECARD_COMP_NM_15, serviceFormBean, FUW00945SFConst.CRECARD_COMP_NM);					// クレジット会社名
				//cpStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO1_15, serviceFormBean, FUW00945SFConst.CRECARD_NO1);							// クレジット番号（１）
				//cpStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO2_15, serviceFormBean, FUW00945SFConst.CRECARD_NO2);							// クレジット番号（２）
				//cpStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO3_15, serviceFormBean, FUW00945SFConst.CRECARD_NO3);							// クレジット番号（３）
				//cpStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO4_15, serviceFormBean, FUW00945SFConst.CRECARD_NO4);							// クレジット番号（４）
				
				paywayInfoBean.sendMessageString(CommonInfoCFConst.CRECARD_NO1_15, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CREDIT_CARD_NO_0000);
				paywayInfoBean.sendMessageString(CommonInfoCFConst.CRECARD_NO2_15, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CREDIT_CARD_NO_0000);
				paywayInfoBean.sendMessageString(CommonInfoCFConst.CRECARD_NO3_15, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.CREDIT_CARD_NO_0000);
				cpStr(paywayInfoBean, CommonInfoCFConst.CRECARD_NO4_15, serviceFormBean, FUW00945SFConst.CARD_NO_UNDER_4);
				
				cpStr(paywayInfoBean, CommonInfoCFConst.CRECARD_YK_KIGEN_MONTH_15, serviceFormBean, FUW00945SFConst.CRECARD_YK_KIGEN_MONTH);	// クレジット・有効期限（月）
				cpStr(paywayInfoBean, CommonInfoCFConst.CRECARD_YK_KIGEN_YEAR_15, serviceFormBean, FUW00945SFConst.CRECARD_YK_KIGEN_YEAR);		// クレジット・有効期限（年）
				cpStr(paywayInfoBean, CommonInfoCFConst.CRECARD_KEI_NO_15, serviceFormBean, FUW00945SFConst.CRECARD_KEI_NO);					// クレジット契約番号
				cpStr(paywayInfoBean, CommonInfoCFConst.MEMBSTR_NO_15, serviceFormBean, FUW00945SFConst.MEMBSTR_NO);							// 加盟店番号
				cpStr(paywayInfoBean, CommonInfoCFConst.CRECARD_SHIKOSAKI_COMP_CD_15, serviceFormBean, FUW00945SFConst.CREDIT_KOKAN_CD);		// 仕向先カード会社コード（クレジットカード）
				
				cpStr(paywayInfoBean, CommonInfoCFConst.TOKEN_15, serviceFormBean, FUW00945SFConst.TOKEN);
				cpStr(paywayInfoBean, CommonInfoCFConst.CARD_NO_UNDER_4_15, serviceFormBean, FUW00945SFConst.CARD_NO_UNDER_4);
				cpStr(paywayInfoBean, CommonInfoCFConst.MASKED_CARD_NO_15, serviceFormBean, FUW00945SFConst.MASKED_CARD_NO);
				
				// カード名義人選択
				String custNmSlct = serviceFormBean.sendMessageString(FUW00945SFConst.CUST_NM_SLCT, X31CWebConst.DATABEAN_GET_VALUE);
				
				// 名義人種別（契約者と同じ）
				String custNmSbtSame = SAME_UNKNOWN;
				
				// 名義人種別（契約者と異なる）
				String custNmSbtDiff = DIFF_UNKNOWN;
				
				// 契約種別  1:個人  2:法人
				String keiSbt = webNewInfoBean.sendMessageString(CommonInfoCFConst.KEI_SBT_06, X31CWebConst.DATABEAN_GET_VALUE);
				
				// 契約種別が法人の場合、名義人種別は必ず異なる
				if (JFUStrConst.KEI_SBT_HOJINCD.equals(keiSbt))
				{
					custNmSlct = MEIGININ_SBT_DIFF;
					custNmSbtDiff = DIFF_YES;
				}
				// 上記以外
				// サービスフォームBeanのカード名義人種別の「値」が
				// "0": 契約者と同じ   => 共有フォームBeanのクレジット・名義人種別（契約者と同じ）  の「項目」に 値「"1"」 を設定する
				// "1": 契約者と異なる => 共有フォームBeanのクレジット・名義人種別（契約者と異なる）の「項目」に 値「"1"」 を設定する
				else
				{
					custNmSbtSame = ((custNmSlct != null) && (MEIGININ_SBT_SAME.equals(custNmSlct.toString()))) ? (SAME_YES) : (SAME_UNKNOWN);
					custNmSbtDiff = ((custNmSlct != null) && (MEIGININ_SBT_DIFF.equals(custNmSlct.toString()))) ? (DIFF_YES) : (DIFF_UNKNOWN);
				}
				
				// 引継情報を作成する
				paywayInfoBean.sendMessageString(CommonInfoCFConst.CUST_NM_SBT_SAME_15, X31CWebConst.DATABEAN_SET_VALUE, custNmSbtSame);	// クレジット・名義人種別（契約者と同じ）
				paywayInfoBean.sendMessageString(CommonInfoCFConst.CUST_NM_SBT_DIFF_15, X31CWebConst.DATABEAN_SET_VALUE, custNmSbtDiff);	// クレジット・名義人種別（契約者と異なる）
				
				// 異なる場合は入力された名義人名をセットする
				if (MEIGININ_SBT_DIFF.equals(custNmSlct))
				{
					// 申込マンションタイプを取得する
					String mskmMnsType = webNewInfoBean.sendMessageString(CommonInfoCFConst.MSKM_MNS_TYPE_06, X31CWebConst.DATABEAN_GET_VALUE);
					
					// 個人の場合
					if (JFUStrConst.KEI_SBT_KOJINCD.equals(keiSbt))
					{
						// マンションタイプの場合
						if (JFUStrConst.MSKM_MNS_TYPE_MANSION.equals(mskmMnsType))
						{
							// 引継情報を作成する
							cpStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_15, serviceFormBean, FUW00945SFConst.CUST_NM_KANA);			// クレジット・名義人（カナ）
						}
						// 上記以外
						else
						{
							// 引継情報を作成する
							cpStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_SEI_15, serviceFormBean, FUW00945SFConst.CUST_NM_KANA_SEI);	// クレジット・名義人（カナ・姓）
							cpStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_NM_15, serviceFormBean, FUW00945SFConst.CUST_NM_KANA_NM);		// クレジット・名義人（カナ・名）
						}
					}
					// 法人の場合
					else if (JFUStrConst.KEI_SBT_HOJINCD.equals(keiSbt))
					{
						// 引継情報を作成する
						cpStr(paywayInfoBean, CommonInfoCFConst.CUST_NM_KANA_15, serviceFormBean, FUW00945SFConst.CUST_NM_KANA);				// クレジット・名義人（カナ）
					}
				}
				// 同一の場合契約者名をクレジットカード名義人名にセットする
				else if (MEIGININ_SBT_SAME.equals(custNmSlct))
				{
					// 契約者情報のアクセサを取得する
					X31SDataBeanAccessArray keiyakushaInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.KEIYAKUSHA_INFO);
					X31SDataBeanAccess keiyakushaInfoBean = keiyakushaInfoArray.getDataBean(0);
					
					// 個人の場合
					if (JFUStrConst.KEI_SBT_KOJINCD.equals(keiSbt))
					{
						// ひらがな→カタカナへの変換
						String kiykshHiraganaSei = keiyakushaInfoBean.sendMessageString(CommonInfoCFConst.KSHKN_SEI_09, X31CWebConst.DATABEAN_GET_VALUE);
						String kiykshHiraganaMei = keiyakushaInfoBean.sendMessageString(CommonInfoCFConst.KSHKN_NM_09, X31CWebConst.DATABEAN_GET_VALUE);
						String kiykshKatakanaSei = JFUWebCommon.convFullHiraToFullKataV(kiykshHiraganaSei);
						String kiykshKatakanaMei = JFUWebCommon.convFullHiraToFullKataV(kiykshHiraganaMei);
						
						// 引継情報を作成する
						paywayInfoBean.sendMessageString(CommonInfoCFConst.CUST_NM_KANA_SEI_15, X31CWebConst.DATABEAN_SET_VALUE, kiykshKatakanaSei);	// クレジット・名義人（カナ・姓）
						paywayInfoBean.sendMessageString(CommonInfoCFConst.CUST_NM_KANA_NM_15, X31CWebConst.DATABEAN_SET_VALUE, kiykshKatakanaMei);		// クレジット・名義人（カナ・名）
					}
				}
				
				// クレジット・名義人同意
				String crecardMeiginDoi = DOI_UNKNOWN;
				
				// サービスフォームBeanの名義人同意が boolean であるため String に変更する
				boolean meiginDoiFlag = serviceFormBean.sendMessageBoolean(FUW00945SFConst.CRECARD_MEIGIN_DOI, X31CWebConst.DATABEAN_GET_VALUE);
				crecardMeiginDoi = (meiginDoiFlag) ? (DOI_OK) : (DOI_UNKNOWN);
				
				// 引継情報を作成する
				paywayInfoBean.sendMessageString(CommonInfoCFConst.CRECARD_MEIGIN_DOI_15, X31CWebConst.DATABEAN_SET_VALUE, crecardMeiginDoi);	// クレジット・名義人同意
			}
// ANK-3518-00-00 ADD START
		}
		
		// 引継情報の作成（支払い方法引継ぎ）
		cpStr(paywayInfoBean, CommonInfoCFConst.PAYWAY_CONTINUE_15, serviceFormBean, FUW00945SFConst.PAYWAY_CONTINUE);
// ANK-3518-00-00 ADD END
		
		// オプション選択内容確認（量販・訪販）画面に遷移する
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_ID_FUW00928);
		commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JFUScreenConst.SCREEN_NAME_FUW00928);
	}

	/**
	 * Beanの子要素の配列1番目を取得（子要素無い場合作成）
	 * @param beanArray Beanアクセサの配列
	 * @return 子要素配列１番目へのアクセサ
	 */
	private X31SDataBeanAccess getDataBeanZero(X31SDataBeanAccessArray beanArray)
	{
		if (beanArray.getCount() <= 0)
		{
			beanArray.addDataBean();
		}

		return beanArray.getDataBean(0);
	}

	/**
	 * Bean項目の転記(記述シンプル化目的)
	 * @param toBean 転記先Bean(to)
	 * @param toName 転記先項目名
	 * @param fromBean 転記元Bean(from)
	 * @param fromName 転記元項目名
	 */
	private void cpStr(X31SDataBeanAccess toBean, String toName, X31SDataBeanAccess fromBean, String fromName)
	{
		toBean.sendMessageString(toName, X31CWebConst.DATABEAN_SET_VALUE, fromBean.sendMessageString(fromName, X31CWebConst.DATABEAN_GET_VALUE));
	}

// ANK-3518-00-00 ADD START
	/**
	 * Bean項目の転記2(記述シンプル化目的)
	 * @param toBean 転記先Bean(to)
	 * @param toName 転記先項目名
	 * @param fromBean 転記元Bean(from)
	 * @param fromName 転記元項目名
	 */
	private void cpStr2(X31SDataBeanAccess toBean, String toName, X31SDataBeanAccess fromBean, String fromName)
	{
		toBean.sendMessageString(toName, X31CWebConst.DATABEAN_SET_VALUE, fromBean.sendMessageString(fromName, X31CWebConst.DATABEAN_GET_VALUE, 0));
	}
// ANK-3518-00-00 ADD END
	/**
	 * Bean項目(String)のクリア
	 * @param bean 対象のBean
	 * @param name 対象の項目名
	 */
	private void clStr(X31SDataBeanAccess bean, String name)
	{
		bean.sendMessageString(name, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
	}

	/**
	 * 月年リストを作成
	 * @param serviceFormBean サービスフォームBeanへのアクセサ
	 * @throws Exception 
	 */
	private void setMonthYearList(X31SDataBeanAccess serviceFormBean) throws Exception
	{
		// 月リスト
		X31SDataBeanAccessArray monthListArray = serviceFormBean.getDataBeanArray(FUW00945SFConst.MONTH_LIST);
		monthListArray.clearArray();
		X31SDataBeanAccess monthList = getDataBeanZero(monthListArray);
		
		// 年リスト
		X31SDataBeanAccessArray yearListArray = serviceFormBean.getDataBeanArray(FUW00945SFConst.YEAR_LIST);
		yearListArray.clearArray();
		X31SDataBeanAccess yearList = getDataBeanZero(yearListArray);

		// 月リストの先頭行にブランク行を設定する
		monthList.sendMessageString(FUW00945SFConst.MONTH_VALUE_LIST_02, X31CWebConst.DATABEAN_SET_VALUE, 0, "0");
		monthList.sendMessageString(FUW00945SFConst.MONTH_LABEL_LIST_02, X31CWebConst.DATABEAN_SET_VALUE, 0, "  ");

		// 月リストを作成する（配列サイズ13固定）
		String mMoji = JFUStrConst.EMPTY;
		for (int m = 1; m <= 12; m++)
		{
			mMoji = String.format("%02d", m);
			monthList.sendMessageString(FUW00945SFConst.MONTH_VALUE_LIST_02, X31CWebConst.DATABEAN_SET_VALUE, m, mMoji);
			monthList.sendMessageString(FUW00945SFConst.MONTH_LABEL_LIST_02, X31CWebConst.DATABEAN_SET_VALUE, m, mMoji);
		}

		// 年リストの先頭行にブランク行を設定する
		yearList.sendMessageString(FUW00945SFConst.YEAR_VALUE_LIST_03, X31CWebConst.DATABEAN_ADD_VALUE, "0");
		yearList.sendMessageString(FUW00945SFConst.YEAR_LABEL_LIST_03, X31CWebConst.DATABEAN_ADD_VALUE, "    ");

		// 運用日付の年を保持する
		String opeYear = JCCWebCommon.getOpeDate(this, null).substring(0, 4);

		// 画面定義ファイルよりクレジットカードの表示年数を取得する
		String crecardDispYears = JFUWebCommon.getDispText(JFUScreenConst.SCREEN_ID_FUW00945, CRECARD_DISP_YEARS);

		// 年リストを作成する（配列サイズ可変）
		for (int i = 0; i < Integer.parseInt(crecardDispYears); i++)
		{
			// セットする年を計算する
			int intYear = Integer.parseInt(opeYear) + i;
			yearList.sendMessageString(FUW00945SFConst.YEAR_VALUE_LIST_03, X31CWebConst.DATABEAN_ADD_VALUE, String.valueOf(intYear));
			yearList.sendMessageString(FUW00945SFConst.YEAR_LABEL_LIST_03, X31CWebConst.DATABEAN_ADD_VALUE, String.valueOf(intYear));
		}
	}

	/**
	 * クレジット会社名リストの選択インデックスを得る
	 * @param serviceFormBean サービスフォームBeanへのアクセサ
	 */
	private void setCardCompListIndex(X31SDataBeanAccess serviceFormBean)
	{
		// カード会社件数
		int cardCnt = -1;
		
		// クレジットカード会社選択値
		int cardIdx = 0;
		
		// クレジットカード会社コードを取得する
		String cd = serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_COMP_CD, X31CWebConst.DATABEAN_GET_VALUE);

		// クレジットカードリスト
		X31SDataBeanAccessArray cardListArray = serviceFormBean.getDataBeanArray(FUW00945SFConst.CRECARD_COMP_LIST);
		X31SDataBeanAccess cardList = getDataBeanZero(cardListArray);

		// カード会社件数を取得する
		cardCnt = (Integer)cardList.sendMessage(FUW00945SFConst.CRECARD_COMP_CD_LIST_01, X31CWebConst.DATABEAN_GET_COUNT);

		// クレジット会社名リストの選択インデックスを得る
		for (int i = 0; i < cardCnt; i++)
		{
			String tmp = cardList.sendMessageString(FUW00945SFConst.CRECARD_COMP_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i);
			if (cd.equals(tmp))
			{
				cardIdx = i;
				break;
			}
		}
		
		// サービスBean項目に値を設定する
		serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_SELECTED_IDX, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(cardIdx));
	}

	/**
	 * 月年リストの選択インデックスを得る
	 * @param serviceFormBean サービスフォームBeanへのアクセサ
	 */
	private void setMonthYearListIndex(X31SDataBeanAccess serviceFormBean)
	{
		// カード有効期限（月）
		String month = serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_YK_KIGEN_MONTH, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 月は実値を先頭０無し表現に変える
		if (month.matches("^0[0-9]$"))
		{
			month = month.substring(1);
		}

		// 年リスト件数
		int yearCnt = -1;
		
		// 年リストの選択インデックス
		int yearIdx = 0;

		// 年リスト
		X31SDataBeanAccessArray yearListArray = serviceFormBean.getDataBeanArray(FUW00945SFConst.YEAR_LIST);
		X31SDataBeanAccess yearList = getDataBeanZero(yearListArray);

		// カード有効期限（年）
		String year = serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_YK_KIGEN_YEAR, X31CWebConst.DATABEAN_GET_VALUE);

		// 年リスト件数を得る
		yearCnt = (Integer)yearList.sendMessage(FUW00945SFConst.YEAR_VALUE_LIST_03, X31CWebConst.DATABEAN_GET_COUNT);

		// 年リストの選択インデックスを得る
		for (int i = 0; i < yearCnt; i++)
		{
			String tmp = yearList.sendMessageString(FUW00945SFConst.YEAR_VALUE_LIST_03, X31CWebConst.DATABEAN_GET_VALUE, i);
			if (year.equals(tmp))
			{
				yearIdx = i;
				break;
			}
		}
		
		// サービスBean項目に値を設定する
		serviceFormBean.sendMessageString(FUW00945SFConst.MONTH_SELECTED_IDX, X31CWebConst.DATABEAN_SET_VALUE, month);
		serviceFormBean.sendMessageString(FUW00945SFConst.YEAR_SELECTED_IDX, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(yearIdx));
	}

	/**
	 * クレジット会社名リストの選択値を得る
	 * @param serviceFormBean サービスフォームBeanへのアクセサ
	 */
	private void getCardCompListValue(X31SDataBeanAccess serviceFormBean)
	{
		// クレジットカードリスト
		X31SDataBeanAccessArray cardListArray = serviceFormBean.getDataBeanArray(FUW00945SFConst.CRECARD_COMP_LIST);
		X31SDataBeanAccess cardList = getDataBeanZero(cardListArray);

		// クレジット会社名リストの選択インデックス(0-n)
		Object cardIdxObj = serviceFormBean.sendMessageObject(FUW00945SFConst.CRECARD_SELECTED_IDX, X31CWebConst.DATABEAN_GET_VALUE);

		// NULL値対策
		int cardIdx = (cardIdxObj != null) ? (Integer.parseInt(cardIdxObj.toString())) : 0;
		
		// クレジットカード会社コード
		String crecardCompCd = cardList.sendMessageString(FUW00945SFConst.CRECARD_COMP_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, cardIdx);
		
		// クレジットカード会社名
		String crecardCompNm = cardList.sendMessageString(FUW00945SFConst.CRECARD_COMP_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, cardIdx);
		
		// クレジット契約番号
		String crecardKeiNo = JFUStrConst.EMPTY;
		
		// 加盟店番号
		String membstrNo = JFUStrConst.EMPTY;
		
		// クレジットカード会社が「NICOS」の場合
		if (JFUStrConst.KK0531_CRECARD_COMP_CD_00009.equals(crecardCompCd))
		{
			// クレジットカード会社リストのクレジットカード 加盟店番号（１２桁）を設定する
			membstrNo = cardList.sendMessageString(FUW00945SFConst.MEMBSTR_NO_12_01, X31CWebConst.DATABEAN_GET_VALUE, cardIdx);
		}
		// クレジットカード会社が「NICOS」以外
		else
		{
			// クレジットカード会社リストのクレジットカード 加盟店番号（１５桁）を設定する
			membstrNo = cardList.sendMessageString(FUW00945SFConst.MEMBSTR_NO_15_01, X31CWebConst.DATABEAN_GET_VALUE, cardIdx);
		}
		
		// 12桁以上の場合は先頭11桁を設定する
		if (membstrNo.length() >= 12)
		{
			membstrNo = membstrNo.substring(0, 11);

		}
		
		// トリムを行う
		crecardKeiNo = membstrNo.trim();
		
		// クレジット交換コード
		String creditKokanCd = cardList.sendMessageString(FUW00945SFConst.CREDIT_KOKAN_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, cardIdx);
		
		// サービスBean項目に値を設定する
		serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_COMP_CD, X31CWebConst.DATABEAN_SET_VALUE, crecardCompCd);
		serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_COMP_NM, X31CWebConst.DATABEAN_SET_VALUE, crecardCompNm);
		serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, crecardKeiNo);
		serviceFormBean.sendMessageString(FUW00945SFConst.MEMBSTR_NO, X31CWebConst.DATABEAN_SET_VALUE, membstrNo);
		serviceFormBean.sendMessageString(FUW00945SFConst.CREDIT_KOKAN_CD, X31CWebConst.DATABEAN_SET_VALUE, creditKokanCd);
	}

	/**
	 * 月年リストの選択値を得る
	 * @param serviceFormBean サービスフォームBeanへのアクセサ
	 */
	private void getMonthYearListValue(X31SDataBeanAccess serviceFormBean)
	{
		// 月リスト
		X31SDataBeanAccessArray monthListArray = serviceFormBean.getDataBeanArray(FUW00945SFConst.MONTH_LIST);
		X31SDataBeanAccess monthList = getDataBeanZero(monthListArray);
		
		// 年リスト
		X31SDataBeanAccessArray yearListArray = serviceFormBean.getDataBeanArray(FUW00945SFConst.YEAR_LIST);
		X31SDataBeanAccess yearList = getDataBeanZero(yearListArray);
		
		// 月の選択値(0-12)
		Object monthIdxObj = serviceFormBean.sendMessageObject(FUW00945SFConst.MONTH_SELECTED_IDX, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 年の選択値(0-n)
		Object yearIdxObj = serviceFormBean.sendMessageObject(FUW00945SFConst.YEAR_SELECTED_IDX, X31CWebConst.DATABEAN_GET_VALUE);
		
		// NULL値対策
		int monthIdx = (monthIdxObj != null) ? (Integer.parseInt(monthIdxObj.toString())) : 0;
		int yearidx = (yearIdxObj != null) ? (Integer.parseInt(yearIdxObj.toString())) : 0;
		
		// カード有効期限（月）
		String month = monthList.sendMessageString(FUW00945SFConst.MONTH_VALUE_LIST_02, X31CWebConst.DATABEAN_GET_VALUE, monthIdx);
		
		// カード有効期限（年）
		String year = yearList.sendMessageString(FUW00945SFConst.YEAR_VALUE_LIST_03, X31CWebConst.DATABEAN_GET_VALUE, yearidx);
		
		// サービスBean項目に値を設定する
		serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_YK_KIGEN_MONTH, X31CWebConst.DATABEAN_SET_VALUE, month);
		serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_YK_KIGEN_YEAR, X31CWebConst.DATABEAN_SET_VALUE, year);
	}

	/**
	 * 会社ごとのクレジットカード番号頭と桁数の整合性を検証する
	 *  <pre>
	 * ＪＣＢ          「３５」からはじまるもの               １６桁
	 * ＡＭＥＸ        「３４」「３７」からはじまるもの       １５桁
	 * ＶＩＳＡ        「４」からはじまるもの                 １６桁
	 * ＭＡＴＥＲ      「５」からはじまるもの                 １６桁
	 * ダイナース      「３」からはじまるもの                 １４桁
	 * ＡＥＯＮ        「３」「４」「５」「６」から始まるもの １６桁
	 * ＣＦ            「３」「４」「５」から始まるもの       １６桁
	 * ＯＭＣ          チェック不要                           １６桁
	 * Ｏｒｉｃｏ      チェック不要                           １６桁
	 * ＮＩＣＯＳ      チェック不要                           １６桁
	 * ＵＦＪカード    チェック不要                           １６桁
	 * セゾン          チェック不要                           １５または１６桁
	 *  </pre>
	 * 
	 * @return boolean true:整合性あり false:整合性なし、または空文字かnull
	 * @throws Exception
	 */
	private boolean checkCreditNo() throws Exception
	{
		// サービスフォームBean
		X31SDataBeanAccess serviceFormBean = getServiceFormBean();

		// クレジットカード会社選択値（index）
		Object cardIdxObj = serviceFormBean.sendMessageObject(FUW00945SFConst.CRECARD_SELECTED_IDX, X31CWebConst.DATABEAN_GET_VALUE);
		
		// NULL値対策
		int cardIdx = (cardIdxObj != null) ? (Integer.parseInt(cardIdxObj.toString())) : 0;

		// クレジットカード会社リスト
		X31SDataBeanAccessArray cardListArray = serviceFormBean.getDataBeanArray(FUW00945SFConst.CRECARD_COMP_LIST);
		X31SDataBeanAccess cardList = getDataBeanZero(cardListArray);

		// 選択したクレジットカード会社コードを保持する
		String crecardCompCd = cardList.sendMessageString(FUW00945SFConst.CRECARD_COMP_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, cardIdx);
		String creCardNo1 = serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_NO1, X31CWebConst.DATABEAN_GET_VALUE);
		String creCardNo2 = serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_NO2, X31CWebConst.DATABEAN_GET_VALUE);
		String creCardNo3 = serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_NO3, X31CWebConst.DATABEAN_GET_VALUE);
		String creCardNo4 = serviceFormBean.sendMessageString(FUW00945SFConst.CRECARD_NO4, X31CWebConst.DATABEAN_GET_VALUE);
		String cardNo = creCardNo1 + creCardNo2 + creCardNo3 + creCardNo4;

		return JZMCreditcardValid.isCreditcardValid(crecardCompCd, cardNo);
	}

	/**
	 * テレビ単独チェック
	 * @param commonInfoBean 共有フォームBean
	 * @return boolean true:テレビ単独  false:それ以外
	 */
	private boolean tvSingleCheck(X31SDataBeanAccess commonInfoBean)
	{
		boolean result = false;
		
		// 共有フォームBean.ＷＥＢ新規情報を取得する
		X31SDataBeanAccessArray webNewInfoArray = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		X31SDataBeanAccess webNewInfoBean = getDataBeanZero(webNewInfoArray);
		
		// 共有フォームBean.契約サービス情報を取得する
		X31SDataBeanAccessArray keiyakuSvcInfoArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.KEIYAKU_SVC_INFO);
		X31SDataBeanAccess keiyakuSvcInfoBean = getDataBeanZero(keiyakuSvcInfoArray);
		
		// 共有フォームBean.ｅｏ光テレビを取得する
		X31SDataBeanAccessArray eotvArray = webNewInfoBean.getDataBeanArray(CommonInfoCFConst.EOTV);
		X31SDataBeanAccess eotvBean = getDataBeanZero(eotvArray);
		
		// 選択サービス(ネット)を取得する
		String selSvcNet = keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_NET_10, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 選択サービス(電話)を取得する
		String selSvcTel = keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_TEL_10, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 選択サービス(テレビ)を取得する
		String selSvcTv = keiyakuSvcInfoBean.sendMessageString(CommonInfoCFConst.SELECT_SVC_TV_10, X31CWebConst.DATABEAN_GET_VALUE);
		
		// テレビコース（ｅｏ光テレビ入力）を取得する
		String tvCourse = eotvBean.sendMessageString(CommonInfoCFConst.EO_TV_COURSE_13, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 画面遷移元IDを取得する
		String screenId = JFUWebCommon.getScreenId(this);
		
		// 遷移元の画面ＩＤが「FUW00931_登録完了（量販・訪販）」の場合
		if (JFUScreenConst.SCREEN_ID_FUW00931.equals(screenId))
		{
			return true;
		}
		
		// 選択サービス（テレビ）が「1:選択」、かつ、
		// ｅｏ光テレビ テレビコース（ｅｏ光テレビ入力）が「1:地デジ・BS」又は「3:地デジ・BSコース　スターチャンネルセット」、かつ、
		// 選択サービス（ネット）が「0:未選択」、かつ、
		// 選択サービス（電話）が「0:未選択」の場合
		if (JFUStrConst.SELECT_SVC_TV_CHOICE.equals(selSvcTv)
				&& (JFUStrConst.EO_TV_COURSE_BS.equals(tvCourse) || JFUStrConst.EO_TV_COURSE_BS_STAR.equals(tvCourse))
				&& JFUStrConst.SELECT_SVC_NET_MI_CHOICE.equals(selSvcNet)
				&& JFUStrConst.SELECT_SVC_TEL_MI_CHOICE.equals(selSvcTel))
		{
			result = true;
		}
		
		return result;
	}

	/**
	 * クリアパスのトークン取得結果判定処理です。
	 * 
	 * <br>
	 * @return チェック結果
	 */
	private boolean chkTokenResult()
	{
		X31SDataBeanAccess bean = getServiceFormBean();
		boolean result = true;

		// 結果コード判定
		String resultCd = bean.sendMessageString(FUW00945SFConst.RESULT_CD, X31CWebConst.DATABEAN_GET_VALUE);
		if (!CLP_TKN_RSLT_CD_LIST.contains(resultCd))
		{
			// 「0」(正常終了)、「8」(発行前確認エラー)以外の場合エラー
			JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, CRECARD_NUM);
			return false;
		}

		// エラーコード判定
		String errCd = bean.sendMessageString(FUW00945SFConst.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_CD_EKT0400_TW, new String[] { CRECARD_NO }, CRECARD_NUM);
				return false;
			}
			else
			{
				// 上記のエラーコード以外の場合エラー
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, CRECARD_NUM);
				return false;
			}
		}

		// トークンチェック
		String token = bean.sendMessageString(FUW00945SFConst.TOKEN, X31CWebConst.DATABEAN_GET_VALUE);
		if (JFUWebCommon.isNull(token))
		{
			// トークンが未設定の場合エラー
			JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, CRECARD_NUM);
			return false;
		}

		// カード番号下4桁チェック
		String cardNoUnder4 = bean.sendMessageString(FUW00945SFConst.CARD_NO_UNDER_4, X31CWebConst.DATABEAN_GET_VALUE);
		if (JFUWebCommon.isNull(cardNoUnder4))
		{
			// カード番号下4桁が未設定の場合エラー
			JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, CRECARD_NUM);
			return false;
		}

		return result;
	}

	/**
	 * ペイジェントのトークン取得結果判定処理です。
	 *
	 * <br>
	 * @return チェック結果
	 */
	private boolean chkTokenResultPaygent()
	{
		X31SDataBeanAccess bean = getServiceFormBean();
		boolean result = true;

		// 結果コード判定
		String resultCd = bean.sendMessageString(FUW00945SFConst.RESULT_CD, X31CWebConst.DATABEAN_GET_VALUE);
		if (JFUStrConst.PYGNT_RESULT_CD_0000.equals(resultCd))
		{
			// 正常終了時
			String token = bean.sendMessageString(FUW00945SFConst.TOKEN, X31CWebConst.DATABEAN_GET_VALUE);
			String cardNoUnder4 = bean.sendMessageString(FUW00945SFConst.CARD_NO_UNDER_4, X31CWebConst.DATABEAN_GET_VALUE);
			if (JFUWebCommon.isNull(token) || JFUWebCommon.isNull(cardNoUnder4))
			{
				// トークン、カード番号下4桁が未設定の場合エラー
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, CRECARD_NUM);
				result = false;
			}
		}
		else
		{
			// 異常終了時
			result = false;
			if (JFUStrConst.PYGNT_RESULT_CD_1100.equals(resultCd) ||
					JFUStrConst.PYGNT_RESULT_CD_1200.equals(resultCd) ||
					JFUStrConst.PYGNT_RESULT_CD_1201.equals(resultCd))
			{
				// マーチャントIDエラー、トークン生成公開鍵エラー
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, CRECARD_NUM);
			}
			else if (JFUStrConst.PYGNT_RESULT_CD_1300.equals(resultCd) ||
					JFUStrConst.PYGNT_RESULT_CD_1301.equals(resultCd))
			{
				// カード番号エラー
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF0400_TW, new String[] { CARD_NO }, CRECARD_NUM);
			}
			else if (JFUStrConst.PYGNT_RESULT_CD_1400.equals(resultCd) ||
					JFUStrConst.PYGNT_RESULT_CD_1401.equals(resultCd) ||
					JFUStrConst.PYGNT_RESULT_CD_1500.equals(resultCd) ||
					JFUStrConst.PYGNT_RESULT_CD_1501.equals(resultCd) ||
					JFUStrConst.PYGNT_RESULT_CD_1502.equals(resultCd))
			{
				// 有効期限エラー
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF0400_TW, new String[] { EXP_DATE }, CRECARD_EXP_ERR);
			}
			else if (JFUStrConst.PYGNT_RESULT_CD_1600.equals(resultCd) ||
					JFUStrConst.PYGNT_RESULT_CD_1601.equals(resultCd))
			{
				// セキュリティコードエラー
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF0400_TW, new String[] { SECURITY_CD }, SECURITY_CD_ERR);
			}
			else if (JFUStrConst.PYGNT_RESULT_CD_1700.equals(resultCd))
			{
				// カード名義エラー
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF0400_TW, new String[] { CRECARD_NAME }, CRECARD_NAME_ERR);
			}
			else if (JFUStrConst.PYGNT_RESULT_CD_7000.equals(resultCd))
			{
				// 非対応ブラウザエラー
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF2280_CE, CRECARD_NUM);
			}
			else
			{
				// その他エラー
				JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_EKF1870_CE, CRECARD_NUM);
			}
		}

		return result;
	}

	/**
	 * ビジネスログへの出力処理
	 *
	 * @param msg ログ情報
	 */
	private void outputBusLog(String msg)
	{
		JSYwebLog.println(JSYwebLog.EXECUTION, getClass(), msg, "CS0003I", null, null);
	}
}
