/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom  					 *
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JCHbatParamUtil
 *	ソースファイル名	：JCHbatParamUtil.java
 *	作成者				：富士通　
 *	作成日				：2011年06月07日
 *＜機能概要＞
 *　パラメータ取得部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/06/07   富士通		新規作成
 *  v13.00.00   2015/03/03   FJ)寺園    ANK-2416-00-00_請求書のハガキ化対応
 *********************************************************************/
package eo.business.common;

import java.util.HashMap;

import eo.business.util.table.JBSbatZM_M_SYS_PARAM_KNRI;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JPCUtilCommon;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;

/**
 * パラメータ取得部品です。
 * <p>
 *<BR>
 * 
 * @author 富士通
 */
public class JACbatParamUtil
{

	/** バッチ共通パラメータ */
	private JBSbatCommonItem commonItem = null;

	/** テーブルアクセスクラス(システムパラメータ管理) */
	private JBSbatSQLAccess db_ZM_M_SYS_PARAM_KNRI = null;

	/** テーブルアクセスクラス(業務パラメータ管理) */
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;
	
	/** SQL定義キー(CH_SELECT_002)*/
	private static final String ZM_M_WORK_PARAM_KNRI_CH_SELECT_002 = "CH_SELECT_002";

	/**
	 * コンストラクタ
	 * 
	 * @param commonItem バッチ共通パラメータ
	 */
	public JACbatParamUtil(JBSbatCommonItem commonItem)
	{
		this.commonItem = commonItem;
	}

	/**
	 * 指定された分類コード、パラメータIDに対応する設定値を文字列で取得します。
	 * 
	 * @param bunruiCd 分類コード
	 * @param id パラメータID
	 * @return 設定値
	 * @throws Exception 取得に失敗した場合
	 */
	public String getSystemParameter(String bunruiCd, String id) throws Exception
	{
		if (db_ZM_M_SYS_PARAM_KNRI == null)
		{
			db_ZM_M_SYS_PARAM_KNRI = new JBSbatSQLAccess(commonItem, JBSbatZM_M_SYS_PARAM_KNRI.TABLE_NAME);
		}

		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SYS_PARAM_BUNRUI_CD", bunruiCd);
		whereMap.setValue("SYS_PARAM_ID", id);

		// DBアクセスを実行します
		JBSbatCommonDBInterface commonDBInterface = db_ZM_M_SYS_PARAM_KNRI.selectByPrimaryKeys(whereMap);

		// 取得結果判定
		if (commonDBInterface == null)
		{

			// マスタ未存在エラー
			String[] msgParam = new String[]
			{ JBSbatZM_M_SYS_PARAM_KNRI.TABLE_NAME, JPCUtilCommon.convMapToString(whereMap.getMap()) };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
		}

		return commonDBInterface.getString(JBSbatZM_M_SYS_PARAM_KNRI.SYS_PARAM_SETTE_VALUE_1);
	}
	
	/**
	 * 指定されたパラメータIDに対応する設定値を文字列で取得します。
	 * 
	 * @param id パラメータID
	 * @return 設定値
	 * @throws Exception 取得に失敗した場合
	 */
	public String getGyoumuParameter(String id) throws Exception
	{
		if (db_ZM_M_WORK_PARAM_KNRI == null)
		{
			db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, JBSbatZM_M_WORK_PARAM_KNRI.TABLE_NAME);
		}

		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("WORK_PARAM_ID", id);

		// DBアクセスを実行します
		JBSbatCommonDBInterface commonDBInterface = db_ZM_M_WORK_PARAM_KNRI.selectByPrimaryKeys(whereMap);

		// 取得結果判定
		if (commonDBInterface == null)
		{

			// マスタ未存在エラー
			String[] msgParam = new String[]
			{ JBSbatZM_M_WORK_PARAM_KNRI.TABLE_NAME, JPCUtilCommon.convMapToString(whereMap.getMap()) };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
		}

		return commonDBInterface.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);
	}

