/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：物流管理システム
*   ソースファイル名：DKW00802SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年07月22日
*＜機能概要＞
*   棚移動承認詳細画面です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/07/22   FJ）        新規作成
*  v10.00.00    2014/09/03   FJ）        ANK-2030-00-00
*  v10.00.00    2014/10/17   FJ）乾      IT1-2014-0000334
*
**********************************************************************/
package eo.web.webview.DKW00802SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;
import static eo.common.constant.JPCOnlineMessageConstant.EKB0370__I;
import static eo.common.constant.JPCOnlineMessageConstant.EKB0380__I;
import static eo.common.util.JDKCommonUtil.join;
import static eo.web.webview.DKW00802SF.DKW00802SFConst.*;
import static eo.web.webview.common.JDKScreenConst.SCREEN_ID_DKW00801;
import static eo.web.webview.common.JDKScreenConst.SCREEN_ID_DKW00802;
import static eo.web.webview.common.JDKScreenConst.SCREEN_ID_DKW00803;
import static eo.web.webview.common.JDKScreenConst.SCREEN_ID_DKW00804;
import static eo.web.webview.common.JDKScreenConst.SCREEN_ID_DKW01405;
import static eo.web.webview.common.JDKScreenConst.SCREEN_NAME_DKW00801;
import static eo.web.webview.common.JDKScreenConst.SCREEN_NAME_DKW00802;
import static eo.web.webview.common.JDKScreenConst.SCREEN_NAME_DKW00803;
import static eo.web.webview.common.JDKScreenConst.SCREEN_NAME_DKW00804;
import static eo.web.webview.common.JDKScreenConst.SCREEN_NAME_DKW01405;
import static eo.web.webview.common.JDKWebCommon.getData;
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.JDKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JDKCommonUtil;
import eo.common.util.JPCDateUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.DKW01405SF.DKW01405SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JDKWebCommon;
import eo.web.webview.common.JZMWebConst;
import eo.web.webview.mapping.DKSV0010_DKSV0010OPDBMapper;
import eo.web.webview.mapping.DKSV0040_DKSV0040OPDBMapper;
import eo.web.webview.mapping.DKSV0041_DKSV0041OPDBMapper;
import eo.web.webview.mapping.DKSV0091_DKSV0091OPDBMapper;
import eo.web.webview.mapping.DKSV0155_DKSV0155OPDBMapper;

/**
 * DKW00802のビューロジック
 * <BR>
 * @author 富士通
 */
public class DKW00802SFLogic extends JCCWebBusinessLogic
{

	/**
	 * 生成シリアルバージョンID
	 */
	private static final long serialVersionUID = 1L;

	/** 棚移動指示の承認 */
	private static final String MSG_APPROVE = "棚移動指示の承認";
	/** 棚移動指示の却下 */
	private static final String MSG_REJECT = "棚移動指示の却下";
	/** 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";
	/** ダウンロードCSVファイル名（先頭文字） */
	private static final String CSV_FILE_NAME = "eo_tana2_";
	/** ファイル拡張子 CSV */
	private static final String FILE_CSV = ".csv";
	/** CSV 基本情報部 */
	private static final String RECORD_KIHON = "7B";
	/** CSV 詳細情報部 */
	private static final String RECORD_SHOSAI = "7C";
	/** CSV トレーラ部 */
	private static final String RECORD_TRAILER = "7D";
	/** 処理区分設定コード 承認 */
	private static final String CD_APPROVE = "1";
	/** 処理区分設定コード 却下 */
	private static final String CD_REJECT = "2";
	/** 棚移動種別区分 予備機器配送 */
	private static final String CD_YOBIKIKI = "2";

