/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム構築
 *	モジュール名	：CRW07901SFLogic
 *	ソースファイル名：CRW07901SFLogic.java
 *	作成者			：富士通
 *	日付			：2011年11月25日
 *＜機能概要＞
 *	ABUSE関連一覧照会ビューロジック
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	ｖ1.00.00
 *
 ********************************************************************************/

package eo.web.webview.CRW07901SF;

import java.util.ArrayList;
import java.util.EventObject;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CID;
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.x33.X33SException;

import eo.common.constant.JCRStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.util.JCRUtilCommon;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCRScreenConst;
import eo.web.webview.common.JCRWebCommon;
import eo.web.webview.mapping.CRSV0180_CRSV0180OPDBMapper;
import eo.web.webview.mapping.CRSV0181_CRSV0181OPDBMapper;
import eo.web.webview.mapping.CRSV0182_CRSV0182OPDBMapper;
import eo.web.webview.mapping.CRSV0183_CRSV0183OPDBMapper;
import eo.web.webview.mapping.CRSV0199_CRSV0199OPDBMapper;

/**
 * ABUSE関連一覧照会ビューロジック.<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class CRW07901SFLogic extends JCCWebBusinessLogic
{
	/**
	 * 付加ファイル名：ABUSEメール
	 */
	private static final String ADD_FILE_NAME_ABUSE = "Abuse_Mail";

	/**
	 * ダブルクォーテーション
	 */
	private static final String DOUBLE_QUOT = "\"";

	/**
	 * エラーメッセージID
	 */
	private static final String ERR_MSG_ID_ABUSE = "EKB7710-KW";

	/**
	 * 親クラスX31BWebBusinessLogicのreceiveMessageWebを
	 * オーバーライドして自動生成されたメソッドです。
	 * @param arg0 (I) イベント情報
	 * @param arg1 (I) WebFWでは使用しません
	 * @param arg2 (I) WebFWでは使用しません
	 * @return 処理結果（true:正常終了、false:エラー）
	 * @throws X33SException X33SException
	 */
	@Override
	protected boolean receiveMessageWeb(X31CID arg0, Object arg1,
			EventObject arg2) throws X33SException
	{
		return false;
	}

	/**
	 * 初期表示を行う。<br>
	 * <br>
	 * ABUSE関連一覧照会（初期表示）サービスを呼び出し、
	 * ABUSE関連一覧照会画面の初期表示を行います。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean init() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// サービスフォームBeanの内容をクリアする
		clearBean();

		// 基準日
		bean.sendMessageString(CRW07901SFConst.STDARD_YMD, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.getSysDate());

		// ファイルアップロード処理準備
		bean.sendMessageString(CRW07901SFConst.FILE_NM, X31CWebConst.DATABEAN_SET_VALUE, "file_nm");

		// 認証IDリストのデフォルト入力行を作成するために1行（空行）を作成
		X31SDataBeanAccessArray ninshoIdList = bean.getDataBeanArray(CRW07901SFConst.NINSHO_ID);
		ninshoIdList.addDataBean();

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// ユースケースID格納用Map
		HashMap<Object, String> paramMap = new HashMap<Object, String>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0180");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// マッピングクラス
		CRSV0180_CRSV0180OPDBMapper mapper = new CRSV0180_CRSV0180OPDBMapper();

		// マッピング処理（上り）
		mapper.setCRSV018001SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setCRSV018002SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービス実行
		invokeService(paramMap, dataMap, outputMap);

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// マッピング処理（下り）
		mapper.getCRSV018001SC(paramBean, outputMap);
		mapper.getCRSV018002SC(paramBean, outputMap);

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW07901);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW07901);

		return true;
	}

	/**
	 * 行追加処理を行う。<br>
	 * <br>
	 * 認証IDリストの新規行を追加します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean addRow() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// 認証IDリストの入力行を作成するために1行（空行）を作成
		X31SDataBeanAccessArray ninshoIdList = bean.getDataBeanArray(CRW07901SFConst.NINSHO_ID);
		ninshoIdList.addDataBean();

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW07901);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW07901);

		return true;
	}

	/**
	 * ファイル抽出ボタン押下処理。
	 * <br>
	 * 入力チェックを行い、エラーがない場合は、ディレイド処理依頼登録する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean extractFl() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a)アップロードファイルの一時ファイルを作成
		ArrayList<HashMap<String, Object>> fileInfoArray = JCCWebCommon.getFileInfoArray(this);

		// 一時ファイルキー
		String fileKey = "";

		if (fileInfoArray != null && fileInfoArray.size() > 0)
		{
			// アップロードファイル一時ファイルキー
			fileKey = (String)fileInfoArray.get(0).get("fileKey");

			// (b)アップロードファイルの入力チェック
			if (!inputCheck(fileInfoArray))
			{
				// アップロードファイルの電子ファイル管理番号(一時ファイル番号)を元に、
				// アップロード一時ファイル削除部品(JCCWebCommon.deleteFile)を使用し、一時ファイルの削除を行う。
				JCRWebCommon.deleteFile(this, fileKey);

				// エラーの場合は、対応履歴チェックファイルアップロード画面に戻る
				// 遷移先画面IDを共有フォームBeanに設定
				commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
						JCRScreenConst.SCREEN_ID_CRW07901);

				// 遷移先画面名を共有フォームBeanに設定
				commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
						JCRScreenConst.SCREEN_NAME_CRW07901);
				return true;
			}
		}

		// (c)アップロードファイルの内容をStringで取得
		String fileString = getUploadFile(fileInfoArray);

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// (a)アップロードファイルの内容をbyte配列に変換
		byte[] fileByte = fileString.getBytes(JCRStrConst.MOJI_CD_MS932);

		// 電子ファイル用のMap
		HashMap<String, Object> attachMap = new HashMap<String, Object>();

		// (b)ディレイド処理依頼登録サービスインターフェースに引き渡す情報を設定する。
		setEfileMap(attachMap, fileByte);

		// ユースケースID格納用Map
		HashMap<Object, String> paramMap = new HashMap<Object, String>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0181");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// マッピングクラス
		CRSV0181_CRSV0181OPDBMapper mapper = new CRSV0181_CRSV0181OPDBMapper();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// マッピング処理（上り）
		mapper.setCRSV018101SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// (c)サービス実行
		invokeService(paramMap, dataMap, outputMap, attachMap);	

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// マッピング処理（下り）
		mapper.getCRSV018101SC(paramBean, outputMap);

		// (a)サービスが正常終了した場合（異常終了した場合はexceptionが発生するため処理がここまで来ない）
		// サービスフォームBeanの設定（ディレイド開始フラグをtrueにする）
		bean.sendMessageBoolean(CRW07901SFConst.DLYD_STA_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);

		// (b)ボタンの状態設定
		controlButton();

		// (c)アップロードファイルの電子ファイル管理番号(一時ファイル番号)を元に、
		// アップロード一時ファイル削除部品(JCCWebCommon.deleteFile)を使用し、一時ファイルの削除を行う。
		JCRWebCommon.deleteFile(this, fileKey);

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW07901);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW07901);

		// ディレイド処理中メッセージ出力
		JCCWebCommon.setMessageAreaBackColor(this, "1");
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB7660__I);

		return true;
	}

	/**
	 * 行削除処理を行う。<br>
	 * <br>
	 * 認証IDリストから指定されたインデックスの行を削除します。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean delete() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		X31SDataBeanAccessArray ninshoIdList = bean.getDataBeanArray(CRW07901SFConst.NINSHO_ID);

		String lineNo = bean.sendMessageString(CRW07901SFConst.LINE_NO, X31CWebConst.DATABEAN_GET_VALUE);
		ninshoIdList.removeDataBean(Integer.parseInt(lineNo));

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW07901);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW07901);

		return true;
	}

	/**
	 * 手動入力抽出ボタン押下処理。
	 * <br>
	 * 入力チェックを行い、エラーがない場合は、ディレイド処理依頼登録する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean extractMan() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// (a)アップロードファイルの内容をStringで取得
		String fileString = getUploadFile();

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// (a)アップロードファイルの内容をbyte配列に変換
		byte[] fileByte = fileString.getBytes();

		// 電子ファイル用のMap
		HashMap<String, Object> attachMap = new HashMap<String, Object>();

		// (b)ディレイド処理依頼登録サービスインターフェースに引き渡す情報を設定する。
		setEfileMap(attachMap, fileByte);

		// ユースケースID格納用Map
		HashMap<Object, String> paramMap = new HashMap<Object, String>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0181");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// マッピングクラス
		CRSV0181_CRSV0181OPDBMapper mapper = new CRSV0181_CRSV0181OPDBMapper();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// マッピング処理（上り）
		mapper.setCRSV018101SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// (c)サービス実行
		invokeService(paramMap, dataMap, outputMap, attachMap);	

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// マッピング処理（下り）
		mapper.getCRSV018101SC(paramBean, outputMap);

		// (a)サービスが正常終了した場合（異常終了した場合はexceptionが発生するため処理がここまで来ない）
		// サービスフォームBeanの設定（ディレイド開始フラグをtrueにする）
		bean.sendMessageBoolean(CRW07901SFConst.DLYD_STA_FLG, X31CWebConst.DATABEAN_SET_VALUE, true);

		// (b)ボタンの状態設定
		controlButton();

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW07901);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW07901);

		// ディレイド処理中メッセージ出力
		JCCWebCommon.setMessageAreaBackColor(this, "1");
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB7660__I);

		return true;
	}

	/**
	 * ディレイド処理依頼結果チェック。
	 * <br>
	 * Ajaxによるポーリングを実行し、一定時間間隔でディレイド処理依頼結果参照を行う。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean fixKeepAlive() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// ユースケースID格納用Map
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0182");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// マッピングクラス
		CRSV0182_CRSV0182OPDBMapper mapper = new CRSV0182_CRSV0182OPDBMapper();

		// マッピング処理（上り）
		mapper.setGETDLYDTRNREQCC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービス実行
		invokeService(paramMap, dataMap, outputMap);
		
		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// マッピング処理（下り）
		mapper.getGETDLYDTRNREQCC(paramBean, outputMap);

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW07901);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW07901);

		return true;
	}

	/**
	 * ディレイド処理正常終了。
	 * <br>
	 * ディレイド処理依頼結果参照の結果が正常終了した場合、ABUSE関連一覧照会に遷移する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean fixResultOk() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();
		
		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		
		// -------------------------------------------------- //
		// (1)引継情報の取得	
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// ディレイド開始フラグをfalseにし、ポーリングを停止させる
		bean.sendMessageBoolean(CRW07901SFConst.DLYD_STA_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);

		// ボタンの状態設定
		controlButton();

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW07901);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW07901);

		// ディレイド正常終了メッセージ出力
		// "%1%が完了しました。
		JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB4390__I, new String[] {"ABUSE抽出処理"});

		return true;
	}

	/**
	 * ディレイド処理異常終了。
	 * <br>
	 * ディレイド処理依頼結果参照の結果が異常終了した場合、ABUSE関連一覧照会に遷移する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean fixResultErr() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// ディレイド開始フラグをfalseにし、ポーリングを停止させる
		bean.sendMessageBoolean(CRW07901SFConst.DLYD_STA_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);

		// ボタンの状態設定
		controlButton();

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// ユースケースID格納用Map
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0183");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// マッピングクラス
		CRSV0183_CRSV0183OPDBMapper mapper = new CRSV0183_CRSV0183OPDBMapper();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// マッピング処理（上り）
		mapper.setGETDENSHIFILECTL1ICC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);

		// サービス実行
		invokeService(paramMap, dataMap, outputMap);

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// マッピング処理（下り）
		mapper.getGETDENSHIFILECTL1ICC(paramBean, outputMap);

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW07901);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW07901);

		// エラーメッセージ表示
		String errFileData = bean.sendMessageString(CRW07901SFConst.ERR_EFILE, X31CWebConst.DATABEAN_GET_VALUE);

		if (!JCRUtilCommon.isNull(errFileData))
		{
			// エラーメッセージ表示処理
			dispErrMessage(errFileData);
		}

		return true;
	}

	/**
	 * ディレイド処理システムエラー。
	 * <br>
	 * ディレイド処理依頼結果参照の結果がシステムエラーである場合、ABUSE関連一覧照会に遷移する。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean fixResultSysErr() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得	
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// ディレイド開始フラグをfalseにし、ポーリングを停止させる
		bean.sendMessageBoolean(CRW07901SFConst.DLYD_STA_FLG, X31CWebConst.DATABEAN_SET_VALUE, false);

		// ボタンの状態設定
		controlButton();

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW07901);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW07901);

		// ディレイド処理システムエラーメッセージ出力
		// CASEファイルチェックエラー(%1%)
		JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_ABUSE, new String[] {"システムエラーが発生しました。"});

		return true;
	}

	/**
	 * ファイルダウンロード処理。
	 * <br>
	 * ABUSE関連一覧照会（抽出ファイル取得）サービスを呼び出し、
	 * ABUSE抽出ファイルの取得を行います。
	 * 
	 * @return boolean
	 * @throws Exception Exception
	 */
	public boolean fileDownload() throws Exception
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// -------------------------------------------------- //
		// (1)引継情報の取得
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (2)サービスフォームBeanの設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (3)サービス呼出処理
		// -------------------------------------------------- //
		// ユースケースID格納用Map
		HashMap<Object, String> paramMap = new HashMap<Object, String>();

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CRSV0199");

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// マッピングクラス
		CRSV0199_CRSV0199OPDBMapper mapper = new CRSV0199_CRSV0199OPDBMapper();

		// マッピング処理（上り）
		mapper.setGETBUNSHOCTL1RCC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// サービス実行
		invokeService(paramMap, dataMap, outputMap);

		// -------------------------------------------------- //
		// (4)サービス処理結果の設定
		// -------------------------------------------------- //
		// マッピング処理（下り）
		mapper.getGETBUNSHOCTL1RCC(paramBean, outputMap);

		// -------------------------------------------------- //
		// (5)引継情報の設定
		// -------------------------------------------------- //
		// なし。

		// -------------------------------------------------- //
		// (6)共有フォームBeanの設定
		// -------------------------------------------------- //
		// 遷移先画面IDを共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_ID_CRW07901);

		// 遷移先画面名を共有フォームBeanに設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE,
				JCRScreenConst.SCREEN_NAME_CRW07901);

		// -------------------------------------------------- //
		// (7)ファイルダウンロード
		// -------------------------------------------------- //
		JCRWebCommon.setDownloadFile(this, bean.sendMessageString(CRW07901SFConst.EFILE_KANRI_NO, X31CWebConst.DATABEAN_GET_VALUE)
				, bean.sendMessageString(CRW07901SFConst.DOWNLOAD_FILE_NM, X31CWebConst.DATABEAN_GET_VALUE));

		return true;
	}

	/**
	 * アップロードファイル情報の取得を行う。
	 * <br>
	 * 画面の契約サービスチェックボックス、契約状態チェックボックス、一時ファイルから読み込んだ認証IDから、
	 * アップロードファイルとして出力する文字列を作成しリターンする。
	 * 
	 * @param fileInfoArray アップロードファイル情報
	 * @return アップロードファイルの内容の文字列
	 */
	private String getUploadFile(ArrayList<HashMap<String, Object>> fileInfoArray)
	{
		StringBuilder ret = new StringBuilder();

		// アップロードファイルの1〜3行目の内容の文字列を取得
		ret.append(getFileString());

		// 一時ファイルからアップロードファイルの4行目以降の内容の文字列を取得
		ret.append(getNinshoIdList(fileInfoArray));

		return ret.toString();
	}

	/**
	 * アップロードファイル情報の取得を行う。
	 * <br>
	 * 画面の契約サービスチェックボックス、契約状態チェックボックス、認証IDリストから、
	 * アップロードファイルとして出力する文字列を作成しリターンする。
	 * 
	 * @return アップロードファイルの内容の文字列
	 */
	private String getUploadFile()
	{
		StringBuilder ret = new StringBuilder();

		// アップロードファイルの1〜3行目の内容の文字列を取得
		ret.append(getFileString());

		// サービスフォームBeanからアップロードファイルの4行目以降の内容の文字列を取得
		ret.append(getNinshoIdList());

		return ret.toString();
	}

	/**
	 * アップロードファイル情報の取得を行う。
	 * <br>
	 * 画面の契約サービスチェックボックス、契約状態チェックボックスから、
	 * 選択されたコードの内容を取得し、アップロードファイルとして出力する文字列を作成しリターンする。
	 * 
	 * @return アップロードファイルの1〜3行目の内容の文字列
	 */
	private String getFileString()
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 共有フォームBeanの内容を取得
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();

		// ファイル名作成
		String loginUserId = commoninfoBean.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE);
		StringBuilder fileName = new StringBuilder();
		fileName.append(ADD_FILE_NAME_ABUSE).append("_").append(loginUserId).append("_").append(JCRWebCommon.getSysDateTime()).append(".csv").toString();

		// サービスフォームBeanのダウンロードファイル名を設定
		bean.sendMessageString(CRW07901SFConst.DOWNLOAD_FILE_NM, X31CWebConst.DATABEAN_SET_VALUE, fileName.toString());

		// 1行目の内容を作成
		StringBuilder line1 = new StringBuilder();

		line1.append(DOUBLE_QUOT);
		line1.append(fileName);
		line1.append(DOUBLE_QUOT);
		line1.append(JCRStrConst.KAIGYO_CD);

		// 2行目の内容を作成
		StringBuilder line2 = new StringBuilder();

		// 契約サービスリスト
		X31SDataBeanAccessArray svcKeiList = bean.getDataBeanArray(CRW07901SFConst.SVC_KEI);

		// 契約サービスリストからチェックがついたものを取得し、文字列に追加
		boolean firstFlg = true;
		for (int i = 0; i < svcKeiList.getCount(); i++)
		{
			X31SDataBeanAccess svcKeiBean = svcKeiList.getDataBean(i);
			boolean checked = svcKeiBean.sendMessageBoolean(CRW07901SFConst.L0_SELECTED_BOOLEAN_01, X31CWebConst.DATABEAN_GET_VALUE);

			// チェックされている場合
			if (checked)
			{
				if (!firstFlg)
				{
					line2.append(JCRStrConst.STR_HALF_COMMA);
				}
				// 料金グループコード
				line2.append(DOUBLE_QUOT);
				line2.append(svcKeiBean.sendMessageString(CRW07901SFConst.L0_PRC_GRP_CD_01, X31CWebConst.DATABEAN_GET_VALUE));
				line2.append(DOUBLE_QUOT);
				firstFlg = false;
			}
		}

		line2.append(JCRStrConst.KAIGYO_CD);

		// 3行目の内容を作成
		StringBuilder line3 = new StringBuilder();

		// 契約サービスリスト
		X31SDataBeanAccessArray keiStatsuList = bean.getDataBeanArray(CRW07901SFConst.SVC_KEI_STATUS);

		// 契約状態リストからチェックがついたものを取得し、文字列に追加
		firstFlg = true;
		for (int i = 0; i < keiStatsuList.getCount(); i++)
		{
			X31SDataBeanAccess keiStatusBean = keiStatsuList.getDataBean(i);
			boolean checked = keiStatusBean.sendMessageBoolean(CRW07901SFConst.L1_SELECTED_BOOLEAN_02, X31CWebConst.DATABEAN_GET_VALUE);

			// チェックされている場合
			if (checked)
			{
				if (!firstFlg)
				{
					line3.append(JCRStrConst.STR_HALF_COMMA);
				}
				// コード区分
				line3.append(DOUBLE_QUOT);
				line3.append(keiStatusBean.sendMessageString(CRW07901SFConst.L1_CD_DIV_02, X31CWebConst.DATABEAN_GET_VALUE));
				line3.append(DOUBLE_QUOT);
				firstFlg = false;
			}
		}

		line3.append(JCRStrConst.KAIGYO_CD);

		String ret = line1.append(line2).append(line3).toString();

		return ret;
	}

	/**
	 * 認証ID情報の取得を行う。
	 * <br>
	 * 読み込んだ一時ファイルから認証IDを取得し、
	 * 1つの認証IDに改行コードが付加された内容の文字列を返す。
	 * 
	 * @param fileInfoArray アップロードファイル情報
	 * @return 認証ID文字列
	 */
	private String getNinshoIdList(ArrayList<HashMap<String, Object>> fileInfoArray)
	{

		// 認証IDの内容を作成
		StringBuilder line4 = new StringBuilder();

		if (fileInfoArray != null && fileInfoArray.size() > 0)
		{
			// 一時ファイルキーを取得
			String fileKey = (String)fileInfoArray.get(0).get("fileKey");
		
			// アップロード一時ファイル取得部品(JCCWebCommon.getFile)を使用し、一時ファイルをbyte配列で保持する。
			byte[] fileByte = JCRWebCommon.getFile(this, fileKey);

			// 一時ファイルの内容をStringへ変換
			String file = new String(fileByte);

			String[] ninshoIdArray = file.split(JCRStrConst.KAIGYO_CD);

			for (int i = 0; i < ninshoIdArray.length; i++)
			{
				line4.append(ninshoIdArray[i]);
				line4.append(JCRStrConst.KAIGYO_CD);
			}
		}

		return line4.toString();
	}

	/**
	 * 認証ID情報の取得を行う。
	 * <br>
	 * サービスフォームBeanの認証IDリストから、nullでない認証IDを取得し、
	 * 1つの認証IDに改行コードが付加された内容の文字列を返す。
	 * 
	 * @return 認証ID文字列
	 */
	private String getNinshoIdList()
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// 認証IDの内容を作成
		StringBuilder line4 = new StringBuilder();

		// 認証IDリスト
		X31SDataBeanAccessArray ninshoIdList = bean.getDataBeanArray(CRW07901SFConst.NINSHO_ID);

		// 通番
		int no = 1;

		// 認証IDリストで未入力でないものを取得し、文字列に追加
		for (int i = 0; i < ninshoIdList.getCount(); i++)
		{
			X31SDataBeanAccess ninshoIdBean = ninshoIdList.getDataBean(i);
			String ninshoId = ninshoIdBean.sendMessageString(CRW07901SFConst.L2_NINSHO_ID_03, X31CWebConst.DATABEAN_GET_VALUE);

			// 未入力でない場合
			if (!JCRUtilCommon.isNull(ninshoId))
			{
				// 通番
				line4.append(JCRUtilCommon.fillZero(String.valueOf(no++), 5, false));
				line4.append(JCRStrConst.STR_HALF_COMMA);

				// 認証ID
				line4.append(ninshoId);
				line4.append(JCRStrConst.KAIGYO_CD);
			}
		}

		return line4.toString();
	}

	/**
	 * アップロードファイルチェック処理。
	 * <br>
	 * アップロードファイルのチェックを行う。
	 * 
	 * @param fileInfoArray アップロードファイル情報
	 * @return boolean
	 * @throws Exception Exception
	 */
	private boolean inputCheck(ArrayList<HashMap<String, Object>> fileInfoArray) throws Exception
	{
		// アップロードファイル情報
		HashMap<String, Object>fileInfoMap = fileInfoArray.get(0);

		// オブジェクト名
		String objName = (String)fileInfoMap.get("nameValue");

		// アップロードファイルチェック
		if (!JCRWebCommon.dispFileErrMsg(this, fileInfoArray, objName))
		{
			return false;
		}

		return true;
	}

	/**
	 * 電子ファイルデータMap設定処理。
	 * <br>
	 * 電子ファイルデータをMapに設定する。
	 * 
	 * @param attachMap アップロードファイル格納マップ
	 * @param eFileData アップロードファイルデータ
	 */
	private void setEfileMap(HashMap<String, Object> attachMap, byte[] eFileData)
	{
		HashMap<Object, Object> fileMap = new HashMap<Object, Object>();

		fileMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_IDENTIFUCD, "identifyCD");
		fileMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_LIST_NAMAE, "list_name");
		fileMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_ITEM_NAMAE, "item_name");
		fileMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_INDEX, "index");
		fileMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE, eFileData);

		ArrayList<HashMap<Object, Object>> fileList = new ArrayList<HashMap<Object, Object>>();

		// ファイルが取得できた場合のみリストに追加
		if (eFileData != null)
		{
			fileList.add(fileMap);
		}
		attachMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE_LIST, fileList);
	}

	/**
	 * エラーメッセージ出力処理。
	 * <br>
	 * ディレイド処理依頼で発生したエラー内容を出力。
	 * 
	 * @param errMeg エラーファイル文字列
	 */
	private void dispErrMessage(String errMeg)
	{
		String[] dispMsg = errMeg.split(JCRStrConst.KAIGYO_CD);
		for (int i = 0; i < dispMsg.length; i++)
		{
			// ディレイド処理エラーメッセージ出力
			// CASEファイルチェックエラー(%1%)
			JCCWebCommon.setMessageInfo(this, ERR_MSG_ID_ABUSE, new String[] {dispMsg[i]});
		}
	}

	/**
	 * ボタン押下可否の状態を設定する。<br>
	 * <br>
	 * サービスフォームBeanのボタンの押下可否の状態を設定します。
	 */
	private void controlButton()
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// ディレイド開始フラグを取得
		boolean dlydFlg = bean.sendMessageBoolean(CRW07901SFConst.DLYD_STA_FLG, X31CWebConst.DATABEAN_GET_VALUE);

		// ボタンの押下不可文字列を設定
		if (dlydFlg)
		{
			// ディレイド開始中の時、非活性にする
			bean.sendMessageString(CRW07901SFConst.BTN_DISABLED, X31CWebConst.DATABEAN_SET_VALUE, JCRStrConst.DISABLED_STRING);
		}
		else
		{
			// ディレイド開始中でない時、活性にする（クリアする）
			bean.sendMessage(CRW07901SFConst.BTN_DISABLED, X31CWebConst.DATABEAN_CLEAR);
		}
	}

	/**
	 * サービスフォームBeanのクリアを行う。<br>
	 * <br>
	 * サービスフォームBeanの引継ぎ項目以外の値をクリアします。
	 * 引継ぎ項目：なし
	 * 
	 */
	private void clearBean()
	{
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();

		// サービスフォームBeanの項目をクリアする。
		bean.getDataBeanArray(CRW07901SFConst.SVC_KEI).clearArray();
		bean.getDataBeanArray(CRW07901SFConst.SVC_KEI_STATUS).clearArray();
		bean.sendMessage(CRW07901SFConst.FILE_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.getDataBeanArray(CRW07901SFConst.NINSHO_ID).clearArray();
		bean.sendMessage(CRW07901SFConst.EFILE, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW07901SFConst.TRN_REQ_NO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW07901SFConst.DLYD_STA_FLG, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW07901SFConst.DLYD_TRN_RSLT_CD, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW07901SFConst.ERR_EFILE_KANRI_NO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW07901SFConst.ERR_EFILE, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW07901SFConst.EFILE_KANRI_NO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW07901SFConst.DOWNLOAD_FILE_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW07901SFConst.LINE_NO, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW07901SFConst.STDARD_YMD, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessage(CRW07901SFConst.BTN_DISABLED, X31CWebConst.DATABEAN_CLEAR);
	}

}
