/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：KKW00405SFLogic
 *   ソースファイル名：KKW00405SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2025年04月25日
 *＜機能概要＞
 *   STB撤去年月日登録のビューロジックです。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v75.00.00	 2025/05/14	  FJ) 寺田	  新規作成_【ANK-4673-00-01】テレビ新コース（スカパー用）導入対応　2025年6月フォロー案件
 *
 **********************************************************************/

package eo.web.webview.KKW00405SF;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SRuntimeException;

import eo.common.constant.JZM0171Constant;
import eo.common.util.JPCDateChecker;
import eo.common.util.JPCDateUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.KKW00401SF.KKW00401SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCKScreenConst;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.common.JZMWebCommon;
import eo.web.webview.common.JZMWebConst;
import eo.web.webview.mapping.KKSV1059_KKSV1059OPDBMapper;
import eo.web.webview.mapping.KKSV1058_KKSV1058OPDBMapper;

/**
 * STB撤去年月日登録のビューロジックです。
 * 
 * @author FJ
 * 
 */
@SuppressWarnings("serial")
public class KKW00405SFLogic extends JCCWebBusinessLogic {

	/** 顧客契約引継情報項目キー */
	private static final String[] CUST_KEI_HKTGI_KEYS = {
		JKKCommonConst.HKTGI_SYSID,
		JKKCommonConst.HKTGI_SVC_KEI_NO,
		JKKCommonConst.HKTGI_SVC_KEI_UCWK_NO,
		JKKCommonConst.HKTGI_IDO_DIV,
		JKKCommonConst.HKTGI_IDO_RSN_CD,
		JKKCommonConst.HKTGI_IDO_RSN_MEMO,
		JKKCommonConst.HKTGI_OP_SVC_KEI_NO,
		JKKCommonConst.HKTGI_TRAN_DIV,
		JKKCommonConst.HKTGI_MSKM_NO,
		JKKCommonConst.HKTGI_MSKM_DTL_NO,
		JKKCommonConst.HKTGI_TOKUTEI_ID_KMK_NM,
		JKKCommonConst.HKTGI_TOKUTEI_ID_KMK_VALUE,
		JKKCommonConst.HKTGI_POPUP_MODE,
		JKKCommonConst.HKTGI_IDO_DIV_SENI_PTN
	};

	/** メッセージ置換文字列　STB撤去年月日登録 */
	private static final String[] MSG_VALUE_ADD = { "STB撤去年月日登録の登録" };

	/** 日付 */
	private static final String ONE_DAY = "01";

	/**
	 * サービスフォームBeanの初期化処理を行います<br>
	 * <br>
	 * 
	 * @return boolean 処理結果
	 * @exception Exception 予期せぬエラー
	 */
	@SuppressWarnings("unchecked")
	public boolean init() throws Exception
	{
		JCCWebCommon.getScreenInfo(this);

		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		if (commoninfoBean == null)
		{
			return true;
		}

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービス契約番号
		String svcKeiNo = getHktgParameter(JKKCommonConst.HKTGI_SVC_KEI_NO);
		bean.sendMessageString(KKW00405SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, svcKeiNo);
		// 異動区分
		String idoDiv = getHktgParameter(JKKCommonConst.HKTGI_IDO_DIV);
		bean.sendMessageString(KKW00405SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, idoDiv);
		// SYSID
		String sysId = getHktgParameter(JKKCommonConst.HKTGI_SYSID);
		bean.sendMessageString(KKW00405SFConst.SYSID, X31CWebConst.DATABEAN_SET_VALUE, sysId);

		// オンライン運用日付取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		bean.sendMessageString(KKW00401SFConst.STDARDYMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate); // 基準日

		// ポップアップで起動された際、親画面遷移で画面情報を使用する場合があるため、再度セッションに設定する
		HashMap<String, Object> bkHktgiDataMap = getHktgiDataMap(bean, KKW00405SFConst.KTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
		JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW00405, bkHktgiDataMap);

		return initAction(commoninfoBean);
	}
	
	/**
	 * 初期表示処理を行います。 <br>
	 * 
	 * @param commoninfoBean
	 * @return 処理の成否
	 * @throws Exception
	 */
	private boolean initAction(X31SDataBeanAccess commoninfoBean) throws Exception
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = { bean };