	/**
	 * 初期表示処理を行います。
	 * <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();

		// 遷移元画面が棚移動指示基本情報詳細でない場合
		if (!SCREEN_ID_DKW01405.equals(JCCWebCommon.getScreenId(this)))
		{
			// ページング情報を初期化
			JCCWebCommon.clearPageLinkInfo(this, SCREEN_ID_DKW00802);
		}

		// サービスの呼び出しを行う
		if (!putServiceDKSV0010(serviceFormBean, SCREEN_ID_DKW00802))
		{
			// データが無かった場合、一覧画面に強制転送
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);

			setNextScreen(SCREEN_ID_DKW00801, JZMWebConst.BLANK);
			setTransferPageId(SCREEN_ID_DKW00801 + JZMWebConst.PJP);
			JCCWebCommon.setScreenId(this, SCREEN_ID_DKW00801, SCREEN_ID_DKW00802);

			return true;
		}

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, L_PAG_DTL);

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		// 遷移先画面IDの設定
		setNextScreen(SCREEN_ID_DKW00802, SCREEN_NAME_DKW00802);

		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));
		// 処理区分
		returnMap.put(PROC_KBN, serviceFormBean.sendMessageString(PROC_KBN, X31CWebConst.DATABEAN_GET_VALUE));

		// 画面情報を設定
		JCCWebCommon.setScreenInfo(this, SCREEN_ID_DKW00802, returnMap);
		JCCWebCommon.setScreenId(this, SCREEN_ID_DKW01405, SCREEN_ID_DKW00802);

		// 画面遷移処理
		setNextScreen(SCREEN_ID_DKW01405, SCREEN_NAME_DKW01405);

		return true;
	}

	/**
	 * ページング（詳細画面）を処理します。
	 * <br>
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean pagingDtl() throws Exception
	{
		pagingCommon(SCREEN_ID_DKW00802, SCREEN_NAME_DKW00802, L_PAG_DTL);

		return true;
	}

	/**
	 * ページング（確認画面）を処理します。
	 * <br>
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean pagingFix() throws Exception
	{
		if (!pagingCommon(SCREEN_ID_DKW00803, SCREEN_NAME_DKW00803, L_PAG_FIX))
		{
			return true;
		}

		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 確認メッセージ表示
		String procKbn = 
			serviceFormBean.sendMessageString(PROC_KBN, X31CWebConst.DATABEAN_GET_VALUE);
		if (CD_APPROVE.equals(procKbn))
		{
			// 承認
			JCCWebCommon.setMessageInfo(this, EKB0370__I, new String [] {MSG_APPROVE});
		}
		else if (CD_REJECT.equals(procKbn))
		{
			// 却下
			JCCWebCommon.setMessageInfo(this, EKB0370__I, new String [] {MSG_REJECT});
		}

		return true;
	}

	/**
	 * ページング（完了画面）を処理します。
	 * <br>
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean pagingFin() throws Exception
	{
		if (!pagingCommon(SCREEN_ID_DKW00804, SCREEN_NAME_DKW00804, L_PAG_FIN))
		{
			return true;
		}

		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 完了メッセージ表示
		String procKbn = 
			serviceFormBean.sendMessageString(PROC_KBN, X31CWebConst.DATABEAN_GET_VALUE);
		if (CD_APPROVE.equals(procKbn))
		{
			// 承認
			JCCWebCommon.setMessageInfo(this, EKB0380__I, new String [] {MSG_APPROVE});
		}
		else if (CD_REJECT.equals(procKbn))
		{
			// 却下
			JCCWebCommon.setMessageInfo(this, EKB0380__I, new String [] {MSG_REJECT});
		}

		return true;
	}

	/**
	 * 承認確認処理を行います。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean showApprove() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 承認サービスの呼び出しを行う（チェックモード）
		if (!putServiceDKSV0040(serviceFormBean, JPCModelConstant.FUNC_CD_2))
		{
			return true;
		}

		// 一覧表示件数を初期化
		serviceFormBean.sendMessageString(DISP_COUNT, X31CWebConst.DATABEAN_SET_VALUE, "0");
		// ページング情報を初期化
		JCCWebCommon.clearPageLinkInfo(this, SCREEN_ID_DKW00803);
		// 一覧を初期化
		serviceFormBean.getDataBeanArray(SHOSAI_LIST).clearArray();
		serviceFormBean.getDataBeanArray(UPDATE_LIST).clearArray();

		// サービスの呼び出しを行う
		if (!putServiceDKSV0010(serviceFormBean, SCREEN_ID_DKW00803))
		{
			// データが無かった場合、一覧画面に強制転送
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);

			setNextScreen(SCREEN_ID_DKW00801, JZMWebConst.BLANK);
			setTransferPageId(SCREEN_ID_DKW00801 + JZMWebConst.PJP);
			JCCWebCommon.setScreenId(this, SCREEN_ID_DKW00801, SCREEN_ID_DKW00802);

			return true;
		}

		// 処理区分に「承認」を設定
		serviceFormBean.sendMessageString(PROC_KBN, X31CWebConst.DATABEAN_SET_VALUE, CD_APPROVE);

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, L_PAG_FIX, SCREEN_ID_DKW00803);

		setNextScreen(SCREEN_ID_DKW00803, SCREEN_NAME_DKW00803);

		// 確認メッセージ表示
		JCCWebCommon.setMessageInfo(this, EKB0370__I, new String [] {MSG_APPROVE});

		return true;
	}

	/**
	 * 却下確認処理を行います。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean showReject() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 却下サービスの呼び出しを行う（チェックモード）
		if (!putServiceDKSV0041(serviceFormBean, JPCModelConstant.FUNC_CD_2))
		{
			return true;
		}

		// 一覧表示件数を初期化
		serviceFormBean.sendMessageString(DISP_COUNT, X31CWebConst.DATABEAN_SET_VALUE, "0");
		// ページング情報を初期化
		JCCWebCommon.clearPageLinkInfo(this, SCREEN_ID_DKW00803);
		// 一覧を初期化
		serviceFormBean.getDataBeanArray(SHOSAI_LIST).clearArray();
		serviceFormBean.getDataBeanArray(UPDATE_LIST).clearArray();

		// サービスの呼び出しを行う
		if (!putServiceDKSV0010(serviceFormBean, SCREEN_ID_DKW00803))
		{
			// データが無かった場合、一覧画面に強制転送
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);

			setNextScreen(SCREEN_ID_DKW00801, JZMWebConst.BLANK);
			setTransferPageId(SCREEN_ID_DKW00801 + JZMWebConst.PJP);
			JCCWebCommon.setScreenId(this, SCREEN_ID_DKW00801, SCREEN_ID_DKW00802);

			return true;
		}

		// 処理区分に「却下」を設定
		serviceFormBean.sendMessageString(PROC_KBN, X31CWebConst.DATABEAN_SET_VALUE, CD_REJECT);

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, L_PAG_FIX, SCREEN_ID_DKW00803);

		setNextScreen(SCREEN_ID_DKW00803, SCREEN_NAME_DKW00803);

		// 確認メッセージ表示
		JCCWebCommon.setMessageInfo(this, EKB0370__I, new String [] {MSG_REJECT});

		return true;
	}

	/**
	 * 確定処理を行います。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean fix() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		String procKbn = 
			serviceFormBean.sendMessageString(PROC_KBN, X31CWebConst.DATABEAN_GET_VALUE);
		if (CD_APPROVE.equals(procKbn))
		{
			// 承認サービスの呼び出しを行う（チェック＆更新モード）
			if (!putServiceDKSV0040(serviceFormBean, JPCModelConstant.FUNC_CD_1))
			{
				return true;
			}
		}
		else if (CD_REJECT.equals(procKbn))
		{
			// 却下サービスの呼び出しを行う（チェック＆更新モード）
			if (!putServiceDKSV0041(serviceFormBean, JPCModelConstant.FUNC_CD_1))
			{
				return true;
			}
		}

		// ANK-2030-00-00 ADD START
		// 処理区分「"1"(承認)」 かつ 棚移動種別区分が「"2"(予備機器配送)」 かつ 移動先倉庫コードが「"000001"(大阪みなとロジシスセンター)」
		// 棚移動基本情報タイプを取得
		X31SDataBeanAccess subBean = serviceFormBean.getDataBeanArray(KIHON_LIST).getDataBean(0);
		
		// IT1-2014-0000334 MOD START
		// 棚移動種別区分を取得
		//String mvSbtKbn = subBean.sendMessageString(DKW00802SFConst.MV_SBT_02, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 移動先倉庫コードを取得
		String mvMtSokoCd = subBean.sendMessageString(DKW00802SFConst.MV_MT_SOKO_CD_02, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 処理区分が"1"かつ、棚移動種別区分が"2"かつ、移動先倉庫コードが"000001"の場合
		//if (CD_APPROVE.equals(procKbn) && CD_YOBIKIKI.equals(mvSbtKbn) && JDKStrConst.MINATO_SOKO_CD.equals(mvSkSokoCd))
		if (CD_APPROVE.equals(procKbn) && JDKStrConst.MINATO_SOKO_CD.equals(mvMtSokoCd))
		{
			// サービスの呼び出しを行う
			putServiceDKSV0091(serviceFormBean);
			
			// 指示内容確認送信依頼サービスの呼び出しを行う
			putServiceDKSV0155(serviceFormBean);

		}
		// IT1-2014-0000334 MOD END
		// ANK-2030-00-00 ADD END

		// 一覧表示件数を初期化
		serviceFormBean.sendMessageString(DISP_COUNT, X31CWebConst.DATABEAN_SET_VALUE, "0");
		// ページング情報を初期化
		JCCWebCommon.clearPageLinkInfo(this, SCREEN_ID_DKW00804);
		// 一覧を初期化
		serviceFormBean.getDataBeanArray(SHOSAI_LIST).clearArray();
		serviceFormBean.getDataBeanArray(UPDATE_LIST).clearArray();

		// 詳細一覧検索処理サービスの呼び出しを行う
		if (!putServiceDKSV0010(serviceFormBean, SCREEN_ID_DKW00804))
		{
			// データが無かった場合、一覧画面に強制転送
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);

			setNextScreen(SCREEN_ID_DKW00801, JZMWebConst.BLANK);
			setTransferPageId(SCREEN_ID_DKW00801 + JZMWebConst.PJP);
			JCCWebCommon.setScreenId(this, SCREEN_ID_DKW00801, SCREEN_ID_DKW00803);

			return true;
		}

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, L_PAG_FIN, SCREEN_ID_DKW00804);

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		setNextScreen(SCREEN_ID_DKW00804, SCREEN_NAME_DKW00804);

		// 完了メッセージ表示
		if (CD_APPROVE.equals(procKbn))
		{
			// 承認
			JCCWebCommon.setMessageInfo(this, EKB0380__I, new String [] {MSG_APPROVE});
		}
		else if (CD_REJECT.equals(procKbn))
		{
			// 却下
			JCCWebCommon.setMessageInfo(this, EKB0380__I, new String [] {MSG_REJECT});
		}

		return true;
	}

	/**
	 * CSV出力処理を行います。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean outputCsvSjiNyo() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// サービスの呼び出しを行う
		putServiceDKSV0091(serviceFormBean);

		// ファイル名の作成を行う eo_tana2_TXXXXXXXXX_yyyyMMddhhmmss.csv
		StringBuffer fileName = new StringBuffer();
		fileName.append(CSV_FILE_NAME);
		String lotNo = 
			serviceFormBean.sendMessageString(KEY_SHELF_MOVE_LOT_NO, X31CWebConst.DATABEAN_GET_VALUE);
		fileName.append(lotNo);
		fileName.append("_");
		fileName.append(JCCWebCommon.getSysDateTime());
		fileName.append(FILE_CSV);

		// ダウンロード
		JCCWebCommon.setTempDownloadFile(this, buildFile(lotNo).getBytes(JDKStrConst.CHAR_SET_WIN31J), fileName.toString());
		getServiceFormBean().getDataBeanArray(SJI_CSV_LIST).clearArray();

		return true;
	}

	/**
	 * 戻るボタン（詳細画面）押下処理
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean returnList() throws Exception
	{
		// 画面遷移処理
		JCCWebCommon.setScreenId(this, SCREEN_ID_DKW00801, SCREEN_ID_DKW00802);
		setNextScreen(SCREEN_ID_DKW00801, SCREEN_NAME_DKW00801);
		
		// DKW00804⇒DKW00802⇒DKW00801の遷移時にDKW00801SFLogicのinitで判定する為の情報をセットする
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();
		// 画面情報を設定
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		// 処理区分
		dataMap.put(DKW00802SFConst.PROC_KBN, serviceFormBean.sendMessageString(PROC_KBN, X31CWebConst.DATABEAN_GET_VALUE));
		JCCWebCommon.setScreenInfo(this, SCREEN_ID_DKW00802, dataMap);
		
		return true;
	}

	/**
	 * 戻るボタン（確認画面）押下処理
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean returnDetail() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 処理区分の設定を解除
		serviceFormBean.sendMessageString(PROC_KBN, X31CWebConst.DATABEAN_SET_VALUE, "0");

		// ページング（詳細画面）
		pagingDtl();

		// 画面遷移処理
		JCCWebCommon.setScreenId(this, SCREEN_ID_DKW00802, SCREEN_ID_DKW00803);

		return true;
	}

	/**
	 * 完了ボタン（完了画面）押下処理
	 * @return 処理の成否
	 * @throws Exception
	 */
	public boolean complete() throws Exception
	{
		// 詳細画面初期処理
		init();

		// 画面遷移処理
		JCCWebCommon.setScreenId(this, SCREEN_ID_DKW00802, SCREEN_ID_DKW00804);

		return true;
	}

