/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKW00831SFLogic
*   ソースファイル名：KKW00831SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年05月05日
*＜機能概要＞
*   機器提供サービス契約一覧画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      	修正内容
*   v1.00.00    2011/05/05   FJ）富士通		新規作成
*   v4.00.00    2012/08/29   FJ）富士通		ANK-0524-00-00,ANK-0531-00-00対応
*   v4.00.01    2012/11/11   FJ）富士通		IT1-2012-0001958対応
*   v4.01.00    2012/12/18   FJ）野口		IT1-2012-0002486対応
*   v5.00.00    2013/01/13   FJ）野口		IT1-2013-0000061対応
*   v7.00.00    2014/01/15   FJ）石橋		【ANK-1673-00-00】コース変更後の不要オプション登録確認を追加
*   v74.00.00	2025/01/22   FJ）佐々木		【ANK-4592-00-00】テレビ新コース（スカパー用）導入対応
**********************************************************************/
package eo.web.webview.KKW00831SF;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SRuntimeException;

import eo.common.constant.JPCOnlineMessageConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCRScreenConst;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0190_KKSV0190OPDBMapper;
import eo.web.webview.mapping.KKSV0191_KKSV0191OPDBMapper;
import eo.web.webview.mapping.KKSV0192_KKSV0192OPDBMapper;

/**
 * KKW00831のビューロジック
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class KKW00831SFLogic extends JCCWebBusinessLogic
{

	/** 顧客契約引継情報項目キー */
	private static final String[] CUST_KEI_HKTGI_KEYS = {
		JKKCommonConst.HKTGI_SYSID,
		JKKCommonConst.HKTGI_SVC_KEI_NO,
		JKKCommonConst.HKTGI_IDO_DIV,
		JKKCommonConst.HKTGI_IDO_RSN_CD,
/* ++++++++++ v4.01.00 追加開始 ++++++++++ */
		JKKCommonConst.HKTGI_IDO_RSN_MEMO,
/* ++++++++++ v4.01.00 追加終了 ++++++++++ */
		JKKCommonConst.HKTGI_OP_SVC_KEI_NO,
		JKKCommonConst.HKTGI_TRAN_DIV,
		JKKCommonConst.HKTGI_MSKM_NO,
		JKKCommonConst.HKTGI_MSKM_DTL_NO,
		JKKCommonConst.HKTGI_TOKUTEI_ID_KMK_NM,
		JKKCommonConst.HKTGI_TOKUTEI_ID_KMK_VALUE
	};
	
	/**
	 * サービスフォームBeanの初期化処理を行います。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		
		// JCCWebCommon.setScreenInfoメソッドで設定されている画面情報を取得し、サービスフォームBeanに設定する
		JCCWebCommon.getScreenInfo(this);
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		if (commoninfoBean == null)
		{
			return true;
		}
		
		return initAction(commoninfoBean);
	}
	
	/**
	 * 検索ボタン押下時に遷移先の画面を決定します。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean search() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		if (commoninfoBean == null)
		{
			return true;
		}
		
		return searchAction(commoninfoBean, false);
	}
	
	/**
	 * 登録確認ボタン押下時に遷移先の画面を決定します。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean forwardTokiCfm() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		if (commoninfoBean == null)
		{
			return true;
		}
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 機器製造番号取得
		X31SDataBeanAccessArray kiki = bean.getDataBeanArray(KKW00831SFConst.KIKI_SEIZO_NO_CMB);
		X31SDataBeanAccess subbean = kiki.getDataBean(0);
		String selectIndex = subbean.sendMessageString(KKW00831SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		String selectName = "";
		String searchKiki = bean.sendMessageString(KKW00831SFConst.KIKI_SEIZO_NO, X31CWebConst.DATABEAN_GET_VALUE);
		int kikiCmbCnt = (Integer)(subbean.sendMessage(KKW00831SFConst.KIKI_SEIZO_NO_CD_LIST_01, X31CWebConst.DATABEAN_GET_COUNT));
		for(int i = 0; i < kikiCmbCnt; i++)
		{
			// 検索押下時に設定された機器製造番号と機器製造番号コンボの機器製造番号が等しい場合
			if(searchKiki.equals(subbean.sendMessageString(KKW00831SFConst.KIKI_SEIZO_NO_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, i)))
			{
				// 検索押下時の選択値を復帰
				selectIndex = String.valueOf(i);
				break;
			}
		}
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		
		if (selectIndex != null && !"".equals(selectIndex))
		{
			selectName = subbean.sendMessageString(KKW00831SFConst.KIKI_SEIZO_NO_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(selectIndex));
		}
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		subbean.sendMessageString(KKW00831SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, selectIndex);
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		subbean.sendMessageString(KKW00831SFConst.KIKI_SEIZO_NO_NM_01, X31CWebConst.DATABEAN_SET_VALUE, selectName);
		
		// eo光テレビオプションチャンネル情報リスト取得
		X31SDataBeanAccessArray info = bean.getDataBeanArray(KKW00831SFConst.EO_OP_LIST);
		
		/* ++++++++++ v4.00.00 削除開始 ++++++++++ */
