/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCCBusinessControl
*   ソースファイル名：JCCBusinessControl.java
*   作成者          ：富士通
*   日付            ：2011年05月07日
*＜機能概要＞
*  業務規制テーブルから業務規制一覧情報を取得してメモリに保存し、
*  業務規制定義ファイル情報と突き合わせリクエストを制御する機能を提供します。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v18.00.00   2015/08/11   FJ) 阪口   【ANK-2631-00-00】ワンストップ案件（ＳＴＥＰ１）※koptWebBからkoptWebAへコピー
*
**********************************************************************/

package eo.web.webview.commonOneStop;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.TreeMap;
import java.util.StringTokenizer;

import javax.servlet.http.HttpSession;

import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
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.X33CUtil;

import eo.common.util.JCCFrameworkException;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;


public class JCCBusinessControl
{
	/** 業務規制一覧:業務規制コード取得キー */
	public static final String KEY_WORK_KISEI_CD = "work_kisei_cd";
	
	/** 業務規制一覧:規制フラグ取得キー */
	public static final String KEY_KISEI_FLG = "kisei_flg";

	/** セッション格納キー */
	public static final String KEY_SESSION = "JCCBUSINESSCONTROL_RESTRICTION_LIST";	
		
	/** 呼出サービスID */
	protected static final String SERVICE_ID = "CCSV0002";
	
	/** 機能コードキー */
	protected static final String FUNC_CODE = "func_code";

	/** 検索結果取得キー */
	protected static final String KEY_RESULT = "CCSV000201SC";

	/** 業務規制一覧情報取得キー */
	protected static final String KEY_LIST = "ECC0051B010CBSMsg1List";
	
	/** 業務規制一覧:画面メッセージID取得キー */
	private static final String KEY_SCREEN_MSG_ID = "screen_msg_id";

	/** ブランク文字　*/
	private static final String STR_BLANK = "";

	/** 汎用フラグオン */
	private static final String FLG_ON = "1";
	
// 2012/05/25 業務規制前通知チェックで利用する定数追加 start
	/** 業務規制前通知のキー */
	private static final String KISEI_BF_TCH = "kisei_bf_tch";
	
	/** 規制前通知開始前分数 */
	private static final String KISEI_BF_TCH_STA_BF_HUNSU = "kisei_bf_tch_sta_bf_hunsu";
	
	/** 規制開始予定時分 */
	private static final String WORK_KISEI_STA_RSV_HM = "work_kisei_sta_rsv_hm";
	
	/** 規制終了予定時分 */
	private static final String WORK_KISEI_END_RSV_HM = "work_kisei_end_rsv_hm";
	
	/** 規制前通知画面メッセージID */
	private static final String KISEI_BF_TCH_SCREEN_MSG_ID = "kisei_bf_tch_screen_msg_id";
// 2012/05/25 業務規制前通知チェックで利用する定数追加 end

