/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：Futurity
*	モジュール名	：JKKGetSmtvlCourseNmCd
*	ソースファイル名：JKKGetSmtvlCourseNmCd.java
*	作成者			：富士通
*	日付			：2013年04月17日
*＜機能概要＞
*	スマートバリュー用コード名称コード取得部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2013/04/17	富士通		新規作成
*	v73.00.00	2024/12/04	FJ)柴田	  【ANK-4493-00-00】光配線マンションのコースアップ対応
**********************************************************************/

package eo.business.common;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import eo.business.util.table.JBSbatKK_T_TK_HOSHIKI_KEI;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;

/**
 * スマートバリュー用コード名称コード取得を行います。
 * <br>
 * @author 富士通
 */
public class JKKGetSmtvlCourseNmCd
{
	/** テーブル(提供方式契約) */
	private static final String D_TBL_NAME_KK_T_TK_HOSHIKI_KEI = "KK_T_TK_HOSHIKI_KEI";

	/** 旧ICS契約コード：ｅｏ光ネットマンション グローバル */
	private static final String OLD_ICS_KEI_SVC_CD_MT_G = "07";

	/** 旧ICS契約コード：ｅｏ光ネットマンション 光配線 */
	private static final String OLD_ICS_KEI_SVC_CD_MT_HH = "15";

	/** 変換パターン@の料金プランコード */
	private static final List<String> PPLAN_CD_LIST_1 = new ArrayList<String>();

	/** 変換パターンAの料金プランコード */
	private static final List<String> PPLAN_CD_LIST_2 = new ArrayList<String>();

	/** 変換パターンBの料金プランコード */
	private static final List<String> PPLAN_CD_LIST_3 = new ArrayList<String>();

	/** 変換パターンCの料金プランコード */
	private static final List<String> PPLAN_CD_LIST_4 = new ArrayList<String>();

	/** 変換パターンDの料金プランコード */
	private static final List<String> PPLAN_CD_LIST_5 = new ArrayList<String>();

	/** 変換パターンEの料金プランコード */
	private static final List<String> PPLAN_CD_LIST_6 = new ArrayList<String>();

	/** 変換パターン@ */
	private static final Map<String, String> CHG_PTN_1 = new HashMap<String, String>();

	/** 変換パターンA */
	private static final Map<String, String> CHG_PTN_2 = new HashMap<String, String>();

	/** 変換パターンB */
	private static final Map<String, String> CHG_PTN_3 = new HashMap<String, String>();

	/** 変換パターンC */
	private static final Map<String, String> CHG_PTN_4 = new HashMap<String, String>();

	/** 変換パターンD */
	private static final Map<String, String> CHG_PTN_5 = new HashMap<String, String>();

	/** 変換パターンE */
	private static final Map<String, String> CHG_PTN_6 = new HashMap<String, String>();

	static
	{
		// 変換パターン@の料金プランコード
		PPLAN_CD_LIST_1.add("PA5001");
		PPLAN_CD_LIST_1.add("PA5101");
		PPLAN_CD_LIST_1.add("PA5201");
		PPLAN_CD_LIST_1.add("PA5301");
		PPLAN_CD_LIST_1.add("PA5401");
		PPLAN_CD_LIST_1.add("PA7901");
		// 変換パターンAの料金プランコード
		PPLAN_CD_LIST_2.add("PA6901");
		PPLAN_CD_LIST_2.add("PA7001");
		PPLAN_CD_LIST_2.add("PA8001");
		// 変換パターンBの料金プランコード
		PPLAN_CD_LIST_3.add("PA5501");
		// 変換パターンCの料金プランコード
		PPLAN_CD_LIST_4.add("PA5601");
		PPLAN_CD_LIST_4.add("PA5611");
		// 変換パターンDの料金プランコード
		PPLAN_CD_LIST_5.add("PA7101");
		// 変換パターンEの料金プランコード
		PPLAN_CD_LIST_6.add("PA5701");
		// ANK-4493-00-00 ADD START
		PPLAN_CD_LIST_6.add("PA7401");
		// ANK-4493-00-00 ADD END

		// 変換パターン@ 加入契約支払方式コードと旧ICS契約コード＋旧ICS料金プランコードの組み合わせ
		CHG_PTN_1.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_ZENKO,   OLD_ICS_KEI_SVC_CD_MT_G + "010");
		CHG_PTN_1.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KYOJU,   OLD_ICS_KEI_SVC_CD_MT_G + "210");
		CHG_PTN_1.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_BASE,    OLD_ICS_KEI_SVC_CD_MT_G + "423");
		// OM-2013-0002282 スマートバリュー申込結果・異動情報ファイルの「グローバル・個別」のコース名称コードが誤っている 2013/09/18 START
