/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：料金管理
*   モジュール名    ：eoモバイル利用明細画面
*   ソースファイル名：ACW00801SFLogic.java
*   作成者          ：富士通
*   日付            ：2011年06月01日
*＜機能概要＞
*  eoモバイル利用明細の照会画面です。
*＜修正履歴＞
*   バージョン  修正日       修正者        修正内容
*   v1.00.00    2011/06/01   FJ）富士通    新規作成
*   v3.00.00    2012/06/13   FJ）松本      障害対応(IT2-2012-0000754)
*   v5.00.00    2013/07/31   FJ) 伊藤      【IT1-2013-0001521】名称戻し対応
*
**********************************************************************/
package eo.web.webview.ACW00801SF;

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.JACStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.common.JACCommonConst;
import eo.web.webview.common.JACScreenConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.mapping.ACSV0012_ACSV0012OPDBMapper;

/**
 * eoモバイル利用明細画面用ビューロジック
 * 
 * @author FJ
 * @since 2011-06-01
 */
@SuppressWarnings("serial")
public class ACW00801SFLogic extends JCCWebBusinessLogic
{
	/** SCタイトル(eoモバイル利用明細一覧マップ) */
	private static final String TITLE_ACSV001204SC = "ACSV001204SC";
	
	/** eoモバイル利用明細・サービスID */
	private static final String SERVICE_ID_ACSV0012 = "ACSV0012";
	
	/** 請求種別コード(定例請求) */
	private static final String SEIKY_SBT_CD = "0";
	
	/** eoモバイル明細ページ情報 */
	private static final String EO_MOBA_DTL_PAGE_INFO = "0";
	
	/** 検索処理パターン */
	private static final String SEARCH_TYPE = "1";
	
	/** お客さまID */
	private static final String SVC_KEI_NO = "お客さまID";
	
	/** 業務機能識別コード */
	private static final String MSG_WORK_KINO_SKBT_CD = "業務機能識別コード";
	
	/** 明細情報 */
	private static final String MSG_PRC_DTL = "明細情報";
	
	/** 合計情報 */
	private static final String MSG_PRC_GOKEI = "合計情報";
	
	/** エラーメッセージコード */
	private static final String ERR_MSG_CD = "EKB8160-TW";
	
	/** ページング用コマンド */
	private static final String PAGING_COMMAND = "paging";
	
	/** 時分秒0 */
	private static final String HMS0 = "000000";
	
	/** 空文字 */
	private static final String KARA_MOJI = "";
	
	/**
	 * eoモバイル利用明細画面 初期表示処理
	 * 
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// 親画面からの取得する
		HashMap<String, Object> paramMap = JCCWebCommon.getScreenInfo(this, JACScreenConst.SCREEN_ID_ACW00801);
		// サービス契約番号を取得
		String svcKeiNo = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_SVC_KEI_NO);
		// サービス契約内訳番号を取得
		String svcKeiUcwkNo = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_SVC_KEI_UCWK_NO);
		// 料金コースコードを取得
		String pcrsCd = (String)paramMap.get(JACCommonConst.SCREEN_HKTGI_PCRS_CD);
		
		// eoモバイル明細情報を取得
		getEoMobileDtlInfSearch(svcKeiNo, svcKeiUcwkNo, pcrsCd, null);

		// 処理結果を返す
		return true;
	}
	
	/**
	 * eoモバイル利用明細画面 検索処理
	 * 
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean search() throws Exception
	{
		// サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();
		// サービス契約番号を取得
		String svcKeiNo = svcFormBean.sendMessageString(ACW00801SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE);
		// サービス契約内訳番号を取得
		String svcKeiUcwkNo = svcFormBean.sendMessageString(ACW00801SFConst.SVC_KEI_UCWK_NO, X31CWebConst.DATABEAN_GET_VALUE);
		// 料金コースコードを取得
		String pcrsCd = svcFormBean.sendMessageString(ACW00801SFConst.PCRS_CD, X31CWebConst.DATABEAN_GET_VALUE);
		// 照会年月を取得
		X31SDataBeanAccessArray shokaiYmList = svcFormBean.getDataBeanArray(ACW00801SFConst.SHOKAI_YM_LIST);
		X31SDataBeanAccess subBean = shokaiYmList.getDataBean(0);
		// 選択している紹介年月を取得
		String index = subBean.sendMessageString(ACW00801SFConst.SELECT_SHOKAI_YM_VALUE, X31CWebConst.DATABEAN_GET_VALUE);
		String shokaiYm = subBean.sendMessageString(ACW00801SFConst.SHOKAI_YM_VALUE, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
		// 明細データの削除
		X31SDataBeanAccessArray eoMobaDtlList = svcFormBean.getDataBeanArray(ACW00801SFConst.EOMOBA_DTL_LIST);
		eoMobaDtlList.clearArray();
		// ページング情報の削除
		JCCWebCommon.clearPageLinkInfo(this, JACScreenConst.SCREEN_ID_ACW00801);
		// eoモバイル明細情報を取得
		getEoMobileDtlInfSearch(svcKeiNo, svcKeiUcwkNo, pcrsCd, shokaiYm);

		// 処理結果を返す
		return true;
	}
	
	/**
	 * eoモバイル利用明細画面 ページング処理
	 * 
	 * @return 処理結果
	 * @throws Exception
	 */
	public boolean paging() throws Exception
	{
		// サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();
		// サービス契約番号を取得
		String svcKeiNo = svcFormBean.sendMessageString(ACW00801SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE);
		// サービス契約内訳番号を取得
		String svcKeiUcwkNo = svcFormBean.sendMessageString(ACW00801SFConst.SVC_KEI_UCWK_NO, X31CWebConst.DATABEAN_GET_VALUE);
		// 料金コースコードを取得
		String pcrsCd = svcFormBean.sendMessageString(ACW00801SFConst.PCRS_CD, X31CWebConst.DATABEAN_GET_VALUE);
		// 照会年月を取得
		String shokaiYm = svcFormBean.sendMessageString(ACW00801SFConst.SHOKAI_YM, X31CWebConst.DATABEAN_GET_VALUE);
		// 明細データの削除
		X31SDataBeanAccessArray eoMobaDtlList = svcFormBean.getDataBeanArray(ACW00801SFConst.EOMOBA_DTL_LIST);
		eoMobaDtlList.clearArray();
		// eoモバイル明細情報を取得
		getEoMobileDtlInfSearch(svcKeiNo, svcKeiUcwkNo, pcrsCd, shokaiYm);

		// 処理結果を返す
		return true;
	}
	