	/**
	 * 業務規制テーブルから取得した業務規制一覧情報をメモリに保存し、 <br>
	 * 業務規制定義ファイル情報と突き合わせ規制状態を取得します。 <br>
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 * @return 規制有無フラグ 業務規制あり:true なし:false
	 * @exception 	JCCFrameworkExceptionがスローされます。
	 */
	public boolean searchBusinessControl(JCCWebBusinessLogic vl) throws JCCFrameworkException
	{
		String gamenId = null;								// 画面ID
		String eventId = null;								// イベントID
		boolean kiseiUmuFlg = false;						// 規制有無フラグ
		HashMap<String, Object> lstMap = null;				// 検索結果格納用マップ
		HashMap<String, String> teigiMap = null;			// 規制定義ファイルの情報マップ
		TreeMap<String, String> treeTeigiMap = null;		// 規制定義ファイルの情報Treeマップ
		StringTokenizer stKeyToken = null;					// キー分割
		try
	    {
			//---------------------------------------
			// 入力パラメータチェック
			//---------------------------------------
			checkInputpParameter(vl);
	
			//---------------------------------------
			// リクエスト業務規制リストクリア
			//---------------------------------------
			crearRequestRestriction(vl);

			//---------------------------------------
			// 業務規制一覧情報取得
			//---------------------------------------
			lstMap = getRestrictionList(vl);
			if (0 == lstMap.size())
			{	
				return kiseiUmuFlg;
			}
			
// 2012/05/25 FST)arata 注意喚起の情報を取得し、注意喚起する場合はメッセージを設定する start
			ArrayList<String> kiseiBfCdList = kiseiBfCheck(vl, lstMap);
// 2012/05/25 FST)arata 注意喚起の情報を取得し、注意喚起する場合はメッセージを設定する end
	
			//---------------------------------------
			// 規制定義ファイルキャッシュ情報取得
			//---------------------------------------
			// キー情報取得
			gamenId = vl.getGamenId();
			eventId = vl.getSession().getViewParamId().getComponentID();
	
			// 規制定義情報マップ取得
			teigiMap = (HashMap<String, String>)getCacheValue(gamenId);
			if (null == teigiMap || 0 == teigiMap.size())
			{	
				return kiseiUmuFlg;
			}
			treeTeigiMap = new TreeMap<String, String>();
			treeTeigiMap.putAll(teigiMap);
			
			//---------------------------------------
			// 画面ID;イベントIDと一致するキーを探して
			// 、規制コードリストを取得。
			// 業務規制されているか判定する。
			// 業務規制されていれば画面へメッセージを返す。
			//---------------------------------------
			// 規制定義ファイルの情報を読み、キー数分繰り返し
			Iterator<String> itr = treeTeigiMap.keySet().iterator();
			while (itr.hasNext())
			{
				//---------------------------------------
				// キーの分割
				//---------------------------------------
				// 規制定義情報のキー取得
				String key = (String)itr.next();
// 2012/02/15 イベント番号がブランクの場合を考慮 start
				String[] keySplit = key.split(JCCWorkRestrictionCache.KEY_DELIMITERS);
				//stKeyToken = new StringTokenizer(key, JCCWorkRestrictionCache.KEY_DELIMITERS);
// キャッシュ部品でチェックしているためtreeTeigiMapにはキー項目数のデータしかないためチェック不要
//				if (stKeyToken.countTokens() != KEY_LIST_COUNT) {
//					continue;
//				}
	
				// 画面ID
				//stKeyToken.nextToken();
				// イベントID
				String key2 = keySplit[1];
				//String key2 = stKeyToken.nextToken();
//  2012/02/15 イベント番号がブランクの場合を考慮 end
				// キー2番目がイベントIDと一致するまで検索
				if (!eventId.equals(key2)) {
					continue;
				}
				
				// 規制コードリスト取得
				String value = (String)teigiMap.get(key);
				//---------------------------------------
				// 規制状態判定
				//---------------------------------------
				kiseiUmuFlg = judgeStatus(vl, lstMap, value, kiseiBfCdList);
				break;
			}
			// 規制ありの場合、呼出画面へ戻す
			if (kiseiUmuFlg)
			{
				// 2012/02/15 バックヤード、フロント、量販で規制ありの振舞いの変更 start
				 // バックヤード／フロントの判定用文字列を取得
		        String targetSystem = JCCWebCommon.getApplicationConst("TARGET_SYSTEM");
		        // バックヤードの場合は呼び出し画面へ戻す。
		        if ("FRONT".equals(targetSystem) || "RYOHAN".equals(targetSystem) || "MOBILE".equals(targetSystem))
		    	{
		        	// 共有フォームBeanを取得する。
		    		X31SDataBeanAccess commonbean = vl.getCommonInfoBean();
		    		// 共有フォームBeanからMESSAGE_LISTデータタイプBeanを取得する。
		    		X31SDataBeanAccessArray commonBeanArray = commonbean.getDataBeanArray(CommonInfoCFConst.MESSAGES_LIST);
		    		X31SDataBeanAccess msgOne = commonBeanArray.getDataBean(0);
		    		String msg = msgOne.sendMessageString(CommonInfoCFConst.MESSAGE_ID_02, X31CWebConst.DATABEAN_GET_VALUE).trim();
		    		HttpSession session = X33CUtil.getSession(vl.getSession().getViewParamId().getSessionID()).getSession();
		    		// 業務規制チェックメッセージＩＤをセッションへ格納
		    		session.setAttribute("業務規制チェックメッセージＩＤ", msg);
		    	}
		        else if("BACKYARD".equals(targetSystem))
		        {
		        	setMessageInfo(vl);
		        }
		        // 2012/02/15 バックヤード、フロント、量販で規制ありの振舞いの変更 end
			}
			 return kiseiUmuFlg;
	    }
	    finally
	    {

// 2011/09/12 業務規制テーブルから取得できたタイミングでセッションに格納する。 start
			//--------------------------------	 
			// セッション格納処理
			//--------------------------------	 
			 setSessionObject(vl, lstMap);
// 2011/09/12 業務規制テーブルから取得できたタイミングでセッションに格納する。 end
			 
			lstMap = null;
			teigiMap = null;
			treeTeigiMap = null;
			stKeyToken = null;
	    }
	}
	
