/*********************************************************************
* All Rights reserved, Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム共通（共通マスタ）
*   モジュール名    ：ZMW12501SFLogic
*   ソースファイル名：ZMW12501SFLogic.java
*   作成者          ：富士通
*   日付            ：2013年12月10日
*＜機能概要＞
*   お知らせ情報更新のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v6.00.00    2013/12/10   FJ）日野    新規作成
*
**********************************************************************/

package eo.web.webview.ZMW12501SF;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JPCModelConstant;
import eo.common.constant.JPCOnlineMessageConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.ZMW12501SF.ZMW12501SFConst;
import eo.web.webview.common.JZMScreenConst;
import eo.web.webview.common.JZMWebCommon;
import eo.web.webview.common.JZMWebConst;
import eo.web.webview.mapping.ZMSV0129_ZMSV0129OPDBMapper;
import eo.web.webview.mapping.ZMSV0130_ZMSV0130OPDBMapper;

/** * 
 *  お知らせ情報更新のビューロジックです。
 * @author 908586
 *
 */
@SuppressWarnings("serial")
public class ZMW12501SFLogic extends JCCWebBusinessLogic
{

	/** メッセージ置換文字列 お知らせ情報更新  */
	private static final String[] MSG_UPD = {"お知らせ情報更新"};
	
	/** メッセージ置換文字列 業務パラメータ管理　未存在  */
	private static final String[] MSG_WORK_PARAM = {"業務パラメータ管理", "情報"};
	
	/** メッセージ置換文字列 業務規制　未存在  */
	private static final String[] MSG_WORK_KISEI = {"業務規制", "情報"};
	
