/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：SCW00101SFLogic
*   ソースファイル名：SCW00101SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年08月3日
*＜機能概要＞
*   電話サービスオーダ発行新規登録を処理するロジッククラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/8/3     FJ          新規作成
*
**********************************************************************/
package eo.web.webview.SCW00101SF;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.constant.JSCStrConstant;
import eo.web.webview.JCCWebBusinessLogic;
import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;
import static eo.common.constant.JPCModelConstant.FUNC_CD_1;
import static eo.common.constant.JPCOnlineMessageConstant.EKB0370__I;
import static eo.common.constant.JPCOnlineMessageConstant.EKB0380__I;
import java.util.ArrayList;
import java.util.HashMap;
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 eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.SCW00101SF.SCW00101SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JSCScreenConst;
import eo.web.webview.mapping.SCSV0006_SCSV0006OPDBMapper;
import eo.web.webview.mapping.SCSV0007_SCSV0007OPDBMapper;
import eo.web.webview.mapping.SCSV0008_SCSV0008OPDBMapper;
import eo.web.webview.mapping.SCSV0009_SCSV0009OPDBMapper;
import eo.web.webview.mapping.SCSV0010_SCSV0010OPDBMapper;
import eo.web.webview.mapping.SCSV0011_SCSV0011OPDBMapper;
import eo.web.webview.mapping.SCSV0012_SCSV0012OPDBMapper;


/**
 * 電話サービスオーダ発行新規登録を処理するロジッククラスです。
 * @author 富士通
 */
public class SCW00101SFLogic extends JCCWebBusinessLogic 
{
	
	/** サービス送受信オーダ一覧照会：サービスID, SCタイトル、明細項目名 */
	private static final String[] SERVICE_INFO_SCSV0006 = {"SCSV0006", "SCSV000601SC", "SvcOrderList"};

	/** UQ送受信オーダ一覧照会：サービスID, SCタイトル、明細項目名 */
	private static final String[] SERVICE_INFO_SCSV0007 = {"SCSV0007", "SCSV000701SC", "UqOrderList"};
	
	/** SPOT送受信オーダ一覧照会：サービスID, SCタイトル、明細項目名 */
	private static final String[] SERVICE_INFO_SCSV0008 = {"SCSV0008", "SCSV000801SC", "SpotOrderList"};
	
	/** サービス送受信オーダ一覧照会 （サービス契約番号）：サービスID, SCタイトル、明細項目名 */
	private static final String[] SERVICE_INFO_SCSV0009 = {"SCSV0009", "SCSV000901SC", "SvcUqSpotOrderList"};
	
	/** サービス送受信オーダ一意照会：サービスID, SCタイトル、明細項目名 */
	private static final String[] SERVICE_INFO_SCSV0010 = {"SCSV0010", "SCSV001001SC", "SvcOrderList"};
	
	/** UQ送受信オーダ一意照会：サービスID, SCタイトル、明細項目名 */
	private static final String[] SERVICE_INFO_SCSV0011 = {"SCSV0011", "SCSV001101SC", "UqOrderList"};
	
	/** SPOT送受信オーダ一意照会：サービスID, SCタイトル、明細項目名 */
	private static final String[] SERVICE_INFO_SCSV0012 = {"SCSV0012", "SCSV001201SC", "SpotOrderList"};
	
	/** サービス送受信オーダ再送：サービスID, SCタイトル */
	private static final String[] UPD_SERVICE_INFO_SCSV0018 = {"SCSV0018", "SCSV001801SC"};

	/** UQ送受信オーダ再送：サービスID, SCタイトル */
	private static final String[] UPD_SERVICE_INFO_SCSV0019 = {"SCSV0019", "SCSV001901SC"};
	
	/** SPOT送受信オーダ再送：サービスID, SCタイトル */
	private static final String[] UPD_SERVICE_INFO_SCSV0020 = {"SCSV0020", "SCSV002001SC"};
	
	/** サービス送受信オーダ解除：サービスID, SCタイトル */
	private static final String[] UPD_SERVICE_INFO_SCSV0021 = {"SCSV0021", "SCSV002101SC"};
	
	/** UQ送受信オーダ解除：サービスID, SCタイトル */
	private static final String[] UPD_SERVICE_INFO_SCSV0022 = {"SCSV0022", "SCSV002201SC"};
	
	/** SPOT送受信オーダ解除：サービスID, SCタイトル */
	private static final String[] UPD_SERVICE_INFO_SCSV0023 = {"SCSV0023", "SCSV002301SC"};
	
	/** ServiceInfoのUSECASE_IDを取得するindex 名 */
	private static final int USECASE_ID = 0;

	/** ServiceInfoのSCタイトルを取得するindex 名 */
	private static final int SC_TITLE = 1;
	
	/** ServiceInfoの明細項目名を取得するindex 名 */
	private static final int LIST_ITEM_NAME = 2;
	
	/** サービス種別：IP_SOD */
	private static final String SVC_SBT_IP_SOD = JSCStrConstant.SOD_SEND_RECIEVE_SBT_IP_SOD;

	/** サービス種別：SPOT_SOD */
	private static final String SVC_SBT_SPOT_SOD = JSCStrConstant.SOD_SEND_RECIEVE_SBT_SPOT_SOD;
	
	/** サービス種別：UQ_SOD */
	private static final String SVC_SBT_UQ_SOD = JSCStrConstant.SOD_SEND_RECIEVE_SBT_UQ_SOD;
	
	/** サービスオーダ一覧照会画面初期表示 */
	private static final String USECASE_ID_SCSV0014 = "SCSV0014";
	
	/** SOD送受信種別コード一覧マップ */
	private static final String SV_MAP_ITEM_SOD_SND_RCV_SBT = "SCSV001401SC";
	
	/** SOD送受信種別コード一覧明細 */
	private static final String SV_ITEM_SOD_SND_RCV_SBT = "EZM0171B012CBSMsg1List";
	
	/** SOD送受信種別コード一覧明細  SOD送受信種別コード */
	private static final String SV_ITEM_SOD_SND_RCV_SBT_CDDE = "sod_send_recieve_sbt_cd";
	
	/** SOD送受信種別コード一覧明細  SOD送受信種別名称 */
	private static final String SV_ITEM_SOD_SND_RCV_SBT_NAME = "sod_send_recieve_sbt_nm";
	
	/** サービスオーダコード一覧マップ */
	private static final String SV_MAP_ITEM_SERVICE_ORDER = "SCSV001402SC";

	/** サービスオーダコード一覧明細 */
	private static final String SV_ITEM_SERVICE_ORDER = "EZM0171B012CBSMsg2List";

	/** サービスオーダコード一覧明細  サービスオーダコード */
	private static final String SV_ITEM_SERVICE_ORDER_CODE = "service_order_cd";
	
	/** サービスオーダコード一覧明細  サービスオーダ名称 */
	private static final String SV_ITEM_SERVICE_ORDER_NAME = "service_order_nm";

	/** モバイルオーダコード一覧マップ */
	private static final String SV_MAP_ITEM_MOBILE_ORDER = "SCSV001403SC";

	/** モバイルオーダコード一覧明細 */
	private static final String SV_ITEM_MOBILE_ORDER = "EZM0171B012CBSMsg3List";
	
	/** モバイルオーダコード一覧明細  モバイルオーダコード */
	private static final String SV_ITEM_MOBILE_ORDER_CODE = "mobile_order_cd";
	
	/** モバイルオーダコード一覧明細  モバイルオーダ名称 */
	private static final String SV_ITEM_MOBILE_ORDER_NAME = "mobile_order_nm";
	
	/** SODステータスコード一覧マップ */
	private static final String SV_MAP_ITEM_SOD_STATUS = "SCSV001404SC";

	/** SODステータスコード一覧明細 */
	private static final String SV_ITEM_SOD_STATUS = "EZM0171B012CBSMsg4List";

	/** SODステータスコード一覧明細  SODステータスコード */
	private static final String SV_ITEM_SOD_STATUS_CODE = "sod_status_cd";
	
	/** SODステータスコード一覧明細  SODステータス名称 */
	private static final String SV_ITEM_SOD_STATUS_NAME = "sod_status_nm";
	
	/** SOD日時種別コード一覧マップ */
	private static final String SV_MAP_ITEM_SOD_DAY_SBT = "SCSV001405SC";
	
	/** SOD日時種別コード一覧明細 */
	private static final String SV_ITEM_SOD_DAY_SBT = "EZM0171B012CBSMsg5List";

	/** SOD日時種別コード一覧明細  SOD日時種別コード*/
	private static final String SV_ITEM_SOD_DAY_SBT_CODE = "sod_day_sbt_cd";
	
	/** SOD日時種別コード一覧明細 SOD日時種別名称 */
	private static final String SV_ITEM_SOD_DAY_SBT_NAME = "sod_day_sbt_nm";
	
	/** 電話サービスオーダコード一覧マップ */
	private static final String SV_MAP_ITEM_TEL_SERVICE_ORDER = "SCSV001406SC";

	/** 電話サービスオーダコード一覧明細 */
	private static final String SV_ITEM_TEL_SERVICE_ORDER = "EZM0171B012CBSMsg6List";

	/** 電話サービスオーダコード一覧明細  電話サービスオーダコード */
	private static final String SV_ITEM_TEL_SERVICE_ORDER_CODE = "tel_service_order_cd";
	
	/** 電話サービスオーダコード一覧明細  電話サービスオーダ名称 */
	private static final String SV_ITEM_TEL_SERVICE_ORDER_NAME = "tel_service_order_nm";
	
	
	/** 処理内容：再送 */
	private static final String TRAN_NAIYO_RETRAN = "再送";
	
	/** 処理内容：解除 */
	private static final String TRAN_NAIYO_RESET = "解除";
	
	/** 再送・解除確認／解除画面表示用 */
	private static final String DISP_MSG_SHORI = "処理";
	
	/** ラジオボタン選択チェック用　EKB1320　エラーメッセージパラメータ */
	private static final String EKB1320_PARAM1 = "明細行";
	
	/** 画面選択項目チェック用　EKB0290　エラーメッセージパラメータ1 */
	private static final String EKB0290_PARAM1 = "ステータス";
	
	/** 画面選択項目チェック用　EKB0290　エラーメッセージパラメータ2 */
	private static final String EKB0290_PARAM2 = "応答異常以外";

	/** 画面選択項目チェック用　EKB0290　エラーメッセージパラメータ3 */
	private static final String EKB0290_PARAM3 = "再送・解除処理は";
	
	
	/** サービス種別インデックス */
	private static final String IDX_SVC_SBT = "サービス種別インデックス";
	
	/** 対象リストインデックス */
	private static final String IDX_TARGET = "対象リストインデックス";
	
	/** ステータスインデックス */
	private static final String IDX_STATUS = "ステータスインデックス";
	
	/** 日時インデックス */
	private static final String IDX_DATE = "日時インデックス";
	
	/** 時FROMインデックス */
	private static final String IDX_TIME_FROM = "時FROMインデックス";
	
	/** 時TOインデックス */
	private static final String IDX_TIME_TO = "時TOインデックス";
	
	private boolean searchFlg = false;
	
	/**
	 * 初期化処理
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean init() throws Exception 
	{
		DEBUG_LOG.debug("***** SCW00101SFLogic#init start *****");
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		HashMap paramMap = new HashMap();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_SCSV0014);

		HashMap inputMap = new HashMap();
		HashMap outputMap = new HashMap();
		
		DEBUG_LOG.debug("***** SCSV0014 invokeService start *****");

		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);

		DEBUG_LOG.debug("***** SCSV0014 invokeService end *****");

		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		
		// サービスオーダコードをデータ保持領域にマッピング
		setServiceOrderCodes(outputMap);

		// モバイルオーダコードをデータ保持領域にマッピング
		setMobileOrderCodes(outputMap);
		
		// 電話サービスオーダコードをデータ保持領域にマッピング
		setTelServiceOrderCodes(outputMap);
		
		// サービス種別リストをデータ保持領域にマッピング
		setSvcSbtCodes(outputMap);
		
		// 検索条件部　サービス種別プルダウンを設定
		setJokenSvcSbtList(outputMap);

		// 検索条件部　ステータスプルダウンを設定
		setJokenStatus(outputMap);
		
		// 検索条件部　日時種別プルダウンを設定
		setJokenDaySbt(outputMap);
		
		// 検索条件部　開始時間プルダウンを設定
		setJokenStartTime();
		
		// 検索条件部　終了時間プルダウンを設定
		setJokenEndTime();
		
		// 対象プルダウンの初期値（空白）を設定
		X31SDataBeanAccess jokenTarget = getSubDataBean(bean, SCW00101SFConst.JOKEN_TARGET);
		addNoSelectOption2CodeList(jokenTarget);
		
		setNextScreen(JSCScreenConst.SCREEN_ID_SCW00101, JSCScreenConst.SCREEN_NAME_SCW00101);
		
		DEBUG_LOG.debug("***** SCW00101SFLogic#init end *****");

		return true;
	}
	
	/**
	 * 終了時間のプルダウンデータを設定します。
	 */
	private void setJokenEndTime() 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess jokenEndTime = getSubDataBean(bean, SCW00101SFConst.JOKEN_END_TIME);
		