//		// ｅｏ光テレビオプションチャンネル情報リスト退避
//		X31SDataBeanAccessArray infoBk = bean.getDataBeanArray(KKW00831SFConst.EO_OP_LIST_BK);
//		X31SDataBeanAccess infoBkbean = null;
		/* ++++++++++ v4.00.00 削除終了 ++++++++++ */
		for (int i = info.getCount().intValue() - 1; i >= 0; i--)
		{
			/* ++++++++++ v4.00.00 削除開始 ++++++++++ */
//			infoBkbean = infoBk.addDataBean();
//			infoBkbean.sendMessageString(KKW00831SFConst.OP_SVC_CD_02, X31CWebConst.DATABEAN_SET_VALUE, 
//					info.getDataBean(i).sendMessageString(KKW00831SFConst.OP_SVC_CD_02, X31CWebConst.DATABEAN_GET_VALUE));
//			infoBkbean.sendMessageBoolean(KKW00831SFConst.SELECTROW_02, X31CWebConst.DATABEAN_SET_VALUE, 
//					info.getDataBean(i).sendMessageBoolean(KKW00831SFConst.SELECTROW_02, X31CWebConst.DATABEAN_GET_VALUE));
//			infoBkbean.sendMessageString(KKW00831SFConst.USE_STAYMD_RADIO_02, X31CWebConst.DATABEAN_SET_VALUE, 
//					info.getDataBean(i).sendMessageString(KKW00831SFConst.USE_STAYMD_RADIO_02, X31CWebConst.DATABEAN_GET_VALUE));
			/* ++++++++++ v4.00.00 削除終了 ++++++++++ */
			
			// 選択値取得
			boolean slt = info.getDataBean(i).sendMessageBoolean(KKW00831SFConst.SELECTROW_02, X31CWebConst.DATABEAN_GET_VALUE);
			if (slt)
			{
				// 利用開始日取得
				if ("0".equals(info.getDataBean(i).sendMessageString(KKW00831SFConst.USE_STAYMD_RADIO_02, X31CWebConst.DATABEAN_GET_VALUE)))
				{
					info.getDataBean(i).sendMessageString(KKW00831SFConst.USE_STAYMD_02, X31CWebConst.DATABEAN_SET_VALUE, "即時");
				}
				/* ++++++++++ v4.00.00 変更開始 ++++++++++ */
//				else
				else if ("1".equals(info.getDataBean(i).sendMessageString(KKW00831SFConst.USE_STAYMD_RADIO_02, X31CWebConst.DATABEAN_GET_VALUE)))
				/* ++++++++++ v4.00.00 変更終了 ++++++++++ */
				{
					info.getDataBean(i).sendMessageString(KKW00831SFConst.USE_STAYMD_02, X31CWebConst.DATABEAN_SET_VALUE, "次月より");
				}
				/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
				else if ("2".equals(info.getDataBean(i).sendMessageString(KKW00831SFConst.USE_STAYMD_RADIO_02, X31CWebConst.DATABEAN_GET_VALUE)))
				{
					info.getDataBean(i).sendMessageString(KKW00831SFConst.USE_STAYMD_02, X31CWebConst.DATABEAN_SET_VALUE, "次々月より");
				}
				/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
			}
			else
			{
				/* ++++++++++ v4.00.00 変更開始 ++++++++++ */
//				info.removeDataBean(i);
				info.getDataBean(i).sendMessageString(KKW00831SFConst.USE_STAYMD_02, X31CWebConst.DATABEAN_SET_VALUE, "");
				/* ++++++++++ v4.00.00 変更終了 ++++++++++ */
			}
		}
		return svcIfChkAction(commoninfoBean, JKKCommonConst.FUNC_CODE_2);
	}
	
	/**
	 * クリアボタン押下時
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean clear() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		if (commoninfoBean == null)
		{
			return true;
		}
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 初期化処理
		X31SDataBeanAccessArray info = bean.getDataBeanArray(KKW00831SFConst.KIKI_SEIZO_NO_CMB);
		X31SDataBeanAccess subbean = info.getDataBean(0);
		subbean.sendMessageString(KKW00831SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_SET_VALUE, "0");
		
		bean.sendMessageString(KKW00831SFConst.KENSUU, X31CWebConst.DATABEAN_SET_VALUE, "0");
		bean.sendMessageString(KKW00831SFConst.BCAS_ID, X31CWebConst.DATABEAN_SET_VALUE, "");
		bean.sendMessageString(KKW00831SFConst.CCAS_ID, X31CWebConst.DATABEAN_SET_VALUE, "");
		bean.getDataBeanArray(KKW00831SFConst.EO_OP_LIST).clearArray();
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00831);
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00831);
		return true;
	}
	
	/**
	 * 戻るボタン押下時
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		if (commoninfoBean == null)
		{
			return true;
		}
		
		/* ++++++++++ v4.00.00 削除開始 ++++++++++ */