	/**
	 * 量販訪販ユーザーパスワード初期化の初期表示処理を行います。
	 * <br>
	 * @return boolean
	 * @throws Exception
	 */
	public boolean init() throws Exception
	{
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();
		
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();
		
		// 戻り先IDの取得
		String screenId = JZMWebCommon.getScreenId(this);
		
		// 戻り先IDの有無で戻るボタン表示フラグを表示する
		JZMWebCommon.setSendMessageBoolean(bean, ZMW12501SFConst.BACK_BTN_DSP_FLG, screenId != null);
		
		if(screenId == null)
		{
			// HashMapを設定する
			JZMWebCommon.setScreenId(this, JZMScreenConst.SCREEN_ID_ZMW12503, JZMScreenConst.SCREEN_ID_ZMW12501);
		}
		
		
		// 初期表示データ取得処理
		getInfoUpdInitData(bean, this);
		
		// 遷移先画面ID、名称の設定
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW12501);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW12501);
		
		return true;
	}
	
	/**
	 * 更新確認ボタン処理を行います。
	 * <br>
	 * @return 処理結果
	 * @throws Exception 予期せぬエラー
	 */
	public boolean updCfm() throws Exception
	{
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// (2)サービス呼出処理
		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JZMWebConst.SV130);

		// マッピングクラス
		ZMSV0130_ZMSV0130OPDBMapper mapper = new ZMSV0130_ZMSV0130OPDBMapper();

		// マッピング処理（上り）
		// 更新対象の選択値を取得
		Boolean updTg1 = JZMWebCommon.getSendMessageBoolean(bean, ZMW12501SFConst.UPD_TG_1);
		Boolean updTg2 = JZMWebCommon.getSendMessageBoolean(bean, ZMW12501SFConst.UPD_TG_2);
		Boolean updTg3 = JZMWebCommon.getSendMessageBoolean(bean, ZMW12501SFConst.UPD_TG_3);
		
		// 次画面表示用の業務規制予定時分をBeanにセット(取得データ)
		setDispWkKisei(bean);
		
		if(updTg1)
		{
			mapper.setZMSV013001SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
			mapper.setZMSV013002SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
			mapper.setZMSV013003SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
		}
		if(updTg2)
		{
			mapper.setZMSV013004SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
			mapper.setZMSV013005SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
			mapper.setZMSV013006SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
		}
		if(updTg3)
		{
			// 時、分を結合
			setConcatHm(bean, ZMW12501SFConst.WORK_KISEI_STA_RSV_HM, ZMW12501SFConst.WORK_KISEI_STA_RSV_JI, ZMW12501SFConst.WORK_KISEI_STA_RSV_HUN);
			setConcatHm(bean, ZMW12501SFConst.WORK_KISEI_END_RSV_HM, ZMW12501SFConst.WORK_KISEI_END_RSV_JI, ZMW12501SFConst.WORK_KISEI_END_RSV_HUN);
			setConcatHm(bean, ZMW12501SFConst.CR_WORK_KISEI_STA_RSV_HM, ZMW12501SFConst.CR_WORK_KISEI_STA_RSV_JI, ZMW12501SFConst.CR_WORK_KISEI_STA_RSV_HUN);
			setConcatHm(bean, ZMW12501SFConst.CR_WORK_KISEI_END_RSV_HM, ZMW12501SFConst.CR_WORK_KISEI_END_RSV_JI, ZMW12501SFConst.CR_WORK_KISEI_END_RSV_HUN);
			
			// 次画面表示用の業務規制予定時分をBeanにセット(入力データで更新)
			setDispWkKisei(bean);
			
			mapper.setZMSV013007SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
			mapper.setZMSV013008SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_2);
		}
		
		// サービス実行
		invokeService(paramMap, dataMap, outputMap);
		
		// メッセージの表示
		JZMWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0370__I, MSG_UPD);
		JZMWebCommon.setMessageAreaBackColor(this, JZMWebConst.ONE);
		
		// 遷移先画面ID、名称の設定
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW12502);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
				X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_NAME_ZMW12502);
		
		return true;
	}

	/**
	 * 戻るボタンの処理を行います。
	 * <br>
	 * @return boolean　処理結果
	 * @throws Exception　予期せぬエラー
	 */
	public boolean back() throws Exception
	{
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JZMWebCommon.getScreenId(this));
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JZMWebConst.BLANK);
		
		return true;
	}
	
	/**
	 * 確定処理を行います
	 * @return boolean　処理結果
	 * @throws Exception　予期せぬ例外
	 */
	public boolean fix() throws Exception
	{
		// 共通フォームBeanの内容を取得
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess bean = getServiceFormBean();

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();

		// (2)サービス呼出処理
		// マッピングクラスを使用する為、配列化
		X31SDataBeanAccess[] paramBean = {bean};

		// ユースケースID格納
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JZMWebConst.SV130);

		// マッピングクラス
		ZMSV0130_ZMSV0130OPDBMapper mapper = new ZMSV0130_ZMSV0130OPDBMapper();

		// マッピング処理（上り）
		// 更新対象の選択値を取得
		Boolean updTg1 = JZMWebCommon.getSendMessageBoolean(bean, ZMW12501SFConst.UPD_TG_1);
		Boolean updTg2 = JZMWebCommon.getSendMessageBoolean(bean, ZMW12501SFConst.UPD_TG_2);
		Boolean updTg3 = JZMWebCommon.getSendMessageBoolean(bean, ZMW12501SFConst.UPD_TG_3);
		
		if(updTg1)
		{
			mapper.setZMSV013001SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
			mapper.setZMSV013002SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
			mapper.setZMSV013003SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		}
		if(updTg2)
		{
			mapper.setZMSV013004SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
			mapper.setZMSV013005SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
			mapper.setZMSV013006SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		}
		if(updTg3)
		{
			mapper.setZMSV013007SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
			mapper.setZMSV013008SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		}
		
		// サービス実行
		invokeService(paramMap, dataMap, outputMap);

		// メッセージの表示
		JZMWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0380__I, MSG_UPD);
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW12503);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst. SCREEN_NAME_ZMW12503);
		
		return true;
	}

	/**
	 * 修正ボタン処理を行います。
	 * <br>
	 * @return 処理結果
	 * @throws Exception 予期せぬエラー
	 */
	public boolean shusei() throws Exception
	{
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();
		
		// 画面遷移
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst.SCREEN_ID_ZMW12501);
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst. SCREEN_NAME_ZMW12501);
		
		return true;
	}
	
	/**
	 * 完了ボタン処理を行います。
	 * <br>
	 * @return boolean
	 * @throws Exception
	 */
	public boolean fin() throws Exception
	{
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();
		
		// サービスフォームBeanの内容の取得
		X31SDataBeanAccess bean = getServiceFormBean();
		
		// セッションから遷移先画面を設定
		setBackScreenId(commonBean, bean, false);
		
		return true;
	}

	/**
	 * セッションから遷移先画面を取得し共通ビーンに設定します。
	 * @param commonBean 共通ビーン
	 * @param transfer setTransferPageId()を呼び出すかどうかを設定します。
	 */
	private void setBackScreenId(X31SDataBeanAccess commonBean, X31SDataBeanAccess bean, boolean transfer)
	{
		String screenId = JZMWebCommon.getScreenId(this);
		
		// 遷移先画面ID、名称の設定
		commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,
				X31CWebConst.DATABEAN_SET_VALUE, screenId);
		
		if(JZMScreenConst.SCREEN_ID_ZMW12501.equals(screenId))
		{
			// 初期表示データ取得処理
			getInfoUpdInitData(bean, this);
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
					X31CWebConst.DATABEAN_SET_VALUE, JZMScreenConst. SCREEN_NAME_ZMW12501);
		}
		else
		{
			commonBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME,
					X31CWebConst.DATABEAN_SET_VALUE, JZMWebConst.BLANK);
		}
		
		if(transfer)
		{
			setTransferPageId(screenId + JZMWebConst.PJP);
		}
	}
	
	/**
	 * 時(2桁)、分(2桁)を結合してBeanにセットします。
	 * @param bean データBean
	 * @param hmName	時分名称
	 * @param jiName	時名称
	 * @param hunName	分名称
	 */
	private void setConcatHm(X31SDataBeanAccess bean, String hmName, String jiName, String hunName)
	{
		String ji = JZMWebCommon.getSendMessageString(bean, jiName);
		String hun = JZMWebCommon.getSendMessageString(bean, hunName);
		
		if((ji != null && ji.length() == 2) && (hun != null && hun.length() == 2))
		{
			JZMWebCommon.setSendMessageString(bean, hmName, ji + hun);
		}
		else
		{
			JZMWebCommon.setSendMessageString(bean, hmName, JZMWebConst.BLANK);
		}
		
	}
	
	/**
	 * 初期表示データ取得処理です。
	 * @param bean      データBean
	 * @param viewLogic ViewLogicインスタンス
	 */
	private void getInfoUpdInitData(X31SDataBeanAccess bean, JCCWebBusinessLogic viewLogic)
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess[] paramBean = {bean};
		
		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		
		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		
		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JZMWebConst.SV129);
		
		// マッピングクラスのインスタンスを生成
		ZMSV0129_ZMSV0129OPDBMapper mapper = new ZMSV0129_ZMSV0129OPDBMapper();
		
		// マッピング処理（上り）
		mapper.setZMSV012901SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setZMSV012902SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setZMSV012903SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setZMSV012904SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setZMSV012905SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setZMSV012906SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setZMSV012907SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setZMSV012908SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		
		//  サービスの呼び出し
		viewLogic.invokeService(paramMap, dataMap, outputMap);
		
		// マッピング処理（下り）
		mapper.getZMSV012901SC(paramBean, outputMap);
		mapper.getZMSV012902SC(paramBean, outputMap);
		mapper.getZMSV012903SC(paramBean, outputMap);
		mapper.getZMSV012904SC(paramBean, outputMap);
		mapper.getZMSV012905SC(paramBean, outputMap);
		mapper.getZMSV012906SC(paramBean, outputMap);
		mapper.getZMSV012907SC(paramBean, outputMap);
		mapper.getZMSV012908SC(paramBean, outputMap);
		
		// 時分を分割する
		JZMWebCommon.setSplitHm(bean,
				ZMW12501SFConst.WORK_KISEI_STA_RSV_HM,
				ZMW12501SFConst.WORK_KISEI_STA_RSV_JI,
				ZMW12501SFConst.WORK_KISEI_STA_RSV_HUN);
		
		JZMWebCommon.setSplitHm(bean,
				ZMW12501SFConst.WORK_KISEI_END_RSV_HM,
				ZMW12501SFConst.WORK_KISEI_END_RSV_JI,
				ZMW12501SFConst.WORK_KISEI_END_RSV_HUN);
		
		JZMWebCommon.setSplitHm(bean,
				ZMW12501SFConst.CR_WORK_KISEI_STA_RSV_HM,
				ZMW12501SFConst.CR_WORK_KISEI_STA_RSV_JI,
				ZMW12501SFConst.CR_WORK_KISEI_STA_RSV_HUN);
		
		JZMWebCommon.setSplitHm(bean,
				ZMW12501SFConst.CR_WORK_KISEI_END_RSV_HM,
				ZMW12501SFConst.CR_WORK_KISEI_END_RSV_JI,
				ZMW12501SFConst.CR_WORK_KISEI_END_RSV_HUN);
		
		// 検索エラーフラグの取得
		ArrayList<String> searchErrList1 = new ArrayList<String>();
		ArrayList<String> searchErrList2 = new ArrayList<String>();
		searchErrList1.add(JZMWebCommon.getSearchErrFlg(JZMWebConst.SC12901, outputMap));
		searchErrList1.add(JZMWebCommon.getSearchErrFlg(JZMWebConst.SC12902, outputMap));
		searchErrList1.add(JZMWebCommon.getSearchErrFlg(JZMWebConst.SC12903, outputMap));
		searchErrList1.add(JZMWebCommon.getSearchErrFlg(JZMWebConst.SC12904, outputMap));
		searchErrList1.add(JZMWebCommon.getSearchErrFlg(JZMWebConst.SC12905, outputMap));
		searchErrList1.add(JZMWebCommon.getSearchErrFlg(JZMWebConst.SC12906, outputMap));
		searchErrList2.add(JZMWebCommon.getSearchErrFlg(JZMWebConst.SC12907, outputMap));
		searchErrList2.add(JZMWebCommon.getSearchErrFlg(JZMWebConst.SC12908, outputMap));
		
		for(int i = 0;i<searchErrList1.size();i++)
		{
			if(JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrList1.get(i)))
			{
				JZMWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0300_KW, MSG_WORK_PARAM);
				break;
			}
		}
		for(int i = 0;i<searchErrList2.size();i++)
		{
			if(JPCModelConstant.SEARCH_ERR_FLG_ZERO.equals(searchErrList2.get(i)))
			{
				JZMWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB0300_KW, MSG_WORK_KISEI);
				break;
			}
		}
		
	}

	/**
	 * 次画面表示用の業務規制予定時分をBeanにセットします。
	 * <br>
	 * @param bean データBean
	 */
	private void setDispWkKisei(X31SDataBeanAccess bean)
	{
		
		// 対応履歴を除く全業務規制予定時分
		StringBuffer sb1 = new StringBuffer();
		sb1.append(JZMWebCommon.getSendMessageString(bean, ZMW12501SFConst.WORK_KISEI_STA_RSV_JI))
			.append(JZMWebConst.KIGOU_2)
			.append(JZMWebCommon.getSendMessageString(bean, ZMW12501SFConst.WORK_KISEI_STA_RSV_HUN))
			.append(JZMWebConst.TWO_BYTE_BLANK)
			.append(JZMWebConst.KIGOU_1)
			.append(JZMWebConst.TWO_BYTE_BLANK)
			.append(JZMWebCommon.getSendMessageString(bean, ZMW12501SFConst.WORK_KISEI_END_RSV_JI))
			.append(JZMWebConst.KIGOU_2)
			.append(JZMWebCommon.getSendMessageString(bean, ZMW12501SFConst.WORK_KISEI_END_RSV_HUN));
		JZMWebCommon.setSendMessageString(bean, ZMW12501SFConst.WORK_KISEI_RSV_HM, sb1.toString());
		
		// 対応履歴業務規制予定時分
		StringBuffer sb2 = new StringBuffer();
		sb2.append(JZMWebCommon.getSendMessageString(bean, ZMW12501SFConst.CR_WORK_KISEI_STA_RSV_JI))
			.append(JZMWebConst.KIGOU_2)
			.append(JZMWebCommon.getSendMessageString(bean, ZMW12501SFConst.CR_WORK_KISEI_STA_RSV_HUN))
			.append(JZMWebConst.TWO_BYTE_BLANK)
			.append(JZMWebConst.KIGOU_1)
			.append(JZMWebConst.TWO_BYTE_BLANK)
			.append(JZMWebCommon.getSendMessageString(bean, ZMW12501SFConst.CR_WORK_KISEI_END_RSV_JI))
			.append(JZMWebConst.KIGOU_2)
			.append(JZMWebCommon.getSendMessageString(bean, ZMW12501SFConst.CR_WORK_KISEI_END_RSV_HUN));
		JZMWebCommon.setSendMessageString(bean, ZMW12501SFConst.CR_WORK_KISEI_RSV_HM, sb2.toString());
	}

}
