/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：DKW01402SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年09月02日
*＜機能概要＞
*   棚移動状況詳細画面です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/09/02   FJ）        新規作成
*
**********************************************************************/
package eo.web.webview.DKW01402SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;
import static eo.common.constant.JPCOnlineMessageConstant.*;
import static eo.web.webview.DKW01402SF.DKW01402SFConst.*;
import static eo.web.webview.common.JDKScreenConst.*;
import static eo.web.webview.common.JDKWebCommon.setData;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

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.X31SWebLog;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JDKCommonUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.DKW01405SF.DKW01405SFConst;
import eo.web.webview.DKW01406SF.DKW01406SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JDKWebCommon;
import eo.web.webview.common.JZMWebConst;
import eo.web.webview.mapping.DKSV0038_DKSV0038OPDBMapper;
import eo.web.webview.mapping.DKSV0098_DKSV0098OPDBMapper;

/**
 * DKW01402のビューロジック
 * <BR>
 * @author 富士通
 */
public class DKW01402SFLogic extends JCCWebBusinessLogic
{

	/**
	 * 生成シリアルバージョンID
	 */
	private static final long serialVersionUID = 1L;

	/** 棚移動取消 */
	private static final String MSG_CANCEL = "棚移動取消処理";
	/** VARB（詳細画面用） */
	private static final String L_PAG_DTL = "L_PAG_DTL";
	/** VARB（確認画面用） */
	private static final String L_PAG_FIX = "L_PAG_FIX";
	/** VARB（完了画面用） */
	private static final String L_PAG_FIN = "L_PAG_FIN";