//		// サービスフォームBean
//		X31SDataBeanAccess bean = super.getServiceFormBean();
//		
//		// 顧客契約内引継ぎデータセット
//		HashMap<String, Object> dataMap = getHktgiDataMap(bean, KKW00831SFConst.KTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
//		// 引継ぎデータセット
//		JCCWebCommon.setScreenInfo(this, JCCWebCommon.getScreenId(this), dataMap);
		/* ++++++++++ v4.00.00 削除終了 ++++++++++ */
		
		// 遷移先画面ID取得し設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getScreenId(this));
		return true; 
	}
	
	/**
	 * 確定ボタン押下時に遷移先の画面を決定します。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean create() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		if (commoninfoBean == null)
		{
			return true;
		}
		return svcIfChkAction(commoninfoBean, JKKCommonConst.FUNC_CODE_1);
	}
	
	/**
	 * 修正ボタン押下時に遷移先の画面を決定します。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean forwardShusei() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		if (commoninfoBean == null)
		{
			return true;
		}
		
		/* ++++++++++ v4.00.00 変更開始 ++++++++++ */
//		return searchAction(commoninfoBean, true);
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00831);
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00831);
		return true;
		/* ++++++++++ v4.00.00 変更終了 ++++++++++ */
	}
	
	/**
	 * 完了ボタン押下時に遷移先の画面を決定します。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean forwardFin() throws Exception
	{
		// 共有フォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		if (commoninfoBean == null)
		{
			return true;
		}
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 顧客契約内引継ぎデータセット
		HashMap<String, Object> dataMap = getHktgiDataMap(bean, KKW00831SFConst.KTGI_CUST_KEI_HKTGI_LIST, CUST_KEI_HKTGI_KEYS);
		
		// 画面情報を設定
		JCCWebCommon.setScreenInfo(this, JKKScreenConst.SCREEN_ID_KKW02301, dataMap);
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW02301);
		return true;
	}
	
	/**
	 * 初期表示処理を行います。
	 * <br>
	 * @param commoninfoBean
	 * @return 処理の成否
	 * @throws Exception
	 */
	private boolean initAction(X31SDataBeanAccess commoninfoBean) throws Exception
	{
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		// 遷移元画面の画面ID(戻り先の画面ID)を取得
		String screenId = JCCWebCommon.getScreenId(this);
		// ワンストップ業務選択メニュー画面から遷移した場合
		if (JCRScreenConst.SCREEN_ID_CRW10601.equals(screenId))
		{
			// ワンストップフラグを設定
			bean.sendMessageString(KKW00831SFConst.ONE_STOP_FLG, X31CWebConst.DATABEAN_SET_VALUE, "1");
		}
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		
		// 引継情報を取得
		X31SDataBeanAccessArray custKeiHktgiList =  bean.getDataBeanArray(JKKCommonConst.HKTGI_CUST_KEI_HKTGI_LIST);
		X31SDataBeanAccess custKeiHktgiInf = custKeiHktgiList.getDataBean(0);

		// サービス契約番号
		String svcKeiNo = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(KKW00831SFConst.KEY_SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, svcKeiNo);
		// SYSID
		String sysId = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_SYSID, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(KKW00831SFConst.KEY_SYSID, X31CWebConst.DATABEAN_SET_VALUE, sysId);
		// 異動区分
		String idoDiv = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_IDO_DIV, X31CWebConst.DATABEAN_GET_VALUE);
		bean.sendMessageString(KKW00831SFConst.IDO_DIV, X31CWebConst.DATABEAN_SET_VALUE, idoDiv);
		// 異動理由コード
