/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：TUW00901SFLogic
*	ソースファイル名：TUW00901SFLogic.java
*	作成者			：FJ
*	日付			：2011年06月16日
*＜機能概要＞
*	事業者間戻し一覧照会のロジッククラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2011/06/16	FJ)宮本		新規作成
*	v3.00.00	2012/03/27	FJ)宮本		ANK-0024-00-00
*
**********************************************************************/
package eo.web.webview.TUW00901SF;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.common.constant.JTUStrConst;

import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JTUScreenConst;
import eo.web.webview.common.JTUWebCommon;
import eo.web.webview.mapping.TUSV0042_TUSV0042OPDBMapper;
import eo.web.webview.mapping.TUSV0043_TUSV0043OPDBMapper;

/**
 * TUW00901のビューロジック
 * @author FJ
 *
 */
public class TUW00901SFLogic extends JCCWebBusinessLogic
{

	/**
	 * 検索処理ユースケースID
	 */
	private static final String SEARCH_USECASE_ID = "TUSV0042";

	/**
	 * 検索処理SCタイトル01
	 */
	private static final String SEARCH_SC_TITLE01 = "TUSV004201SC";
	
	/**
	 * 印刷処理ユースケースID
	 */
	private static final String PRINT_USECASE_ID = "TUSV0043";
	

	/**
	 * 検索処理最大検索件数
	 */
	private static final String SEARCH_MAX_SHOW_CNT = "TUW00901_SEARCH_MAX_SHOW_CNT";

	/**
	 * 検索処理ページ表示件数
	 */
	private static final String SEARCH_ROW_PER_PAGE = "TUW00901_SEARCH_ROW_PER_PAGE";

	/**
	 * 印刷処理最大検索件数
	 */
	private static final String PRINT_MAX_SHOW_CNT = "TUW00901_PRINT_MAX_SHOW_CNT";
	
	/**
	 * 印刷処理CCタイトル01
	 */
	private static final String PRINT_CC_TITLE01 = "TUSV004301CC";
	
	/**
	 * 初期表示処理
	 * @return boolean
	 * @throws Exception
	 */
	public boolean action_init() throws Exception
	{
		return jgskRnRnki_init();
	}