	/**
	 * 初期表示処理を行います。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// 画面情報を取得し、サービスフォームBeanに設定
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 運用日付を設定
		serviceFormBean.sendMessageString(UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, 
											JCCWebCommon.getOpeDate(this, null));

		// 一覧表示件数を初期化
		serviceFormBean.sendMessageString(DISP_COUNT, X31CWebConst.DATABEAN_SET_VALUE, "0");
		// 一覧を初期化
		serviceFormBean.getDataBeanArray(SHOSAI_LIST).clearArray();
		serviceFormBean.getDataBeanArray(UPDATE_LIST).clearArray();

		boolean errFlg = false;
		String screenId = JCCWebCommon.getScreenId(this);
		// 遷移元画面が棚移動指示基本情報詳細または数量指定詳細でない場合
		if (!(SCREEN_ID_DKW01405.equals(screenId) || SCREEN_ID_DKW01406.equals(screenId)))
		{
			// ページング情報を初期化
			JCCWebCommon.clearPageLinkInfo(this, SCREEN_ID_DKW01402);

			// サービスの呼び出しを行う
			if (!putServiceDKSV0038(serviceFormBean, SCREEN_ID_DKW01402, false))
			{
				errFlg = true;
			}
		}
		else
		{
			// 上記以外
			// サービスの呼び出しを行う
			if (!putServiceDKSV0038(serviceFormBean, SCREEN_ID_DKW01402, true))
			{
				errFlg = true;
			}
		}

		// データが無かった場合、一覧画面に強制転送
		if (errFlg)
		{
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);

			setNextScreen(SCREEN_ID_DKW01401, JZMWebConst.BLANK);
			setTransferPageId(SCREEN_ID_DKW01401 + JZMWebConst.PJP);
			JCCWebCommon.setScreenId(this, SCREEN_ID_DKW01401, SCREEN_ID_DKW01402);

			return true;
		}
		
		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, L_PAG_DTL);

		// 行番号を設定
		String rowNo = 
			serviceFormBean.sendMessageString(ROW_NO, X31CWebConst.DATABEAN_GET_VALUE);
		if (JDKCommonUtil.isNull(rowNo))
		{
			serviceFormBean.sendMessageString(ROW_NO, X31CWebConst.DATABEAN_SET_VALUE, "0");
		}

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		// 遷移先画面IDの設定
		setNextScreen(SCREEN_ID_DKW01402, SCREEN_NAME_DKW01402);

		return true;
	}

	/**
	 * 基本情報表示処理を行います。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean showBaseInfo() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 画面情報を設定
		HashMap dataMap = new HashMap();
		// 棚移動ロット番号
		dataMap.put(DKW01405SFConst.KEY_SHELF_MV_LOT_NO, 
					serviceFormBean.sendMessageString(KEY_SHELF_MOVE_LOT_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// 画面情報を設定
		JCCWebCommon.setScreenInfo(this, SCREEN_ID_DKW01405, dataMap);

		X31SWebLog.DEBUG_LOG.debug("引き継ぎ情報Mapの内容：");
		X31SWebLog.DEBUG_LOG.debug(dataMap);

		// 戻る際に必要な情報を設定
		HashMap returnMap = new HashMap();
		// 棚移動ロット番号
		returnMap.put(KEY_SHELF_MOVE_LOT_NO, 
						serviceFormBean.sendMessageString(KEY_SHELF_MOVE_LOT_NO, X31CWebConst.DATABEAN_GET_VALUE));
		// 棚移動ロット番号（表示用）
		returnMap.put(DISP_SHELF_MOVE_LOT_NO, 
						serviceFormBean.sendMessageString(KEY_SHELF_MOVE_LOT_NO, X31CWebConst.DATABEAN_GET_VALUE));
		// 行番号
		String rowNo = serviceFormBean.sendMessageString(ROW_NO, X31CWebConst.DATABEAN_GET_VALUE);
		returnMap.put(ROW_NO, rowNo);
		// ページングキー
		int intRowNo = 0;
		if (!JDKCommonUtil.isNull(rowNo))
		{
			intRowNo = Integer.parseInt(rowNo);
		}
		X31SDataBeanAccessArray shosaiList = serviceFormBean.getDataBeanArray(DKW01402SFConst.SHOSAI_LIST);
		X31SDataBeanAccess subbean = shosaiList.getDataBean(intRowNo);
		returnMap.put(PAGING_KEY, subbean.sendMessageString(L_SHELF_MV_NO_01, X31CWebConst.DATABEAN_GET_VALUE));

		// 画面情報を設定
		JCCWebCommon.setScreenInfo(this, SCREEN_ID_DKW01402, returnMap);
		JCCWebCommon.setScreenId(this, SCREEN_ID_DKW01405, SCREEN_ID_DKW01402);

		// 画面遷移処理
		setNextScreen(SCREEN_ID_DKW01405, SCREEN_NAME_DKW01405);

		return true;
	}

	/**
	 * 数量詳細情報表示処理を行います。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean showCountDetail() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 画面情報を設定
		HashMap dataMap = new HashMap();

		// 棚移動番号
		String rowNo = serviceFormBean.sendMessageString(ROW_NO, X31CWebConst.DATABEAN_GET_VALUE);
		int intRowNo = 0;
		if (!JDKCommonUtil.isNull(rowNo))
		{
			intRowNo = Integer.parseInt(rowNo);
		}
		X31SDataBeanAccessArray shosaiList = serviceFormBean.getDataBeanArray(DKW01402SFConst.SHOSAI_LIST);
		X31SDataBeanAccess subbean = shosaiList.getDataBean(intRowNo);
		dataMap.put(DKW01406SFConst.KEY_SHELF_MV_NO, 
					subbean.sendMessageString(L_SHELF_MV_NO_01, X31CWebConst.DATABEAN_GET_VALUE));

		// 棚移動種別区分
		X31SDataBeanAccessArray kihonList = serviceFormBean.getDataBeanArray(DKW01402SFConst.KIHON_LIST);
		X31SDataBeanAccess bean = kihonList.getDataBean(0);
		dataMap.put(DKW01406SFConst.MV_SBT, bean.sendMessageString(MV_SBT_02, X31CWebConst.DATABEAN_GET_VALUE));

		// 画面情報を設定
		JCCWebCommon.setScreenInfo(this, SCREEN_ID_DKW01406, dataMap);

		X31SWebLog.DEBUG_LOG.debug("引き継ぎ情報Mapの内容：");
		X31SWebLog.DEBUG_LOG.debug(dataMap);

		// 戻る際に必要な情報を設定
		HashMap returnMap = new HashMap();
		// 棚移動ロット番号
		returnMap.put(KEY_SHELF_MOVE_LOT_NO, 
						serviceFormBean.sendMessageString(KEY_SHELF_MOVE_LOT_NO, X31CWebConst.DATABEAN_GET_VALUE));
		// 棚移動ロット番号（表示用）
		returnMap.put(DISP_SHELF_MOVE_LOT_NO, 
						serviceFormBean.sendMessageString(KEY_SHELF_MOVE_LOT_NO, X31CWebConst.DATABEAN_GET_VALUE));
		// 行番号
		returnMap.put(ROW_NO, rowNo);
		// ページングキー
		returnMap.put(PAGING_KEY, subbean.sendMessageString(L_SHELF_MV_NO_01, X31CWebConst.DATABEAN_GET_VALUE));

		// 画面情報を設定
		JCCWebCommon.setScreenInfo(this, SCREEN_ID_DKW01402, returnMap);
		JCCWebCommon.setScreenId(this, SCREEN_ID_DKW01406, SCREEN_ID_DKW01402);

		// 画面遷移処理
		setNextScreen(SCREEN_ID_DKW01406, SCREEN_NAME_DKW01406);

		return true;
	}

	/**
	 * ページング（詳細画面）を処理します。
	 * <br>
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean pagingDtl() throws Exception
	{
		pagingCommon(SCREEN_ID_DKW01402, SCREEN_NAME_DKW01402, L_PAG_DTL, false);

		// 行番号を初期化
		super.getServiceFormBean().sendMessageString(ROW_NO, X31CWebConst.DATABEAN_SET_VALUE, "0");

		return true;
	}

	/**
	 * ページング（確認画面）を処理します。
	 * <br>
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean pagingFix() throws Exception
	{
		if (!pagingCommon(SCREEN_ID_DKW01403, SCREEN_NAME_DKW01403, L_PAG_FIX, false))
		{
			return true;
		}

		// 確認メッセージ表示
		JCCWebCommon.setMessageInfo(this, EKB0370__I, new String [] {MSG_CANCEL});

		return true;
	}

	/**
	 * ページング（完了画面）を処理します。
	 * <br>
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean pagingFin() throws Exception
	{
		if (!pagingCommon(SCREEN_ID_DKW01404, SCREEN_NAME_DKW01404, L_PAG_FIN, false))
		{
			return true;
		}

		// 完了メッセージ表示
		JCCWebCommon.setMessageInfo(this, EKB0380__I, new String [] {MSG_CANCEL});

		return true;
	}

	/**
	 * 取消確認処理を行います。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean cancel() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// ページングキーを設定
		X31SDataBeanAccessArray shosaiList = serviceFormBean.getDataBeanArray(DKW01402SFConst.SHOSAI_LIST);
		int idx = Integer.parseInt(JDKWebCommon.getData(serviceFormBean, DKW01402SFConst.ROW_NO));
		X31SDataBeanAccess subbean = shosaiList.getDataBean(idx);
		serviceFormBean.sendMessageString(DKW01402SFConst.PAGING_KEY, X31CWebConst.DATABEAN_SET_VALUE, 
											subbean.sendMessageString(DKW01402SFConst.L_SHELF_MV_NO_01, X31CWebConst.DATABEAN_GET_VALUE));

		// 画面の表示設定を行う ※エラー時チェックボックスのチェックが外れないように
		setGamen(serviceFormBean);

		// 取消サービスの呼び出しを行う（チェックモード）
		if (!putServiceDKSV0098(serviceFormBean, JPCModelConstant.FUNC_CD_2))
		{
			return true;
		}

		// 一覧表示件数を初期化
		serviceFormBean.sendMessageString(DISP_COUNT, X31CWebConst.DATABEAN_SET_VALUE, "0");
		// ページング情報を初期化
		JCCWebCommon.clearPageLinkInfo(this, SCREEN_ID_DKW01403);
		// 一覧を初期化
		serviceFormBean.getDataBeanArray(SHOSAI_LIST).clearArray();
		serviceFormBean.getDataBeanArray(UPDATE_LIST).clearArray();

		// サービスの呼び出しを行う
		if (!putServiceDKSV0038(serviceFormBean, SCREEN_ID_DKW01403, false))
		{
			// データが無かった場合、一覧画面に強制転送
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);

			setNextScreen(SCREEN_ID_DKW01401, JZMWebConst.BLANK);
			setTransferPageId(SCREEN_ID_DKW01401 + JZMWebConst.PJP);
			JCCWebCommon.setScreenId(this, SCREEN_ID_DKW01401, SCREEN_ID_DKW01402);

			return true;
		}

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, L_PAG_FIX, SCREEN_ID_DKW01403);

		setNextScreen(SCREEN_ID_DKW01403, SCREEN_NAME_DKW01403);

		// 確認メッセージ表示
		JCCWebCommon.setMessageInfo(this, EKB0370__I, new String [] {MSG_CANCEL});

		return true;
	}

	/**
	 * 確定処理を行います。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean fix() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 画面の表示設定を行う ※エラー時チェックボックスのチェックが外れないように
		setGamen(serviceFormBean);

		// 取消サービスの呼び出しを行う（チェック＆更新モード）
		if (!putServiceDKSV0098(serviceFormBean, JPCModelConstant.FUNC_CD_1))
		{
			return true;
		}

		// 一覧表示件数を初期化
		serviceFormBean.sendMessageString(DISP_COUNT, X31CWebConst.DATABEAN_SET_VALUE, "0");
		// ページング情報を初期化
		JCCWebCommon.clearPageLinkInfo(this, SCREEN_ID_DKW01404);
		// 一覧を初期化
		serviceFormBean.getDataBeanArray(SHOSAI_LIST).clearArray();
		serviceFormBean.getDataBeanArray(UPDATE_LIST).clearArray();

		// サービスの呼び出しを行う
		if (!putServiceDKSV0038(serviceFormBean, SCREEN_ID_DKW01404, false))
		{
			// データが無かった場合、一覧画面に強制転送
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);

			setNextScreen(SCREEN_ID_DKW01401, JZMWebConst.BLANK);
			setTransferPageId(SCREEN_ID_DKW01401 + JZMWebConst.PJP);
			JCCWebCommon.setScreenId(this, SCREEN_ID_DKW01401, SCREEN_ID_DKW01403);

			return true;
		}

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, L_PAG_FIN, SCREEN_ID_DKW01404);

		setNextScreen(SCREEN_ID_DKW01404, SCREEN_NAME_DKW01404);

		// 完了メッセージ表示
		JCCWebCommon.setMessageInfo(this, EKB0380__I, new String [] {MSG_CANCEL});

		return true;
	}

	/**
	 * 戻るボタン（詳細画面）押下処理
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean returnList() throws Exception
	{
		// 画面遷移処理
		JCCWebCommon.setScreenId(this, SCREEN_ID_DKW01401, SCREEN_ID_DKW01402);
		setNextScreen(SCREEN_ID_DKW01401, SCREEN_NAME_DKW01401);

		return true;
	}

	/**
	 * 戻るボタン（確認画面）押下処理
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean returnDetail() throws Exception
	{
		// ページング（詳細画面）
		pagingCommon(SCREEN_ID_DKW01402, SCREEN_NAME_DKW01402, L_PAG_DTL, true);

		// 画面遷移処理
		JCCWebCommon.setScreenId(this, SCREEN_ID_DKW01402, SCREEN_ID_DKW01403);

		return true;
	}

	/**
	 * 完了ボタン（完了画面）押下処理
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean complete() throws Exception
	{
		// 詳細画面初期処理
		init();

		// 画面遷移処理
		JCCWebCommon.setScreenId(this, SCREEN_ID_DKW01402, SCREEN_ID_DKW01404);

		return true;
	}

	/**
	 * ページング処理
	 * <br>
	 * @param screenId 画面ID
	 * @param screenNm 画面名
	 * @param varb VARB
	 * @param transBack 確認画面戻るボタン押下による遷移:true 以外:false
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean pagingCommon(String screenId, String screenNm, String varb, boolean transBack) throws Exception
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 初期化
		if (!transBack)
		{
			serviceFormBean.sendMessage(PAGING_KEY, X31CWebConst.DATABEAN_CLEAR);
		}
		serviceFormBean.getDataBeanArray(SHOSAI_LIST).clearArray();

		// サービスの呼び出しを行う
		if (!putServiceDKSV0038(serviceFormBean, screenId, transBack))
		{
			// データが無かった場合、一覧画面に強制転送
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);

			setNextScreen(SCREEN_ID_DKW01401, JZMWebConst.BLANK);
			setTransferPageId(SCREEN_ID_DKW01401 + JZMWebConst.PJP);
			JCCWebCommon.setScreenId(this, SCREEN_ID_DKW01401, SCREEN_ID_DKW01402);

			return false;
		}

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, varb, screenId);

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		// 遷移先画面IDの設定
		setNextScreen(screenId, screenNm);

		return true;
	}

	/**
	 * サービス（DKSV0038）の呼び出しを行います。
	 * <br>
	 * @param sFormBean サービスフォームビーン
	 * @param screenId 画面ID
	 * @param transBack 確認画面戻るボタン押下による遷移:true 以外:false
	 * @return 成否
	 * @throws Exception データベースアクセスエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private boolean putServiceDKSV0038(X31SDataBeanAccess sFormBean, String screenId, boolean transBack) throws Exception
	{
		X31SDataBeanAccess[] paramBean = {sFormBean};

		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "DKSV0038");

		// マッピングクラスのインスタンスを生成
		DKSV0038_DKSV0038OPDBMapper mapper = new DKSV0038_DKSV0038OPDBMapper();

		HashMap<String, String> dataMap = new HashMap<String, String>();

		// 棚移動基本情報 ※機能コード１固定
		mapper.setDKSV003801SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		// 棚移動状況詳細情報 ※機能コードはDKSV0038_DKSV0038OP_EDK0111B026_01BSMapperで設定
		mapper.setDKSV003802SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		// 棚移動状況詳細情報（全件） ※機能コードはDKSV0038_DKSV0038OP_EDK0111B026_02BSMapperで設定
		mapper.setDKSV003803SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// ページング情報の設定
		JCCWebCommon.upmapperPageLinkInfo(this, "DKSV003802SC", dataMap, screenId);

		// 検索結果格納用マップ
		HashMap outputMap = new HashMap();

		// 検索処理呼出
		invokeService(paramMap, dataMap, outputMap);

		// データ未取得時
		HashMap<String, Object> map = (HashMap<String, Object>)outputMap.get("DKSV003801SC");
		int cnt = ((ArrayList)map.get("EDK0111B028CBSMsg1List")).size();
		if (0 == cnt)
		{
			return false;
		}

		mapper.getDKSV003801SC(paramBean, outputMap);
		mapper.getDKSV003802SC(paramBean, outputMap);
		mapper.getDKSV003803SC(paramBean, outputMap);

		// ページング情報の設定
		JCCWebCommon.downmapperPageLinkInfo(this, "DKSV003802SC", outputMap, screenId);

		// 確認画面より遷移時、一覧データに変更があった場合、行番号を再設定する
		if (transBack)
		{
			String displayNo = (String)((HashMap)outputMap.get("DKSV003802SC")).get("display_no");
			if (!JDKCommonUtil.isNull(displayNo))
			{
				X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
				serviceFormBean.sendMessageString(ROW_NO, X31CWebConst.DATABEAN_SET_VALUE, displayNo);

				// データが存在しない場合、ページング情報をクリアしてからページ情報再設定
				String displayPageNum = (String)((HashMap)outputMap.get("DKSV003802SC")).get("display_page_num");
				if ((!JDKCommonUtil.isNull(displayPageNum) && "1".equals(displayPageNum)) && 
						"0".equals(displayNo))
				{
					JCCWebCommon.clearPageLinkInfo(this, screenId);
					JCCWebCommon.upmapperPageLinkInfo(this, "DKSV003802SC", dataMap, screenId);
					JCCWebCommon.downmapperPageLinkInfo(this, "DKSV003802SC", outputMap, screenId);
				}
			}
		}

		return true;
	}

	/**
	 * サービス（DKSV0098）の呼び出しを行います。
	 * <br>
	 * @param sFormBean サービスフォームビーン
	 * @param func_code 機能コード
	 * @return 成否
	 * @throws Exception データベースアクセスエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private boolean putServiceDKSV0098(X31SDataBeanAccess sFormBean, String func_code) throws Exception
	{
		X31SDataBeanAccess[] paramBean = {sFormBean};

		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "DKSV0098");

		// マッピングクラスのインスタンスを生成
		DKSV0098_DKSV0098OPDBMapper mapper = new DKSV0098_DKSV0098OPDBMapper();

		HashMap<String, String> dataMap = new HashMap<String, String>();

		// 倉庫棚移動中止理由メモ 固定値：ブランク
		setData(this, "", SHELF_MOVE_STP_RSN_MEMO);
		// 倉庫棚移動却下
		mapper.setDKSV009801SC(paramBean, dataMap, func_code);
		// 予備機器配送却下
		mapper.setDKSV009802SC(paramBean, dataMap, func_code);
		// 宅内管理情報更新
		mapper.setDKSV009803SC(paramBean, dataMap, func_code);

		// 結果格納用マップ
		Map outputMap = new HashMap();

		// 処理呼出
		invokeService(paramMap, dataMap, outputMap);

		return true;
	}

	/**
	 * 画面の表示設定を行います。
	 * <br>
	 * @param serviceFormBean 設定する画面のServiceFormBean
	 * @throws UnsupportedEncodingException 例外
	 */
	private void setGamen(X31SDataBeanAccess serviceFormBean) throws UnsupportedEncodingException
	{
		// 基本情報部の設定
		X31SDataBeanAccess[] paramBean = {serviceFormBean};
		X31SDataBeanAccessArray kihonList =  paramBean[0].getDataBeanArray(KIHON_LIST);
		X31SDataBeanAccess sbean = kihonList.getDataBean(0);

		// 移動元
		String mtNm = "";
		String mtSokoNm = sbean.sendMessageString(MV_MT_SOKO_NM_02, X31CWebConst.DATABEAN_GET_VALUE);
		String mtKojiNm = sbean.sendMessageString(MV_MT_KOJI_NM_02, X31CWebConst.DATABEAN_GET_VALUE);
		String mtOfcNm  = sbean.sendMessageString(MV_MT_OFFICE_NM_02, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JDKCommonUtil.isNull(mtSokoNm))
		{
			mtNm = mtSokoNm;
		}
		else if (!JDKCommonUtil.isNull(mtKojiNm))
		{
			mtNm = mtKojiNm;
		}
		else if (!JDKCommonUtil.isNull(mtOfcNm))
		{
			mtNm = mtOfcNm;
		}
		sbean.sendMessageString(MV_MT_NM_02, X31CWebConst.DATABEAN_SET_VALUE, mtNm);

		// 移動先
		String skNm = "";
		String skSokoNm = sbean.sendMessageString(MV_SK_SOKO_NM_02, X31CWebConst.DATABEAN_GET_VALUE);
		String skKojiNm = sbean.sendMessageString(MV_SK_KOJI_NM_02, X31CWebConst.DATABEAN_GET_VALUE);
		String skOfcNm  = sbean.sendMessageString(MV_SK_OFFICE_NM_02, X31CWebConst.DATABEAN_GET_VALUE);
		if (!JDKCommonUtil.isNull(skSokoNm))
		{
			skNm = skSokoNm;
		}
		else if (!JDKCommonUtil.isNull(skKojiNm))
		{
			skNm = skKojiNm;
		}
		else if (!JDKCommonUtil.isNull(skOfcNm))
		{
			skNm = skOfcNm;
		}
		sbean.sendMessageString(MV_SK_NM_02, X31CWebConst.DATABEAN_SET_VALUE, skNm);

		// 倉庫棚移動よりデータ取得時のみ出荷先を設定
		String mvSbt = sbean.sendMessageString(MV_SBT_02, X31CWebConst.DATABEAN_GET_VALUE);
		if ("1".equals(mvSbt))
		{
			sbean.sendMessageString(SHKA_SK_02, X31CWebConst.DATABEAN_SET_VALUE, skNm);
		}

		// 名細部の設定
		setList(paramBean[0], serviceFormBean);

		// 取消、数量詳細ボタンの活性・非活性設定
		String stat = sbean.sendMessageString(MV_STAT_CD_02, X31CWebConst.DATABEAN_GET_VALUE);
		String stiWay = sbean.sendMessageString(SHITEI_WAY_CD_02, X31CWebConst.DATABEAN_GET_VALUE);

		// 取消ボタン非活性設定 ※初期設定はfalse
		if (!JDKCommonUtil.isNull(stat))
		{
			// 倉庫棚移動データ
			if ("1".equals(mvSbt))
			{
				// 状態が登録済または中止済または移動（出荷）済の場合
				if ("001".equals(stat) || "002".equals(stat) || "004".equals(stat))
				{
					serviceFormBean.sendMessageBoolean(B_CL_DSBL_FLG, 
														X31CWebConst.DATABEAN_SET_VALUE, true);
				}
			}
			else if ("2".equals(mvSbt))
			{
				// 予備機器配送データ
				// 状態が受付済または中止済または出荷済または完了済の場合
				if ("001".equals(stat) || "002".equals(stat) || "004".equals(stat) || "005".equals(stat))
				{
					serviceFormBean.sendMessageBoolean(B_CL_DSBL_FLG, 
														X31CWebConst.DATABEAN_SET_VALUE, true);
				}
			}
		}

		// 数量詳細ボタン非活性設定 ※初期設定はfalse
		if (!JDKCommonUtil.isNull(stiWay) && !JDKCommonUtil.isNull(stat))
		{
			// 倉庫棚移動データ
			if ("1".equals(mvSbt))
			{
				// 指定方法が数量指定かつ状態が移動済でない場合
				if (!("1".equals(stiWay) && "004".equals(stat)))
				{
					serviceFormBean.sendMessageBoolean(B_CNT_DTL_DSBL_FLG, 
														X31CWebConst.DATABEAN_SET_VALUE, true);
				}
			}
			else if ("2".equals(mvSbt))
			{
				// 予備機器配送データ
				// 指定方法が数量指定かつ、状態が中止済または出荷済または完了済でない場合
				if (!("1".equals(stiWay) && ("002".equals(stat) || "004".equals(stat) || "005".equals(stat))))
				{
					serviceFormBean.sendMessageBoolean(B_CNT_DTL_DSBL_FLG, 
														X31CWebConst.DATABEAN_SET_VALUE, true);
				}
				else if ("1".equals(stiWay) && "002".equals(stat))
				{

					serviceFormBean.sendMessageBoolean(B_CNT_DTL_DSBL_FLG, 
														X31CWebConst.DATABEAN_SET_VALUE, true);
				}
			}
		}
	}

