/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JKKBatOutputUtil
*	ソースファイル名	：JKKBatOutputUtil.java
*	作成者				：富士通　
*	作成日				：2011年05月16日
*＜機能概要＞
*	名称を取得部品。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/05/16   富士通		新規作成
*********************************************************************/
package eo.business.common;

import eo.business.util.table.JBSbatKK_M_PCRS;
import eo.business.util.table.JBSbatKK_M_PRC_GRP;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.log.JBSbatLogPrintControl;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* <dd>クラス名		：名称取得部品
* <dd>クラス説明	：名称を取得する。
* @version  	1.00 2011/05/16
* @author 富士通
*/
public class JKKBatNameStkuUtil
{

	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** テーブル(料金グループ)*/
	private static final String D_TBL_NAME_KK_M_PRC_GRP = "KK_M_PRC_GRP";

	/** テーブル(料金コース)*/
	private static final String D_TBL_NAME_KK_M_PCRS = "KK_M_PCRS";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String ZM_M_CD_NM_KANRI_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_PRC_GRP_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String KK_M_PCRS_KK_SELECT_001 = "KK_SELECT_001";
	
	/**
	 * コード区分名称取得
	 * コード名称管理からコード区分名を取得する。
	 * @param cmnItem 共通電文クラス
	 * @param cdSbtCd コード種別コード
	 * @param cdDiv コード区分
	 * @return cdDivNm コード区分名
	 * @throws Exception
	 */
	public static String getCdDivName(JBSbatCommonItem cmnItem, String cdSbtCd, String cdDiv) throws Exception 
	{
		// コード区分名
		String cdDivNm = "";
		
		// 共通電文クラスがnullの場合
		if(cmnItem == null)
		{
			return cdDivNm;
		}
		
		// ログ部品の取得
		JBSbatLogPrintControl log = cmnItem.getLogPrint();
		log.printDebugLog("コード区分名称取得処理を行います。");
		
		// コード種別コード、コード区分が空文字の場合
		if("".equals(JBSbatStringUtil.Rtrim(cdSbtCd)) ||
			"".equals(JBSbatStringUtil.Rtrim(cdDiv)))
		{
			log.printDebugLog("入力パラメータが正しくありません。");
			return cdDivNm;
		}
		
		try
		{
			// 実行結果を取得する
			JBSbatCommonDBInterface nmKanriMap = getNmKanriMap(cmnItem, cdSbtCd, cdDiv);
			
			// レコードが取得できた場合
			if(nmKanriMap != null)
			{
				// 取得したコード区分名を設定する
				cdDivNm = JBSbatStringUtil.Rtrim(nmKanriMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM));
			}
			
			log.printDebugLog("返却するコード区分名称：" + cdDivNm);
			log.printDebugLog("コード区分名称取得処理が終了しました。");
			return cdDivNm;
		}
		catch(Exception e) 
		{
			throw e;
		}
	}
	
	/**
	 * コード区分名称（略称）取得
	 * コード名称管理からコード区分略称を取得する。
	 * @param cmnItem 共通電文クラス
	 * @param cdSbtCd コード種別コード
	 * @param cdDiv コード区分
	 * @return cdDivAli コード区分略称
	 * @throws Exception
	 */
	public static String getCdDivAliName(JBSbatCommonItem cmnItem, String cdSbtCd, String cdDiv) throws Exception 
	{
		// コード区分略称
		String cdDivAli = "";
		
		// 共通電文クラスがnullの場合
		if(cmnItem == null)
		{
			return cdDivAli;
		}
		
		// ログ部品の取得
		JBSbatLogPrintControl log = cmnItem.getLogPrint();
		log.printDebugLog("コード区分名称（略称）取得処理を行います。");
		
		
		// コード種別コード、コード区分が空文字の場合
		if("".equals(JBSbatStringUtil.Rtrim(cdSbtCd)) ||
			"".equals(JBSbatStringUtil.Rtrim(cdDiv)))
		{
			log.printDebugLog("入力パラメータが正しくありません。");
			return cdDivAli;
		}
		
		try
		{
			// 実行結果を取得する
			JBSbatCommonDBInterface nmKanriMap = getNmKanriMap(cmnItem, cdSbtCd, cdDiv);
			
			// レコードが取得できた場合
			if(nmKanriMap != null)
			{
				// 取得したコード区分略称を設定する
				cdDivAli = JBSbatStringUtil.Rtrim(nmKanriMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_ALI));
			}
			
			log.printDebugLog("返却するコード区分略称：" + cdDivAli);
			log.printDebugLog("コード区分名称（略称）取得処理が終了しました。");
			return cdDivAli;
		} 
		catch(Exception e) 
		{
			throw e;
		}
	}
	
	/**
	 * コード名称管理ＤＢアクセス処理
	 * コード種別コードとコード区分を元に、コード名称管理よりコード区分名、コード区分略称を取得する。
	 * @param cmnItem 共通電文クラス
	 * @param cdSbtCd コード種別コード
	 * @param cdDiv コード区分
	 * @return nmKanriMap コード名称管理Map
	 * @throws Exception
	 */
	private static JBSbatCommonDBInterface getNmKanriMap(JBSbatCommonItem cmnItem, String cdSbtCd, String cdDiv) throws Exception 
	{
		// ログ部品の取得
		JBSbatLogPrintControl log = cmnItem.getLogPrint();
		log.printDebugLog("コード名称管理ＤＢアクセス処理を行います。");
		
		// テーブルアクセスクラス(コード名称管理)
		JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;
		
		try 
		{
			// テーブルアクセスクラス(コード名称管理)を取得する
			db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(cmnItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
			// バインド変数設定クラス
			JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
			// コード種別コードを設定する
			paramList.setValue(cdSbtCd);
			// コード区分を設定する
			paramList.setValue(cdDiv);
			// 運用年月日を設定する
			paramList.setValue(cmnItem.getOpeDate());
			// 運用年月日を設定する
			paramList.setValue(cmnItem.getOpeDate());
			// DBアクセスを実行します
			db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_KK_SELECT_001);
			
			log.printDebugLog("コード名称管理ＤＢアクセス処理が終了しました。");
			return db_ZM_M_CD_NM_KANRI.selectNext();
		} 
		catch(Exception e) 
		{
			//例外メッセージの取得
			String message = e.getMessage();
			log.printDebugLog("システムエラーが発生しました。（" + message + "）");
			throw e;
		}
		finally
		{
			if(db_ZM_M_CD_NM_KANRI != null)
			{
				db_ZM_M_CD_NM_KANRI.close();
			}
		}
	}
	
	/**
	 * サービス契約名取得
	 * 料金グループから料金グループ名を取得し、料金コースから料金コース名を取得する。
	 * 取得した料金グループ名と料金コース名を連結して返却する。
	 * @param cmnItem 共通電文クラス
	 * @param prcGrpCd 料金グループコード
	 * @param pcrsCd 料金コースコード
	 * @return svcKeiNm サービス契約名
	 * @throws Exception
	 */
	public static String getSvcName(JBSbatCommonItem cmnItem, String prcGrpCd, String pcrsCd) throws Exception 
	{
		// サービス契約名
		String svcKeiNm = "";
		// 料金グループ名
		String prcGrpNm = "";
		// 料金コース名
		String pcrsNm = "";
		// テーブルアクセスクラス(料金グループ)
		JBSbatSQLAccess db_KK_M_PRC_GRP = null;
		// テーブルアクセスクラス(料金コース)
		JBSbatSQLAccess db_KK_M_PCRS = null;
		
		// 共通電文クラスがnullの場合
		if(cmnItem == null)
		{
			return svcKeiNm;
		}
		
		// ログ部品の取得
		JBSbatLogPrintControl log = cmnItem.getLogPrint();
		log.printDebugLog("サービス契約名取得処理を行います。");
		
		try
		{
			// 料金グループコードが空文字でない場合
			if(!"".equals(JBSbatStringUtil.Rtrim(prcGrpCd)))
			{
				// テーブルアクセスクラス(料金グループ)を取得する
				db_KK_M_PRC_GRP = new JBSbatSQLAccess(cmnItem, D_TBL_NAME_KK_M_PRC_GRP);
				// バインド変数設定クラス
				JBSbatCommonDBInterface prcGrpParamList = new JBSbatCommonDBInterface();
				// 料金グループコードを設定する
				prcGrpParamList.setValue(prcGrpCd);
				// DBアクセスを実行します
				db_KK_M_PRC_GRP.selectBySqlDefine(prcGrpParamList, KK_M_PRC_GRP_KK_SELECT_001);
				// 実行結果を取得する
				JBSbatCommonDBInterface prcGrpMap = db_KK_M_PRC_GRP.selectNext();
				// レコードが取得できた場合
				if(prcGrpMap != null)
				{
					// 取得した料金グループ名を設定する
					prcGrpNm = prcGrpMap.getString(JBSbatKK_M_PRC_GRP.PRC_GRP_NM);
					// 取得した料金グループ名がnullの場合
					if(prcGrpNm == null)
					{
						prcGrpNm = "";
					}
				}
			}
			
			// 料金コースコードが空文字でない場合
			if(!"".equals(JBSbatStringUtil.Rtrim(pcrsCd)))
			{
				// テーブルアクセスクラス(料金コース)を取得する
				db_KK_M_PCRS = new JBSbatSQLAccess(cmnItem, D_TBL_NAME_KK_M_PCRS);
				// バインド変数設定クラス
				JBSbatCommonDBInterface pcrsParamList = new JBSbatCommonDBInterface();
				// 料金コースコードを設定する
				pcrsParamList.setValue(pcrsCd);
				// DBアクセスを実行します
				db_KK_M_PCRS.selectBySqlDefine(pcrsParamList, KK_M_PCRS_KK_SELECT_001);
				// 実行結果を取得する
				JBSbatCommonDBInterface pcrsMap = db_KK_M_PCRS.selectNext();
				// レコードが取得できた場合
				if(pcrsMap != null)
				{
					// 取得した料金コース名を設定する
					pcrsNm = pcrsMap.getString(JBSbatKK_M_PCRS.PCRS_NM);
					// 取得した料金コース名がnullの場合
					if(pcrsNm == null)
					{
						pcrsNm = "";
					}
				}
			}
			
			// 料金グループ名と料金コース名を連結させる
			svcKeiNm = prcGrpNm + pcrsNm;
			
			log.printDebugLog("返却するサービス契約名：" + svcKeiNm);
			log.printDebugLog("サービス契約名取得処理が終了しました。");
			return svcKeiNm;
		}
		catch(Exception e) 
		{
			//例外メッセージの取得
			String message = e.getMessage();
			log.printDebugLog("システムエラーが発生しました。（" + message + "）");
			throw e;
		}
		finally
		{
			if(db_KK_M_PRC_GRP != null)
			{
				db_KK_M_PRC_GRP.close();
			}
			if(db_KK_M_PCRS != null)
			{
				db_KK_M_PCRS.close();
			}
		}
	}
}