/* ++++++++++ v5.00.00 修正開始 ++++++++++ */
//		bean.sendMessageString(KKW00831SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(KKW00831SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_CLEAR);
/* ++++++++++ v5.00.00 修正終了 ++++++++++ */
		int idoRsnCount = (Integer)custKeiHktgiInf.sendMessage(JKKCommonConst.HKTGI_IDO_RSN_CD, X31CWebConst.DATABEAN_GET_COUNT);
		String idoRsnCd = null;
		for(int i = 0; i < idoRsnCount; i++)
		{
			idoRsnCd = custKeiHktgiInf.sendMessageString(JKKCommonConst.HKTGI_IDO_RSN_CD, X31CWebConst.DATABEAN_GET_VALUE, i);
			bean.sendMessageString(KKW00831SFConst.IDO_RSN_CD, X31CWebConst.DATABEAN_ADD_VALUE, idoRsnCd);
		}
		
		// 運用日付取得
		bean.sendMessageString(KKW00831SFConst.KEY_RSV_APLY_YMD, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDate(this, null));
		
		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ◇ 業務ロジックの記述
		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0190);
		
		// 設定値格納用マップを生成
		HashMap<String, String> inputMap = new HashMap<String, String>();
		// 検索結果格納用マップを生成
		HashMap<String, String> outputMap = new HashMap<String, String>();
		// 上りマッピング処理
		KKSV0190_KKSV0190OPDBMapper mapper = new KKSV0190_KKSV0190OPDBMapper();
		
		// お客様一意照会 CK_T_CUST
		mapper.setKKSV019001SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		// サービス契約一意照会 KK_T_SVC_KEI
		mapper.setKKSV019002SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		// 機器提供サービス契約一覧照会 KK_T_KKTK_SVC_KEI
		mapper.setKKSV019003SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		// 設置済STB一覧照会
		mapper.setKKSV019004SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		// 宅内機器一意照会（４）
		mapper.setKKSV019005SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		
		// ANK-4592-00-00 ADD START
		// 業務パラメータ管理一覧照会 ZM_M_WORK_PARAM_KNRI
		mapper.setKKSV019007SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		// ANK-4592-00-00 ADD END
		
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		
		// サービスインタフェース呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// ■ サービス結果の転記（IMRCで出力されたBP-DataBeanマッピングのソースは改造しています。）
		mapper.getKKSV019001SC(paramBean, outputMap);
		mapper.getKKSV019002SC(paramBean, outputMap);
		mapper.getKKSV019003SC(paramBean, outputMap);
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		mapper.getKKSV019004SC(paramBean, outputMap);
		mapper.getKKSV019005SC(paramBean, outputMap);
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		// ANK-4592-00-00 ADD START
		// 業務パラメータ管理一覧照会 ZM_M_WORK_PARAM_KNRI
		mapper.getKKSV019007SC(paramBean, outputMap);
		// ANK-4592-00-00 ADD END
		
		bean.sendMessageString(KKW00831SFConst.KENSUU, X31CWebConst.DATABEAN_SET_VALUE, "0");
		
		// 初期化処理
		bean.sendMessageString(KKW00831SFConst.BCAS_ID, X31CWebConst.DATABEAN_SET_VALUE, "");
		bean.sendMessageString(KKW00831SFConst.CCAS_ID, X31CWebConst.DATABEAN_SET_VALUE, "");
		bean.getDataBeanArray(KKW00831SFConst.EO_OP_LIST).clearArray();
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00831);
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00831);
		return true;
	}
	
	/**
	 * 検索処理を行います。
	 * <br>
	 * @param commoninfoBean
	 * @param flg
	 * @return 処理の成否
	 * @throws Exception
	 */
	private boolean searchAction(X31SDataBeanAccess commoninfoBean, Boolean flg) throws Exception
	{
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 再検索
		// コンボボックスより値を取得
		X31SDataBeanAccessArray info = bean.getDataBeanArray(KKW00831SFConst.KIKI_SEIZO_NO_CMB);
		X31SDataBeanAccess subbean = info.getDataBean(0);
		String selectIndex = subbean.sendMessageString(KKW00831SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		// 検索用機器製造番号取得
		String selectId = "";
		// 検索用料金コースコード
//		String selectId2 = "";
		if (selectIndex != null && !"".equals(selectIndex))
		{
			selectId = subbean.sendMessageString(KKW00831SFConst.KIKI_SEIZO_NO_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(selectIndex));
//			selectId2 = subbean.sendMessageString(KKW00831SFConst.DEFAULT_CD_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(selectIndex));
		}
		
		// 初期化
		bean.getDataBeanArray(KKW00831SFConst.EO_OP_LIST).clearArray();
		bean.sendMessageString(KKW00831SFConst.BCAS_ID, X31CWebConst.DATABEAN_SET_VALUE, "");
		bean.sendMessageString(KKW00831SFConst.CCAS_ID, X31CWebConst.DATABEAN_SET_VALUE, "");
		bean.sendMessageString(KKW00831SFConst.KENSUU, X31CWebConst.DATABEAN_SET_VALUE, "0");
		
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		// 運用日付取得
		bean.sendMessageString(KKW00831SFConst.KEY_RSV_APLY_YMD, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDate(this, null));
		bean.sendMessageString(KKW00831SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDate(this, null));
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		
		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ◇ 業務ロジックの記述
		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0191);
		
		// 設定値格納用マップを生成
		HashMap<String, String> inputMap = new HashMap<String, String>();
		// 検索結果格納用マップを生成
		HashMap<String, String> outputMap = new HashMap<String, String>();
		// 上りマッピング処理
		KKSV0191_KKSV0191OPDBMapper mapper = new KKSV0191_KKSV0191OPDBMapper();
		
		// 選択されたコンボボックスの機器製造番号をbeanに設定
		bean.sendMessageString(KKW00831SFConst.KIKI_SEIZO_NO, X31CWebConst.DATABEAN_SET_VALUE, selectId);
//		bean.sendMessageString(KKW00831SFConst.PCRS_CD, X31CWebConst.DATABEAN_SET_VALUE, selectId2);
		
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		// eo光テレビオプションチャンネル情報一覧照会用の機能コード
		String funcCdKksv019101sc = "";
		if(selectId != null && !"".equals(selectId))
		{
			funcCdKksv019101sc = JKKCommonConst.FUNC_CODE_1;
		}
		else
		{
			funcCdKksv019101sc = JKKCommonConst.FUNC_CODE_2;
		}
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		
		// サービス契約内訳一意照会 KK_T_SVC_KEI_UCWK
		mapper.setKKSV019100SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		// eo光テレビオプションチャンネル情報一覧照会 KK_T_KKTK_SVC_KEI
		/* ++++++++++ v4.00.00 変更開始 ++++++++++ */
//		mapper.setKKSV019101SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		mapper.setKKSV019101SC(paramBean, inputMap, funcCdKksv019101sc);
		/* ++++++++++ v4.00.00 変更終了 ++++++++++ */
		// オプションサービス一意照会 KK_M_OP_SVC
		/* ++++++++++ v4.00.00 削除開始 ++++++++++ */
//		mapper.setKKSV019102CC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2);
		/* ++++++++++ v4.00.00 削除終了 ++++++++++ */
		
		// サービスインタフェース呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// ■ サービス結果の転記（IMRCで出力されたBP-DataBeanマッピングのソースは改造しています。）
		mapper.getKKSV019101SC(paramBean, outputMap);
		/* ++++++++++ v4.00.00 削除開始 ++++++++++ */
//		mapper.getKKSV019102CC(paramBean, outputMap);
		/* ++++++++++ v4.00.00 削除終了 ++++++++++ */
		
		X31SDataBeanAccessArray list = bean.getDataBeanArray(KKW00831SFConst.EO_OP_LIST);
		
		if (list.getCount().intValue() == 0)
		{
			// 検索結果0件の場合
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0330__I, new String[]{""}, "");
			return true;
		}
		
		/* ++++++++++ v4.00.00 変更開始 ++++++++++ */