	/**
	 * 入力パラメータチェックをする処理です。
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 * @exception 	JCCFrameworkExceptionがスローされます。
	 */
	protected void checkInputpParameter(JCCWebBusinessLogic vl) throws JCCFrameworkException
	{
	    if (null == vl)
	    {
			throw new JCCFrameworkException("VIEWロジックインスタンスが設定されていません。");
		}
	}

	/**
	 * 共有フォームBeanクリア処理<BR>
	 * 共有フォームBeanより リクエスト業務規制リストをクリアします。
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 */
	protected void crearRequestRestriction(JCCWebBusinessLogic vl)
	{
		
		X31SDataBeanAccess commonbean = null;
		X31SDataBeanAccessArray commonBeanArray = null;
		try
		{
			// ------------------------------
			// リクエスト業務規制リストクリア
			// ------------------------------
			// 共有フォームBeanを取得する。
			commonbean = vl.getCommonInfoBean();
			// 共有フォームBeanからREQUEST_RESTRICTION_LISTデータタイプBeanを取得する。
			commonBeanArray = commonbean.getDataBeanArray(CommonInfoCFConst.REQUEST_RESTRICTION_LIST);
			// データをクリアする。
			commonBeanArray.clearArray();

		}
		finally
		{
			commonbean = null;
			commonBeanArray = null;
		}	
	}