	/**
	 * リストの表示設定を行います。
	 * <br>
	 * @param paramBean 設定する一覧のBean情報
	 * @param serviceFormBean 設定する画面のServiceFormBean
	 * @throws UnsupportedEncodingException 例外
	 */
	private void setList(X31SDataBeanAccess paramBean, X31SDataBeanAccess serviceFormBean) throws UnsupportedEncodingException
	{
		X31SDataBeanAccessArray shosaiList = paramBean.getDataBeanArray(SHOSAI_LIST);

		for (int i = 0; i < shosaiList.getCount(); i++)
		{
			X31SDataBeanAccess subbean = shosaiList.getDataBean(i);
			// 背景色の設定
			if (i % 2 == 1)
			{
				subbean.sendMessageString(L_COLOR_01, X31CWebConst.DATABEAN_SET_VALUE, "even");
			}
			else
			{
				subbean.sendMessageString(L_COLOR_01, X31CWebConst.DATABEAN_SET_VALUE, "odd");
			}

			// 項番の設定
			subbean.sendMessageString(L_NO_01, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(i + 1));

			// 型番号、商品名の設定
			String mdlNo = "";
			String shohinNm = "";
			String takunaiCd = subbean.sendMessageString(L_TKKIKI_MDL_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			String setCd     = subbean.sendMessageString(L_TKKIKI_SETHIN_MDL_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			String huzokuCd  = subbean.sendMessageString(L_HUZOKUHIN_MDL_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			if (!JDKCommonUtil.isNull(takunaiCd))
			{
				mdlNo = takunaiCd;
				shohinNm = subbean.sendMessageString(L_TKKIKI_MDL_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			}
			else if (!JDKCommonUtil.isNull(setCd))
			{
				mdlNo = setCd;
				shohinNm = subbean.sendMessageString(L_TKKIKI_SETHIN_MDL_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			}
			else if (!JDKCommonUtil.isNull(huzokuCd))
			{
				mdlNo = huzokuCd;
				shohinNm = subbean.sendMessageString(L_HUZOKUHIN_MDL_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			}
			subbean.sendMessageString(L_MDL_NO_01, X31CWebConst.DATABEAN_SET_VALUE, mdlNo);

			// 商品名 20桁
			subbean.sendMessageString(L_SHOHIN_NM_01, X31CWebConst.DATABEAN_SET_VALUE, 
										JDKWebCommon.substr(shohinNm, 0, 20));
			subbean.sendMessageString(L_SHOHIN_NM_DISP_01, 
										X31CWebConst.DATABEAN_SET_VALUE, shohinNm);

			// 製造番号、移動理由、指示数、移動対象、移動数、備考
			String shiteiCd = subbean.sendMessageString(L_SHITEI_WAY_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			String seizoNo = "";
			String riyu = "";
			String sjiCnt = "";
			String mvCnt = "";
			String biko = "";

			// 製番指定の場合
			if (!JDKCommonUtil.isNull(shiteiCd) && "2".equals(shiteiCd))
			{
				String kikiSeizoNm = subbean.sendMessageString(L_KIKI_SEIZO_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
				String setSeizoNm = subbean.sendMessageString(L_TKKIKI_SETHIN_SEIZO_NO_01, X31CWebConst.DATABEAN_GET_VALUE);
				// 存在する名称を設定する
				if (!JDKCommonUtil.isNull(kikiSeizoNm))
				{
					seizoNo = kikiSeizoNm;
				}
				else if (!JDKCommonUtil.isNull(setSeizoNm))
				{
					seizoNo = setSeizoNm;
				}
				riyu = subbean.sendMessageString(L_ARI_MV_RSN_01, X31CWebConst.DATABEAN_GET_VALUE);
				sjiCnt = "1";

				// ステータスが出荷済以降(004,005)の場合
				int stat = Integer.parseInt(subbean.sendMessageString(L_MV_STAT_01, X31CWebConst.DATABEAN_GET_VALUE));
				if (4 <= stat)
				{
					mvCnt = "1";
				}
				else
				{
					// 上記以外
					mvCnt = "0";
				}
				biko = subbean.sendMessageString(L_ARI_BIKO_01, X31CWebConst.DATABEAN_GET_VALUE);
			}
			else
			{
				// 上記以外の場合
				seizoNo = "";
				riyu = subbean.sendMessageString(L_NASI_MV_RSN_01, X31CWebConst.DATABEAN_GET_VALUE);
				sjiCnt = subbean.sendMessageString(L_SJI_CNT_01, X31CWebConst.DATABEAN_GET_VALUE);
				mvCnt = subbean.sendMessageString(L_MV_CNT_01, X31CWebConst.DATABEAN_GET_VALUE);
				// 移動数が空の場合は0を設定する
				if (JDKCommonUtil.isNull(mvCnt))
				{
					mvCnt = "0";
				}
				biko = subbean.sendMessageString(L_NASI_BIKO_01, X31CWebConst.DATABEAN_GET_VALUE);
			}
			subbean.sendMessageString(L_SEIZO_NO_01, X31CWebConst.DATABEAN_SET_VALUE, seizoNo);
			subbean.sendMessageString(L_MV_RSN_01, X31CWebConst.DATABEAN_SET_VALUE, riyu);
			subbean.sendMessageString(L_SJI_CNT_01, X31CWebConst.DATABEAN_SET_VALUE, sjiCnt);

			// 移動対象
			if (sjiCnt.equals(mvCnt))
			{
				// 指示数と移動数が同じ場合はチェック ※初期設定はfalse
				subbean.sendMessageBoolean(L_MV_TARGET_01, X31CWebConst.DATABEAN_SET_VALUE, true);
			}

			subbean.sendMessageString(L_MV_CNT_01, X31CWebConst.DATABEAN_SET_VALUE, mvCnt);

			// 備考 20桁
			subbean.sendMessageString(L_BIKO_01, X31CWebConst.DATABEAN_SET_VALUE, 
										JDKWebCommon.substr(biko, 0, 20));
			subbean.sendMessageString(L_BIKO_DISP_01, 
										X31CWebConst.DATABEAN_SET_VALUE, biko);
		}
		// 一覧表示件数を設定する
		serviceFormBean.sendMessageString(DISP_COUNT, X31CWebConst.DATABEAN_SET_VALUE, 
											String.valueOf(shosaiList.getCount()));
	}

	/**
	 * 画面遷移先を設定します。
	 * @param nextScreenId 遷移先画面ＩＤ
	 * @param nextScreenName 遷移先画面名
	 */
	private void setNextScreen(String nextScreenId, String nextScreenName)
	{
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, 
											X31CWebConst.DATABEAN_SET_VALUE, nextScreenId);
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, 
											X31CWebConst.DATABEAN_SET_VALUE, nextScreenName);

		DEBUG_LOG.debug(String.format("遷移先 CD：%s NM：%s", nextScreenId, nextScreenName));
	}
	
}