// v13.00.00 ADD START
	/**
	 * 指定されたパラメータIDに対応する設定値を文字列で取得します。（エラー判定なし）
	 * 
	 * @param id パラメータID
	 * @return 設定値
	 * @throws Exception 取得に失敗した場合
	 */
	public String getGyoumuParameter2(String id) throws Exception
	{
		if (db_ZM_M_WORK_PARAM_KNRI == null)
		{
			db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, JBSbatZM_M_WORK_PARAM_KNRI.TABLE_NAME);
		}

		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("WORK_PARAM_ID", id);

		// DBアクセスを実行します
		JBSbatCommonDBInterface commonDBInterface = db_ZM_M_WORK_PARAM_KNRI.selectByPrimaryKeys(whereMap);

		// 取得結果判定
		if (commonDBInterface == null)
		{
			return null;
		}

		return commonDBInterface.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);
	}
// v13.00.00 ADD END
	
	/**
	 * 指定されたパラメータID（前方一致）に対応するパラメータID・設定値をマップで取得します。
	 * 
	 * @param id パラメータID
	 * @param opeDate バッチ運用日
	 * @return key：業務パラメータID　value：業務設定値　設定マップ
	 * @throws Exception 取得に失敗した場合
	 */
	public HashMap<String, String> getGyoumuParameterMap(String id, String opeDate) throws Exception
	{
		if (db_ZM_M_WORK_PARAM_KNRI == null)
		{
			db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, JBSbatZM_M_WORK_PARAM_KNRI.TABLE_NAME);
		}

		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue(id);			// 業務パラメータID
		whereMap.setValue(opeDate);		// 業務パラメータ適用開始年月日
		whereMap.setValue(opeDate);		// 業務パラメータ適用終了年月日
		// DBアクセスを実行します
		db_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(whereMap, ZM_M_WORK_PARAM_KNRI_CH_SELECT_002);
		JBSbatCommonDBInterface commonDBInterface = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		// 取得結果判定
		if (commonDBInterface == null)
		{

			// マスタ未存在エラー
			String[] msgParam = new String[]
			{ JBSbatZM_M_WORK_PARAM_KNRI.TABLE_NAME, whereMap.getList().toString() };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
		}
		
		// 業務パラメータマップ作成
		HashMap<String, String> workParamMap = new HashMap<String, String>();
		while(commonDBInterface != null)
		{
			workParamMap.put(commonDBInterface.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_ID), commonDBInterface.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE));
			commonDBInterface = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		}

		return workParamMap;
	}
	
	/**
	 * 指定されたパラメータID（前方一致）に対応するパラメータID・設定値をマップで取得します。
	 * 
	 * @param id パラメータID
	 * @param opeDate バッチ運用日
	 * @return key：業務パラメータID　value：業務設定値　設定マップ
	 * @throws Exception 例外全般
	 */
	public HashMap<String, String> getGyoumuParameterMap2(String id, String opeDate) throws Exception
	{
		if (db_ZM_M_WORK_PARAM_KNRI == null)
		{
			db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, JBSbatZM_M_WORK_PARAM_KNRI.TABLE_NAME);
		}

		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue(id);			// 業務パラメータID
		whereMap.setValue(opeDate);		// 業務パラメータ適用開始年月日
		whereMap.setValue(opeDate);		// 業務パラメータ適用終了年月日
		// DBアクセスを実行します
		db_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(whereMap, ZM_M_WORK_PARAM_KNRI_CH_SELECT_002);
		JBSbatCommonDBInterface commonDBInterface = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		// 業務パラメータマップ作成
		HashMap<String, String> workParamMap = new HashMap<String, String>();
		while(commonDBInterface != null)
		{
			workParamMap.put(commonDBInterface.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_ID), commonDBInterface.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE));
			commonDBInterface = db_ZM_M_WORK_PARAM_KNRI.selectNext();
		}

		return workParamMap;
	}
	
	/**
	 * テーブルアクセスクラスをクローズします。
	 * 
	 * @throws Exception 例外が発生した場合
	 */
	public void close() throws Exception
	{

		// システムパラメータ管理
		if (db_ZM_M_SYS_PARAM_KNRI != null)
		{
			db_ZM_M_SYS_PARAM_KNRI.close();
		}

		// 業務パラメータ管理
		if (db_ZM_M_WORK_PARAM_KNRI != null)
		{
			db_ZM_M_WORK_PARAM_KNRI.close();
		}
	}
}