	/**
	 * eoモバイル明細情報を取得する
	 * @param svcKeiNo 請求契約番号
	 * @param svcKeiUcwkNo 請求契約内訳番号
	 * @param pcrsCd 料金コースコード
	 * @param shokaiYm 照会年月
	 */
	private void getEoMobileDtlInfSearch(String svcKeiNo, String svcKeiUcwkNo, String pcrsCd, String shokaiYm)
	{
		// マッピングクラスの結果を格納するHashMap
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		// サービス呼出結果を格納するHashMap
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		// ユースケースID格納用のHashMap
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// サービス契約番号の存在チェック
		if (svcKeiNo == null || KARA_MOJI.equals(svcKeiNo))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD, new String[] {SVC_KEI_NO});
			return;
		}
		// 料金コースコードの存在チェック
		if (pcrsCd == null || KARA_MOJI.equals(pcrsCd))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD, new String[] {ACW00801SFConst.PCRS_CD});
			return;
		}
		
		// ページング共通設定
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		// 表示件数
		parentMap.put("display_num", JCCWebCommon.getSearchConst("ACW00801_ROW_PER_PAGE"));
		// 表示ページ数
		parentMap.put("display_page_num", "1");
		// 最大検索数
		parentMap.put("max_search_num", JCCWebCommon.getSearchConst("ACW00801_MAX_SHOW_CNT"));
		// 検索処理パターン
		parentMap.put("search_type", SEARCH_TYPE);
		// 共通情報設定
		inputMap.put(TITLE_ACSV001204SC, parentMap);
		
		// 運用日付を取得
		String unyoYmd = JCCWebCommon.getOpeDate(this, null);
		
		// サービスフォームBean アクセスクラスの取得
		X31SDataBeanAccess svcFormBean = super.getServiceFormBean();
		// サービスフォームBeanの初期化
		svcFormBean.sendMessageString(ACW00801SFConst.WORK_KINO_SKBT_CD, X31CWebConst.DATABEAN_SET_VALUE, KARA_MOJI);
		svcFormBean.sendMessageString(ACW00801SFConst.PPLAN_CD_NM, X31CWebConst.DATABEAN_SET_VALUE, KARA_MOJI);
		svcFormBean.sendMessageString(ACW00801SFConst.USE_PCT_CNT_GOKEI, X31CWebConst.DATABEAN_SET_VALUE, KARA_MOJI);
		svcFormBean.sendMessageString(ACW00801SFConst.USE_BYTE_CNT_GOKEI, X31CWebConst.DATABEAN_SET_VALUE, KARA_MOJI);
		svcFormBean.sendMessageString(ACW00801SFConst.PRC_GOKEI, X31CWebConst.DATABEAN_SET_VALUE, KARA_MOJI);
		svcFormBean.sendMessageString(ACW00801SFConst.WORK_PARAM_ID2, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.WORK_KINO_SKBT_EO_MOBILE_DTL_ONLINE);
		svcFormBean.sendMessageString(ACW00801SFConst.SVC_KEI_NO, X31CWebConst.DATABEAN_SET_VALUE, svcKeiNo);
		svcFormBean.sendMessageString(ACW00801SFConst.SVC_KEI_UCWK_NO, X31CWebConst.DATABEAN_SET_VALUE, svcKeiUcwkNo);
		svcFormBean.sendMessageString(ACW00801SFConst.PCRS_CD, X31CWebConst.DATABEAN_SET_VALUE, pcrsCd);
		svcFormBean.sendMessageString(ACW00801SFConst.UNYO_YMD, X31CWebConst.DATABEAN_SET_VALUE, unyoYmd);
		svcFormBean.sendMessageString(ACW00801SFConst.UNYO_DTM, X31CWebConst.DATABEAN_SET_VALUE, unyoYmd + HMS0);
		svcFormBean.sendMessageString(ACW00801SFConst.WORK_PARAM_ID1, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.WORK_KINO_SKBT_CD_EM_DTL);
		svcFormBean.sendMessageString(ACW00801SFConst.SEIKY_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, SEIKY_SBT_CD);
		svcFormBean.sendMessageString(ACW00801SFConst.SYS_CD, X31CWebConst.DATABEAN_SET_VALUE, JACStrConst.SYS_CD_AC);
		if (shokaiYm != null)
		{
			svcFormBean.sendMessageString(ACW00801SFConst.SHOKAI_YM, X31CWebConst.DATABEAN_SET_VALUE, shokaiYm);
		}
		// マッピングクラスに渡すため、配列に作り変える
		X31SDataBeanAccess[] paramBean = {svcFormBean};
		
		// ユースケースID設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SERVICE_ID_ACSV0012);
		// ページングのマッピング
		JCCWebCommon.upmapperPageLinkInfo(this, EO_MOBA_DTL_PAGE_INFO, TITLE_ACSV001204SC, inputMap);
		// マッピングクラスのインスタンス作成
		ACSV0012_ACSV0012OPDBMapper mapper = new ACSV0012_ACSV0012OPDBMapper();
		// 上がりマッピング サービスフォームBean ⇒ サービス
		mapper.setACSV001201SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setACSV001202SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_2);
		mapper.setACSV001203SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setACSV001204SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setACSV001205SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_1);
		mapper.setACSV001206SC(paramBean, inputMap, JPCModelConstant.FUNC_CD_5);

		// SQL呼出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);
		
		// エラーメッセージが存在する場合
		if(msgResult != null)
		{
			// メッセージ出力
			JCCWebCommon.setMessageInfo(this, msgResult);
		}

		// 下りマッピング サービス ⇒ サービスフォームBean
		mapper.getACSV001201SC(paramBean, outputMap);
		mapper.getACSV001202SC(paramBean, outputMap);
		mapper.getACSV001203SC(paramBean, outputMap);
		mapper.getACSV001204SC(paramBean, outputMap);
		mapper.getACSV001205SC(paramBean, outputMap);
		mapper.getACSV001206SC(paramBean, outputMap);
		// ページングのマッピング
		JCCWebCommon.downmapperPageLinkInfo(this, EO_MOBA_DTL_PAGE_INFO, TITLE_ACSV001204SC, outputMap);
		// 検索のコマンドIDを設定する。
		JCCWebCommon.setSearchCommand(this, PAGING_COMMAND);
		
		// 業務機能識別コードの存在チェック
		String workKinoSkbt = svcFormBean.sendMessageString(ACW00801SFConst.WORK_KINO_SKBT_CD, X31CWebConst.DATABEAN_GET_VALUE);
		if (workKinoSkbt == null || KARA_MOJI.equals(workKinoSkbt))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD, new String[] {MSG_WORK_KINO_SKBT_CD});
			return;
		}
		// 明細情報の存在チェック
		X31SDataBeanAccess subBean = svcFormBean.getDataBeanArray(ACW00801SFConst.SHOKAI_YM_LIST).getDataBean(0);
		if (subBean == null || ((Integer)subBean.sendMessage(ACW00801SFConst.SHOKAI_YM_VALUE, X31CWebConst.DATABEAN_GET_COUNT)) == 0)
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD, new String[] {MSG_PRC_DTL});
			return;
		}
		// 合計情報の存在チェック
		String useByteCntGokei = svcFormBean.sendMessageString(ACW00801SFConst.USE_BYTE_CNT_GOKEI, X31CWebConst.DATABEAN_GET_VALUE);
		if (useByteCntGokei == null || KARA_MOJI.equals(useByteCntGokei))
		{
			JCCWebCommon.setMessageInfo(this, ERR_MSG_CD, new String[] {MSG_PRC_GOKEI});
			return;
		}
	}
	
}