	/**
	 * 規制情報一覧照会サービスを呼出し、規制情報一覧を取得します。
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 * @return 検索結果格納マップ
	 * @exception 	JCCFrameworkExceptionがスローされます。
	 */
	protected HashMap<String, Object> getRestrictionList(JCCWebBusinessLogic vl) throws JCCFrameworkException
	{
		HashMap<String, String> paramMap = null;			// ユースケースID格納用マップ
		HashMap<String, Object> inputMap = null;			// 設定値格納用マップ
		HashMap<String, Object> outputMap = null;			// 検索結果格納用マップ
		HashMap<String, Object> lstMap = null;				// 検索結果格納用マップ(戻り値) 
		HashMap<String, Object> parentMap = null;			// 機能コード格納用マップ
		try
	    {
			//--------------------------------	 
			// パラメータ生成
			//--------------------------------	 
			// ユースケースID格納用マップ
			paramMap = new HashMap<String, String>();
			// 設定値格納用マップ
			inputMap = new HashMap<String, Object>();
			// 検索結果格納用マップ
			outputMap = new HashMap<String, Object>();
			// 検索結果格納用マップ(戻り値)
			lstMap = new HashMap<String, Object>();
			// 機能コード格納用マップ
			parentMap = new HashMap<String, Object>();
			
			//--------------------------------	 
			// パラメータ設定
			//--------------------------------	 
			// ユースケースID格納
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SERVICE_ID);
			// 機能コード設定
			parentMap.put(FUNC_CODE, "1");
			inputMap.put(KEY_RESULT, parentMap);

			//--------------------------------	 
			// サービス設定
			//--------------------------------	 
			vl.invokeService(paramMap, inputMap, outputMap);
			
			//--------------------------------	 
			// 検索結果設定
			//--------------------------------
			convertMap(outputMap, lstMap);
			return lstMap;
		}
	    catch (Exception e)
	    {
			throw new JCCFrameworkException("業務規制一覧情報の取得に失敗しました。", e);
		}
	    finally
	    {
			paramMap = null;
			inputMap = null;
			outputMap = null;
			parentMap = null;
	    }
	}

	/**
	 * 画面IDをキーに規制定義ファイルキャッシュされたマップ情報を取得します。
	 * <br>
	 * @param gamenID 画面I
	 * @return 規制定義ファイルマップ情報(オンライン用)
	 * @exception JCCFrameworkExceptionがスローされます。
	 */
	protected Map<String, String> getCacheValue(String gamenId) throws JCCFrameworkException
	{
		try
	    {
			// 規制定義情報マップ値
			Map<String, String> map = null;
			// 規制定義ファイルキャッシュ情報パス設定
			JCCWorkRestrictionCache.setPath(JCCWorkRestrictionCache.FUNC_MODE_ONLINE);
			// 規制定義ファイル情報変換後マップ取得
			map = JCCWorkRestrictionCache.getMap(gamenId);
			return map;
		}
	    catch (Exception e)
	    {
			throw new JCCFrameworkException("規制定義ファイルキャッシュ情報の取得に失敗しました。", e);
		}
	}
	/**
	 * 業務規制コードリストの規制コードを1件ずつ、業務規制一覧マップから情報を取得して、<BR>
	 * 規制状態判定をします。規制状態であればメッセージを共有フォームBeanに設定します。
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 * @param lstMap 業務規制一覧マップ
	 * @param kiseiCdLst 規制コードリスト
	 * @param kiseiBfCdList 規制通知コードリスト
	 * @return 規制状態有無 true:規制あり false:規制なし
	 * @exception 	JCCFrameworkExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private boolean judgeStatus(JCCWebBusinessLogic vl, Map<String, Object> lstMap, String kiseiCdLst, ArrayList<String> kiseiBfCdList) throws JCCFrameworkException
	{
		JCCSetMessage msg = null;					// メッセージ設定部品
		StringTokenizer stToken = null;				// 業務規制コード分割
		HashMap<String, String> recMap = null;		// 業務規制一覧レコード情報
		boolean kiseiUmuFlg = false;				// 規制有無フラグ
		try
		{
			//--------------------------------	 
			// 業務規制コードリストチェック
			//--------------------------------	 
			// 業務規制コード設定なし
			if (null == kiseiCdLst || STR_BLANK.equals(kiseiCdLst.trim())) 
			{
				// 規制状態有無フラグ
				return kiseiUmuFlg;
			}
			
			//--------------------------------	 
			// 業務規制コード判定(繰り返し)
			//--------------------------------	 
			// 業務規制コード分割
			stToken = new StringTokenizer(kiseiCdLst, JCCWorkRestrictionCache.VAL_DELIMITERS);
	
			// メッセージ設定用
			msg = new JCCSetMessage();
	
			while(stToken.hasMoreTokens())
			{
				// 業務規制コードを1件取得
				String target = stToken.nextToken();
				// 業務規制一覧情報より業務規制コードの情報(マップ)を取得する
				if (!lstMap.containsKey(target))
				{
					continue;
				}
				// 
				recMap = (HashMap<String, String>)lstMap.get(target);
				
				// 業務規制コードの規制フラグを取得する。
				String kiseiFlg = recMap.get(KEY_KISEI_FLG);
				if (null == kiseiFlg || STR_BLANK.equals(kiseiFlg.trim()))
				{
					continue;
				}
				// 規制フラグ = 1(規制中)の場合
				if (FLG_ON.equals(kiseiFlg))
				{
					if(kiseiBfCdList.contains(target))
					{
						kiseiUmuFlg = true;
						continue;
					}
					// 画面メッセージID取得
					String messageId = recMap.get(KEY_SCREEN_MSG_ID);
// 2012/05/22 FST)arata 置換文字列がある場合、置換文字を設定する start
					String[] rep = new String[2];
					// 業務規制開始予定時分
					if(recMap.get(WORK_KISEI_STA_RSV_HM) != null && !"".equals(recMap.get(WORK_KISEI_STA_RSV_HM))){
						rep[0] = timeChange(recMap.get(WORK_KISEI_STA_RSV_HM));
					}
					else
					{
						rep[0] = "";
					}
					// 業務規制終了予定時分
					if(recMap.get(WORK_KISEI_END_RSV_HM) != null && !"".equals(recMap.get(WORK_KISEI_END_RSV_HM))){
						rep[1] = timeChange(recMap.get(WORK_KISEI_END_RSV_HM));
					}
					else
					{
						rep[1] = "";
					}
					// メッセージ設定部品)のsetMessageInfoを利用して共有フォームBeanにメッセージを設定する。
					msg.setMessageInfo(vl, messageId, rep);
					msg.setMessageAreaBackColor(vl, "1");
// 2012/05/22 FST)arata 置換文字列がある場合、置換文字を設定する
					// 規制フラグ = 1(規制中)のものがある
					kiseiUmuFlg = true;
				}
			}
			// 規制状態有無フラグ
			return kiseiUmuFlg;
		}
		finally
		{
			msg = null;
			stToken = null;
			recMap = null;
		}	
	}

// 2012/05/22 FST)arata 業務規制時、元画面に戻す対応 start
	/**
	 * バックヤードの業務規制時に元画面へメッセージを表示する処理を行う
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 */
	private void setMessageInfo(JCCWebBusinessLogic vl)
	{
		HttpSession session = X33CUtil.getSession(vl.getSession().getViewParamId().getSessionID()).getSession();
		// 業務規制チェックメッセージＩＤリストをセッションへ格納
		session.setAttribute("業務規制チェックメッセージＩＤリスト", "1");
		
	}