		addNoSelectOption2TimeList(jokenEndTime);
		
		for (int i = 1; i <= 24; i++) 
		{
			String time = getTime(i);
			
			addStringValue(jokenEndTime, SCW00101SFConst.TIME_VAL_LIST_02, time);
			addStringValue(jokenEndTime, SCW00101SFConst.TIME_NM_LIST_02, time);
		}
	}

	/**
	 * 開始時間のプルダウンデータを設定します。
	 */
	private void setJokenStartTime() 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess jokenStartTime = getSubDataBean(bean, SCW00101SFConst.JOKEN_START_TIME);
		
		addNoSelectOption2TimeList(jokenStartTime);

		for (int i = 0; i <= 23; i++) 
		{
			String time = getTime(i);
			
			addStringValue(jokenStartTime, SCW00101SFConst.TIME_VAL_LIST_02, time);
			addStringValue(jokenStartTime, SCW00101SFConst.TIME_NM_LIST_02, time);
		}
	}
	
	/**
	 * 時間のプルダウンに非選択オプションを追加します。
	 * @param bean 時間タイプBean
	 */
	private void addNoSelectOption2TimeList(X31SDataBeanAccess bean) 
	{
		addStringValue(bean, SCW00101SFConst.TIME_VAL_LIST_02, "");
		addStringValue(bean, SCW00101SFConst.TIME_NM_LIST_02, "");
	}

	/**
	 * プルダウン用時間を取得します。
	 * @param num 時間index
	 * @return 時間
	 */
	private String getTime(int num) 
	{
		String strNum = Integer.toString(num);
		return strNum.length() == 1 ? "0" + strNum : strNum;
	}
	
	/**
	 * コードリストを対象にコピーします。
	 * @param codeListItemName コードリストの項目名
	 */
	private void copyToJokenTargetFrom(String codeListItemName) 
	{
		// 保持しているサービスオーダコードのリストを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess codeList = getSubDataBean(bean, codeListItemName);

		Integer count = getCount(codeList, SCW00101SFConst.CODE_VALUES_05);
		
		// プルダウン表示用フィールドを取得
		X31SDataBeanAccess jokenTarget = getSubDataBean(bean, SCW00101SFConst.JOKEN_TARGET);

		// データをコピー
		for (int i = 0; i < count; i++) 
		{
			String code = getStringValue(codeList, SCW00101SFConst.CODE_VALUES_05, i);
			String name = getStringValue(codeList, SCW00101SFConst.CODE_NAMES_05, i);

			addStringValue(jokenTarget, SCW00101SFConst.CODE_VAL_LIST_01, code);
			addStringValue(jokenTarget, SCW00101SFConst.CODE_NM_LIST_01, getPullDownDispValue(code, name));
		}
	}
	
	/**
	 * サービスフォームBeanに保持している、サービスより取得したモバイルオーダコードのリストを
	 * プルダウン用の条件対象フィールドにコピーします。
	 * 
	 */
	private void setMobileOrderCds2JokenTarget() 
	{
		copyToJokenTargetFrom(SCW00101SFConst.MOBILE_ORDER_CD_LIST);
	}
	
	/**
	 * サービスフォームBeanに保持している、サービスより取得したサービスオーダコードのリストを
	 * プルダウン用の条件対象フィールドにコピーします。
	 * 
	 */
	private void setServiceOrderCds2JokenTarget() 
	{
		copyToJokenTargetFrom(SCW00101SFConst.SVC_ORDER_CD_LIST);
		copyToJokenTargetFrom(SCW00101SFConst.TEL_SVC_ORDER_CD_LIST);
	}
	
	/**
	 * コード名称データタイプBean（プルダウンデータ）の設定値をクリアします。
	 * 
	 * @param dataTypeBean コード名称データタイプBean
	 */
	private void clearCodeNameDataTypeBean(X31SDataBeanAccess dataTypeBean) 
	{
		clearValue(dataTypeBean, SCW00101SFConst.CODE_INDEX_01);
		clearValue(dataTypeBean, SCW00101SFConst.CODE_VAL_01);
		clearValue(dataTypeBean, SCW00101SFConst.CODE_NM_01);
		clearValue(dataTypeBean, SCW00101SFConst.CODE_VAL_LIST_01);
		clearValue(dataTypeBean, SCW00101SFConst.CODE_NM_LIST_01);
	}
	
	/**
	 * サービスより取得したサービス種別（SOD送受信種別）コード／名称をデータ保持領域
	 * に設定します。
	 * 
	 * @param outputMap サービスより取得したサービス種別（SOD送受信種別）コード／名称
	 */
	private void setSvcSbtCodes(HashMap outputMap) 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess svcSbtCdList = getSubDataBean(bean, SCW00101SFConst.SVC_SBT_LIST);
		
		// サービスで取得したSODステータスコードのリスト
		ArrayList codes =  getCodeNameList(outputMap, SV_MAP_ITEM_SOD_SND_RCV_SBT, 
													SV_ITEM_SOD_SND_RCV_SBT);
		
		for (int i = 0; i < codes.size(); i++) 
		{
			HashMap map = (HashMap)codes.get(i);
			
			String code = (String)map.get(SV_ITEM_SOD_SND_RCV_SBT_CDDE);
			String name = (String)map.get(SV_ITEM_SOD_SND_RCV_SBT_NAME);

			addStringValue(svcSbtCdList, SCW00101SFConst.CODE_VALUES_05, code);
			addStringValue(svcSbtCdList, SCW00101SFConst.CODE_NAMES_05, name);
		}
	}

	/**
	 * サービスより取得した電話サービスオーダコード／名称をデータ保持領域
	 * に設定します。
	 * 
	 * @param outputMap サービスより取得した電話サービスオーダコード／名称
	 */
	private void setTelServiceOrderCodes(HashMap outputMap) 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess telSvcOrderCdList = getSubDataBean(bean, SCW00101SFConst.TEL_SVC_ORDER_CD_LIST);
		
		// サービスで取得したSODステータスコードのリスト
		ArrayList codes =  getCodeNameList(outputMap, SV_MAP_ITEM_TEL_SERVICE_ORDER, 
													SV_ITEM_TEL_SERVICE_ORDER);
		
		for (int i = 0; i < codes.size(); i++) 
		{
			HashMap map = (HashMap)codes.get(i);
			
			String code = (String)map.get(SV_ITEM_TEL_SERVICE_ORDER_CODE);
			String name = (String)map.get(SV_ITEM_TEL_SERVICE_ORDER_NAME);

			addStringValue(telSvcOrderCdList, SCW00101SFConst.CODE_VALUES_05, code);
			addStringValue(telSvcOrderCdList, SCW00101SFConst.CODE_NAMES_05, name);
		}
	}

	/**
	 * サービスより取得したモバイルオーダコード／名称をデータ保持領域（モバイルオーダコード名称リスト）
	 * に設定します。
	 * 
	 * @param outputMap サービスより取得したモバイルオーダコード／名称
	 */
	private void setMobileOrderCodes(HashMap outputMap) 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess mobileOrderCdList = getSubDataBean(bean, SCW00101SFConst.MOBILE_ORDER_CD_LIST);
		
		// サービスで取得したSODステータスコードのリスト
		ArrayList svcOrderCds =  getCodeNameList(outputMap, SV_MAP_ITEM_MOBILE_ORDER, 
													SV_ITEM_MOBILE_ORDER);
		
		for (int i = 0; i < svcOrderCds.size(); i++) 
		{
			HashMap map = (HashMap)svcOrderCds.get(i);
			
			String code = (String)map.get(SV_ITEM_MOBILE_ORDER_CODE);
			String name = (String)map.get(SV_ITEM_MOBILE_ORDER_NAME);

			addStringValue(mobileOrderCdList, SCW00101SFConst.CODE_VALUES_05, code);
			addStringValue(mobileOrderCdList, SCW00101SFConst.CODE_NAMES_05, name);
		}
	}
	
	/**
	 * サービスより取得したサービスオーダコード／名称をデータ保持領域（サービスオーダコード名称リスト）
	 * に設定します。
	 * 
	 * @param outputMap サービスより取得したサービスオーダコード／名称
	 */
	private void setServiceOrderCodes(HashMap outputMap) 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess svcOrderCdList = getSubDataBean(bean, SCW00101SFConst.SVC_ORDER_CD_LIST);
		
		// サービスで取得したSODステータスコードのリスト
		ArrayList svcOrderCds =  getCodeNameList(outputMap, SV_MAP_ITEM_SERVICE_ORDER, 
													SV_ITEM_SERVICE_ORDER);
		
		for (int i = 0; i < svcOrderCds.size(); i++) 
		{
			HashMap map = (HashMap)svcOrderCds.get(i);
			
			String code = (String)map.get(SV_ITEM_SERVICE_ORDER_CODE);
			String name = (String)map.get(SV_ITEM_SERVICE_ORDER_NAME);

			addStringValue(svcOrderCdList, SCW00101SFConst.CODE_VALUES_05, code);
			addStringValue(svcOrderCdList, SCW00101SFConst.CODE_NAMES_05, name);
		}
	}
	
	/**
	 * サービスより取得したSOD日時種別コードのリストをサービスフォームBeanに設定します。
	 * @param outputMap サービスより取得したデータ
	 */
	private void setJokenDaySbt(HashMap outputMap) 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess jokenDaySbt = getSubDataBean(bean, SCW00101SFConst.JOKEN_DAY_SBT);
		
		// サービスで取得したSODステータスコードのリスト
		ArrayList sodStatusCds =  getCodeNameList(outputMap, SV_MAP_ITEM_SOD_DAY_SBT, 
													SV_ITEM_SOD_DAY_SBT);
		
		addNoSelectOption2CodeList(jokenDaySbt);
		
		for (int i = 0; i < sodStatusCds.size(); i++) 
		{
			HashMap map = (HashMap)sodStatusCds.get(i);
			
			String code = (String)map.get(SV_ITEM_SOD_DAY_SBT_CODE);
			String name = (String)map.get(SV_ITEM_SOD_DAY_SBT_NAME);
			
			addStringValue(jokenDaySbt, SCW00101SFConst.CODE_VAL_LIST_01, code);
			addStringValue(jokenDaySbt, SCW00101SFConst.CODE_NM_LIST_01, getPullDownDispValue(code, name));
		}
	}

	/**
	 * サービスより取得したSODステータスコードのリストをサービスフォームBeanに設定します。
	 * @param outputMap サービスより取得したデータ
	 */
	private void setJokenStatus(HashMap outputMap) 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess jokenStatus = getSubDataBean(bean, SCW00101SFConst.JOKEN_STATUS);
		
		// サービスで取得したSODステータスコードのリスト
		ArrayList sodStatusCds =  getCodeNameList(outputMap, SV_MAP_ITEM_SOD_STATUS, 
													SV_ITEM_SOD_STATUS);

		addNoSelectOption2CodeList(jokenStatus);

		for (int i = 0; i < sodStatusCds.size(); i++) 
		{
			HashMap map = (HashMap)sodStatusCds.get(i);
			
			String code = (String)map.get(SV_ITEM_SOD_STATUS_CODE);
			String name = (String)map.get(SV_ITEM_SOD_STATUS_NAME);
			
			addStringValue(jokenStatus, SCW00101SFConst.CODE_VAL_LIST_01, code);
			addStringValue(jokenStatus, SCW00101SFConst.CODE_NM_LIST_01, getPullDownDispValue(code, name));
		}
	}
	
	/**
	 * サービスより取得したSOD送受信識別コードのリストをサービスフォームBeanに設定します。
	 * @param outputMap サービスより取得したデータ
	 */
	private void setJokenSvcSbtList(HashMap outputMap) 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess jokenSvcSbt = getSubDataBean(bean, SCW00101SFConst.JOKEN_SVC_SBT);
		
		// サービスで取得したSOD送受信識別コードのリスト
		ArrayList svcSbtCds =  getCodeNameList(outputMap, SV_MAP_ITEM_SOD_SND_RCV_SBT, 
															SV_ITEM_SOD_SND_RCV_SBT);
		
		addNoSelectOption2CodeList(jokenSvcSbt);
		
		for (int i = 0; i < svcSbtCds.size(); i++) 
		{
			HashMap map = (HashMap)svcSbtCds.get(i);
			
			String code = (String)map.get(SV_ITEM_SOD_SND_RCV_SBT_CDDE);
			String name = (String)map.get(SV_ITEM_SOD_SND_RCV_SBT_NAME);

			addStringValue(jokenSvcSbt, SCW00101SFConst.CODE_VAL_LIST_01, code);
			addStringValue(jokenSvcSbt, SCW00101SFConst.CODE_NM_LIST_01, getPullDownDispValue(code, name));
		}
	}
	
	/**
	 * プルダウンの表示値を作成します。
	 * @param code コード値
	 * @param name コード名称
	 * @return プルダウン表示値
	 */
	private String getPullDownDispValue(String code, String name) 
	{
		StringBuilder sb = new StringBuilder();
		sb.append(code).append(".").append(name);
		return sb.toString();
	}
	
	/**
	 * コードリストに非選択オプションを追加します。
	 * @param bean コードリストのX31SDataBeanAccess
	 */
	private void addNoSelectOption2CodeList(X31SDataBeanAccess bean) 
	{
		bean.sendMessageString(SCW00101SFConst.CODE_VAL_LIST_01, 
				X31CWebConst.DATABEAN_ADD_VALUE, "");

		bean.sendMessageString(SCW00101SFConst.CODE_NM_LIST_01, 
				X31CWebConst.DATABEAN_ADD_VALUE, "");
	}
	
	/**
	 * コード名称リストを取得します。
	 * @param outputMap サービス検索結果
	 * @param mapItemName Map項目名
	 * @param itemName 項目名
	 * @return コード名称リスト
	 */
	private ArrayList getCodeNameList(HashMap outputMap, String mapItemName, String itemName) 
	{
		HashMap scMap = (HashMap)outputMap.get(mapItemName);
		ArrayList list = (ArrayList)scMap.get(itemName);
		
		return list == null ? new ArrayList() : list;
	}
	
	/**
	 * 検索ボタン押下時の処理
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean search() throws Exception 
	{
		JCCWebCommon.clearPageLinkInfo(this, JSCScreenConst.SCREEN_ID_SCW00101);
		return doSearch();
	}

	/**
	 * 検索実行
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	private boolean doSearch() throws Exception 
	{
		DEBUG_LOG.debug("***** SCW00101SFLogic#doSearch start *****");
		
		initDetail();

		// 選択されたサービス種別を保存
		saveSelectedSvcSbt();

		String[] serviceInfo = getSearchServiceInfo();

		DEBUG_LOG.debug("serviceInfo[0] = " + serviceInfo[0]);
		DEBUG_LOG.debug("serviceInfo[1] = " + serviceInfo[1]);

		// 検索条件設定
		HashMap paramMap = new HashMap();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, serviceInfo[USECASE_ID]);
		
		HashMap inputMap = createInputMap();
		HashMap outputMap = new HashMap();
		
		// ページング制御用
		JCCWebCommon.upmapperPageLinkInfo(this, serviceInfo[SC_TITLE], inputMap, JSCScreenConst.SCREEN_ID_SCW00101);
		
		DEBUG_LOG.debug("***** サービス実行前 *****");
		
		// 検索実行
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		DEBUG_LOG.debug("***** サービス実行後 *****");
	
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		// エラーチェック
		if (!checkSearchError(serviceInfo, outputMap)) 
		{
			return false;
		}
		
		// 取得したデータをサービスフォームBeanにマッピング
		mapSearchResult2SvcFormBean(outputMap);
		
		// 検索条件の保持
		setSessionInfo(false);
		
		// 行選択設定処理
		// 1行目を選択
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};
		paramBean[0].sendMessageString(SCW00101SFConst.SELECTED_ROW, X31CWebConst.DATABEAN_SET_VALUE, "0");
		
		// ページング制御用
		JCCWebCommon.downmapperPageLinkInfo(this, serviceInfo[SC_TITLE], outputMap, JSCScreenConst.SCREEN_ID_SCW00101);
		
		JCCWebCommon.setSearchCommand(this, "L_PAG_LIST");
		setNextScreen(JSCScreenConst.SCREEN_ID_SCW00101, JSCScreenConst.SCREEN_NAME_SCW00101);
		
		return true;
	}
	
	/**
	 * セッションに検索条件を保持する
	 * @param forShkDisp 初期処理用の保持：True 検索ボタン押下後の保持：False
	 * @throws Exception
	 */
	private void setSessionInfo(boolean forShkDisp) throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 引き継ぎ情報を格納するMAP
		HashMap<String, Object> hktgiMap = new HashMap<String, Object>();
		
		// サービス種別IDX
		Long idxSvcSbt = getSelectListIdx(bean, SCW00101SFConst.JOKEN_SVC_SBT);
		
		// 対象IDX
		Long idxTarget = getSelectListIdx(bean, SCW00101SFConst.JOKEN_TARGET);
		
		// お客さまID
		String svcKeiNo = getStringValue(bean, SCW00101SFConst.JOKEN_SVC_KEI_NO);
		
		// ステータスIDX
		Long idxStatus = getSelectListIdx(bean, SCW00101SFConst.JOKEN_STATUS);
		
		// 日時種別IDX
		Long idxDaySbt = getSelectListIdx(bean, SCW00101SFConst.JOKEN_DAY_SBT);
		
		// 年月日
		X31SDataBeanAccess jokenYmd = getSubDataBean(bean, SCW00101SFConst.JOKEN_YMD);
		
		// 年
		String year = getStringValue(jokenYmd, SCW00101SFConst.YEAR_03);
		
		// 月
		String month = getStringValue(jokenYmd, SCW00101SFConst.MONTH_03);
		
		// 日
		String day = getStringValue(jokenYmd, SCW00101SFConst.DAY_03);
		
		// 時(FROM)IDX
		Long idxTimeFrom = getSelectListIdxTime(bean, SCW00101SFConst.JOKEN_START_TIME);
		
		// 時(TO)IDX
		Long idxTimeTo = getSelectListIdxTime(bean, SCW00101SFConst.JOKEN_END_TIME);
		
		hktgiMap.put(IDX_SVC_SBT,	idxSvcSbt);
		hktgiMap.put(IDX_TARGET,	idxTarget);
		hktgiMap.put(IDX_STATUS,	idxStatus);
		hktgiMap.put(IDX_DATE,		idxDaySbt);
		hktgiMap.put(IDX_TIME_FROM,	idxTimeFrom);
		hktgiMap.put(IDX_TIME_TO,	idxTimeTo);
		
		hktgiMap.put(SCW00101SFConst.JOKEN_SVC_KEI_NO,	svcKeiNo);
		hktgiMap.put(SCW00101SFConst.YEAR_03,			year);
		hktgiMap.put(SCW00101SFConst.MONTH_03,			month);
		hktgiMap.put(SCW00101SFConst.DAY_03,			day);
		
		JCCWebCommon.setScreenInfo(this, JSCScreenConst.SCREEN_ID_SCW00101, hktgiMap);
	}
	
	/**
	 * セッションから検索条件を取得する
	 * @param bean
	 */
	private void getSessionInfo(X31SDataBeanAccess bean) throws Exception
	{
		
		// セッション情報取得
		HashMap<String, Object> searchInfo = JCCWebCommon.getScreenInfo(this);
		
		if(searchInfo != null)
		{
			// サービス種別
			setListIndex(bean, SCW00101SFConst.JOKEN_SVC_SBT, Long.parseLong(searchInfo.get(IDX_SVC_SBT).toString()));
			
			// 対象リスト更新
			changeTarget();
			
			// 対象
			setListIndex(bean, SCW00101SFConst.JOKEN_TARGET, Long.parseLong(searchInfo.get(IDX_TARGET).toString()));
			
			// お客さまID
			setStringValue(bean, SCW00101SFConst.JOKEN_SVC_KEI_NO, searchInfo.get(SCW00101SFConst.JOKEN_SVC_KEI_NO).toString());
			
			// ステータス
			setListIndex(bean, SCW00101SFConst.JOKEN_STATUS, Long.parseLong(searchInfo.get(IDX_STATUS).toString()));
			
			// 日時
			setListIndex(bean, SCW00101SFConst.JOKEN_DAY_SBT, Long.parseLong(searchInfo.get(IDX_DATE).toString()));
			
			// 年月日
			X31SDataBeanAccess jokenYmd = getSubDataBean(bean, SCW00101SFConst.JOKEN_YMD);
			
			// 年
			setStringValue(jokenYmd, SCW00101SFConst.YEAR_03, searchInfo.get(SCW00101SFConst.YEAR_03).toString());
			
			// 月
			setStringValue(jokenYmd, SCW00101SFConst.MONTH_03, searchInfo.get(SCW00101SFConst.MONTH_03).toString());
			
			// 日
			setStringValue(jokenYmd, SCW00101SFConst.DAY_03, searchInfo.get(SCW00101SFConst.DAY_03).toString());
			
			// 時(FROM)
			setListIndexTime(bean, SCW00101SFConst.JOKEN_START_TIME, Long.parseLong(searchInfo.get(IDX_TIME_FROM).toString()));
			
			// 時(TO)
			setListIndexTime(bean, SCW00101SFConst.JOKEN_END_TIME, Long.parseLong(searchInfo.get(IDX_TIME_TO).toString()));
		}
		
	}
	
	/**
	 * 他画面からの遷移用の条件保持
	 * @param bean
	 * @throws Exception 
	 */
	private void hojiForShkDisp(X31SDataBeanAccess bean) throws Exception
	{
		// セッション情報取得
		getSessionInfo(bean);
		
		// セッション情報の設定
		setSessionInfo(true);
	}
	
	/**
	 * 選択されたサービス種別及び名称を保存します。
	 */
	private void saveSelectedSvcSbt() 
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		
		String selectedSvcSbtCd = getSelectedCode(serviceFormBean, SCW00101SFConst.JOKEN_SVC_SBT);
		String selectedSvcSbtCdNm = getSvcSbtCdNm(selectedSvcSbtCd);
		
		setStringValue(serviceFormBean, SCW00101SFConst.SVC_SBT, selectedSvcSbtCd);
		setStringValue(serviceFormBean, SCW00101SFConst.SVC_SBT_NM, selectedSvcSbtCdNm);
	}
	
	/**
	 * サービス種別（SOD送受信種別コード）の名称を取得します。
	 * 
	 * @param svcSbtCd サービス種別（SOD送受信種別コード）
	 * @return 名称
	 */
	private String getSvcSbtCdNm(String svcSbtCd) 
	{
		if (isNullOrBlank(svcSbtCd)) 
		{
			return null;
		}
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess svcSbts = getSubDataBean(bean, SCW00101SFConst.SVC_SBT_LIST);
		Integer count = getCount(svcSbts, SCW00101SFConst.CODE_VALUES_05);

		for (int i = 0; i < count; i++) 
		{
			String code = getStringValue(svcSbts, SCW00101SFConst.CODE_VALUES_05, i);
			
			if (svcSbtCd.equals(code)) 
			{
				String name = getStringValue(svcSbts, SCW00101SFConst.CODE_NAMES_05, i);
				return name;
			}
		}
		
		return null;
	}
	
	/**
	 * 検索エラーのチェックを行います。エラーがある場合はメッセージをメッセージエリアに
	 * 設定します。
	 * 
	 * @param serviceInfo ユースケース情報
	 * @param outputMap 検索結果
	 * @return 正常：true, エラー：false
	 */
	private boolean checkSearchError(String[] serviceInfo, HashMap outputMap) 
	{
		boolean noError = true;
		
		// 検索エラーフラグの取得
		String searchErrFlg = JCCWebCommon.getSearchErrFlg(serviceInfo[SC_TITLE], outputMap);
		
		if (JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrFlg)) 
		{
			// 検索結果が0件の場合の処理
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0330__I);
			noError = false;
		} 
		else if (JPCModelConstant.SEARCH_ERR_FLG_OVERMAX.equals(searchErrFlg)) 
		{
			// 検索結果が最大検索数超えの場合の処理
			String maxShowCnt = JCCWebCommon.getSearchConst("SCW00101_MAX_SHOW_CNT");
			String[] param = {maxShowCnt};
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0340__I, param);
			noError = false;
		} 
		else if (JPCModelConstant.SEARCH_ERR_FLG_NODATA.equals(searchErrFlg)) 
		{
			// 表示ページに該当するデータがない場合の処理
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0350__I);
			noError = false;
		}
		
		return noError;
	}
	
	/**
	 * 明細領域及びページ番号を初期化します。
	 */
	private void initDetail() 
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// ページ番号を初期化
		//setStringValue(serviceFormBean, SCW00101SFConst.DISPLAY_PAGE_NO, "1");
		
		// ラジオボタン選択値を初期化
		setStringValue(serviceFormBean, SCW00101SFConst.SELECTED_ROW, "");
		
		// 明細を初期化
		serviceFormBean.getDataBeanArray(SCW00101SFConst.SVC_ORDER_DETAIL).clearArray();
	}
	
	/**
	 * サービスでの検索結果をサービスフォームBeanにマッピングします。
	 * 
	 * @param outputMap 検索結果
	 * @return SCタイトル
	 */
	private void mapSearchResult2SvcFormBean(HashMap outputMap) 
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		X31SDataBeanAccess[] bean = {serviceFormBean};

		String[] serviceInfo = getSearchServiceInfo();
		
		// マッピング処理
		if (useSCSV0006(serviceInfo[USECASE_ID])) 
		{
			SCSV0006_SCSV0006OPDBMapper mapper = new SCSV0006_SCSV0006OPDBMapper();
			mapper.getSCSV000601SC(bean, outputMap);
		} 
		else if (useSCSV0007(serviceInfo[USECASE_ID])) 
		{
			SCSV0007_SCSV0007OPDBMapper mapper = new SCSV0007_SCSV0007OPDBMapper();
			mapper.getSCSV000701SC(bean, outputMap);
		} 
		else if (useSCSV0008(serviceInfo[USECASE_ID])) 
		{
			SCSV0008_SCSV0008OPDBMapper mapper = new SCSV0008_SCSV0008OPDBMapper();
			mapper.getSCSV000801SC(bean, outputMap);
		} 
		else if (useSCSV0009(serviceInfo[USECASE_ID])) 
		{
			SCSV0009_SCSV0009OPDBMapper mapper = new SCSV0009_SCSV0009OPDBMapper();
			mapper.getSCSV000901SC(bean, outputMap);
		}
	
		if (!useSCSV0009(serviceInfo[USECASE_ID])) 
		{
			
			//マッピングされた各明細行にサービス種別を設定
			// SCSV0009はSQLで取得してマッパーで設定しているので必要ない
			setServiceSbt2Detail();
		}
		
		// 処理結果の編集
		editTrunResult(serviceFormBean, outputMap, serviceInfo);
	}
	
	
	/**
	 * 処理結果項目に編集した値を設定します。
	 * 
	 * @param serviceFormBean サービスフォームBean
	 * @param outputMap サービスより取得したデータ
	 * @param serviceInfo サービス情報
	 */
	private void editTrunResult(X31SDataBeanAccess serviceFormBean, HashMap outputMap, String[] serviceInfo) 
	{
		X31SDataBeanAccessArray svcOrderDetail = serviceFormBean.getDataBeanArray(SCW00101SFConst.SVC_ORDER_DETAIL);
		
		HashMap parentMap = (HashMap)outputMap.get(serviceInfo[SC_TITLE]);
		ArrayList childList = (ArrayList)parentMap.get(serviceInfo[LIST_ITEM_NAME]);
		
		for (int i = 0; i < childList.size(); i++) 
		{
			HashMap childMap = (HashMap)childList.get(i);
			String resultCd = (String)childMap.get("sod_tran_rslt_cd");
			String detailCd = (String)childMap.get("sod_tran_rslt_dtail_cd");
			
			String tranResult = editTranResult(resultCd, detailCd);
			
			X31SDataBeanAccess subBean = svcOrderDetail.getDataBean(i);
			setStringValue(subBean, SCW00101SFConst.TRAN_RSLT_04, tranResult);
		}
	}

	/**
	 * サービス種別を明細に設定します。
	 */
	private void setServiceSbt2Detail() 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		String svcSbt = getStringValue(bean, SCW00101SFConst.SVC_SBT);
		
		X31SDataBeanAccessArray details = bean.getDataBeanArray(SCW00101SFConst.SVC_ORDER_DETAIL);
		
		for (int i = 0; i < details.getCount(); i++) 
		{
			X31SDataBeanAccess row = details.getDataBean(i);
			setStringValue(row, SCW00101SFConst.SVC_SBT_04, svcSbt);
		}
	}

	/**
	 * 画面処理結果表示用文字列を作成します。
	 * 
	 * @param sodTranRsltCd SOD処理結果コード
	 * @param sodTranRsltDtailCd SOD処理結果詳細コード
	 * @return 画面処理結果表示用文字列
	 */
	private String editTranResult(String sodTranRsltCd, String sodTranRsltDtailCd) 
	{
		StringBuilder result = new StringBuilder();
		result.append(sodTranRsltCd);
		
		if (!isNullOrBlank(sodTranRsltDtailCd)) 
		{
			result.append("(").append(sodTranRsltDtailCd).append(")");
		}
		
		return result.toString();
	}
	
	/**
	 * 画面で選択（入力）された検索条件値を取得します。
	 * 
	 * @return 検索条件値
	 */
	private HashMap createInputMap() 
	{
		HashMap inputMap = new HashMap();
		String[] serviceInfo = getSearchServiceInfo();
		String usecaseId = serviceInfo[USECASE_ID];

		if (useSCSV0006(serviceInfo[USECASE_ID])) 
		{
			mapSelectedItems2SCSV0006(inputMap);
		} 
		else if (useSCSV0007(serviceInfo[USECASE_ID])) 
		{
			mapSelectedItems2SCSV0007(inputMap);
		} 
		else if (useSCSV0008(serviceInfo[USECASE_ID])) 
		{
			mapSelectedItems2SCSV0008(inputMap);
		} 
		else if (useSCSV0009(serviceInfo[USECASE_ID])) 
		{
			mapSelectedItems2SCSV0009(inputMap);
		}

		return inputMap;
	}
	
	/**
	 * 画面で選択（入力）された値をSCSV0009サービス用inputMapにマッピングします。
	 * 
	 * @param inputMap マッピングデータ
	 */
	private void mapSelectedItems2SCSV0009(HashMap inputMap) 
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		X31SDataBeanAccess[] bean = {serviceFormBean};

		SCSV0009_SCSV0009OPDBMapper mapper = new SCSV0009_SCSV0009OPDBMapper();
		mapper.setSCSV000901SC(bean, inputMap, FUNC_CD_1);

		// プルダウン選択値（サービス契約番号以外）はMapperではマッピングできないので手動で行う
		HashMap parentMap = (HashMap)inputMap.get(SERVICE_INFO_SCSV0009[SC_TITLE]);
		mapSelectedItems(parentMap);
		
		// 対象
		String target = getSelectedCode(serviceFormBean, SCW00101SFConst.JOKEN_TARGET);
		parentMap.put("key_svc_order_cd", target);
	}
	
	/**
	 * 画面で選択（入力）された値をSCSV0008サービス用inputMapにマッピングします。
	 * 
	 * @param inputMap マッピングデータ
	 */
	private void mapSelectedItems2SCSV0008(HashMap inputMap) 
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		X31SDataBeanAccess[] bean = {serviceFormBean};

		SCSV0008_SCSV0008OPDBMapper mapper = new SCSV0008_SCSV0008OPDBMapper();
		mapper.setSCSV000801SC(bean, inputMap, FUNC_CD_1);

		// プルダウン選択値（サービス契約番号以外）はMapperではマッピングできないので手動で行う
		HashMap parentMap = (HashMap)inputMap.get(SERVICE_INFO_SCSV0008[SC_TITLE]);
		mapSelectedItems(parentMap);
		
		// 対象
		String target = getSelectedCode(serviceFormBean, SCW00101SFConst.JOKEN_TARGET);
		parentMap.put("key_mobile_order_cd", target);
	}
	
	/**
	 * 画面で選択（入力）された値をSCSV0007サービス用inputMapにマッピングします。
	 * 
	 * @param inputMap マッピングデータ
	 */
	private void mapSelectedItems2SCSV0007(HashMap inputMap) 
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		X31SDataBeanAccess[] bean = {serviceFormBean};

		SCSV0007_SCSV0007OPDBMapper mapper = new SCSV0007_SCSV0007OPDBMapper();
		mapper.setSCSV000701SC(bean, inputMap, FUNC_CD_1);

		// プルダウン選択値（サービス契約番号以外）はMapperではマッピングできないので手動で行う
		HashMap parentMap = (HashMap)inputMap.get(SERVICE_INFO_SCSV0007[SC_TITLE]);
		mapSelectedItems(parentMap);
		
		// 対象
		String target = getSelectedCode(serviceFormBean, SCW00101SFConst.JOKEN_TARGET);
		parentMap.put("key_mobile_order_cd", target);
	}
	
	/**
	 * 画面で選択（入力）された値をSCSV0006サービス用inputMapにマッピングします。
	 * 
	 * @param inputMap マッピングデータ
	 */
	private void mapSelectedItems2SCSV0006(HashMap inputMap) 
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		X31SDataBeanAccess[] bean = {serviceFormBean};

		SCSV0006_SCSV0006OPDBMapper mapper = new SCSV0006_SCSV0006OPDBMapper();
		mapper.setSCSV000601SC(bean, inputMap, FUNC_CD_1);

		// プルダウン選択値（サービス契約番号以外）はMapperではマッピングできないので手動で行う
		HashMap parentMap = (HashMap)inputMap.get(SERVICE_INFO_SCSV0006[SC_TITLE]);
		mapSelectedItems(parentMap);

		// 対象
		String target = getSelectedCode(serviceFormBean, SCW00101SFConst.JOKEN_TARGET);
		parentMap.put("key_svc_order_cd", target);
	}
	
	/**
	 * 画面で選択（入力）された値をinputMapにマッピングします。
	 * 
	 * @param map サービス用マッピングデータ
	 */
	private void mapSelectedItems(HashMap map) 
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 表示ページ番号
		String pageNo = getStringValue(serviceFormBean, SCW00101SFConst.DISPLAY_PAGE_NO);
		map.put("display_page_num", pageNo);
		
		// サービス種別
		String svcSbt = getSelectedCode(serviceFormBean, SCW00101SFConst.JOKEN_SVC_SBT);
		map.put("key_sod_send_rcv_sbt_cd", svcSbt);
		
		// 対象
		//String target = getSelectedCode(serviceFormBean, SCW00101SFConst.JOKEN_TARGET);
		//inputMap.put("key_svc_order_cd", target);

		// ステータス
		String status = getSelectedCode(serviceFormBean, SCW00101SFConst.JOKEN_STATUS);
		map.put("key_sod_stat", status);

		// 日時種別
		String daySbt = getSelectedCode(serviceFormBean, SCW00101SFConst.JOKEN_DAY_SBT);
		map.put("key_sod_day_sbt_cd", daySbt);
		
		// 年月日
		X31SDataBeanAccess jokenYmd = getSubDataBean(serviceFormBean, SCW00101SFConst.JOKEN_YMD);
		
		String year = getStringValue(jokenYmd, SCW00101SFConst.YEAR_03);
		map.put("key_date_year", year);

		String month = getStringValue(jokenYmd, SCW00101SFConst.MONTH_03);
		map.put("key_date_mon", month);

		String day = getStringValue(jokenYmd, SCW00101SFConst.DAY_03);
		map.put("key_date_day", day);

		// 開始時間
		String startTime = getSelectedTime(serviceFormBean, SCW00101SFConst.JOKEN_START_TIME);
		map.put("key_date_sta_time", startTime);

		// 終了時間
		String endTime = getSelectedTime(serviceFormBean, SCW00101SFConst.JOKEN_END_TIME);
		map.put("key_date_end_time", endTime);
	}
	
	/**
	 * サービス情報を取得します。
	 * 選択されたサービス種別により呼び出すサービスが決定されるため、その情報を取得します。<br>
	 * <ul>
	 *    <li>サービス情報配列[0] : ユースケースID</li>
	 *    <li>サービス情報配列[1] : SCタイトル</li>
	 *    <li>サービス情報配列[2] : 明細項目名</li>
	 * </ul>
	 * 
	 * @return サービス情報配列
	 */
	private String[] getSearchServiceInfo() 
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// サービス種別
		String svcSbtCd = getSelectedCode(serviceFormBean, SCW00101SFConst.JOKEN_SVC_SBT);

		String[] serviceInfo = null;
		
		if (SVC_SBT_IP_SOD.equals(svcSbtCd)) 
		{
			serviceInfo = SERVICE_INFO_SCSV0006;
		} 
		else if (SVC_SBT_UQ_SOD.equals(svcSbtCd)) 
		{
			serviceInfo = SERVICE_INFO_SCSV0007;
		} 
		else if (SVC_SBT_SPOT_SOD.equals(svcSbtCd)) 
		{
			serviceInfo = SERVICE_INFO_SCSV0008;
		} 
		else 
		{
			serviceInfo = SERVICE_INFO_SCSV0009;
		}
		
		return serviceInfo;
	}
	
	/**
	 * サービス情報を取得します。
	 * 選択されたサービス種別により呼び出す一意検索用サービスが決定されるため、その情報を取得します。<br>
	 * 
	 * <ul>
	 *    <li>サービス情報配列[0] : ユースケースID</li>
	 *    <li>サービス情報配列[1] : SCタイトル</li>
	 *    <li>サービス情報配列[2] : 明細項目名</li>
	 * </ul>
	 * 
	 * @param svcSbtCd サービス種別コード
	 * @return ユースケース情報配列
	 */
	private String[] getUniqueSearchServiceInfo(String svcSbtCd) 
	{
		String[] serviceInfo = null;
		
		if (SVC_SBT_IP_SOD.equals(svcSbtCd)) 
		{
			serviceInfo = SERVICE_INFO_SCSV0010;
		} 
		else if (SVC_SBT_UQ_SOD.equals(svcSbtCd)) 
		{
			serviceInfo = SERVICE_INFO_SCSV0011;
		} 
		else if (SVC_SBT_SPOT_SOD.equals(svcSbtCd)) 
		{
			serviceInfo = SERVICE_INFO_SCSV0012;
		}
		
		return serviceInfo;
	}
	
	/**
	 * SCSV0006を使用する場合true
	 * @param usecaseId usecase id
	 * @return usecaseIdがSCSV0006の場合true
	 */
	private boolean useSCSV0006(String usecaseId) 
	{
		return SERVICE_INFO_SCSV0006[USECASE_ID].equals(usecaseId);
	}
	
	/**
	 * SCSV0007を使用する場合true
	 * @param usecaseId usecase id
	 * @return usecaseIdがSCSV0006の場合true
	 */
	private boolean useSCSV0007(String usecaseId) 
	{
		return SERVICE_INFO_SCSV0007[USECASE_ID].equals(usecaseId);
	}
	
	/**
	 * SCSV0008を使用する場合true
	 * @param usecaseId usecase id
	 * @return usecaseIdがSCSV0006の場合true
	 */
	private boolean useSCSV0008(String usecaseId) 
	{
		return SERVICE_INFO_SCSV0008[USECASE_ID].equals(usecaseId);
	}
	
	/**
	 * SCSV0009を使用する場合true
	 * @param usecaseId usecase id
	 * @return usecaseIdがSCSV0006の場合true
	 */
	private boolean useSCSV0009(String usecaseId) 
	{
		return SERVICE_INFO_SCSV0009[USECASE_ID].equals(usecaseId);
	}
	
	/**
	 * SCSV0010を使用する場合true
	 * @param usecaseId usecase id
	 * @return usecaseIdがSCSV0006の場合true
	 */
	private boolean useSCSV0010(String usecaseId) 
	{
		return SERVICE_INFO_SCSV0010[USECASE_ID].equals(usecaseId);
	}
	
	/**
	 * SCSV0011を使用する場合true
	 * @param usecaseId usecase id
	 * @return usecaseIdがSCSV0006の場合true
	 */
	private boolean useSCSV0011(String usecaseId) 
	{
		return SERVICE_INFO_SCSV0011[USECASE_ID].equals(usecaseId);
	}
	
	/**
	 * SCSV0012を使用する場合true
	 * @param usecaseId usecase id
	 * @return usecaseIdがSCSV0006の場合true
	 */
	private boolean useSCSV0012(String usecaseId) 
	{
		return SERVICE_INFO_SCSV0012[USECASE_ID].equals(usecaseId);
	}
	
	/**
	 * 選択された時間を取得します。
	 * @param serviceFormBean サービスフォームBean
	 * @param itemName 項目名
	 * @return 選択された時間
	 */
	private String getSelectedTime(X31SDataBeanAccess serviceFormBean, String itemName) 
	{
		X31SDataBeanAccess timeTypeBean = getSubDataBean(serviceFormBean, itemName);

		Long index = getLongValue(timeTypeBean, SCW00101SFConst.TIME_INDEX_02);
		String code = getStringValue(timeTypeBean, SCW00101SFConst.TIME_VAL_LIST_02, index.intValue());
		
		return code;
	}

	/**
	 * 画面で選択されたコード値を取得します。
	 * 
	 * @param serviceFormBean サービスフォームBean
	 * @param itemName 項目名
	 * @return コード値
	 */
	private String getSelectedCode(X31SDataBeanAccess serviceFormBean, String itemName) 
	{
		X31SDataBeanAccess codeTypeBean = getSubDataBean(serviceFormBean, itemName);

		Long index = getLongValue(codeTypeBean, SCW00101SFConst.CODE_INDEX_01);
		String code = getStringValue(codeTypeBean, SCW00101SFConst.CODE_VAL_LIST_01, index.intValue());
		
		return code;
	}
	