		// ◇ 業務ロジックの記述
		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV1058);

		// 設定値格納用マップを生成
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 検索結果格納用マップを生成
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// 上りマッピング処理
		KKSV1058_KKSV1058OPDBMapper mapper = new KKSV1058_KKSV1058OPDBMapper();

		// プルダウン:STB撤去費用_有無
		mapper.setKKSV1058ComboBox(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1, "KKSV105801SC", JZM0171Constant.CD00002);

		// コース変更予約の取得（異動予約）
		mapper.setKKSV105802SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);

		// ↓↓↓-----セット------↓↓↓
		// 機器提供サービス契約一覧（工事機器）
		mapper.setKKSV105803SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		// ＳＴＢ変更申込情報リスト
		mapper.setKKSV105804CC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		// ↑↑↑-----セット------↑↑↑

		// ↓↓↓-----セット------↓↓↓
		// 業務パラメータ管理一意照会(KK_YAMATO_TEKKYOHIYO)
		mapper.setKKSV105805SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		// 一時支払料金一意照会
		mapper.setKKSV105806SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		// ↑↑↑-----セット------↑↑↑

		// サービス契約一意照会 (異動予約(コース変更)取消するための更新年月日時分秒を取得)
		mapper.setKKSV105807SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		// サービス契約回線内訳一覧照会 進捗登録するためのサービス契約回線内訳番号を取得
		mapper.setKKSV105808SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);

		// サービス呼出
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);

		// エラー処理
		if (msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}

		// プルダウン:STB撤去費用_有無
		mapper.getKKSV105801SC(paramBean, outputMap);
		// コース変更予約の取得（異動予約）
		mapper.getKKSV105802SC(paramBean, outputMap);

		// ＳＴＢ変更申込情報リスト
		mapper.getKKSV105804CC(paramBean, outputMap, false);

		// 一時支払料金一意照会 STB撤去費用[無]チェック 撤去費用 ○○ 円取得
		mapper.getKKSV105806SC(paramBean, outputMap);

		// サービス契約一意照会 (異動予約(コース変更)取消するための更新年月日時分秒を取得)
		mapper.getKKSV105807SC(paramBean, outputMap);

		// サービス契約回線内訳一覧照会 進捗登録するためのサービス契約回線内訳番号を取得
		mapper.getKKSV105808SC(paramBean, outputMap);

		// 遷移先画面情報を設定します
		setForwardInfo(JKKScreenConst.SCREEN_ID_KKW00405, JKKScreenConst.SCREEN_NAME_KKW00405);

		return true;

	}

	/**
	 * 更新確認ボタン押下処理です。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception エラーが発生した場合
	 */
	public boolean updCfm() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();

		// チェック処理 SIF呼出前のチェック
		if ("E".equals(isKanrenCheck(svcFormBean)))
		{
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00405);
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00405);
			return true;
		}

		// STB撤去年月日
		StringBuffer stb_tekkyo_ymd = new StringBuffer();
		stb_tekkyo_ymd.append(svcFormBean.sendMessageString(KKW00405SFConst.STB_TEKKYO_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
		stb_tekkyo_ymd.append(svcFormBean.sendMessageString(KKW00405SFConst.STB_TEKKYO_MON, X31CWebConst.DATABEAN_GET_VALUE));
		stb_tekkyo_ymd.append(svcFormBean.sendMessageString(KKW00405SFConst.STB_TEKKYO_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		svcFormBean.sendMessageString(KKW00405SFConst.STB_TEKKYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, stb_tekkyo_ymd.toString());

		// 予約適用年月日にSTB撤去年月日入力値の翌月１日を設定
		// ※STB撤去年月日＝必須項目
		String rsv_aply_ymd = JPCDateUtil.addMonth(stb_tekkyo_ymd.toString(), 1).substring(0, 6) + ONE_DAY;

		// 予約適用年月日
		svcFormBean.sendMessageString(KKW00405SFConst.RSV_APLY_YMD, X31CWebConst.DATABEAN_SET_VALUE, rsv_aply_ymd);

		// STB撤去費用
		// 選択インデックスから対応するコードと名称を取得
		String select_cd = "";
		String select_nm = "";

		X31SDataBeanAccessArray arraybean = svcFormBean.getDataBeanArray(KKW00405SFConst.STB_TEKKYO_HIYO);
		X31SDataBeanAccess subbean = arraybean.getDataBean(0);
		String index = subbean.sendMessageString(KKW00405SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		if (index != null && !"".equals(index))
		{
			select_cd = subbean.sendMessageString(KKW00405SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
			select_nm = subbean.sendMessageString(KKW00405SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
			subbean.sendMessageString(KKW00405SFConst.CD_DIV_CD_01, X31CWebConst.DATABEAN_SET_VALUE, select_cd);
			subbean.sendMessageString(KKW00405SFConst.CD_DIV_NM_01, X31CWebConst.DATABEAN_SET_VALUE, select_nm);
		}

		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		HashMap<String, String> paramMap = null;

		// 上り項目の設定
		paramMap = setInMsg(svcFormBean, inputMap, JKKCommonConst.FUNC_CODE_2);

		// サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);

		// エラー処理
		if (msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// 料金計算日チェック 引っかかった場合は、中でMSGを設定
		stbTekkyoYmdChk(svcFormBean, outputMap);

		JCCWebCommon.setMessageInfo(this, "EKB0370--I", MSG_VALUE_ADD);

		// 遷移先画面情報を設定します
		setForwardInfo(JKKScreenConst.SCREEN_ID_KKW00406, JKKScreenConst.SCREEN_NAME_KKW00406);

		return true;
	}

	/**
	 * 戻るボタン押下処理を行います。<br>
	 * 
	 * @return boolean 処理結果
	 * @exception Exception 予期せぬエラー
	 */
	public boolean back() throws Exception
	{

		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// 戻り先画面IDの取得
		String screenId = JZMWebCommon.getScreenId(this);

		// 遷移先画面ID、名称の設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, screenId);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JZMWebConst.BLANK);

		return true;
	}

	/**
	 * 確定ボタン押下時に遷移先の画面を決定します
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean fix() throws Exception
	{
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		HashMap<String, String> paramMap = null;
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();

		// 上り項目の設定
		paramMap = setInMsg(svcFormBean, inputMap, JKKCommonConst.FUNC_CODE_1);

		// サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);

		// エラー処理
		if (null != msgResult)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}

		JCCWebCommon.setMessageInfo(this, "EKB4390--I", MSG_VALUE_ADD);

		// 遷移先画面情報を設定します
		setForwardInfo(JKKScreenConst.SCREEN_ID_KKW00407, JKKScreenConst.SCREEN_NAME_KKW00407);

		return true;
	}

	/**
	 * 修正ボタン押下時に遷移先の画面を決定します
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean shusei() throws Exception
	{
		// 引継ぎ情報の削除
		String screenId = JCCWebCommon.getScreenId(this);
		if (JKKScreenConst.SCREEN_ID_KKW00128.equals(screenId) || JKKScreenConst.SCREEN_ID_KKW00405.equals(screenId))
		{
			JCCWebCommon.removeScreenInfo(this, screenId);
		}

		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先の画面IDを共有フォームBeanの項目に設定する
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00405);
		// 遷移先の画面名を共有フォームBeanの項目に設定する
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00405);
		return true;
	}

	/**
	 * 異動区分選択へボタン押下時に遷移先の画面を決定します
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean idoDivSel() throws Exception
	{
		// 遷移先画面情報を設定します
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();

		// セッション情報の確認
		HashMap<String, Object> dataMap = JCCWebCommon.getScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW00145);

		if (null == dataMap)
		{
			// 顧客契約内引継ぎデータを設定します
			dataMap = getHktgiDataMap(svcFormBean, JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
		}

		JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW00145, dataMap);

		// 遷移先画面情報を設定します
		setForwardInfo(JKKScreenConst.SCREEN_ID_KKW00145, null);

		return true;
	}

	/**
	 * お客様一覧照会へボタン押下時に遷移先の画面を決定します
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean custListShokai() throws Exception
	{
		// 遷移先画面情報を設定します
		setForwardInfo(JCKScreenConst.SCREEN_ID_CKW00101, null);
		return true;
	}

	/**
	 * 関連チェックを行います。
	 * <br>
	 * @param bean
	 * @return 処理の成否
	 */
	private String isKanrenCheck(X31SDataBeanAccess bean)
	{
		// ワーニング判定
		String warning = "";

		// STB撤去費用[無]チェック
		if (checkStbTekkyo(bean))
		{
			warning = "W";
		}

		// コース変更予約データチェック
		if (bean.getDataBeanArray(KKW00405SFConst.IDO_RSV_INF_LIST).getCount() == 0)
		{
			warning = "E";
			JCCWebCommon.setMessageInfo(this, "EKB4970-KW", new String[] { "コース変更予約情報が存在しない" });

		}
		// STBデータチェック
		if (bean.getDataBeanArray(KKW00405SFConst.STB_CGIF_LIST).getCount() == 0)
		{
			warning = "E";
			JCCWebCommon.setMessageInfo(this, "EKB4970-KW", new String[] { "対象のSTB情報が存在しない" });
		}

		return warning;
	}

	/**
	 * STB撤去費用[無]チェックを行います。
	 * <br>
	 * @param bean
	 * @return 処理の成否
	 */
	private boolean checkStbTekkyo(X31SDataBeanAccess bean)
	{
		// STB撤去費用チェック
		String[] stb_tekkyo_hiyo = getSelectCdNmComboBox(bean.getDataBeanArray(KKW00405SFConst.STB_TEKKYO_HIYO));
		if (JKKCommonConst.UM_M.equals(stb_tekkyo_hiyo[0]))
		{
			JCCWebCommon.setMessageInfo(this, "EKB9080--Q", new String[] { bean.sendMessageString(KKW00405SFConst.TMP_PAY_PRC_AMNT, X31CWebConst.DATABEAN_GET_VALUE) });
			return true;
		}
		return false;
	}

	/**
	 * 料金計算日チェック
	 * 
	 * STB撤去年月日が最低利用期間内の場合に、運用日が該当の料金請求日を過ぎているかをチェックする。
	 * 同日はOK
	 * @param bean
	 * @param outputMap
	 * @return 
	 */
	private boolean stbTekkyoYmdChk(X31SDataBeanAccess bean, Map outputMap)
	{
		// 料金計算日チェックフラグ
		boolean stbTekkyoWarnFlg = false;

		// STB撤去年月日のチェック
		HashMap<String, Object> kksvSCMap = null;
		kksvSCMap = (HashMap) outputMap.get("KKSV105901SC");
		ArrayList eventYmdList = (ArrayList) kksvSCMap.get("ECH0501B501CBSMsg1List");

		// STB撤去年月日
		String stb_tekkyo_ymd = new StringBuffer().append(
						bean.sendMessageString(KKW00405SFConst.STB_TEKKYO_YEAR, X31CWebConst.DATABEAN_GET_VALUE)).append(
						bean.sendMessageString(KKW00405SFConst.STB_TEKKYO_MON, X31CWebConst.DATABEAN_GET_VALUE)).append(
						bean.sendMessageString(KKW00405SFConst.STB_TEKKYO_DAY, X31CWebConst.DATABEAN_GET_VALUE)).toString();
		// STB撤去年月
		String stb_tekkyo_ym = new StringBuffer().append(
						bean.sendMessageString(KKW00405SFConst.STB_TEKKYO_YEAR, X31CWebConst.DATABEAN_GET_VALUE)).append(
						bean.sendMessageString(KKW00405SFConst.STB_TEKKYO_MON, X31CWebConst.DATABEAN_GET_VALUE)).toString();

		X31SDataBeanAccessArray list = bean.getDataBeanArray(KKW00405SFConst.STB_CGIF_LIST);
		for (int i = 0; list != null && i < list.getCount(); i++)
		{
			X31SDataBeanAccess dataBean = list.getDataBean(i);

			// 機器最低利用期間
			String kikiMinUsePrd = dataBean.sendMessageString(KKW00405SFConst.KIKI_MIN_USE_PRD_02, X31CWebConst.DATABEAN_GET_VALUE);

			// STB撤去解約日が、最低利用期間内の場合
			if (JPCDateChecker.isPastDate(stb_tekkyo_ymd, kikiMinUsePrd, "1"))
			{

				for (int j = 0; eventYmdList != null && j < eventYmdList.size(); j++)
				{
					HashMap map = (HashMap) eventYmdList.get(j);

					// 請求年月
					String strSeikyYM = (String) map.get("seiky_ym");

					// STB撤去年月日と料金スケジュール定義一覧照会）明細．請求年月が一致する場合
					if (stb_tekkyo_ym.equals(strSeikyYM))
					{
						String strEventYMD = (String) map.get("event_ymd");

						// 「料金スケジュール定義一覧照会）明細．イベント年月日 ＜ 運用日」の場合、確認メッセージ
						if (JPCDateChecker.isPastDate(strEventYMD, JCCWebCommon.getOpeDate(this, null), "0"))
						{
							// 料金計算日チェック（１件でもあれば終了）
							JCCWebCommon.setMessageInfo(this, "EKBE159--Q", new String[] { "STB撤去年月日" });
							stbTekkyoWarnFlg = true;
							break;
						}
					}
				}

				if (stbTekkyoWarnFlg)
				{
					break;
				}
			}
		}

		return stbTekkyoWarnFlg;
	}

	/**
	 * コンボボックスで選択されたコードと名称を返却します。
	 * <br>
	 * @param arraybean
	 * @return 選択されたコードと名称
	 */
	private String[] getSelectCdNmComboBox(X31SDataBeanAccessArray arraybean)
	{
		String select_cd = "";
		String select_nm = "";

		if (0 < arraybean.getCount())
		{
			X31SDataBeanAccess subbean = arraybean.getDataBean(0);

			// 選択インデックスから対応するコードと名称を取得
			String index = subbean.sendMessageString(KKW00405SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
			if (index != null && !"".equals(index))
			{
				select_cd = subbean.sendMessageString(KKW00405SFConst.CD_DIV_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
				select_nm = subbean.sendMessageString(KKW00405SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
				subbean.sendMessageString(KKW00405SFConst.CD_DIV_CD_01, X31CWebConst.DATABEAN_SET_VALUE, select_cd);
				subbean.sendMessageString(KKW00405SFConst.CD_DIV_NM_01, X31CWebConst.DATABEAN_SET_VALUE, select_nm);
			}
		}
		return new String[]{select_cd, select_nm};
	}
	
	/**
	 * 顧客契約引継ぎリストより値を取得する。
	 * 
	 * @param item
	 * @return
	 */
	private String getHktgParameter(String item)
	{
		return getDataTypeValue(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST, item);
	}

	private String getDataTypeValue(String dataTypeKey, String item)
	{
		return getDataTypeValue(dataTypeKey, item, 0);
	}

	private String getDataTypeValue(String dataTypeKey, String item, int dataTypeIdx)
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// 引継情報を取得
		X31SDataBeanAccessArray dataTypeList = bean.getDataBeanArray(dataTypeKey);
		X31SDataBeanAccess dataTypeBean = dataTypeList.getDataBean(dataTypeIdx);

		return dataTypeBean.sendMessageString(item, X31CWebConst.DATABEAN_GET_VALUE);
	}

	/**
	 * <dd>メソッド名：引継情報データマップ取得 
	 * <dd>メソッド説明：引数のサービスフォームBeanより引継情報データマップの生成を行う。 
	 * <dd>備考：引継情報データタイプの可変項目はString[]のみ対応。
	 * 
	 * @param bean サービスフォームBean
	 * @param hktgiKey 引継情報データタイプのキー
	 * @param hktgiPrmKeys 引継情報データタイプの項目キーリスト
	 * @return HashMap<String, Object> 引継情報データマップ
	 */
	private HashMap<String, Object> getHktgiDataMap(X31SDataBeanAccess bean, String hktgiKey, String[] hktgiPrmKeys)
	{
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		List<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();

		X31SDataBeanAccessArray infList = bean.getDataBeanArray(hktgiKey);
		HashMap<String, Object> inMap = null;

		for (int i = 0; i < infList.getCount(); i++)
		{
			inMap = new HashMap<String, Object>();
			X31SDataBeanAccess inf = infList.getDataBean(i);
			for (int j = 0; j < hktgiPrmKeys.length; j++)
			{
				try
				{
					inMap.put(hktgiPrmKeys[j], inf.sendMessageObject(hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_VALUE));
				}
				catch (X31SRuntimeException ex)
				{
					// 可変項目の場合(String[]のみ対応)
					int length = (Integer) inf.sendMessage(hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_COUNT);
					String[] obj = new String[length];
					for (int k = 0; k < length; k++)
					{
						obj[k] = inf.sendMessageString(hktgiPrmKeys[j], X31CWebConst.DATABEAN_GET_VALUE, k);
					}
					inMap.put(hktgiPrmKeys[j], obj);
				}
			}
			dataList.add(inMap);
		}
		dataMap.put(hktgiKey, dataList);
		return dataMap;
	}

	/**
	 * 上り項目の設定を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 *
	 * </pre>
	 * <p>
	 * @param  svcFormBean
	 * @param  inputMap
	 * @param  funcCd
	 * @return HashMap<String, String>　サービス上り項目。
	 */
	private HashMap<String, String> setInMsg(X31SDataBeanAccess svcFormBean, HashMap<String, Object> inputMap, String funcCd)
	{
		// ◇ 業務ロジックの記述
		// ユースケースID格納用マップを生成

		// 上りマッピング処理
		HashMap<String, String> paramMap = new HashMap<String, String>();
		KKSV1059_KKSV1059OPDBMapper mapper = new KKSV1059_KKSV1059OPDBMapper();
		// サービスの上り項目設定
		X31SDataBeanAccess[] paramBean = { svcFormBean };

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV1059);

		// 料金スケジュール定義イベント年月日一覧照会SC_CH0501B501
		mapper.setKKSV105901SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);

		// サービス契約料金プラン変更中止_KK0081C130
		mapper.setKKSV105902SC(paramBean, inputMap, funcCd);

		// eo光ＴＶコース変更処理_JKKTvSvcKeiCourceChgCC
		mapper.setKKSV105903CC(paramBean, inputMap, funcCd);

		// ↓↓↓サービス契約情報TV_KKW00129SF コース変更 KKSV0312のMapper及びOperation,SC,CCをベースとしている。
		// Operationでは、KKSV0312専用でSC,CCを呼んでいるものがあるため(CC上で固定値でKKSV0312○○SCを呼んでいたり
		// SC内でSIFの取得データをWorkMap上でデータのやりとりしている箇所(MapKeyがWork ではなくparam.getMappingWorkArea()で取得するWorkMap)
		// もあるため、改修する際は気を付ける事
		// 下記、セット○○と書かれているものはSCの取得データを前提にCCが処理をしているため注意すること
		
		// KKSV0312_KKSV0312OP_EKK0161B004BSMapper KKSV031203SCのベース --セットA セットB--
		mapper.setKKSV105904SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		// JKKStbOpSvcKeiDslCC KKSV031201CCのベース --セットA--
		mapper.setKKSV105905CC(paramBean, inputMap, funcCd);
		
		// KKSV0312_KKSV0312OP_EKK0341B011BSMapper KKSV031204SCのベース --セットC--
		mapper.setKKSV105906SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		// JKKKktkSvcKeiDslCC,JKKKktkSvcKeiHenpinCC KKSV031202CCのベース--セットC--
		mapper.setKKSV105907CC(paramBean, inputMap, funcCd);
		
		// JKKSvcKeiUcwkDslCC KKSV031203CCのベース --セットB--
		mapper.setKKSV105909CC(paramBean, inputMap, funcCd);
		
		// JKKIchijikinAddCC ichijikinList、setKKSV031206CCのベース
		mapper.setKKSV105910CC(paramBean, inputMap, funcCd);

		// 進捗登録 異動区分:コース変更(STB撤去年月日登録),異動区分:コース変更
		mapper.setKKSV105912SC(paramBean, inputMap, funcCd);

		return paramMap;
	}
	/**
	 * 画面遷移情報の設定をします。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.遷移先画面IDを共有フォームBeanの項目に設定します。<br>
	 *
	 * 2.遷移先画面名を共有フォームBeanの項目に設定します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param next_id 遷移先画面ＩＤ。
	 * @param next_nm 遷移先画面名。
	 */
	private void setForwardInfo(String next_id, String next_nm)
	{
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, next_id);
		
		if (null != next_nm)
		{
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, next_nm);
		}
	}

}