// 2012/05/22 FST)arata 業務規制時、元画面に戻す対応 end

	/**
	 * 入力されたマップを規制情報一覧照会情報としてセッションに格納する処理です。
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 * @param map 格納対象マップ
	 */
	private void setSessionObject(JCCWebBusinessLogic vl, Map<String, Object> map)
	{
		 // 入力マップをセッションに格納する。
		 vl.setSessionObject(KEY_SESSION, map);
	}

	/**
	 * 規制情報一覧照会サービスの検索結果を取得して、一覧情報だけ検索結果格納マップに設定します。
	 * <br>
	 * @param 規制情報一覧照会サービスの検索結果
	 * @param 検索結果格納マップ
	 * @exception 	JCCFrameworkExceptionがスローされます。
	 */
	@SuppressWarnings("unchecked")
	private void convertMap(HashMap<String, Object> inMap, HashMap<String, Object> lstMap)
	{
		Iterator<HashMap<String, String>> itr = null;
		List<HashMap<String,String>> workList = null;		// ワーク用リスト
		HashMap<String, Object> workMap = null;				// ワーク用マップ
		try
		{
			// 業務規制一覧照会マップ取得(キー:"CCSV000201SC")
			workMap = (HashMap<String, Object>)inMap.get(KEY_RESULT);
	
			// 業務規制一覧情報取得(キー:"CC0051B010CBSMsg1List")
			workList = (List<HashMap<String,String>>)workMap.get(KEY_LIST);
			if (0 == workList.size()) {
				return;
			}
	
			// 業務規制一覧情報をListからMapに置き換え。
			itr = workList.iterator();
			while (itr.hasNext())
			{
				// 業務規制一覧情報の1レコード情報マップ取得
				HashMap<String, String> recMap = (HashMap<String, String>)itr.next();
				// 検索結果格納用マップ(戻り値)に設定
				lstMap.put(recMap.get(KEY_WORK_KISEI_CD), recMap);
			}
			return;
		}	
		finally
		{
			itr = null;
			workList = null;
			workMap = null;	
		}	
	}
	