	/**
	 * ページング処理
	 * <br>
	 * @param screenId 画面ID
	 * @param screenNm 画面名
	 * @param varb VARB
	 * @return 成否
	 * @throws Exception 例外
	 */
	public boolean pagingCommon(String screenId, String screenNm, String varb) throws Exception
	{
		X31SDataBeanAccess serviceFormBean = super.getServiceFormBean();

		// 初期化
		serviceFormBean.sendMessage(PAGING_KEY, X31CWebConst.DATABEAN_CLEAR);
		serviceFormBean.getDataBeanArray(SHOSAI_LIST).clearArray();

		// サービスの呼び出しを行う
		if (!putServiceDKSV0010(serviceFormBean, screenId))
		{
			// データが無かった場合、一覧画面に強制転送
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0320_KW);

			setNextScreen(SCREEN_ID_DKW00801, JZMWebConst.BLANK);
			setTransferPageId(SCREEN_ID_DKW00801 + JZMWebConst.PJP);
			JCCWebCommon.setScreenId(this, SCREEN_ID_DKW00801, SCREEN_ID_DKW00802);

			return false;
		}

		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, varb, screenId);

		// 画面の表示設定を行う
		setGamen(serviceFormBean);

		// 遷移先画面IDの設定
		setNextScreen(screenId, screenNm);

		return true;
	}

	/**
	 * サービス（DKSV0010）の呼び出しを行います。
	 * <br>
	 * @param sFormBean サービスフォームビーン
	 * @param screenId 画面ID
	 * @return 成否
	 * @throws Exception データベースアクセスエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private boolean putServiceDKSV0010(X31SDataBeanAccess sFormBean, String screenId) throws Exception
	{
		X31SDataBeanAccess[] paramBean = {sFormBean};

		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "DKSV0010");

		// マッピングクラスのインスタンスを生成
		DKSV0010_DKSV0010OPDBMapper mapper = new DKSV0010_DKSV0010OPDBMapper();

		HashMap<String, String> dataMap = new HashMap<String, String>();

		// 棚移動基本情報 ※機能コード１固定
		mapper.setDKSV001001SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		// 棚移動承認詳細情報 ※機能コードはDKSV0010_DKSV0010OP_EDK0111B022_01BSMapperで設定
		mapper.setDKSV001002SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		// 棚移動承認詳細情報（全件） ※機能コードはDKSV0010_DKSV0010OP_EDK0111B022_02BSMapperで設定
		mapper.setDKSV001003SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// ページング情報の設定
		JCCWebCommon.upmapperPageLinkInfo(this, "0", "DKSV001002SC", dataMap, screenId);

		// 検索結果格納用マップ
		HashMap outputMap = new HashMap();

		// 検索処理呼出
		invokeService(paramMap, dataMap, outputMap);

		// データ未取得時
		HashMap<String, Object> map = (HashMap<String, Object>)outputMap.get("DKSV001001SC");
		int cnt = ((ArrayList)map.get("EDK0111B028CBSMsg1List")).size();
		if (0 == cnt)
		{
			return false;
		}

		mapper.getDKSV001001SC(paramBean, outputMap);
		mapper.getDKSV001002SC(paramBean, outputMap);
		mapper.getDKSV001003SC(paramBean, outputMap);

		String searchErrFlg1 = JCCWebCommon.getSearchErrFlg("DKSV001001SC", outputMap);
		String searchErrFlg2 = JCCWebCommon.getSearchErrFlg("DKSV001002SC", outputMap);
		if (JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrFlg1) || 
				JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrFlg2))
		{
			// 検索結果が0件の場合の処理
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0330__I);
			return true;
		}

		// ページング情報の設定
		JCCWebCommon.downmapperPageLinkInfo(this, "0", "DKSV001002SC", outputMap, screenId);

		return true;
	}

	/**
	 * サービス（DKSV0040）の呼び出しを行います。
	 * <br>
	 * @param sFormBean サービスフォームビーン
	 * @param func_code 機能コード
	 * @return 成否
	 * @throws Exception データベースアクセスエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private boolean putServiceDKSV0040(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, "DKSV0040");

		// マッピングクラスのインスタンスを生成
		DKSV0040_DKSV0040OPDBMapper mapper = new DKSV0040_DKSV0040OPDBMapper();

		HashMap<String, String> dataMap = new HashMap<String, String>();

		// 倉庫棚移動承認
		mapper.setDKSV004001SC(paramBean, dataMap, func_code);
		// 予備機器配送承認
		mapper.setDKSV004002SC(paramBean, dataMap, func_code);

		// 結果格納用マップ
		Map outputMap = new HashMap();

		// 処理呼出
		invokeService(paramMap, dataMap, outputMap);

		return true;
	}

	/**
	 * サービス（DKSV0041）の呼び出しを行います。
	 * <br>
	 * @param sFormBean サービスフォームビーン
	 * @param func_code 機能コード
	 * @return 成否
	 * @throws Exception データベースアクセスエラーが発生した場合
	 */
	@SuppressWarnings("unchecked")
	private boolean putServiceDKSV0041(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, "DKSV0041");

		// マッピングクラスのインスタンスを生成
		DKSV0041_DKSV0041OPDBMapper mapper = new DKSV0041_DKSV0041OPDBMapper();

		HashMap<String, String> dataMap = new HashMap<String, String>();

		// 倉庫棚移動中止理由コード 固定値：01（却下）
		setData(this, "01", SOKODNA_MOVE_STP_RSN_CD);
		// 倉庫棚移動中止理由メモ 固定値：ブランク
		setData(this, "", SOKODNA_MOVE_STP_RSN_MEMO);
		// 倉庫棚移動却下
		mapper.setDKSV004101SC(paramBean, dataMap, func_code);

		// 予備機器配送中止コード 固定値：01（却下）
		setData(this, "01", YBKIKI_HAISO_STP_CD);
		// 予備機器配送却下
		mapper.setDKSV004102SC(paramBean, dataMap, func_code);
		// 宅内機器更新
		mapper.setDKSV004103SC(paramBean, dataMap, func_code);

		// 結果格納用マップ
		Map outputMap = new HashMap();

		// 処理呼出
		invokeService(paramMap, dataMap, outputMap);

		return true;
	}

	/**
	 * サービス（DKSV0091）の呼び出しを行います。
	 * <br>
	 * @param sFormBean サービスフォームビーン
	 * @throws Exception データベースアクセスエラーが発生した場合
	 */
	private void putServiceDKSV0091(X31SDataBeanAccess sFormBean) throws Exception
	{
		X31SDataBeanAccess[] paramBean = {sFormBean};

		// ユースケースID格納用マップを生成
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "DKSV0091");

		// マッピングクラスのインスタンスを生成
		DKSV0091_DKSV0091OPDBMapper mapper = new DKSV0091_DKSV0091OPDBMapper();

		HashMap<String, String> dataMap = new HashMap<String, String>();

		// 棚移動基本情報 ※機能コード１固定
		mapper.setDKSV009101SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		// 指示内容確認情報 ※機能コードはDKSV0091_DKSV0091OP_EDK0111B029BSMapperで設定
		mapper.setDKSV009102SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// 検索結果格納用マップ
		HashMap<String, String> outputMap = new HashMap<String, String>();

		// 検索処理呼出
		invokeService(paramMap, dataMap, outputMap);

		mapper.getDKSV009101SC(paramBean, outputMap);
		mapper.getDKSV009102SC(paramBean, outputMap);
	}

	/**
	 * サービス（DKSV0155）の呼び出しを行います。
	 * <br>
	 * @param sFormBean サービスフォームビーン
	 * @throws Exception データベースアクセスエラーが発生した場合
	 */
	private boolean putServiceDKSV0155(X31SDataBeanAccess sFormBean) throws Exception
	{
		X31SDataBeanAccess[] paramBean = {sFormBean};
		X31SDataBeanAccess beanCF = super.getCommonInfoBean();
		HashMap<String, String> paramMap = new HashMap<String, String>();
		HashMap<String, String> inputMap = new HashMap<String, String>();
		HashMap<String, String> outputMap = new HashMap<String, String>();
		HashMap<String, Object> attachMap = new HashMap<String, Object>();

		String lotNo = 
			sFormBean.sendMessageString(KEY_SHELF_MOVE_LOT_NO, X31CWebConst.DATABEAN_GET_VALUE);

		// 電子ファイルを設定
		setData(this, buildFile(lotNo), DKW00802SFConst.EFILE);
		String today = JCCWebCommon.getOpeDate(this, null);
		String deleteExpectDate = JPCDateUtil.addDay(today, 90);
		setData(this, deleteExpectDate, DKW00802SFConst.FILE_DEL_YMD);
		JDKWebCommon.setByteArrayMapping2(attachMap, DKW00802SFConst.EFILE, this);
		setData(this, beanCF.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE), DKW00802SFConst.TRN_IRAISHA_OPEACNT);

		// ユースケースID格納用マップを生成
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "DKSV0155");

		// マッピングクラスのインスタンスを生成
		DKSV0155_DKSV0155OPDBMapper mapper = new DKSV0155_DKSV0155OPDBMapper();
		
		// ディレイド処理依頼 ※機能コード１固定
		mapper.setDKSV015501SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		// データ一括登録管理登録 ※機能コード１固定
		mapper.setDKSV015502SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		// 検索結果格納用マップを生成。
		// サービス呼出 
		invokeService(paramMap, inputMap, outputMap, attachMap);

		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);

		// 倉庫棚移動よりデータ取得時のみ出荷先を設定
		if ("1".equals(sbean.sendMessageString(MV_SBT_02, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			sbean.sendMessageString(SHKA_SK_02, X31CWebConst.DATABEAN_SET_VALUE, skNm);
		}

		// 名細部の設定
		setList(paramBean[0], serviceFormBean);
	}

	/**
	 * リストの表示設定を行います。
	 * <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);

			// 商品名 14桁
			subbean.sendMessageString(L_SHOHIN_NM_01, X31CWebConst.DATABEAN_SET_VALUE, 
										JDKWebCommon.substr(shohinNm, 0, 14));
			subbean.sendMessageString(L_SHOHIN_NM_DISP_01, 
										X31CWebConst.DATABEAN_SET_VALUE, shohinNm);

			// 製造番号、指示数、移動理由、備考
			String seizoNo = "";
			String shiteiCd = subbean.sendMessageString(L_SHITEI_WAY_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			String sjiNo = "";
			String riyu = "";
			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;
				}
				sjiNo = "1";
				riyu = subbean.sendMessageString(L_ARI_MV_RSN_01, X31CWebConst.DATABEAN_GET_VALUE);
				biko = subbean.sendMessageString(L_ARI_BIKO_01, X31CWebConst.DATABEAN_GET_VALUE);
			}
			else
			{
				// 上記以外の場合
				sjiNo = subbean.sendMessageString(L_SJI_CNT_01, X31CWebConst.DATABEAN_GET_VALUE);
				seizoNo = "";
				riyu = subbean.sendMessageString(L_NASI_MV_RSN_01, X31CWebConst.DATABEAN_GET_VALUE);
				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_SJI_CNT_01, X31CWebConst.DATABEAN_SET_VALUE, sjiNo);
			subbean.sendMessageString(L_MV_RSN_01, X31CWebConst.DATABEAN_SET_VALUE, riyu);

			// 備考 6桁
			subbean.sendMessageString(L_BIKO_01, X31CWebConst.DATABEAN_SET_VALUE, 
										JDKWebCommon.substr(biko, 0, 6));
			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));
	}

	/**
	 * 指示内容データファイルを生成します。
	 * @param lotNo 棚移動ロット番号
	 * @return 指示内容データファイル
	 */
	private String buildFile(String lotNo)
	{
		X31SDataBeanAccessArray datas = getServiceFormBean().getDataBeanArray(SJI_CSV_LIST);

		StringBuffer bodyRecords = new StringBuffer();
		for (int i = 0; i < datas.getCount(); i++)
		{
			if (bodyRecords.length() > 0)
			{
				bodyRecords.append(JDKStrConst.LINE_SEPARATOR);
			}
			bodyRecords.append(buildDataRecord(datas.getDataBean(i), lotNo, i));
		}
		
		String file = join(JDKStrConst.LINE_SEPARATOR,
							buildHeaderRecord(lotNo),
							bodyRecords.toString(),
							buildTrailerRecord());

		DEBUG_LOG.debug(String.format("ファイル内容：%s", file));
		
		return file;
	}

	/**
	 * 出力ファイルのヘッダ部を生成します。
	 * @param lotNo 棚移動ロット番号
	 * @return ヘッダレコード
	 */
	private String buildHeaderRecord(String lotNo)
	{
		X31SDataBeanAccessArray datas = getServiceFormBean().getDataBeanArray(KIHON_CSV_LIST);
		X31SDataBeanAccess kihonData = datas.getDataBean(0);

		String sokoMtCd = getData(kihonData, MV_MT_SOKO_CD_04);		// 移動元倉庫コード
		String kojiMtCd = getData(kihonData, MV_MT_KOJI_CD_04);		// 移動元工事会社コード
		String ofcMtCd = getData(kihonData, MV_MT_OFFICE_CD_04);	// 移動元預託先オフィスコード
		
		String sokoSkCd = getData(kihonData, MV_SK_SOKO_CD_04);		// 移動先倉庫コード
		String kojiSkCd = getData(kihonData, MV_SK_KOJI_CD_04);		// 移動先工事会社コード
		String ofcSkCd = getData(kihonData, MV_SK_OFFICE_CD_04);	// 移動先預託先オフィスコード
		
		String mtCd = "";	// 移動元コード
		String pcd = "";	// 郵便番号
		String state = "";	// 都道府県
		String city = "";	// 市区町村
		String oaztsu = "";	// 大字
		String azcho = "";	// 字丁目
		String bnchigo = "";// 番地・号
		String adrttm = "";	// 建物
		String adrrm = "";	// 部屋番号
		String telno = "";	// 電話番号
		String skNm = "";	// 移動先名
		
		String sbt = getData(kihonData, MV_SBT_04);		// 種別
		
		// 倉庫棚移動よりデータ取得時
		if ("1".equals(sbt))
		{
			// 倉庫の場合
			if (!JDKCommonUtil.isNull(sokoMtCd))
			{
				mtCd = sokoMtCd;
				pcd = getData(kihonData, SOKO_PCD_04);
				state = getData(kihonData, SOKO_STATE_NM_04);
				city = getData(kihonData, SOKO_CITY_NM_04);
				oaztsu = getData(kihonData, SOKO_OAZTSU_NM_04);
				azcho = getData(kihonData, SOKO_AZCHO_NM_04);
				bnchigo = getData(kihonData, SOKO_BNCHIGO_04);
				adrttm = getData(kihonData, SOKO_ADRTTM_04);
				adrrm = getData(kihonData, SOKO_ADRRM_04);
				telno = getData(kihonData, SOKO_TELNO_04);
				skNm = getData(kihonData, MV_SK_SOKO_NM_04);
			}
			else if (!JDKCommonUtil.isNull(kojiMtCd))
			{
				// 工事会社の場合
				mtCd = kojiMtCd;
				pcd = getData(kihonData, KOJI_PCD_04);
				state = getData(kihonData, KOJI_STATE_NM_04);
				city = getData(kihonData, KOJI_CITY_NM_04);
				oaztsu = getData(kihonData, KOJI_OAZTSU_NM_04);
				azcho = getData(kihonData, KOJI_AZCHO_NM_04);
				bnchigo = getData(kihonData, KOJI_BNCHIGO_04);
				adrttm = getData(kihonData, KOJI_ADRTTM_04);
				adrrm = getData(kihonData, KOJI_ADRRM_04);
				telno = getData(kihonData, KOJI_TELNO_04);
				skNm = getData(kihonData, MV_SK_KOJI_NM_04);
			}
			else if (!JDKCommonUtil.isNull(ofcMtCd))
			{
				// 預託先オフィスの場合
				mtCd = ofcMtCd;
				pcd = getData(kihonData, OFFICE_PCD_04);
				state = getData(kihonData, OFFICE_STATE_NM_04);
				city = getData(kihonData, OFFICE_CITY_NM_04);
				oaztsu = getData(kihonData, OFFICE_OAZTSU_NM_04);
				azcho = getData(kihonData, OFFICE_AZCHO_NM_04);
				bnchigo = getData(kihonData, OFFICE_BNCHIGO_04);
				adrttm = getData(kihonData, OFFICE_ADRTTM_04);
				adrrm = getData(kihonData, OFFICE_ADRRM_04);
				telno = getData(kihonData, OFFICE_TELNO_04);
				skNm = getData(kihonData, MV_SK_OFFICE_NM_04);
			}
		}
		else
		{
			if (!JDKCommonUtil.isNull(sokoMtCd))
			{
				mtCd = sokoMtCd;
			}
			else if (!JDKCommonUtil.isNull(kojiMtCd))
			{
				mtCd = kojiMtCd;
			}
			else if (!JDKCommonUtil.isNull(ofcMtCd))
			{
				mtCd = ofcMtCd;
			}

			// 倉庫の場合
			if (!JDKCommonUtil.isNull(sokoSkCd))
			{
				pcd = getData(kihonData, SOKO_PCD_04);
				state = getData(kihonData, SOKO_STATE_NM_04);
				city = getData(kihonData, SOKO_CITY_NM_04);
				oaztsu = getData(kihonData, SOKO_OAZTSU_NM_04);
				azcho = getData(kihonData, SOKO_AZCHO_NM_04);
				bnchigo = getData(kihonData, SOKO_BNCHIGO_04);
				adrttm = getData(kihonData, SOKO_ADRTTM_04);
				adrrm = getData(kihonData, SOKO_ADRRM_04);
				telno = getData(kihonData, SOKO_TELNO_04);
				skNm = getData(kihonData, MV_SK_SOKO_NM_04);
			}
			else if (!JDKCommonUtil.isNull(kojiSkCd))
			{
				// 工事会社の場合
				pcd = getData(kihonData, KOJI_PCD_04);
				state = getData(kihonData, KOJI_STATE_NM_04);
				city = getData(kihonData, KOJI_CITY_NM_04);
				oaztsu = getData(kihonData, KOJI_OAZTSU_NM_04);
				azcho = getData(kihonData, KOJI_AZCHO_NM_04);
				bnchigo = getData(kihonData, KOJI_BNCHIGO_04);
				adrttm = getData(kihonData, KOJI_ADRTTM_04);
				adrrm = getData(kihonData, KOJI_ADRRM_04);
				telno = getData(kihonData, KOJI_TELNO_04);
				skNm = getData(kihonData, MV_SK_KOJI_NM_04);
			}
			else if (!JDKCommonUtil.isNull(ofcSkCd))
			{
				// 預託先オフィスの場合
				pcd = getData(kihonData, OFFICE_PCD_04);
				state = getData(kihonData, OFFICE_STATE_NM_04);
				city = getData(kihonData, OFFICE_CITY_NM_04);
				oaztsu = getData(kihonData, OFFICE_OAZTSU_NM_04);
				azcho = getData(kihonData, OFFICE_AZCHO_NM_04);
				bnchigo = getData(kihonData, OFFICE_BNCHIGO_04);
				adrttm = getData(kihonData, OFFICE_ADRTTM_04);
				adrrm = getData(kihonData, OFFICE_ADRRM_04);
				telno = getData(kihonData, OFFICE_TELNO_04);
				skNm = getData(kihonData, MV_SK_OFFICE_NM_04);
			}
		}
		
		// 倉庫棚移動よりデータ取得時
		if ("1".equals(sbt))
		{
			return join(JDKStrConst.COMMA, 
							dqot(RECORD_KIHON), 
							dqot(getData(kihonData, SJI_YMD_04)), 
							dqot(lotNo), 
							dqot(mtCd), 
							dqot(getData(kihonData, MV_MT_SHELF_CD_04)), 
							dqot(pcd), 
							dqot(state), 
							dqot(city), 
							dqot(oaztsu), 
							dqot(azcho), 
							dqot(bnchigo), 
							dqot(adrttm), 
							dqot(adrrm), 
							dqot(skNm), 
							dqot(getData(kihonData, HAISOS_TNT_BUSHO_NM_04)), 
							dqot(getData(kihonData, HAISOS_TNTSHA_NM_04)), 
							dqot(mtCd), 
							dqot(getData(kihonData, MV_SK_SHELF_CD_04)), 
							dqot(pcd), 
							dqot(state), 
							dqot(city), 
							dqot(oaztsu), 
							dqot(azcho), 
							dqot(bnchigo), 
							dqot(adrttm), 
							dqot(adrrm), 
							dqot(skNm), 
							dqot(""), 
							dqot(""), 
							dqot(telno));
		}
		else
		{
			// 予備機器配送よりデータ取得時
			String skCd = "";
			if (!JDKCommonUtil.isNull(sokoSkCd))
			{
				skCd = sokoSkCd;
			}
			else if (!JDKCommonUtil.isNull(kojiSkCd))
			{
				skCd = kojiSkCd;
			}
			else if (!JDKCommonUtil.isNull(ofcSkCd))
			{
				skCd = ofcSkCd;
			}

			return join(JDKStrConst.COMMA, 
							dqot(RECORD_KIHON), 
							dqot(getData(kihonData, SJI_YMD_04)), 
							dqot(lotNo), 
							dqot(mtCd), 
							dqot(getData(kihonData, MV_MT_SHELF_CD_04)), 
							dqot(pcd), 
							dqot(state), 
							dqot(city), 
							dqot(oaztsu), 
							dqot(azcho), 
							dqot(bnchigo), 
							dqot(adrttm), 
							dqot(adrrm), 
							dqot(skNm), 
							dqot(getData(kihonData, HAISOS_TNT_BUSHO_NM_04)), 
							dqot(getData(kihonData, HAISOS_TNTSHA_NM_04)), 
							dqot(skCd), 
							dqot(getData(kihonData, MV_SK_SHELF_CD_04)), 
							dqot(getData(kihonData, YBKIKI_HISOS_PCD_04)), 
							dqot(getData(kihonData, YBKIKI_HISOS_STATE_NM_04)), 
							dqot(getData(kihonData, YBKIKI_HISOS_CITY_NM_04)), 
							dqot(getData(kihonData, YBKIKI_HISOS_OAZTSU_NM_04)), 
							dqot(getData(kihonData, YBKIKI_HISOS_AZCHO_NM_04)), 
							dqot(getData(kihonData, YBKIKI_HISOS_BNCHIGO_04)), 
							dqot(getData(kihonData, YBKIKI_HISOS_ADRTTM_04)), 
							dqot(getData(kihonData, YBKIKI_HISOS_ADRRM_04)), 
							dqot(getData(kihonData, YBKIKI_HISOS_NM_1_04)), 
							dqot(getData(kihonData, YBKIKI_HISOS_NM_2_04)), 
							dqot(getData(kihonData, YBKIKI_HISOS_NM_3_04)), 
							dqot(getData(kihonData, YBKIKI_HISOS_TELNO_04)));
		}
	}

	/**
	 * 出力ファイルのデータ部を生成します。
	 * @param data 行データ
	 * @param lotNo 棚移動ロット番号
	 * @param cnt 行番号
	 * @return データレコード
	 */
	private String buildDataRecord(X31SDataBeanAccess data, String lotNo, int cnt) 
	{
		// 型番号
		String nmlMdlNo = getData(data, TKKIKI_MDL_CD_05);
		String setMdlNo = getData(data, TKKIKI_SETHIN_MDL_CD_05);
		String fzkMdlNo = getData(data, HUZOKUHIN_MDL_CD_05);
		String mdlNo = "";
		if (!JDKCommonUtil.isNull(nmlMdlNo))
		{
			mdlNo = nmlMdlNo;
		}
		else if (!JDKCommonUtil.isNull(setMdlNo))
		{
			mdlNo = setMdlNo;
		}
		else if (!JDKCommonUtil.isNull(fzkMdlNo))
		{
			mdlNo = fzkMdlNo;
		}

		// 製造番号、指示数、移動理由、備考
		String seizoNo = "";
		String sjiNo = "";
		String riyu = "";
		String biko = "";
		String shiteiCd = getData(data, SHITEI_WAY_CD_05);
		
		String shelfMoveLotNoKikiSeq = null;
		
		// 製番指定の場合
		if (!JDKCommonUtil.isNull(shiteiCd) && "2".equals(shiteiCd))
		{
			String nmlSeizoNo = getData(data, KIKI_SEIZO_NO_05);
			String setSeizoNo = getData(data, TKKIKI_SETHIN_SEIZO_NO_05);
			if (!JDKCommonUtil.isNull(nmlSeizoNo))
			{
				seizoNo = nmlSeizoNo;
			}
			else if (!JDKCommonUtil.isNull(setSeizoNo))
			{
				seizoNo = setSeizoNo;
			}
			sjiNo = "1";
			riyu = getData(data, U_ARI_MV_RSN_CD_NM_05);
			biko = getData(data, U_ARI_BIKO_05);
			shelfMoveLotNoKikiSeq = getData(data, SHELF_MOVE_LOT_NO_KIKI_SEQ_05);
		}
		else
		{
			// 上記以外の場合
			seizoNo = "";
			sjiNo = getData(data, SJI_CNT_05);
			riyu = getData(data, U_NASI_MV_RSN_CD_NM_05);
			biko = getData(data, U_NASI_BIKO_05);
			// 棚移動番号(行番号 + 1)
			shelfMoveLotNoKikiSeq = String.valueOf(cnt + 1);
		}

		return join(JDKStrConst.COMMA, 
					dqot(RECORD_SHOSAI), 
					dqot(getData(data, SJI_YMD_05)), 
					dqot(lotNo), 
					dqot(shelfMoveLotNoKikiSeq), 
					dqot(mdlNo),
					dqot(seizoNo),
					dqot(getData(data, GDS_STAT_CD_05)),
					dqot(sjiNo),
					dqot(riyu),
					dqot(biko));
	}

	/**
	 * 出力ファイルのトレーラ部を生成します。
	 * @return トレーラレコード
	 */
	private String buildTrailerRecord() 
	{
		// 詳細部の件数 + 2(ヘッダ部、トレーラ部)
		int cnt = getServiceFormBean().getDataBeanArray(SJI_CSV_LIST).getCount() + 2;
		String strCnt = Integer.toString(cnt);

		return join(JDKStrConst.COMMA, 
				dqot(RECORD_TRAILER), 
				dqot(strCnt));
	}

	/**
	 * 文字列をダブルクォーテッドする
	 * @param src 囲まれる文字列
	 * @return \"囲まれる文字列\"
	 */
	private String dqot(String src)
	{
		return String.format("\"%s\"", src);
	}
}