//		if (flg)
//		{
//			X31SDataBeanAccessArray listBk = bean.getDataBeanArray(KKW00831SFConst.EO_OP_LIST_BK);
//			String opSvcCdBk = "";
//			String opSvcCd = "";
//			X31SDataBeanAccess listBkbean = null;
//			X31SDataBeanAccess listbean = null;
//			for (int i = 0; i < listBk.getCount().intValue(); i++)
//			{
//				listBkbean = listBk.getDataBean(i);
//				opSvcCdBk = listBkbean.sendMessageString(KKW00831SFConst.OP_SVC_CD_02, X31CWebConst.DATABEAN_GET_VALUE);
//				for (int j = 0; j < list.getCount().intValue(); j++)
//				{
//					listbean = list.getDataBean(j);
//					opSvcCd = listbean.sendMessageString(KKW00831SFConst.OP_SVC_CD_02, X31CWebConst.DATABEAN_GET_VALUE);
//					if (opSvcCdBk.equals(opSvcCd))
//					{
//						listbean.sendMessageBoolean(KKW00831SFConst.SELECTROW_02, X31CWebConst.DATABEAN_SET_VALUE, 
//								listBkbean.sendMessageBoolean(KKW00831SFConst.SELECTROW_02, X31CWebConst.DATABEAN_GET_VALUE));
//						listbean.sendMessageString(KKW00831SFConst.USE_STAYMD_RADIO_02, X31CWebConst.DATABEAN_SET_VALUE, 
//								listBkbean.sendMessageString(KKW00831SFConst.USE_STAYMD_RADIO_02, X31CWebConst.DATABEAN_GET_VALUE));
//						break;
//					}
//				}
//			}
//		}
//		else
//		{
//			bean.getDataBeanArray(KKW00831SFConst.EO_OP_LIST_BK).clearArray();
		if (!flg){
			for (int j = 0; j < list.getCount().intValue(); j++)
			{
				list.getDataBean(j).sendMessageString(KKW00831SFConst.USE_STAYMD_RADIO_02, X31CWebConst.DATABEAN_SET_VALUE, "1");
			}
		}
		/* ++++++++++ v4.00.00 変更終了 ++++++++++ */
		
		X31SDataBeanAccess listbean = list.getDataBean(0);
		bean.sendMessageString(KKW00831SFConst.BCAS_ID, X31CWebConst.DATABEAN_SET_VALUE, 
				listbean.sendMessageString(KKW00831SFConst.BCAS_ID_02, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(KKW00831SFConst.CCAS_ID, X31CWebConst.DATABEAN_SET_VALUE, 
				listbean.sendMessageString(KKW00831SFConst.CCAS_ID_02, X31CWebConst.DATABEAN_GET_VALUE));
		bean.sendMessageString(KKW00831SFConst.KENSUU, X31CWebConst.DATABEAN_SET_VALUE, "1");
		
		// 遷移先の画面IDを共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00831);
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00831);
		return true;
	}

	/**
	 * サービスI/Fチェック処理を行います。
	 * <br>
	 * @param commoninfoBean
	 * @param funcCode
	 * @return 処理の成否
	 * @throws Exception
	 */
	private boolean svcIfChkAction(X31SDataBeanAccess commoninfoBean, String funcCode) throws Exception
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 申込受付年月日時分秒
//		bean.sendMessageString(KKW00831SFConst.MSKM_UK_DTM, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getSysDateTimeStamp());
		bean.sendMessageString(KKW00831SFConst.MSKM_UK_DTM, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDateTimeStamp(this, null));
		// 運用日
		bean.sendMessageString(KKW00831SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDate(this, null));
		// サービス課金開始年月日 ← 運用年月日時分秒（EKK1091D010：進捗登録の異動年月日時分秒に使用）
		bean.sendMessageString(KKW00831SFConst.SVC_CHRG_STAYMD, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getOpeDateTimeStamp(this, null));
		
		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ◇ 業務ロジックの記述
		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0192);
		
		// 設定値格納用マップを生成
		HashMap<String, String> inputMap = new HashMap<String, String>();
		// 検索結果格納用マップを生成
		HashMap<String, String> outputMap = new HashMap<String, String>();
		// 上りマッピング処理
		KKSV0192_KKSV0192OPDBMapper mapper = new KKSV0192_KKSV0192OPDBMapper();
		// 課金先一覧照会（請求契約番号/サービス契約番号）
		mapper.setKKSV0192SC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
		// デジタルティアグループコード取得CC
		mapper.setKKSV019203CC(paramBean, inputMap, funcCode);
		// オプションサービス契約<TV>登録
		mapper.setKKSV0192CC(paramBean, inputMap, funcCode);
		// 視聴制御オーダ送信
		mapper.setKKSV019201CC(paramBean, inputMap, funcCode);
		
		/* ++++++++++ v4.00.00 追加開始 ++++++++++ */
		// ワンストップ対応履歴登録CC
		// パラメータ作成（共有フォームBeanを使用するため）
		X31SDataBeanAccess[] paramBeans = {bean, commoninfoBean};
		mapper.setKKSV019202CC(paramBeans, inputMap, funcCode);
		/* ++++++++++ v4.00.00 追加終了 ++++++++++ */
		
		// サービスインタフェース呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラー処理
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		if (JKKCommonConst.FUNC_CODE_2.equals(funcCode))
		{
			/* ++++++++++ v4.00.01 追加開始 ++++++++++ */
			boolean infoFlg = false;
			// eo光テレビオプションチャンネル情報リスト取得
			X31SDataBeanAccessArray arrayBean = bean.getDataBeanArray(KKW00831SFConst.EO_OP_LIST);
			
			for (int i = 0; i < arrayBean.getCount(); i++)
			{
				X31SDataBeanAccess subbean = arrayBean.getDataBean(i);
				// 選択値取得
				boolean slt = subbean.sendMessageBoolean(KKW00831SFConst.SELECTROW_02, X31CWebConst.DATABEAN_GET_VALUE);
				if (slt)
				{
					// オプションチャンネルオペレーション方法が「2:申込のみ手動」か「4:すべて手動」の場合
					if ("2".equals(subbean.sendMessageString(KKW00831SFConst.OP_CHANNEL_OPRTN_WAY_CD_02, X31CWebConst.DATABEAN_GET_VALUE)) ||
							"4".equals(subbean.sendMessageString(KKW00831SFConst.OP_CHANNEL_OPRTN_WAY_CD_02, X31CWebConst.DATABEAN_GET_VALUE)))
					{
						infoFlg = true;
					}
					
				}
			}
			
			if(infoFlg)
			{
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKBC810__I,
						new String[]{"スターチャンネル　プレミアム３(スターチャンネル　ハイビジョン、プラス、クラッシックの3チャンネルセット)"});
			}
			/* ++++++++++ v4.00.01 追加終了 ++++++++++ */
			
			/* ++++++++++ v7.00.00 追加開始 ++++++++++ */
			String errFlg = (String)outputMap.get("err_flg");
			if(errFlg.equals("true"))
			{
				JCCWebCommon.setMessageInfo(this, "EKBE060-NW");
			}
			/* ++++++++++ v7.00.00 追加終了 ++++++++++ */

			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I,new String[]{"eo光テレビオプションチャンネルの登録"});
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00832);
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00832);
		}
		else
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB4390__I,new String[]{"eo光テレビオプションチャンネルの登録"});
			// 遷移先の画面IDを共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_ID_KKW00833);
			// 遷移先の画面名を共有フォームBeanの項目に設定する。
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00833);
		}
		return true;
	}
	
	/**	
	 * <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;	
	}
}