//		CHG_PTN_1.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KOBETSU, OLD_ICS_KEI_SVC_CD_MT_G + "630");
		CHG_PTN_1.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KOBETSU, OLD_ICS_KEI_SVC_CD_MT_G + "810");
		// OM-2013-0002282 スマートバリュー申込結果・異動情報ファイルの「グローバル・個別」のコース名称コードが誤っている 2013/09/18 END
		// 変換パターンA 加入契約支払方式コードと旧ICS契約コード＋旧ICS料金プランコードの組み合わせ
		CHG_PTN_2.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_ZENKO,   OLD_ICS_KEI_SVC_CD_MT_G + "090");
		CHG_PTN_2.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KYOJU,   OLD_ICS_KEI_SVC_CD_MT_G + "220");
		CHG_PTN_2.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_BASE,    OLD_ICS_KEI_SVC_CD_MT_G + "592");
		CHG_PTN_2.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KOBETSU, OLD_ICS_KEI_SVC_CD_MT_G + "850");
		// 変換パターンB 加入契約支払方式コードと旧ICS契約コード＋旧ICS料金プランコードの組み合わせ
		CHG_PTN_3.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_ZENKO,   OLD_ICS_KEI_SVC_CD_MT_G + "100");
		CHG_PTN_3.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KYOJU,   OLD_ICS_KEI_SVC_CD_MT_G + "230");
		CHG_PTN_3.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_BASE,    OLD_ICS_KEI_SVC_CD_MT_G + "593");
		CHG_PTN_3.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KOBETSU, OLD_ICS_KEI_SVC_CD_MT_G + "860");
		// 変換パターンC 加入契約支払方式コードと旧ICS契約コード＋旧ICS料金プランコードの組み合わせ
		CHG_PTN_4.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_ZENKO,   OLD_ICS_KEI_SVC_CD_MT_HH + "010");
		CHG_PTN_4.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KYOJU,   OLD_ICS_KEI_SVC_CD_MT_HH + "210");
		CHG_PTN_4.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_BASE,    OLD_ICS_KEI_SVC_CD_MT_HH + "405");
		CHG_PTN_4.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KOBETSU, OLD_ICS_KEI_SVC_CD_MT_HH + "615");
		// 変換パターンD 加入契約支払方式コードと旧ICS契約コード＋旧ICS料金プランコードの組み合わせ
		CHG_PTN_5.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_ZENKO,   OLD_ICS_KEI_SVC_CD_MT_HH + "090");
		CHG_PTN_5.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KYOJU,   OLD_ICS_KEI_SVC_CD_MT_HH + "220");
		CHG_PTN_5.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_BASE,    OLD_ICS_KEI_SVC_CD_MT_HH + "592");
		CHG_PTN_5.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KOBETSU, OLD_ICS_KEI_SVC_CD_MT_HH + "850");
		// 変換パターンE 加入契約支払方式コードと旧ICS契約コード＋旧ICS料金プランコードの組み合わせ
		CHG_PTN_6.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_ZENKO,   OLD_ICS_KEI_SVC_CD_MT_HH + "100");
		CHG_PTN_6.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KYOJU,   OLD_ICS_KEI_SVC_CD_MT_HH + "230");
		CHG_PTN_6.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_BASE,    OLD_ICS_KEI_SVC_CD_MT_HH + "593");
		CHG_PTN_6.put(JBSbatKKConst.KEI_PAY_HOSHIKI_CD_KOBETSU, OLD_ICS_KEI_SVC_CD_MT_HH + "860");
	}

	/**
	 * コース名称コード取得処理です。
	 * 
	 * @param cmnItem 業務共通電文
	 * @param svcKeiNo サービス契約番号
	 * @param prcGrpCd 料金グループコード
	 * @param pcrsCd 料金コースコード
	 * @param pplanCd 料金プランコード
	 * @return コース名称コード
	 * @throws Exception 例外が発生した場合
	 */
	public static String getCourseNmCd(JBSbatCommonItem cmnItem, String svcKeiNo, String prcGrpCd, String pcrsCd, String pplanCd) throws Exception
	{
		// 入力パラメータチェック
		chkInput(cmnItem, svcKeiNo, prcGrpCd, pcrsCd, pplanCd);

		String couseNmCd = null;
		String kanyuKeiPayHoshikiCd = null;
		JBSbatSQLAccess stmt = null;
		
		try
		{
			// 提供方式契約から加入契約支払方式コードを取得する
			stmt = new JBSbatSQLAccess(cmnItem, D_TBL_NAME_KK_T_TK_HOSHIKI_KEI);

			// 検索キーを設定する
			JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
			dbList.setValue(svcKeiNo);					// サービス契約番号
			dbList.setValue(cmnItem.getOpeDate());		// バッチ運用日
			stmt.selectBySqlDefine(dbList,"KK_SELECT_027");

			JBSbatCommonDBInterface inMap = new JBSbatCommonDBInterface(); 
			while (null != (inMap = stmt.selectNext()))
			{
				kanyuKeiPayHoshikiCd = inMap.getString(JBSbatKK_T_TK_HOSHIKI_KEI.KANYU_KEI_PAY_HOSHIKI_CD);
			}

			// 検索結果が0件の場合NULLを返し処理を終了する
			if (null == kanyuKeiPayHoshikiCd)
			{
				cmnItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1030CW, new String[]{svcKeiNo, pplanCd});
				return null;
			}

			// 変換パターン@の料金プランコードの場合
			if (PPLAN_CD_LIST_1.contains(pplanCd))
			{
				couseNmCd = CHG_PTN_1.get(kanyuKeiPayHoshikiCd);
			}
			// 変換パターンAの料金プランコードの場合
			else if (PPLAN_CD_LIST_2.contains(pplanCd))
			{
				couseNmCd = CHG_PTN_2.get(kanyuKeiPayHoshikiCd);
			}
			// 変換パターンBの料金プランコードの場合
			else if (PPLAN_CD_LIST_3.contains(pplanCd))
			{
				couseNmCd = CHG_PTN_3.get(kanyuKeiPayHoshikiCd);
			}
			// 変換パターンCの料金プランコードの場合
			else if (PPLAN_CD_LIST_4.contains(pplanCd))
			{
				couseNmCd = CHG_PTN_4.get(kanyuKeiPayHoshikiCd);
			}
			// 変換パターンDの料金プランコードの場合
			else if (PPLAN_CD_LIST_5.contains(pplanCd))
			{
				couseNmCd = CHG_PTN_5.get(kanyuKeiPayHoshikiCd);
			}
			// 変換パターンEの料金プランコードの場合
			else if (PPLAN_CD_LIST_6.contains(pplanCd))
			{
				couseNmCd = CHG_PTN_6.get(kanyuKeiPayHoshikiCd);
			}
			// 上記以外のプランコード
			else
			{
				couseNmCd = null;
			}
		}
		catch (SQLException e)
		{
			throw new Exception( "コース名称コード取得処理で例外が発生しました。");
		}
		finally
		{
			if (stmt != null)
			{
				stmt.close();
			}

		}

		return couseNmCd;
	}

	/**
	 * 入力パラメータのチェックを行います。<br>
	 * 
	 * @param cmnItem 業務共通電文
	 * @param svcKeiNo サービス契約番号
	 * @param prcGrpCd 料金グループコード
	 * @param pcrsCd 料金コースコード
	 * @param pplanCd 料金プランコード
	 * @return コース名称コード
	 * @throws Exception 例外が発生した場合
	 */
	private static void chkInput(JBSbatCommonItem cmnItem, String svcKeiNo, String prcGrpCd, String pcrsCd, String pplanCd) throws Exception
	{
		// 業務共通電文チェック
		if (cmnItem == null)
		{
			throw new Exception("バッチ共通電文がnullです。");
		}

		// バッチ運用日チェック
		String opeDate = cmnItem.getOpeDate();
		if (opeDate == null || opeDate.length() == 0)
		{
			cmnItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0060TE, new String[]{"バッチ運用日"});
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0060TE, new String[]{"バッチ運用日"});
		}

		// サービス契約番号
		if (svcKeiNo == null || svcKeiNo.length() == 0)
		{
			cmnItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0060TE, new String[]{"サービス契約番号"});
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0060TE, new String[]{"サービス契約番号"});
		}

		// 料金グループコード
		if (prcGrpCd == null || prcGrpCd.length() == 0)
		{
			cmnItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0060TE, new String[]{"料金グループコード"});
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0060TE, new String[]{"料金グループコード"});
		}

		// 料金コースコード
		if (pcrsCd == null || pcrsCd.length() == 0)
		{
			cmnItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0060TE, new String[]{"料金コースコード"});
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0060TE, new String[]{"料金コースコード"});
		}

		// 料金プランコード
		if (pplanCd == null || pplanCd.length() == 0)
		{
			cmnItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0060TE, new String[]{"料金プランコード"});
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0060TE, new String[]{"料金プランコード"});
		}

		// 料金グループコードが「eo光ネットマンションタイプ」ではない
		if (!JBSbatKKConst.PGRP_NET_04.equals(prcGrpCd))
		{
			cmnItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0130CE, new String[]{"料金グループコード：" + prcGrpCd});
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0130CE, new String[]{"料金グループコード：" + prcGrpCd});
		}
	}
}