	/**
	 * 初期化処理
	 * @return boolean
	 */
	private boolean jgskRnRnki_init()
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		
		// 遷移先の画面名を共有フォームBeanの項目に設定する。
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME
								, X31CWebConst.DATABEAN_SET_VALUE, JTUScreenConst.SCREEN_NAME_TUW00901);
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};
		
		/**
		 * DataBean設定処理
		 */
		// 戻るボタンの表示要否判定
		bean.sendMessageString(TUW00901SFConst.BACK_BTN_DSP_FLG, X31CWebConst.DATABEAN_SET_VALUE
				, JTUWebCommon.getBackDispFlg(this, JTUScreenConst.SCREEN_ID_TUW00901));
		
		return true;
		
	}
	

	/**
	 * 検索ボタン押下イベント
	 * @return boolean
	 * @throws Exception
	 */
	public boolean action_search() throws Exception
	{
		
		//セッション情報を削除 
		JCCWebCommon.removeScreenInfo(this, JTUScreenConst.SCREEN_ID_TUW00901);
		JCCWebCommon.clearPageLinkInfo(this, JTUScreenConst.SCREEN_ID_TUW00901);

		//検索条件をセッションへ格納
		saveSessionSearchInfo();
		return search();
	
	}


	/**
	 * ページング押下イベント
	 * @return boolean
	 * @throws Exception
	 */
	public boolean action_paging() throws Exception
	{
		setBeanFromSessionSearchInfo();
		return search();
	}

	/**
	 * 検索処理
	 * @return boolean
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	private boolean search() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};
		
		/**
		 * DataBean設定処理
		 */
		setBeanSearchInfo(bean);

		// 一覧表示フラグの初期化
		bean.sendMessageString(TUW00901SFConst.LIST_DISP_FLG, X31CWebConst.DATABEAN_SET_VALUE, JTUStrConst.LIST_DISP_FLG_FALSE);

		// 一覧情報のクリア
		X31SDataBeanAccessArray beanList = paramBean[0].getDataBeanArray(TUW00901SFConst.JGSHAK_RTRN_ICRN_INFO);
		if(beanList.getCount() != 0)
		{
			beanList.clearArray();
		}
		
		/**
		 * サービス呼出処理
		 */
		// ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SEARCH_USECASE_ID);

		// マッピングクラスのインスタンスを生成
		TUSV0042_TUSV0042OPDBMapper mapper = new TUSV0042_TUSV0042OPDBMapper();
		// 上り格納マップ
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 下り格納マップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// 上りマッピングの呼び出し
		mapper.setTUSV004201SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);

		//一覧照会共通部設定
		((HashMap<String, Object>)inputMap.get(SEARCH_SC_TITLE01)).put("search_type", JPCModelConstant.SAERCH_TYPE_BBN);
		((HashMap<String, Object>)inputMap.get(SEARCH_SC_TITLE01)).put("max_search_num", JCCWebCommon.getSearchConst(SEARCH_MAX_SHOW_CNT));
		((HashMap<String, Object>)inputMap.get(SEARCH_SC_TITLE01)).put("display_num", JCCWebCommon.getSearchConst(SEARCH_ROW_PER_PAGE));

		// ページリンク情報のマッピング
		JCCWebCommon.upmapperPageLinkInfo(this, SEARCH_SC_TITLE01, inputMap);

		// サービス呼出 
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);

		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}

		
		/**
		 * サービス処理結果の取得
		 */
		
		// 下りマッピングの呼び出し
		mapper.getTUSV004201SC(paramBean, outputMap);

		// ページリンク情報のマッピング
		JCCWebCommon.downmapperPageLinkInfo(this, SEARCH_SC_TITLE01, outputMap);

		//行スタイル設定
		JTUWebCommon.setRowStyle(bean, TUW00901SFConst.JGSHAK_RTRN_ICRN_INFO, TUW00901SFConst.ROW_STYLE_01);

		/**
		 * 取得データ件数チェック
		 */
		// 検索エラー取得
		String searchErrFlg = JCCWebCommon.getSearchErrFlg(SEARCH_SC_TITLE01, outputMap);
		
		if(JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrFlg))
		{
			//0件の場合
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0330__I);
			return true;
		}
		else if(JPCModelConstant.SEARCH_ERR_FLG_OVERMAX.equals(searchErrFlg))
		{
			//最大件数を超えた場合
			String[] msgRpl = new String[]{JCCWebCommon.getSearchConst(SEARCH_MAX_SHOW_CNT)};
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0340__I, msgRpl);
			return true;
		}
		else if(JPCModelConstant.SEARCH_ERR_FLG_NODATA.equals(searchErrFlg))
		{
			//表示ページに該当するデータがない場合
			JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0350__I);
			return true;
		}

		/**
		 * 検索コマンドIDの設定
		 */
		JCCWebCommon.setSearchCommand(this, "pageLink");
		
		/**
		 * DataBean設定処理
		 */
		// 一覧表示フラグ設定処理
		bean.sendMessageString(TUW00901SFConst.LIST_DISP_FLG, X31CWebConst.DATABEAN_SET_VALUE, JTUStrConst.LIST_DISP_FLG_TRUE);

		//行スタイル設定
		JTUWebCommon.setRowStyle(bean, TUW00901SFConst.JGSHAK_RTRN_ICRN_INFO, TUW00901SFConst.ROW_STYLE_01);

		// 遷移先の情報を共有フォームBeanの項目に設定する。
		JTUWebCommon.setNextScreenInfo(commoninfoBean, JTUScreenConst.SCREEN_ID_TUW00901, JTUScreenConst.SCREEN_NAME_TUW00901);

		return true;
	}


	
	
	/**
	 * 一覧印刷処理
	 * @return boolean
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public boolean action_print1() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// パラメータ作成
		X31SDataBeanAccess[] paramBean = {bean};

		// セッションに格納してある検索情報を再設定
		setBeanFromSessionSearchInfo();
		
		/**
		 * サービス呼出処理
		 */
		//  ユースケースID格納用マップを生成。
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, PRINT_USECASE_ID);

		// マッピングクラスのインスタンスを生成
		TUSV0043_TUSV0043OPDBMapper mapper = new TUSV0043_TUSV0043OPDBMapper();
		// 上り格納マップ
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// 下り格納マップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		// ファイル格納マップ
		HashMap<String, Object> attachMap = new HashMap<String, Object>();

		// 上りマッピングの呼び出し
		mapper.setTUSV004301CC(paramBean, inputMap, null);

		HashMap<String, Object> ccMap = (HashMap<String, Object>)inputMap.get(PRINT_CC_TITLE01);
		String list_cnt = "0";
		if(ccMap.containsKey("ETU0031B010CBSMsg1List"))
		{
			list_cnt = String.valueOf(((ArrayList)ccMap.get("ETU0031B010CBSMsg1List")).size());
		}
		
		String print_max_cnt = JCCWebCommon.getSearchConst(PRINT_MAX_SHOW_CNT);
		
		// ユーザーID
		ccMap.put("user_id", commoninfoBean.sendMessageString(CommonInfoCFConst.USER_ID, X31CWebConst.DATABEAN_GET_VALUE));
		// 出力件数
		ccMap.put("list_cnt", list_cnt);
		// 最大件数
		ccMap.put("print_max_cnt", print_max_cnt);

		/*
		 * サービス呼出 
		 */
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap, attachMap);	
		// エラー処理 
		if(msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}
		
		
		/**
		 * サービス処理結果の取得
		 */
		// 下りマッピングの呼び出し
		mapper.getTUSV004301CC(paramBean, outputMap);
		
		// 受信ファイル取得
		ArrayList<HashMap<String, Object>> fileList = (ArrayList<HashMap<String, Object>>)attachMap.get(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE_LIST);
		HashMap<String, Object> map = (HashMap<String, Object>)fileList.get(0);
		byte[] downloadData = (byte[])map.get(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE);
		
		HashMap<String, Object> printInfo = new HashMap<String, Object>();
		printInfo.put("output_chohyo", downloadData);
		JCCWebCommon.setScreenInfo(this, JTUScreenConst.SCREEN_ID_TUW00999, printInfo);
		
		bean.sendMessageString(TUW00901SFConst.OUTPUT_FLG, X31CWebConst.DATABEAN_SET_VALUE, JTUStrConst.DISP_FLG_TRUE);
		
		return true;
	}

	/**
	 * ダウンロード処理
	 * @return boolean
	 * @throws Exception
	 */
	public boolean action_print2() throws Exception
	{
		HashMap<String, Object> printInfo = JCCWebCommon.getScreenInfo(this, JTUScreenConst.SCREEN_ID_TUW00999);
		if(printInfo != null && printInfo.containsKey("output_chohyo"))
		{
			JCCWebCommon.setTempDownloadFile(this, (byte[])printInfo.get("output_chohyo")
					, JTUStrConst.CHOHYO_ID_JGSHAK_ADJ_REQ_MSKM + "." + JTUStrConst.CHOHYO_EXTENSION);
			
			// セッション情報削除
			JCCWebCommon.removeScreenInfo(this, JTUScreenConst.SCREEN_ID_TUW00999);
		}
		
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess bean = super.getServiceFormBean();
		bean.sendMessageString(TUW00901SFConst.OUTPUT_FLG, X31CWebConst.DATABEAN_SET_VALUE, JTUStrConst.DISP_FLG_FALSE);
		
		return true;
	}
	
	/**
	 * 先頭画面 戻る遷移処理
	 * @return boolean
	 * @throws Exception
	 */
	public boolean action_top_back() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		
		//セッション情報を削除 
		JCCWebCommon.removeScreenInfo(this, JTUScreenConst.SCREEN_ID_TUW00901);
		JCCWebCommon.clearPageLinkInfo(this, JTUScreenConst.SCREEN_ID_TUW00901 + "0PJP");
		
		/**
		 * DataBean設定処理
		 */
		// 遷移先の情報を共有フォームBeanの項目に設定する。
		JTUWebCommon.setNextScreenInfo(commoninfoBean, JTUWebCommon.getScreenId(this), "");
		
		return true;
	}

	/**
	 * 検索条件をセッションに保持
	 */
	private void saveSessionSearchInfo()
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		/**
		 * セッション設定処理
		 */
		// 引き継ぎ情報を格納するMAP
		HashMap<String, Object> hktgiMap = new HashMap<String, Object>();

		// 検索条件の保持
		// 読込日
		hktgiMap.put(TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_YEAR, 
				bean.sendMessageString(TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
		hktgiMap.put(TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_MON, 
				bean.sendMessageString(TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_MON, X31CWebConst.DATABEAN_GET_VALUE));
		hktgiMap.put(TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_DAY, 
				bean.sendMessageString(TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_DAY, X31CWebConst.DATABEAN_GET_VALUE));

		// サービス契約番号
		hktgiMap.put(TUW00901SFConst.SVC_KEI_NO, 
				bean.sendMessageString(TUW00901SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		
		// 電話番号
		hktgiMap.put(TUW00901SFConst.NTT_KEI_TEL_KAISEN_NO, 
				bean.sendMessageString(TUW00901SFConst.NTT_KEI_TEL_KAISEN_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// 整理番号
		hktgiMap.put(TUW00901SFConst.SEIRI_NO, 
				bean.sendMessageString(TUW00901SFConst.SEIRI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		
		/**
		 * 引継情報の設定
		 */
		JCCWebCommon.setScreenInfo(this, JTUScreenConst.SCREEN_ID_TUW00901, hktgiMap);
	}

	/**
	 * 検索条件を設定
	 * @param bean
	 */
	private void setBeanSearchInfo(X31SDataBeanAccess bean)
	{
		/**
		 * DataBean設定処理
		 */
		// 読込日
		JTUWebCommon.setYMD(bean, TUW00901SFConst.JGSK_RN_RNKI_UK_DTM
			, TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_YEAR, TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_MON, TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_DAY);

	}
	

	
	/**
	 * セッションに保持している検索条件をBeanに再設定
	 */
	private void setBeanFromSessionSearchInfo()
	{
		X31SDataBeanAccess bean = super.getServiceFormBean();

		HashMap<String, Object> searchInfo = null;
		searchInfo = JCCWebCommon.getScreenInfo(this);
		
		bean.sendMessageString(TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_YEAR, X31CWebConst.DATABEAN_SET_VALUE
				, searchInfo.get(TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_YEAR).toString());
		bean.sendMessageString(TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_MON, X31CWebConst.DATABEAN_SET_VALUE
				, searchInfo.get(TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_MON).toString());
		bean.sendMessageString(TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_DAY, X31CWebConst.DATABEAN_SET_VALUE
				, searchInfo.get(TUW00901SFConst.JGSK_RN_RNKI_UK_DTM_DAY).toString());
		bean.sendMessageString(TUW00901SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE
				, searchInfo.get(TUW00901SFConst.SVC_KEI_NO).toString());
		bean.sendMessageString(TUW00901SFConst.NTT_KEI_TEL_KAISEN_NO, X31CWebConst.DATABEAN_SET_VALUE
				, searchInfo.get(TUW00901SFConst.NTT_KEI_TEL_KAISEN_NO).toString());
		bean.sendMessageString(TUW00901SFConst.SEIRI_NO, X31CWebConst.DATABEAN_SET_VALUE
				, searchInfo.get(TUW00901SFConst.SEIRI_NO).toString());
		
		JCCWebCommon.setScreenInfo(this, JTUScreenConst.SCREEN_ID_TUW00901, searchInfo);
	}
	
}