//	/**
//	 * 画面で選択されたコード名称を取得します。
//	 * 
//	 * @param serviceFormBean サービスフォームBean
//	 * @param itemName 項目名
//	 * @return コード値
//	 */
//	private String getSelectedCodeName(X31SDataBeanAccess serviceFormBean, String itemName) 
//	{
//		X31SDataBeanAccess codeTypeBean = getSubDataBean(serviceFormBean, itemName);
//
//		Long index = getLongValue(codeTypeBean, SCW00101SFConst.CODE_INDEX_01);
//		String name = getStringValue(codeTypeBean, SCW00101SFConst.CODE_NM_LIST_01, index.intValue());
//		
//		return name;
//	}
	
	/**
	 * 画面遷移するIDと名称を設定します。
	 * 
	 * @param nextScreenId Screen ID
	 * @param nextScreenName Screen名称
	 */
	private void setNextScreen(String nextScreenId, String nextScreenName) 
	{
		X31SDataBeanAccess  commonInfoBean = super.getCommonInfoBean();
		
		setStringValue(commonInfoBean, CommonInfoCFConst.NEXT_SCREEN_ID, nextScreenId);
		setStringValue(commonInfoBean, CommonInfoCFConst.NEXT_SCREEN_NAME, nextScreenName);
	}
	
	/**
	 * 解除確認ボタン押下時の処理
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean confirmReset() throws Exception
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		
		hojiForShkDisp(serviceFormBean);
		
		// 処理内容を「解除」設定（次画面表示用）
		setStringValue(serviceFormBean, SCW00101SFConst.TRAN_NAIYO, TRAN_NAIYO_RESET);
		
		// 検索実行　データ取得
		return confirm();
	}

	/**
	 * 再送確認ボタン押下時の処理
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean confirmRetran() throws Exception 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		hojiForShkDisp(bean);
		
		// 処理内容を「再送」に設定（次画面表示用）
		setStringValue(bean, SCW00101SFConst.TRAN_NAIYO, TRAN_NAIYO_RETRAN);
		
		// 検索実行　データ取得
		return confirm();
	}

	/**
	 * 確認ボタン押下時の処理
	 * @return 成否
	 */
	@SuppressWarnings("unchecked")
	private boolean confirm() 
	{
		DEBUG_LOG.debug("***** SCW00101SFLogic#confirm start *****");

		initServiceOrderInfo();
		
		X31SDataBeanAccess selectedRow = getSelectedRow();

		// 選択行のチェック
		if (!checkSelectedItem(selectedRow))
		{
			return false;
		}
		
		// 選択されたサービス種別および送受信管理番号
		String svcSbtCd = getStringValue(selectedRow, SCW00101SFConst.SVC_SBT_04);
		String srinfKanriNo = getStringValue(selectedRow, SCW00101SFConst.SRINF_KANRI_NO_04);
		
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		setStringValue(serviceFormBean, SCW00101SFConst.SVC_SBT, svcSbtCd);
		
		String[] serviceInfo = getUniqueSearchServiceInfo(svcSbtCd);

		// 検索条件設定
		HashMap paramMap = new HashMap();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, serviceInfo[USECASE_ID]);
		
		HashMap inputMap = createUniqueSearchInputMap(srinfKanriNo, serviceInfo[SC_TITLE]);
		HashMap outputMap = new HashMap();
		
		DEBUG_LOG.debug("***** サービス実行開始 *****");
		
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		DEBUG_LOG.debug("***** サービス実行完了 *****");

		if(msgResult != null) 
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return false;
		}

		if (!checkUniqueSearchError(outputMap, serviceInfo)) 
		{
			return false;
		}
		
		// 取得したデータをサービスフォームBeanのサービスオーダ情報にマッピング
		mapPKeySearchRslt2SvcFormBean(outputMap, serviceInfo);
		
		// サービス種別をサービスフォームBeanのサービスオーダ情報(次画面表示用）に設定
		X31SDataBeanAccess svcOrderInfo = getSubDataBean(serviceFormBean, SCW00101SFConst.SVC_ORDER_INFO);
		setStringValue(svcOrderInfo, SCW00101SFConst.SOD_SEND_RCV_SBT_CD_06, svcSbtCd);
		setStringValue(svcOrderInfo, SCW00101SFConst.SOD_SEND_RCV_SBT_CD_NM_06, getSvcSbtCdNm(svcSbtCd));
		
		JCCWebCommon.setMessageInfo(this, EKB0370__I, new String [] {DISP_MSG_SHORI});
		setNextScreen(JSCScreenConst.SCREEN_ID_SCW00102, JSCScreenConst.SCREEN_NAME_SCW00102);
		
		DEBUG_LOG.debug("***** SCW00101SFLogic#confirm end *****");

		return true;
	}
	
	/**
	 * 選択された行のチェックを行い、エラーがあればエラーメッセージを設定します。
	 * 
	 * @param selectedRow 選択行
	 * @return エラーなしの場合true
	 */
	private boolean checkSelectedItem(X31SDataBeanAccess selectedRow) 
	{
		// 未選択の場合エラー
		if (selectedRow == null) 
		{
			String[] param = {EKB1320_PARAM1};
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB1320_NW, param);
			return false;
		}

		String sodStatusCd = getStringValue(selectedRow, SCW00101SFConst.STATUS_CD_04);
		
		// ステータスが応答異常以外の場合エラー
		if (!JSCStrConstant.SOD_STAT_ACK_ABNORMAL.equals(sodStatusCd)) 
		{
			String[] param = {EKB0290_PARAM1, EKB0290_PARAM2, EKB0290_PARAM3};
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0290_JW, param);
			return false;
		}
		
		return true;
	}
	
	/**
	 * 検索結果のチェックを行い、エラーがあればエラーメッセージを設定します。
	 * @param outputMap 検索結果
	 * @param serviceInfo サービス情報
	 * @return エラーなしの場合true
	 */
	private boolean checkUniqueSearchError(HashMap outputMap, String[] serviceInfo) 
	{
		ArrayList details = getListItemsOfService(outputMap, serviceInfo);

		if (details.size() == 0) 
		{
			// 検索結果が0件の場合の処理
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0330__I);
			return false;
		}
		
		return true;
	}
	
	/**
	 * 一意検索結果をサービスフォームBeanマッピングします。
	 * @param outputMap 一意検索結果
	 * @param serviceInfo サービス情報
	 */
	private void mapPKeySearchRslt2SvcFormBean(HashMap outputMap, String[] serviceInfo) 
	{
		String listItemName = null;
		
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		X31SDataBeanAccess[] bean = {serviceFormBean};

		// マッピング処理
		if (useSCSV0010(serviceInfo[USECASE_ID])) 
		{
			SCSV0010_SCSV0010OPDBMapper mapper = new SCSV0010_SCSV0010OPDBMapper();
			mapper.getSCSV001001SC(bean, outputMap);
			
		} 
		else if (useSCSV0011(serviceInfo[USECASE_ID])) 
		{
			SCSV0011_SCSV0011OPDBMapper mapper = new SCSV0011_SCSV0011OPDBMapper();
			mapper.getSCSV001101SC(bean, outputMap);

		} 
		else if (useSCSV0012(serviceInfo[USECASE_ID])) 
		{
			SCSV0012_SCSV0012OPDBMapper mapper = new SCSV0012_SCSV0012OPDBMapper();
			mapper.getSCSV001201SC(bean, outputMap);
		}
		
		// サービスオーダ情報
		X31SDataBeanAccess svcOrderInfo = getSubDataBean(serviceFormBean, SCW00101SFConst.SVC_ORDER_INFO);
		
		// 受付を編集
		String yokyuMtAplSbtCdNm = getYokyuMtAplSbtCdNm(outputMap, serviceInfo);
		setStringValue(svcOrderInfo, SCW00101SFConst.YOKYU_MT_APL_SBT_CD_NM_06, yokyuMtAplSbtCdNm);
		
		// 対象を編集
		String svcOrderCdNm = getSvcOrderCdNm(outputMap, serviceInfo);
		setStringValue(svcOrderInfo, SCW00101SFConst.SVC_ORDER_CD_NM_06, svcOrderCdNm);
		
		// 操作を編集
		String yokyuSbtCdNm = getYokyuSbtCdNm(outputMap, serviceInfo);
		setStringValue(svcOrderInfo, SCW00101SFConst.YOKYU_SBT_CD_NM_06, yokyuSbtCdNm);
		
		// 処理結果を編集して設定
		String tranResult = getTranResult(outputMap, serviceInfo);
		setStringValue(svcOrderInfo, SCW00101SFConst.TRAN_RSLT_06, tranResult);
		
	}
	
	
	/**
	 * 要求種別コード（操作）の表示文言を取得します。
	 * @param outputMap サービスより取得したデータ
	 * @param serviceInfo サービス情報
	 * @return 表示文言
	 */
	private String getYokyuSbtCdNm(HashMap outputMap, String[] serviceInfo) 
	{
		ArrayList details = getListItemsOfService(outputMap, serviceInfo);
		
		if (details.size() == 0) 
		{
			return "";
		}
		
		HashMap childMap = (HashMap)details.get(0);
		String code = (String)childMap.get("yokyu_sbt_cd");
		String name = (String)childMap.get("yokyu_sbt_cd_nm");
		
		return getDispValue(code, name);
	}

	/**
	 * サービス（モバイル）オーダコード（対象）の表示文言を取得します。
	 * @param outputMap サービスより取得したデータ
	 * @param serviceInfo サービス情報
	 * @return 表示文言
	 */
	private String getSvcOrderCdNm(HashMap outputMap, String[] serviceInfo) 
	{
		ArrayList details = getListItemsOfService(outputMap, serviceInfo);
		
		if (details.size() == 0) 
		{
			return "";
		}
		
		String codeKey = null;
		String nameKey = null;
		
		if (SERVICE_INFO_SCSV0010[USECASE_ID].equals(serviceInfo[USECASE_ID])) 
		{
			codeKey = "svc_order_cd";
			nameKey = "svc_order_cd_nm";
		} 
		else 
		{
			codeKey = "mobile_order_cd";
			nameKey = "mobile_order_cd_nm";
		}
		
		HashMap childMap = (HashMap)details.get(0);
		String code = (String)childMap.get(codeKey);
		String name = (String)childMap.get(nameKey);
		
		return getDispValue(code, name);
	}
	
	/**
	 * 要求基アプリ種別コード名称（受付）の表示文言を取得します。
	 * @param outputMap サービスより取得したデータ
	 * @param serviceInfo サービス情報
	 * @return 表示文言
	 */
	private String getYokyuMtAplSbtCdNm(HashMap outputMap, String[] serviceInfo) 
	{
		ArrayList details = getListItemsOfService(outputMap, serviceInfo);
		
		if (details.size() == 0) 
		{
			return "";
		}
		
		HashMap childMap = (HashMap)details.get(0);
		String code = (String)childMap.get("yokyu_mt_apl_sbt_cd");
		String name = (String)childMap.get("yokyu_mt_apl_sbt_cd_nm");
		
		return getDispValue(code, name);
	}
	
	/**
	 * サービスオーダ情報の表示文言を編集します。
	 * @param code コード値
	 * @param name コード名称
	 * @return 表示値
	 */
	private String getDispValue(String code, String name) 
	{
		StringBuilder sb = new StringBuilder();
		sb.append("[").append(code).append("]").append(name);
		return sb.toString();
	}
	
	/**
	 * 一意検索サービスで取得したデータより編集した処理結果を取得します。
	 * 
	 * @param outputMap サービスより取得したデータ
	 * @param serviceInfo サービス情報
	 * @return 処理結果
	 */
	private String getTranResult(HashMap outputMap, String[] serviceInfo) 
	{
		ArrayList listItems = getListItemsOfService(outputMap, serviceInfo);
		
		if (listItems.size() == 0) 
		{
			return "";
		}
		
		HashMap childMap = (HashMap)listItems.get(0);
		String resultCd = (String)childMap.get("sod_tran_rslt_cd");
		String detailCd = (String)childMap.get("sod_tran_rslt_dtail_cd");

		return editTranResult(resultCd, detailCd);
	}
	
	/**
	 * サービスより取得した値より明細を取得します。
	 * @param outputMap	 サービスより取得したデータ
	 * @param serviceInfo サービス情報
	 * @return 明細
	 */
	private ArrayList getListItemsOfService(HashMap outputMap, String[] serviceInfo) 
	{
		HashMap parentMap = (HashMap)outputMap.get(serviceInfo[SC_TITLE]);
		return (ArrayList)parentMap.get(serviceInfo[LIST_ITEM_NAME]);
	}
	
	/**
	 * 一意検索の条件を設定します。
	 * 
	 * @param srinfKanriNo 送受信情報管理番号
	 * @param scTitle SCタイトル
	 * @return 一意検索条件
	 */
	private HashMap createUniqueSearchInputMap(String srinfKanriNo, String scTitle) 
	{
		HashMap inputMap = new HashMap();
		HashMap parentMap = new HashMap<String, Object>();
		parentMap.put("func_code", FUNC_CD_1);

		// 送受信管理情報番号
		parentMap.put("key_srinf_kanri_no", srinfKanriNo);

		inputMap.put(scTitle, parentMap);
		
		return inputMap;
	}
	
	/**
	 * 選択された明細行を取得します。未選択の場合はnullが帰ります。
	 * 
	 * @return 選択された明細行（サービスオーダ明細データタイプBean）
	 */
	private X31SDataBeanAccess getSelectedRow() 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		String index = getStringValue(bean, SCW00101SFConst.SELECTED_ROW);
		
		if (isNullOrBlank(index)) 
		{
			return null;
		}
		
		X31SDataBeanAccessArray details = bean.getDataBeanArray(SCW00101SFConst.SVC_ORDER_DETAIL);
		
		return details.getDataBean(Integer.parseInt(index));
	}
	
	/**
	 * サービスオーダ再送・解除確認画面、サービスオーダ再送・解除完了画面の表示領域を
	 * 初期化します
	 * 
	 */
	private void initServiceOrderInfo() 
	{
		
		X31SDataBeanAccess bean = super.getServiceFormBean();
		clearValue(bean, SCW00101SFConst.SVC_SBT);
		
		X31SDataBeanAccess svcOrderInfo = getSubDataBean(bean, SCW00101SFConst.SVC_ORDER_INFO);
		clearValue(svcOrderInfo, SCW00101SFConst.SRINF_KANRI_NO_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_SEND_KEY_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_STAT_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_STAT_NM_06);
		clearValue(svcOrderInfo, SCW00101SFConst.YOKYU_MT_APL_SBT_CD_06);
		clearValue(svcOrderInfo, SCW00101SFConst.YOKYU_MT_APL_SBT_CD_NM_06);
		clearValue(svcOrderInfo, SCW00101SFConst.YOKYU_SBT_CD_06);
		clearValue(svcOrderInfo, SCW00101SFConst.YOKYU_SBT_CD_NM_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SVC_ORDER_CD_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SVC_ORDER_CD_NM_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_SEND_PRIORITY_CD_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_SEND_PRIORITY_CD_NM_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SVC_KEI_NO_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SCHEDULE_YMD_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_RENKEI_SEQ_06);
		clearValue(svcOrderInfo, SCW00101SFConst.OLD_SOD_RENKEI_SEQ_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_RRK_DATA_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_UK_DTM_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_TONYU_DTM_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_RSLT_ADD_DTM_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_TRAN_RSLT_CD_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_WORK_RNKI_STAT_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_WORK_RNKI_STAT_NM_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_TRAN_RSLT_DTAIL_CD_06);
		clearValue(svcOrderInfo, SCW00101SFConst.MOBILE_YOKYU_SBT_CD_06);
		clearValue(svcOrderInfo, SCW00101SFConst.UPD_DTM_06);
		clearValue(svcOrderInfo, SCW00101SFConst.TRAN_RSLT_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_SEND_RCV_SBT_CD_06);
		clearValue(svcOrderInfo, SCW00101SFConst.SOD_SEND_RCV_SBT_CD_NM_06);

	}
	
	/**
	 * ページング処理
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean paging() throws Exception 
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// セッション情報の取得
		getSessionInfo(bean);
		
		return doSearch();
	}

	/**
	 * 戻る処理
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean back() throws Exception 
	{
		setNextScreen(JSCScreenConst.SCREEN_ID_SCW00101, JSCScreenConst.SCREEN_NAME_SCW00101);
		return true;
	}
	
	/**
	 * 確定処理
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean fix() throws Exception 
	{
		String[] serviceInfo = getUpdateServiceInfo();
		
		HashMap paramMap = new HashMap();

		// 更新データのマッピング
		HashMap inputMap = createUpdateMap(serviceInfo[USECASE_ID]);
		
		HashMap outputMap = new HashMap();

		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, serviceInfo[USECASE_ID]);
		
		// 更新処理
		DEBUG_LOG.debug("***** usecaseId = " + serviceInfo[USECASE_ID]);
		DEBUG_LOG.debug("***** 更新処理前 *****");
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		DEBUG_LOG.debug("***** 更新処理後 *****");
		
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		
		// 更新したレコード情報を再検索して画面情報として設定
		HashMap result = (HashMap)outputMap.get(serviceInfo[SC_TITLE]);
		String srinfKanriNo = (String)result.get("srinf_kanri_no");
		DEBUG_LOG.debug("***** srinfKanriNo = " + srinfKanriNo);
		
		setUpdateInfo(srinfKanriNo);
		
		JCCWebCommon.setMessageInfo(this, EKB0380__I, new String [] {DISP_MSG_SHORI});
		setNextScreen(JSCScreenConst.SCREEN_ID_SCW00103, JSCScreenConst.SCREEN_NAME_SCW00103);

		DEBUG_LOG.debug("***** SCW00101SFLogic#fix end *****");
		return true;
	}
	
	/**
	 * 送受信情報管理番号でサービスオーダ送受信情報 or UQ送受信情報 or SPOT送受信情報
	 * を検索して結果を画面情報として設定します
	 * 
	 * @param srinfKanriNo 送受信情報管理番号
	 * @param usecaseInfo ユースケース情報
	 */
	private void setUpdateInfo(String srinfKanriNo) 
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		String svcSbtCd = getStringValue(serviceFormBean, SCW00101SFConst.SVC_SBT);
		String[] serviceInfo = getUniqueSearchServiceInfo(svcSbtCd);
		
		// 検索条件設定
		HashMap paramMap = new HashMap();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, serviceInfo[USECASE_ID]);
		
		HashMap inputMap = createUniqueSearchInputMap(srinfKanriNo, serviceInfo[SC_TITLE]);
		HashMap outputMap = new HashMap();
		
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// 取得したデータをサービスフォームBeanにマッピング
		mapPKeySearchRslt2SvcFormBean(outputMap, serviceInfo);
	}
	
	/**
	 * SODステータスコードの名称を取得します。
	 * @param sodStatusCd
	 * @return SODステータスコード名称
	 */
	private String getSodStatusCodeName(String sodStatusCd) 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess jokenStatus = getSubDataBean(bean, SCW00101SFConst.JOKEN_STATUS);

		Integer count = getCount(jokenStatus, SCW00101SFConst.CODE_VALUES_05);

		for (int i = 0; i < count; i++) 
		{
			String code = getStringValue(jokenStatus, SCW00101SFConst.CODE_VALUES_05, i);
			
			if (!isNullOrBlank(code) && code.equals(sodStatusCd)) 
			{
				return getStringValue(jokenStatus, SCW00101SFConst.CODE_NAMES_05, i);
			}
		}

		return null;
	}

	/**
	 * 更新用データを取得します。
	 * @param usecaseId ユースケースID
	 * @return マッピングデータ
	 */
	private HashMap createUpdateMap(String usecaseId) 
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess svcOrderInfo = getSubDataBean(bean, SCW00101SFConst.SVC_ORDER_INFO);

		HashMap map = null;
		
		if (UPD_SERVICE_INFO_SCSV0018[USECASE_ID].equals(usecaseId)) 
		{
			// サービス送受信オーダ再送
			map = get2SCSV0018Map(svcOrderInfo);
		} 
		else if (UPD_SERVICE_INFO_SCSV0019[USECASE_ID].equals(usecaseId)) 
		{
			// UQ送受信オーダ再送
			map = get2SCSV0019Map(svcOrderInfo);
		} 
		else if (UPD_SERVICE_INFO_SCSV0020[USECASE_ID].equals(usecaseId)) 
		{
			// SPOT送受信オーダ再送
			map = get2SCSV0020Map(svcOrderInfo);
		} 
		else if (UPD_SERVICE_INFO_SCSV0021[USECASE_ID].equals(usecaseId)) 
		{
			// サービス送受信オーダ解除
			map = get2SCSV0021Map(svcOrderInfo);
		} 
		else if (UPD_SERVICE_INFO_SCSV0022[USECASE_ID].equals(usecaseId)) 
		{
			// UQ送受信オーダ解除
			map = get2SCSV0022Map(svcOrderInfo);
		} 
		else 
		{
			// SPOT送受信オーダ解除
			map = get2SCSV0023Map(svcOrderInfo);
		}
		
		return map;
	}
	
	/**
	 * 送受信情報管理番号を取得します。
	 * @param bean サービスオーダ情報
	 * @return 送受信情報管理番号
	 */
	private String getSrinfKanriNo(X31SDataBeanAccess bean) 
	{
		return getStringValue(bean, SCW00101SFConst.SRINF_KANRI_NO_06);
	}
	
	/**
	 * SODステータスを取得します
	 * @param bean サービスオーダ情報
	 * @return SODステータス
	 */
	private String getSodStat(X31SDataBeanAccess bean) 
	{
		return  getStringValue(bean, SCW00101SFConst.SOD_STAT_06);
	}
	
	/**
	 * 更新年月日時分秒を取得します
	 * @param bean サービスオーダ情報
	 * @return 更新年月日時分秒
	 */
	private String getUpdDtm(X31SDataBeanAccess bean) 
	{
		return getStringValue(bean, SCW00101SFConst.UPD_DTM_06);
	}
	
	/**
	 * サービスオーダコードを取得します
	 * @param bean サービスオーダ情報
	 * @return サービスオーダコード
	 */
	private String getSvcOrderCd(X31SDataBeanAccess bean) 
	{
		return getStringValue(bean, SCW00101SFConst.SVC_ORDER_CD_06);
	}
	
	/**
	 * 要求種別コードを取得します
	 * @param bean サービスオーダ情報
	 * @return 要求種別コード
	 */
	private String getYokyuSbtCd(X31SDataBeanAccess bean) 
	{
		return getStringValue(bean, SCW00101SFConst.YOKYU_SBT_CD_06);
	}
	
	/**
	 * SOD連携通番を取得します
	 * @param bean サービスオーダ情報
	 * @return SOD連携通番
	 */
	private String getSodRenkeiSeq(X31SDataBeanAccess bean) 
	{
		return getStringValue(bean, SCW00101SFConst.SOD_RENKEI_SEQ_06);
	}
	
	/**
	 * SOD送信キーを取得します
	 * @param bean サービスオーダ情報
	 * @return SOD送信キー
	 */
	private String getSodSendKey(X31SDataBeanAccess bean) 
	{
		return 	getStringValue(bean, SCW00101SFConst.SOD_SEND_KEY_06);
	}
	
	/**
	 * 要求元アプリ種別コードを取得します
	 * @param bean サービスオーダ情報
	 * @return 要求元アプリ種別コード
	 */
	private String getYokyuMtAplSbtCd(X31SDataBeanAccess bean)
	{
		return getStringValue(bean, SCW00101SFConst.YOKYU_MT_APL_SBT_CD_06);
	}
	
	/**
	 * サービス契約番号を取得します
	 * @param bean サービスオーダ情報
	 * @return サービス契約番号
	 */
	private String getSvcKeiNo(X31SDataBeanAccess bean) 
	{
		return getStringValue(bean, SCW00101SFConst.SVC_KEI_NO_06);
	}
	
	/**
	 * スケジュール年月日を取得します
	 * @param bean サービスオーダ情報
	 * @return スケジュール年月日
	 */
	private String getScheduleYmd(X31SDataBeanAccess bean) 
	{
		return getStringValue(bean, SCW00101SFConst.SCHEDULE_YMD_06);
	}

	/**
	 * 旧SOD連携通番を取得します
	 * @param bean サービスオーダ情報
	 * @return 旧SOD連携通番
	 */
	private String getOldSodRenkeiSeq(X31SDataBeanAccess bean) 
	{
		return getStringValue(bean, SCW00101SFConst.OLD_SOD_RENKEI_SEQ_06);
	}

	/**
	 * SOD連絡データを取得します
	 * @param bean サービスオーダ情報
	 * @return SOD連絡データ
	 */
	private String getSodRrkData(X31SDataBeanAccess bean) 
	{
		return getStringValue(bean, SCW00101SFConst.SOD_RRK_DATA_06);
	}

	/**
	 * SOD送信プライオリティコードを取得します
	 * @param bean サービスオーダ情報
	 * @return SOD送信プライオリティコード
	 */
	private String getSodSendPriorityCd(X31SDataBeanAccess bean) 
	{
		return getStringValue(bean, SCW00101SFConst.SOD_SEND_PRIORITY_CD_06);
	}
	
	/**
	 * モバイル要求種別コードを取得します
	 * @param bean サービスオーダ情報
	 * @return モバイル要求種別コード
	 */
	private String getMobileYokyuSbtCd(X31SDataBeanAccess bean) 
	{
		return getStringValue(bean, SCW00101SFConst.MOBILE_YOKYU_SBT_CD_06);
	}
	
	/**
	 * SCSV0018用更新データを取得します。
	 * @param bean サービスオーダ情報
	 * @return サービス用更新データ
	 */
	private HashMap get2SCSV0018Map(X31SDataBeanAccess bean) 
	{
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// SCSV001801SC用
		HashMap<String, Object> scsv001801sc = new HashMap<String, Object>();
		scsv001801sc.put("func_code", FUNC_CD_1);
		scsv001801sc.put("srinf_kanri_no", getSrinfKanriNo(bean));
		scsv001801sc.put("sod_stat", JSCStrConstant.SOD_STAT_REAPPLIED);
		scsv001801sc.put("upd_dtm_bf", getUpdDtm(bean));
		outputMap.put("SCSV001801SC", scsv001801sc);
		
		// SCSV001802SC用
		HashMap<String, Object> scsv001802sc = new HashMap<String, Object>();
		scsv001802sc.put("func_code", FUNC_CD_1);
		scsv001802sc.put("svc_order_cd", getSvcOrderCd(bean));
		scsv001802sc.put("yokyu_sbt_cd", getYokyuSbtCd(bean));
		outputMap.put("SCSV001802SC", scsv001802sc);
		
		// SCSV001803SC用
		HashMap<String, Object> scsv001803sc = new HashMap<String, Object>();
		scsv001803sc.put("func_code", FUNC_CD_1);
		scsv001803sc.put("svc_order_no", getSodRenkeiSeq(bean));
		scsv001803sc.put("svc_order_stat", JSCStrConstant.SOD_STAT_REAPPLY);
		outputMap.put("SCSV001803SC", scsv001803sc);
		
		// SCSV001804SC用
		HashMap<String, Object> scsv001804sc = new HashMap<String, Object>();
		scsv001804sc.put("func_code", FUNC_CD_1);
		scsv001804sc.put("tel_svc_order_no", getSodRenkeiSeq(bean));
		scsv001804sc.put("tel_svc_order_stat", JSCStrConstant.SOD_STAT_REAPPLY);
		outputMap.put("SCSV001804SC", scsv001804sc);
		
		// SCSV001805SC用
		HashMap<String, Object> scsv001805sc = new HashMap<String, Object>();
		scsv001805sc.put("func_code", FUNC_CD_1);
		scsv001805sc.put("emg_order_no", getSodRenkeiSeq(bean));
		scsv001805sc.put("emg_order_stat", JSCStrConstant.SOD_STAT_REAPPLY);
		outputMap.put("SCSV001805SC", scsv001805sc);
		
		// SCSV001806SC用
		// SODステータスはサービスＩＦ−概念スキーマ変換で"007"に更新される
		HashMap<String, Object> scsv001806sc = new HashMap<String, Object>();
		scsv001806sc.put("func_code", FUNC_CD_1);
		scsv001806sc.put("sod_send_key", getSodSendKey(bean));
		scsv001806sc.put("yokyu_mt_apl_sbt_cd", getYokyuMtAplSbtCd(bean));
		scsv001806sc.put("yokyu_sbt_cd", getYokyuSbtCd(bean));
		scsv001806sc.put("svc_order_cd", getSvcOrderCd(bean));
		scsv001806sc.put("svc_kei_no", getSvcKeiNo(bean));
		scsv001806sc.put("schedule_ymd", getScheduleYmd(bean));
		scsv001806sc.put("sod_renkei_seq", getSodRenkeiSeq(bean));
		scsv001806sc.put("old_sod_renkei_seq", getOldSodRenkeiSeq(bean));
		scsv001806sc.put("sod_rrk_data", getSodRrkData(bean));
		outputMap.put("SCSV001806SC", scsv001806sc);

		return outputMap;
	}

	/**
	 * SCSV0019用更新データを取得します。
	 * @param bean サービスオーダ情報
	 * @return サービス用更新データ
	 */
	private HashMap get2SCSV0019Map(X31SDataBeanAccess bean) 
	{
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// SCSV001901SC用
		HashMap<String, Object> scsv001901sc = new HashMap<String, Object>();
		scsv001901sc.put("func_code", FUNC_CD_1);
		scsv001901sc.put("srinf_kanri_no", getSrinfKanriNo(bean));
		scsv001901sc.put("sod_stat", JSCStrConstant.SOD_STAT_REAPPLIED);
		scsv001901sc.put("upd_dtm_bf", getUpdDtm(bean));
		outputMap.put("SCSV001901SC", scsv001901sc);
		
		// SCSV001902SC用
		HashMap<String, Object> scsv001902sc = new HashMap<String, Object>();
		scsv001902sc.put("func_code", FUNC_CD_1);
		scsv001902sc.put("mobile_order_no", getSodRenkeiSeq(bean));
		scsv001902sc.put("mobile_order_stat", JSCStrConstant.SOD_STAT_REAPPLY);
		outputMap.put("SCSV001902SC", scsv001902sc);
		
		// SCSV001903SC用
		// SODステータスはサービスＩＦ−概念スキーマ変換で"007"に更新される
		HashMap<String, Object> scsv001903sc = new HashMap<String, Object>();
		scsv001903sc.put("func_code", FUNC_CD_1);
		scsv001903sc.put("sod_send_key", getSodSendKey(bean));
		scsv001903sc.put("yokyu_mt_apl_sbt_cd", getYokyuMtAplSbtCd(bean));
		scsv001903sc.put("yokyu_sbt_cd", getYokyuSbtCd(bean));
		scsv001903sc.put("mobile_order_cd", getSvcOrderCd(bean));
		scsv001903sc.put("sod_send_priority_cd", getSodSendPriorityCd(bean));
		scsv001903sc.put("svc_kei_no", getSvcKeiNo(bean));
		scsv001903sc.put("schedule_ymd", getScheduleYmd(bean));
		scsv001903sc.put("sod_renkei_seq", getSodRenkeiSeq(bean));
		scsv001903sc.put("old_sod_renkei_seq", getOldSodRenkeiSeq(bean));
		scsv001903sc.put("sod_rrk_data", getSodRrkData(bean));
		scsv001903sc.put("mobile_yokyu_sbt_cd", getMobileYokyuSbtCd(bean));
		outputMap.put("SCSV001903SC", scsv001903sc);
		
		return outputMap;
	}

	/**
	 * SCSV0020用更新データを取得します。
	 * @param bean サービスオーダ情報
	 * @return サービス用更新データ
	 */
	private HashMap get2SCSV0020Map(X31SDataBeanAccess bean) 
	{
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// SCSV002001SC用
		HashMap<String, Object> scsv002001sc = new HashMap<String, Object>();
		scsv002001sc.put("func_code", FUNC_CD_1);
		scsv002001sc.put("srinf_kanri_no", getSrinfKanriNo(bean));
		scsv002001sc.put("sod_stat", JSCStrConstant.SOD_STAT_REAPPLIED);
		scsv002001sc.put("upd_dtm_bf", getUpdDtm(bean));
		outputMap.put("SCSV002001SC", scsv002001sc);
		
		// SCSV002002SC用
		HashMap<String, Object> scsv002002sc = new HashMap<String, Object>();
		scsv002002sc.put("func_code", FUNC_CD_1);
		scsv002002sc.put("mobile_order_no", getSodRenkeiSeq(bean));
		scsv002002sc.put("mobile_order_stat", JSCStrConstant.SOD_STAT_REAPPLY);
		outputMap.put("SCSV002002SC", scsv002002sc);
		
		// SCSV002003SC用
		// SODステータスはサービスＩＦ−概念スキーマ変換で"007"に更新される
		HashMap<String, Object> scsv002003sc = new HashMap<String, Object>();
		scsv002003sc.put("func_code", FUNC_CD_1);
		scsv002003sc.put("sod_send_key", getSodSendKey(bean));
		scsv002003sc.put("yokyu_mt_apl_sbt_cd", getYokyuMtAplSbtCd(bean));
		scsv002003sc.put("yokyu_sbt_cd", getYokyuSbtCd(bean));
		scsv002003sc.put("mobile_order_cd", getSvcOrderCd(bean));
		scsv002003sc.put("sod_send_priority_cd", getSodSendPriorityCd(bean));
		scsv002003sc.put("svc_kei_no", getSvcKeiNo(bean));
		scsv002003sc.put("schedule_ymd", getScheduleYmd(bean));
		scsv002003sc.put("sod_renkei_seq", getSodRenkeiSeq(bean));
		scsv002003sc.put("old_sod_renkei_seq", getOldSodRenkeiSeq(bean));
		scsv002003sc.put("sod_rrk_data", getSodRrkData(bean));
		outputMap.put("SCSV002003SC", scsv002003sc);

		return outputMap;
	}
	
	/**
	 * SCSV0021用更新データを取得します。
	 * @param bean サービスオーダ情報
	 * @return サービス用更新データ
	 */
	private HashMap get2SCSV0021Map(X31SDataBeanAccess bean) 
	{
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// SCSV002101SC用
		HashMap<String, Object> scsv002101sc = new HashMap<String, Object>();
		scsv002101sc.put("func_code", FUNC_CD_1);
		scsv002101sc.put("srinf_kanri_no", getSrinfKanriNo(bean));
		scsv002101sc.put("sod_stat", JSCStrConstant.SOD_STAT_ACK_NORMAL);
		scsv002101sc.put("upd_dtm_bf", getUpdDtm(bean));
		outputMap.put("SCSV002101SC", scsv002101sc);

		// SCSV002102SC用
		HashMap<String, Object> scsv002102sc = new HashMap<String, Object>();
		scsv002102sc.put("func_code", FUNC_CD_1);
		scsv002102sc.put("svc_order_cd", getSvcOrderCd(bean));
		scsv002102sc.put("yokyu_sbt_cd", getYokyuSbtCd(bean));
		outputMap.put("SCSV002102SC", scsv002102sc);
		
		// SCSV002103SC用
		HashMap<String, Object> scsv002103sc = new HashMap<String, Object>();
		scsv002103sc.put("func_code", FUNC_CD_1);
		scsv002103sc.put("svc_order_no", getSodRenkeiSeq(bean));
		scsv002103sc.put("svc_order_stat", JSCStrConstant.SOD_STAT_ACK_NORMAL);
		outputMap.put("SCSV002103SC", scsv002103sc);
		
		// SCSV002104SC用
		HashMap<String, Object> scsv002104sc = new HashMap<String, Object>();
		scsv002104sc.put("func_code", FUNC_CD_1);
		scsv002104sc.put("tel_svc_order_no", getSodRenkeiSeq(bean));
		scsv002104sc.put("tel_svc_order_stat", JSCStrConstant.SOD_STAT_ACK_NORMAL);
		outputMap.put("SCSV002104SC", scsv002104sc);
		
		// SCSV002105SC用
		HashMap<String, Object> scsv002105sc = new HashMap<String, Object>();
		scsv002105sc.put("func_code", FUNC_CD_1);
		scsv002105sc.put("emg_order_no", getSodRenkeiSeq(bean));
		scsv002105sc.put("emg_order_stat", JSCStrConstant.SOD_STAT_ACK_NORMAL);
		outputMap.put("SCSV002105SC", scsv002105sc);
		
		return outputMap;
	}
	
	/**
	 * SCSV0022用更新データを取得します。
	 * @param bean サービスオーダ情報
	 * @return サービス用更新データ
	 */
	private HashMap get2SCSV0022Map(X31SDataBeanAccess bean) 
	{
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// SCSV002201SC用
		HashMap<String, Object> scsv002201sc = new HashMap<String, Object>();
		scsv002201sc.put("func_code", FUNC_CD_1);
		scsv002201sc.put("srinf_kanri_no", getSrinfKanriNo(bean));
		scsv002201sc.put("sod_stat", JSCStrConstant.SOD_STAT_ACK_NORMAL);
		scsv002201sc.put("upd_dtm_bf", getUpdDtm(bean));
		outputMap.put("SCSV002201SC", scsv002201sc);

		// SCSV002202SC用
		HashMap<String, Object> scsv002202sc = new HashMap<String, Object>();
		scsv002202sc.put("func_code", FUNC_CD_1);
		scsv002202sc.put("mobile_order_no", getSodRenkeiSeq(bean));
		scsv002202sc.put("mobile_order_stat", JSCStrConstant.SOD_STAT_ACK_NORMAL);
		outputMap.put("SCSV002202SC", scsv002202sc);

		return outputMap;
	}
	
	/**
	 * SCSV0023用更新データを取得します。
	 * @param bean サービスオーダ情報
	 * @return サービス用更新データ
	 */
	private HashMap get2SCSV0023Map(X31SDataBeanAccess bean) 
	{
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// SCSV002301SC用
		HashMap<String, Object> scsv002301sc = new HashMap<String, Object>();
		scsv002301sc.put("func_code", FUNC_CD_1);
		scsv002301sc.put("srinf_kanri_no", getSrinfKanriNo(bean));
		scsv002301sc.put("sod_stat", JSCStrConstant.SOD_STAT_ACK_NORMAL);
		scsv002301sc.put("upd_dtm_bf", getUpdDtm(bean));
		outputMap.put("SCSV002301SC", scsv002301sc);

		// SCSV002302SC用
		HashMap<String, Object> scsv002302sc = new HashMap<String, Object>();
		scsv002302sc.put("func_code", FUNC_CD_1);
		scsv002302sc.put("mobile_order_no", getSodRenkeiSeq(bean));
		scsv002302sc.put("mobile_order_stat", JSCStrConstant.SOD_STAT_ACK_NORMAL);
		outputMap.put("SCSV002302SC", scsv002302sc);
		
		return outputMap;
	}
	
	/**
	 * 再送・解除用のServiceInfoを取得します。
	 * @return serviceInfo
	 */
	private String[] getUpdateServiceInfo() 
	{
		
		// 処理内容取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		String tranNaiyo = getStringValue(bean, SCW00101SFConst.TRAN_NAIYO);
		String svcSbtCd = getStringValue(bean, SCW00101SFConst.SVC_SBT);

		String[] usecaseInfo = null;
		
		if (TRAN_NAIYO_RETRAN.equals(tranNaiyo)) 
		{
			return getRetranSerivceInfo(svcSbtCd);
		} 
		
		return getResetServiceInfo(svcSbtCd);
	}
	
	/**
	 * 再送用のserviceInfoを取得します。
	 * @param svcSbtCd サービス種別
	 * @return serviceInfo
	 */
	private String[] getRetranSerivceInfo(String svcSbtCd) 
	{
		String[] serviceInfo = null;
		
		if (SVC_SBT_IP_SOD.equals(svcSbtCd)) 
		{
			serviceInfo = UPD_SERVICE_INFO_SCSV0018;
		} 
		else if (SVC_SBT_UQ_SOD.equals(svcSbtCd)) 
		{
			serviceInfo = UPD_SERVICE_INFO_SCSV0019;
		} 
		else if (SVC_SBT_SPOT_SOD.equals(svcSbtCd)) 
		{
			serviceInfo = UPD_SERVICE_INFO_SCSV0020;
		}
		
		return serviceInfo;
	}
	
	/**
	 * 解除用のserviceInfoを取得します。
	 * @param svcSbtCd サービス種別
	 * @return serviceInfo
	 */
	private String[] getResetServiceInfo(String svcSbtCd) 
	{
		String[] serviceInfo = null;

		if (SVC_SBT_IP_SOD.equals(svcSbtCd)) 
		{
			serviceInfo = UPD_SERVICE_INFO_SCSV0021;
		} 
		else if (SVC_SBT_UQ_SOD.equals(svcSbtCd)) 
		{
			serviceInfo = UPD_SERVICE_INFO_SCSV0022;
		} 
		else if (SVC_SBT_SPOT_SOD.equals(svcSbtCd)) 
		{
			serviceInfo = UPD_SERVICE_INFO_SCSV0023;
		}
		
		return serviceInfo;
	}

	/**
	 * 完了処理
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean complete() throws Exception 
	{
		// 画面を初期化
		initServiceOrderInfo();
		
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		clearValue(serviceFormBean, SCW00101SFConst.TRAN_NAIYO);
		clearValue(serviceFormBean, SCW00101SFConst.SVC_SBT);
		clearValue(serviceFormBean, SCW00101SFConst.SVC_SBT_NM);
		
		//changeTarget();
		
		search();
		
		setNextScreen(JSCScreenConst.SCREEN_ID_SCW00101, JSCScreenConst.SCREEN_NAME_SCW00101);
		
		return true;
	}

	/**
	 * サービス種別の選択値により対象の値（プルダウン）を変更します。
	 * @return 成否
	 * @throws Exception 例外発生時
	 */
	@SuppressWarnings("unchecked")
	public boolean changeTarget() throws Exception 
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		
		// 対象プルダウンデータをクリア
		X31SDataBeanAccess jokenTarget = getSubDataBean(serviceFormBean, SCW00101SFConst.JOKEN_TARGET);
		clearCodeNameDataTypeBean(jokenTarget);
		
		// 非選択（空白）オプションを追加
		addNoSelectOption2CodeList(jokenTarget);

		// サービス種別
		String svcSbtCd = getSelectedCode(serviceFormBean, SCW00101SFConst.JOKEN_SVC_SBT);

		if (isNullOrBlank(svcSbtCd)) 
		{
			return true;
		}
		
		if (SVC_SBT_IP_SOD.equals(svcSbtCd)) 
		{
			setServiceOrderCds2JokenTarget();
		} 
		else 
		{
			setMobileOrderCds2JokenTarget();
		}
		
		return true;
	}
	
	/**
	 * DataBeanより指定した項目のSubDataBean（SubDataBean配列の最初の要素）を取得します。
	 * 
	 * @param bean DataBean
	 * @param itemName 項目名
	 * @return SubDataBean
	 */
	private X31SDataBeanAccess getSubDataBean(X31SDataBeanAccess bean, String itemName) 
	{
		X31SDataBeanAccessArray subBeanArray = bean.getDataBeanArray(itemName);
		X31SDataBeanAccess subBean =  subBeanArray.getDataBean(0);
		
		if (subBean == null) 
		{
			subBean = subBeanArray.addDataBean();
		}
		
		return subBean;
	}

	/**
	 * DataBeanより指定した項目の値を取得します。
	 * 
	 * @param bean DataBean
	 * @param itemName 項目名
	 * @return 指定された項目の値
	 */
	private String getStringValue(X31SDataBeanAccess bean, String itemName) 
	{
		return bean.sendMessageString(itemName, X31CWebConst.DATABEAN_GET_VALUE);
	}
	
	/**
	 * DataBean配列より指定したindexの値を取得します。
	 * 
	 * @param bean DataBean
	 * @param itemName 項目名
	 * @param index 配列のindex
	 * @return 指定された項目の値
	 */
	private String getStringValue(X31SDataBeanAccess bean, String itemName, int index) 
	{
		return bean.sendMessageString(itemName, X31CWebConst.DATABEAN_GET_VALUE, index);
	}
	
	/**
	 * DataBeanより指定した項目の値を取得します。
	 * 
	 * @param bean DataBean
	 * @param itemName 項目名
	 * @return 指定された項目の値
	 */
	private Long getLongValue(X31SDataBeanAccess bean, String itemName) 
	{
		return bean.sendMessageLong(itemName, X31CWebConst.DATABEAN_GET_VALUE);
	}
	
	/**
	 * DataBean(配列）よりDataBeanの要素数を取得します。
	 * 
	 * @param bean DataBean
	 * @param itemName 項目名
	 * @return 要素数
	 */
	private Integer getCount(X31SDataBeanAccess bean, String itemName) 
	{
		return (Integer)bean.sendMessage(itemName, X31CWebConst.DATABEAN_GET_COUNT);
	}
	
	/**
	 * DataBeanの項目(配列）へ値を設定します。
	 * 
	 * @param bean DataBean
	 * @param itemName 項目名
	 * @param value 設定値
	 */
	private void addStringValue(X31SDataBeanAccess bean, String itemName, String value) 
	{
		bean.sendMessageString(itemName, X31CWebConst.DATABEAN_ADD_VALUE, value);
	}
	
	/**
	 * DataBeanの項目(String）へ値を設定します。
	 * 
	 * @param bean DataBean
	 * @param itemName 項目名
	 * @param value 設定値
	 */
	private void setStringValue(X31SDataBeanAccess bean, String itemName, String value) 
	{
		bean.sendMessageString(itemName, X31CWebConst.DATABEAN_SET_VALUE, value);
	}

	/**
	 *  DataBeanより指定された項目の値を削除します。
	 * 
	 * @param bean
	 * @param itemName
	 */
	private void clearValue(X31SDataBeanAccess bean, String itemName) 
	{
		bean.sendMessage(itemName, X31CWebConst.DATABEAN_CLEAR);
	}
	
	/**
	 * DataBeanの項目(Long）へ値を設定します。
	 * 
	 * @param bean DataBean
	 * @param itemName 項目名
	 * @param value 設定値
	 */
	private void setLongValue(X31SDataBeanAccess bean, String itemName, long value) 
	{
		bean.sendMessageLong(itemName, X31CWebConst.DATABEAN_SET_VALUE, value);
	}
	
	/**
	 * リスト→インデックス
	 * 選択されているプルダウンに紐づくインデックスを取得する
	 * @param bean
	 * @param listName
	 * @return selectIdx
	 * @throws Exception
	 */
	private Long getSelectListIdx(X31SDataBeanAccess bean, String listName) throws Exception
	{
		// リスト
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		// 選択されたインデックス
		Long selectIdx = listDataBean.sendMessageLong(SCW00101SFConst.CODE_INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		// nullの場合は0で返却
		if (selectIdx == null)
		{
			return  0L;
		}
		return  selectIdx;
	}
	
	/**
	 * リスト→インデックス(時間用)
	 * 選択されているプルダウンに紐づくインデックスを取得する
	 * @param bean
	 * @param listName
	 * @return selectIdx
	 * @throws Exception
	 */
	private Long getSelectListIdxTime(X31SDataBeanAccess bean, String listName) throws Exception
	{
		// リスト
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		// 選択されたインデックス
		Long selectIdx = listDataBean.sendMessageLong(SCW00101SFConst.TIME_INDEX_02, X31CWebConst.DATABEAN_GET_VALUE);
		// nullの場合は0で返却
		if (selectIdx == null)
		{
			return  0L;
		}
		return  selectIdx;
	}
	
	/**
	 * リストのインデックスを設定する
	 * @param bean
	 * @param listName
	 * @param keyValue
	 */
	public static void setListIndex(X31SDataBeanAccess bean, String listName, Long keyValue)
	{
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		listDataBean.sendMessageLong(SCW00101SFConst.CODE_INDEX_01, X31CWebConst.DATABEAN_SET_VALUE,
				keyValue);
	}
	
	/**
	 * リストのインデックスを設定する(時間用)
	 * @param bean
	 * @param listName
	 * @param keyValue
	 */
	public static void setListIndexTime(X31SDataBeanAccess bean, String listName, Long keyValue)
	{
		X31SDataBeanAccess listDataBean = bean.getDataBeanArray(listName).getDataBean(0);
		listDataBean.sendMessageLong(SCW00101SFConst.TIME_INDEX_02, X31CWebConst.DATABEAN_SET_VALUE,
				keyValue);
	}
	
	/**
	 * 文字列のnullもしくは空文字のチェック
	 * @param value 対象文字列
	 * @return 文字列がnullもしくは空文字の場合true
	 */
	private boolean isNullOrBlank(String value) 
	{
		return value == null || value.trim().length() == 0;
	}
	
}