// 2012/05/25 FST)arata 注意喚起の情報を取得し、注意喚起する場合はメッセージを設定する start
	/**
	 * 注意喚起の情報を取得し、注意喚起する場合はメッセージを設定します。
	 * <br>
	 * @param vl VIEWロジックインスタンス
	 * @param 検索結果格納マップ
	 * @exception 	JCCFrameworkExceptionがスローされます。
	 */
	private ArrayList<String> kiseiBfCheck(JCCWebBusinessLogic vl, HashMap<String, Object> lstMap)
	{
		// 注意喚起対象の業務規制コードを保持
		ArrayList<String> kiseiCdList = new ArrayList<String>();
		// バックヤード／フロントの判定用文字列を取得
		String targetSystem = JCCWebCommon.getApplicationConst("TARGET_SYSTEM");
		// バックヤードの場合は呼び出し画面へ戻す。
		if ("BACKYARD".equals(targetSystem))
		{
			// 規制定義情報マップ取得(キーは業務規制前通知のキー)
			HashMap<String, String> kiseiBfMap = (HashMap<String, String>)getCacheValue(KISEI_BF_TCH);
			if (null == kiseiBfMap || 0 == kiseiBfMap.size())
			{
				return kiseiCdList;
			}
			// メッセージ設定用
			JCCSetMessage msg = new JCCSetMessage();
			// 規制定義ファイルの情報を読み、キー数分繰り返し
			Iterator<String> kiseiBfItr = kiseiBfMap.keySet().iterator();
			while (kiseiBfItr.hasNext())
			{
				// 規制定義情報のキー取得
				String key = (String)kiseiBfItr.next();
				StringTokenizer stToken = new StringTokenizer(kiseiBfMap.get(key), JCCWorkRestrictionCache.VAL_DELIMITERS);
				
				while(stToken.hasMoreTokens())
				{
					// 業務規制コードを1件取得
					String target = stToken.nextToken();
					// 業務規制一覧情報より業務規制コードの情報(マップ)を取得する
					if (!lstMap.containsKey(target))
					{
						continue;
					}
					
					HashMap<String, String> recMap = (HashMap<String, String>)lstMap.get(target);
					
					// 業務規制コードの規制フラグを取得する。
					String kiseiFlg = recMap.get(KEY_KISEI_FLG);
					if (null == kiseiFlg || STR_BLANK.equals(kiseiFlg.trim()))
					{
						continue;
					}
					// 業務規制コードの規制前通知開始前分数を取得する。
					String kiseiBfTchBfHunsu = recMap.get(KISEI_BF_TCH_STA_BF_HUNSU);
					if (null == kiseiBfTchBfHunsu || STR_BLANK.equals(kiseiBfTchBfHunsu.trim()))
					{
						continue;
					}
					// 業務規制コードの業務規制開始予定時分を取得する。
					String workKiseiStaRsvHm = recMap.get(WORK_KISEI_STA_RSV_HM);
					if (null == workKiseiStaRsvHm || STR_BLANK.equals(workKiseiStaRsvHm.trim()))
					{
						continue;
					}
					// 業務規制コードの業務規制終了予定時分を取得する。
					String workKiseiEndRsvHm = recMap.get(WORK_KISEI_END_RSV_HM);
					if (null == workKiseiEndRsvHm || STR_BLANK.equals(workKiseiEndRsvHm.trim()))
					{
						continue;
					}
					// システム日時取得
					String sysDate = JCCWebCommon.getSysDateTime();
					Calendar calender = Calendar.getInstance();
					calender.set(Integer.parseInt(sysDate.substring(0,4)), Integer.parseInt(sysDate.substring(4,6))-1, 
							Integer.parseInt(sysDate.substring(6,8)), Integer.parseInt(sysDate.substring(8,10)), Integer.parseInt(sysDate.substring(10,12)));
					
					// 業務規制開始予定時分の日時取得-規制前通知開始前分数を加算
					Calendar calender1 = Calendar.getInstance();
					calender1.set(Integer.parseInt(sysDate.substring(0,4)), Integer.parseInt(sysDate.substring(4,6))-1, 
							Integer.parseInt(sysDate.substring(6,8)), Integer.parseInt(workKiseiStaRsvHm.substring(0,2)), 
							Integer.parseInt(workKiseiStaRsvHm.substring(2,4)),00);
					calender1.add(Calendar.MINUTE, -Integer.parseInt(kiseiBfTchBfHunsu));
					
					// 業務規制終了予定時分の日時取得
					Calendar calender2 = Calendar.getInstance();
					calender2.set(Integer.parseInt(sysDate.substring(0,4)), Integer.parseInt(sysDate.substring(4,6))-1, 
							Integer.parseInt(sysDate.substring(6,8)), Integer.parseInt(workKiseiEndRsvHm.substring(0,2)), 
							Integer.parseInt(workKiseiEndRsvHm.substring(2,4)),00);
					
					// 規制コードを格納
					kiseiCdList.add(target);
					
					// システム日時が業務規制開始予定時分-規制前通知時間よりも大きい場合、
					// かつ、システム日付が業務規制終了予定時分より小さい
					// メッセージを設定する
					if("0".equals(kiseiFlg))
					{
						// 開始時分が終了時分より小さい場合
						if(calender1.get(Calendar.HOUR_OF_DAY)<=calender2.get(Calendar.HOUR_OF_DAY)){
							
							// 開始時>システム日付 または 終了時<システム日付
							if(calender1.get(Calendar.HOUR_OF_DAY)>calender.get(Calendar.HOUR_OF_DAY)
									|| calender2.get(Calendar.HOUR_OF_DAY)<calender.get(Calendar.HOUR_OF_DAY))
							{
								continue;
							}
							if(calender1.get(Calendar.HOUR_OF_DAY)==calender.get(Calendar.HOUR_OF_DAY))
							{
								// 開始分>システム分
								if(calender1.get(Calendar.MINUTE)>calender.get(Calendar.MINUTE))
								{
									continue;
								}
							}
							else if(calender2.get(Calendar.HOUR_OF_DAY)==calender.get(Calendar.HOUR_OF_DAY))
							{
								// 終了分<=システム分
								if(calender2.get(Calendar.MINUTE)<=calender.get(Calendar.MINUTE))
								{
									continue;
								}
							}
						}
						else
						{
						// 開始時分が終了時分より大きい場合
							// 開始時>システム日付かつ終了時<システム日付
							if(calender1.get(Calendar.HOUR_OF_DAY)>calender.get(Calendar.HOUR_OF_DAY)
									&& calender2.get(Calendar.HOUR_OF_DAY)<calender.get(Calendar.HOUR_OF_DAY))
							{
								continue;
							}
							if(calender1.get(Calendar.HOUR_OF_DAY)==calender.get(Calendar.HOUR_OF_DAY))
							{
								// 開始分>システム分
								if(calender1.get(Calendar.MINUTE)>calender.get(Calendar.MINUTE))
								{
									continue;
								}
							}
							else if(calender2.get(Calendar.HOUR_OF_DAY)==calender.get(Calendar.HOUR_OF_DAY))
							{
								// 終了分<=システム分
								if(calender2.get(Calendar.MINUTE)<=calender.get(Calendar.MINUTE))
								{
									continue;
								}
							}
						}
						// 規制前通知画面メッセージID取得
						String messageId = recMap.get(KISEI_BF_TCH_SCREEN_MSG_ID);
						String[] rep = new String[2];
						// 業務規制開始予定時分
						rep[0] = timeChange(workKiseiStaRsvHm);
						// 業務規制終了予定時分
						rep[1] = timeChange(workKiseiEndRsvHm);
						// メッセージ設定部品のsetMessageInfoを利用して共有フォームBeanにメッセージを設定する。
						msg.setMessageInfo(vl, messageId, rep);
						msg.setMessageAreaBackColor(vl, "1");
					}
					
					else if("1".equals(kiseiFlg))
					{
						// 画面メッセージID取得
						String messageId = recMap.get(KEY_SCREEN_MSG_ID);
						String[] rep = new String[2];
						// 規制開始予定時分
						rep[0] = timeChange(workKiseiStaRsvHm);
						// 規制終了予定時分
						rep[1] = timeChange(workKiseiEndRsvHm);
						// メッセージ設定部品のsetMessageInfoを利用して共有フォームBeanにメッセージを設定する。
						msg.setMessageInfo(vl, messageId, rep);
						msg.setMessageAreaBackColor(vl, "1");
					}
				}
			}
		}
		return kiseiCdList;
	}
	
	/**
	 * 注意喚起の情報を取得し、注意喚起する場合はメッセージを設定します。
	 * <br>
	 * @param time 4桁の時間（hhmm）
	 * @retrun 5桁の時間（hh:mm）
	 */
	private String timeChange(String time){
		if(time.length() == 4)
		{
			StringBuffer timeBuf = new StringBuffer();
			timeBuf.append(time.substring(0, 2));
			timeBuf.append(":");
			timeBuf.append(time.substring(2,4));
			return timeBuf.toString();
		}
		else
		{
			return time;
		}
	}
// 2012/05/25 FST)arata 注意喚起の情報を取得し、注意喚起する場合はメッセージを設定する end 
}
