/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JKKejbRule0089001
*	ソースファイル名：JKKejbRule0089001.java
*	作成者			：富士通
*	日付			：2013年02月14日
*＜機能概要＞
*	割引適用基準年月日判定相関ルール部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v5.00.00	2013/02/14	FJ)			新規作成
*   v5.00.01    2013/03/01  FJ)寺本     IT2-2013-0000238
*   v8.00.00	2014/03/24	FJ)松枝	    OM-2014-0000286
*   v40.00.00	2019/01/30	FJ)舘山		【ANK-3412-03-00】_【５ギガ・１０ギガ】特約プログラム対応
**********************************************************************/

package eo.ejb.common.rule;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;

import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbm.entity.KK2361ETMsg;
import eo.ejb.cbm.entity.KK2371ETMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.db.JKKejbKK0081DBABase;
import eo.ejb.common.db.JKKejbKK2361DBABase;
import eo.ejb.common.db.JKKejbKK2371DBABase;

/**
 * <p>
 * 割引適用基準年月日判定相関ルール部品クラスです。
 * </p>
 * @author 富士通
 */
public class JKKejbRule0089001 extends JKKejbRuleBase
{
	/** ルールID */
	private static final String RULE_ID = "RULE0089001";

	/** 割引適用基準年月日 */
	private static final String JUDGE_RSLT = "JUDGE_RSLT";

	/** キャンペーン開始コード */
	private static final String CAMPAIGN_STA_CD = "CAMPAIGN_STA_CD";

	/** 基準日１ */
	private static final String BASE_YMD_1 = "BASE_YMD_1";

	/** 基準日２ */
	private static final String BASE_YMD_2 = "BASE_YMD_2";

// ▽▽▽ ANK-3412-03-00 ADD START
	/** 料金コースコード */
	private static final String PCRS_CD = "PCRS_CD";
	
// ▲▲▲ ANK-3412-03-00 ADD END
	/** 判定結果：基準日１ */
	private static final String JUDGE_RSLT_BASE_YMD_1 = "1";

	/** 判定結果：基準日２ */
	private static final String JUDGE_RSLT_BASE_YMD_2 = "2";

	/** 判定結果：基準日１の26ヶ月目の1日 */
	private static final String JUDGE_RSLT_BASE_YMD_1_26MONTH = "9";

	/** キャンペーン開始コード：長割 */
	private static final String CAMP_STA_CD_TYOWARI = "51";

	/** キャンペーン開始コード：即割 */
	private static final String CAMP_STA_CD_SOKWARI = "52";

	/** キャンペーン開始コード：長期継続利用割引 */
	private static final String CAMP_STA_CD_TYOKEIWARI = "53";

	/** キャンペーン開始コード：ネットTVセット割 */
	private static final String CAMP_STA_CD_TVNETWARI = "54";

	/** キャンペーン開始コード：ネット電話セット割 */
	private static final String CAMP_STA_CD_NETTELWARI = "55";

	/** キャンペーン開始コード：電話TVセット割 */
	private static final String CAMP_STA_CD_TELTVWARI = "56";

	/** キャンペーン開始コード：ネットモバイルセット割 */
	private static final String CAMP_STA_CD_NETMOBWARI = "57";

// ▽▽▽ ANK-3412-03-00 ADD START
	/** キャンペーン開始コード：高速割 */
	private static final String CAMP_STA_CD_KOSOKUWARI = "60";

// ▲▲▲ ANK-3412-03-00 ADD END
	/** 区分：ネット */
	private static final String JUDGE_NET = "1";

	/** 区分：電話 */
	private static final String JUDGE_TEL = "2";

	/** 区分：ＴＶ */
	private static final String JUDGE_TV = "3";

	/** 区分：モバイル */
	private static final String JUDGE_MOBILE = "4";

	/** サービス契約ステータス：受付済、解約済、キャンセル */
	private static final ArrayList<String> SVC_KEI_STAT_LIST = new ArrayList<String>();

	/** 料金グループコード(ネット)：ｅｏ光ネットホームタイプ、ｅｏ光ネットメゾンタイプ、ｅｏ光ネットマンションタイプ */
	private static final ArrayList<String> PRC_GRP_CD_NET = new ArrayList<String>();

	/** 料金グループコード（電話）：ｅｏ光電話 */
	private static final ArrayList<String> PRC_GRP_CD_TEL = new ArrayList<String>();

	/** 料金グループコード（ＴＶ）：ｅｏ光テレビ、ｅｏ光テレビ（ＫＣＮ）、ｅｏ光テレビ（再送信） */
	private static final ArrayList<String> PRC_GRP_CD_TV = new ArrayList<String>();

	/** 料金グループコード（モバイル）：ｅｏモバイル（Ｗｉ−Ｆｉ）、ｅｏモバイル（ＥＭ）、ｅｏモバイル（ＵＱ−ＷｉＭＡＸ）、ｅｏモバイル（メールアドレス） */
	private static final ArrayList<String> PRC_GRP_CD_MOBILE = new ArrayList<String>();
	static
	{
		SVC_KEI_STAT_LIST.add("010");
		SVC_KEI_STAT_LIST.add("910");
		SVC_KEI_STAT_LIST.add("920");
		PRC_GRP_CD_NET.add("02");
		PRC_GRP_CD_NET.add("03");
		PRC_GRP_CD_NET.add("04");
		PRC_GRP_CD_MOBILE.add("07");
		PRC_GRP_CD_MOBILE.add("08");
		PRC_GRP_CD_MOBILE.add("09");
		PRC_GRP_CD_MOBILE.add("16");
		PRC_GRP_CD_TV.add("11");
		PRC_GRP_CD_TV.add("12");
		PRC_GRP_CD_TV.add("13");
		PRC_GRP_CD_TEL.add("10");
	}

	/** 処理対象のCBSMsg */
	private CAANMsg inCBSMsg = null;

	/** キャンペーン開始コード */
	private String campaign_sta_cd = null;

	/** 基準日１ */
	private String base_ymd1 = null;

	/** 基準日２ */
	private String base_ymd2 = null;

	/** サービス契約ステータスフラグ */
	private String svc_kei_stat_flg = null;

	/** 割引額算出基準年月日 */
	private String wrib_amnt_snst_stdardymd = null;

	/** 割引サービス契約番号 */
	private String wrib_svc_kei_no = null;

	/** サービス契約の情報 */
	private CAANMsg[] kk0081Info = null;

// ▽▽▽ ANK-3412-03-00 ADD START
	/** 料金コースコード */
	private String pcrsCd = null;
	
// ▲▲▲ ANK-3412-03-00 ADD END
	/**
	 * <p>
	 * JKKejbRule0088001クラスのコンストラクタです。
	 * </p>
	 * @param inMsg 処理対象のCBSMsg
	 */
	public JKKejbRule0089001(CAANMsg inMsg)
	{
		super();
		this.inCBSMsg = inMsg;
	}

	/**
	 * <p>
	 * 処理対象のCBSMsgを取得します。
	 * </p>
	 * @return 処理対象のCBSMsg
	 */
	protected CAANMsg getCBSMsg()
	{
		return this.inCBSMsg;
	}

	/**
	 * <p>
	 * ルールIDを取得します。
	 * </p>
	 * @return ルールID
	 */
	protected String getRuleId()
	{
		return RULE_ID;
	}

	/**
	 * <p>
	 * ルールエンジンを複数条件モードで実行するか設定します。
	 * </p>
	 * @return 複数条件モードで実行する場合はtrue
	 */
	protected boolean isMultiMode()
	{
		return true;
	}

	/**
	 * <p>
	 * キャンペーン開始コードを取得します。
	 * </p>
	 * @return キャンペーン開始コード
	 */
	public String getCampaign_sta_cd()
	{
		return campaign_sta_cd;
	}

	/**
	 * <p>
	 * キャンペーン開始コードを設定します。
	 * </p>
	 * @param campaign_sta_cd キャンペーン開始コード
	 */
	public void setCampaign_sta_cd(String campaign_sta_cd)
	{
		this.campaign_sta_cd = campaign_sta_cd;
	}

	/**
	 * <p>
	 * 基準日１を取得します。
	 * </p>
	 * @return 基準日１
	 */
	public String getBase_ymd1()
	{
		return base_ymd1;
	}

	/**
	 * <p>
	 * 基準日１を設定します。
	 * </p>
	 * @param base_ymd1 基準日１
	 */
	public void setBase_ymd1(String base_ymd1)
	{
		this.base_ymd1 = base_ymd1;
	}

	/**
	 * <p>
	 * 基準日２を取得します。
	 * </p>
	 * @return 基準日２
	 */
	public String getBase_ymd2()
	{
		return base_ymd2;
	}

	/**
	 * <p>
	 * 基準日２を設定します。
	 * </p>
	 * @param base_ymd2 基準日２
	 */
	public void setBase_ymd2(String base_ymd2)
	{
		this.base_ymd2 = base_ymd2;
	}

	/**
	 * <p>
	 * サービス契約ステータスを取得します。
	 * </p>
	 * @return 割引サービスステータス
	 */
	public String getSvc_kei_stat_flg()
	{
		return svc_kei_stat_flg;
	}

	/**
	 * <p>
	 * サービス契約ステータスを設定します。
	 * </p>
	 * @param svc_kei_stat 割引サービスステータス
	 */
	public void setSvc_kei_stat_flg(String svc_kei_stat_flg)
	{
		this.svc_kei_stat_flg = svc_kei_stat_flg;
	}

	/**
	 * <p>
	 * 割引額算出基準年月日を取得します。
	 * </p>
	 * @return 割引額算出基準年月日
	 */
	public String getWrib_amnt_snst_stdardymd()
	{
		return wrib_amnt_snst_stdardymd;
	}

	/**
	 * <p>
	 * 割引額算出基準年月日を設定します。
	 * </p>
	 * @param wrib_amnt_snst_stdardymd 割引額算出基準年月日
	 */
	public void setWrib_amnt_snst_stdardymd(String wrib_amnt_snst_stdardymd)
	{
		this.wrib_amnt_snst_stdardymd = wrib_amnt_snst_stdardymd;
	}

	/**
	 * <p>
	 * 割引サービス契約番号を取得します。
	 * </p>
	 * @return 割引サービス契約番号
	 */
	public String getWrib_svc_kei_no()
	{
		return wrib_svc_kei_no;
	}

	/**
	 * <p>
	 * 割引サービス契約番号を設定します。
	 * </p>
	 * @param wrib_svc_kei_no 割引サービス契約番号
	 */
	public void setWrib_svc_kei_no(String wrib_svc_kei_no)
	{
		this.wrib_svc_kei_no = wrib_svc_kei_no;
	}

	/**
	 * <p>
	 * 割引適用基準年月日を算出します。
	 * </p>
	 * @return 割引適用基準年月日
	 * @throws ParseException 
	 */
	public String getWribAmntSnstStdardYmd() throws ParseException
	{
		//**********************************************************
		//* ＤＢ情報取得エリア                                     *
		//**********************************************************
		// サービス契約を検索
		this.getKK0081CurrentDate();

		//**********************************************************
		//* RULEパラメーター設定エリア                             *
		//**********************************************************
		// キャンペーン開始コードを設定する
		this.setCampaignStaCd();
		// 基準日１を設定する
		this.setBaseYmd1();
		// 基準日２を設定する
		this.setBaseYmd2();
// ▽▽▽ ANK-3412-03-00 ADD START
		// 料金コースコードを設定する
		this.setPcrsCd();
// ▲▲▲ ANK-3412-03-00 ADD END

		// ルールエンジンパラメータの設定
		set(CAMPAIGN_STA_CD, getCampaign_sta_cd()); // キャンペーン開始コード
		set(BASE_YMD_1, getBase_ymd1()); // 基準日１
		set(BASE_YMD_2, getBase_ymd2()); // 基準日２
// ▽▽▽ ANK-3412-03-00 ADD START
		set(PCRS_CD, getPcrsCd());       // 料金コースコード
// ▲▲▲ ANK-3412-03-00 ADD END

		// ルールエンジンの実行
		super.execRuleEngine();

		if (!hasNext())
		{
			return null;
		}

		// ルールエンジン実行の結果を返却
		HashMap<String, Object> map = getResultMap();
		return this.getWribTkioBaseYmd((String)map.get(JUDGE_RSLT));
	}

	/**
	 * <p>
	 * ルールの返却結果を元に返却する割引適用基準年月日を決定します。
	 * </p>
	 * @param result ルールの結果
	 * @return 割引適用基準年月日
	 * @throws ParseException 
	 */
	private String getWribTkioBaseYmd(String result) throws ParseException
	{
		// ルールの結果が未設定の場合
		if (result == null || result.isEmpty())
		{
			return null;
		}

		// 基準日１の場合
		if (JUDGE_RSLT_BASE_YMD_1.equals(result))
		{
			return getBase_ymd1();
		}
		// 基準日２の場合
		else if (JUDGE_RSLT_BASE_YMD_2.equals(result))
		{
			return getBase_ymd2();
		}
		// 基準日１の26ヶ月目の1日の場合
		else if (JUDGE_RSLT_BASE_YMD_1_26MONTH.equals(result))
		{
			// 基準日１が未設定の場合
			if (getBase_ymd1() == null)
			{
				return null;
			}

			// 基準日１の26ヵ月後の初日を設定する
			String ymd25 = JKKModelCommon.addMonth(getBase_ymd1(), 25);
			String ym = ymd25.substring(0, 6);
			return ym.concat("01");
		}
		else
		{
			// ルールの結果が"上記以外"の場合はnullを返却する
			return null;
		}
	}

	/**
	 * <p>
	 * キャンペーン開始コードを設定します
	 * </p>
	 */
	private void setCampaignStaCd()
	{
		// 割引サービス契約内訳をサービス契約番号をkeyに検索
		JKKejbKK2361DBABase kk2361db = new JKKejbKK2361DBABase();
		CAANMsg[] kk2361msgList = kk2361db.getKK2361byWribSvcKei(getWrib_svc_kei_no(), null, JKKModelCommon.getOpeDate(inCBSMsg));

		// 検索結果が0件の場合
		if (kk2361msgList == null)
		{
			return;
		}
		
		ArrayList<String> alist = new ArrayList<String>();
		ArrayList<String> campStaCdList = new ArrayList<String>();
		String campaignStaCd = null;

		for (CAANMsg kk2361info : kk2361msgList)
		{			
			// 一回出てきた割引サービス詳細コードは検索せず
			if (alist.contains(kk2361info.getString(KK2361ETMsg.WRIB_SVC_DTL_CD)))
			{
				continue;
			}
			// 割引サービス詳細コードをためる
			alist.add(kk2361info.getString(KK2361ETMsg.WRIB_SVC_DTL_CD));
			
			// 割引サービス詳細のカレント検索
			CAANMsg kk2371ETMsg = new CAANMsg(KK2371ETMsg.class.getName());
			kk2371ETMsg.set(KK2371ETMsg.WRIB_SVC_DTL_CD, kk2361info.getString(KK2361ETMsg.WRIB_SVC_DTL_CD));
			kk2371ETMsg.set(KK2371ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(kk2371ETMsg));

			CAANMsg kk2371info = new JKKejbKK2371DBABase().findByCurrent(kk2371ETMsg);

			// 割引サービス詳細が見つからなかった場合
			if (kk2371info == null)
			{
				throw new CAANRuntimeException("割引サービス詳細の検索結果が０件です。割引サービス詳細コード = [ " + kk2361info.getString(KK2361ETMsg.WRIB_SVC_DTL_CD) + " ]");
			}

			// キャンペーン開始コードを取得する
			campaignStaCd = kk2371info.getString(KK2371ETMsg.CAMPAIGN_STA_CD);

			// キャンペーン開始コードが違うものがきたら
			if (campStaCdList.size() != 0 && !campStaCdList.contains(campaignStaCd))
			{
				throw new CAANRuntimeException("キャンペーン開始コードが異なる契約があります。");
			}
			// キャンペーン開始コードをためる
			campStaCdList.add(campaignStaCd);
		}
		setCampaign_sta_cd(campaignStaCd);
	}

	/**
	 * <p>
	 * 基準日1を設定します
	 * </p>
	 * @throws ParseException 
	 */
	private void setBaseYmd1() throws ParseException
	{
		if (kk0081Info == null)
		{
			return;
		}

		String baseYmd1 = null;

		if(getCampaign_sta_cd() == null){
			
			return;
		}
		
		// キャンペーン開始コードが"長割"または"即割"
		if (getCampaign_sta_cd().equals(CAMP_STA_CD_TYOWARI) || getCampaign_sta_cd().equals(CAMP_STA_CD_SOKWARI))
		{
			// ネットのサービス課金開始年月日を設定する
			baseYmd1 = getMinYmd(kk0081Info, JUDGE_NET, KK0081ETMsg.SVC_CHRG_STAYMD);
		}
		// キャンペーン開始コードが"長期継続利用割引"
		else if (getCampaign_sta_cd().equals(CAMP_STA_CD_TYOKEIWARI))
		{
			// 入力の割引額算出基準年月日を設定する
			baseYmd1 = getWrib_amnt_snst_stdardymd();
		}
		// キャンペーン開始コードが"ネットＴＶセット割"
		else if (getCampaign_sta_cd().equals(CAMP_STA_CD_TVNETWARI))
		{
			// ネットのサービス開始年月日を設定する
			baseYmd1 = getMinYmd(kk0081Info, JUDGE_NET, KK0081ETMsg.SVC_STA_YMD);
		}
		// キャンペーン開始コードが"ネット電話セット割"
		else if (getCampaign_sta_cd().equals(CAMP_STA_CD_NETTELWARI))
		{
			// ネットのサービス課金開始年月日を設定する
			baseYmd1 = getMinYmd(kk0081Info, JUDGE_NET, KK0081ETMsg.SVC_CHRG_STAYMD);
		}
		// キャンペーン開始コードが"電話ＴＶセット割"
		else if (getCampaign_sta_cd().equals(CAMP_STA_CD_TELTVWARI))
		{
			// 電話のサービス開始年月日を設定する
			baseYmd1 = getMinYmd(kk0081Info, JUDGE_TEL, KK0081ETMsg.SVC_STA_YMD);
		}
		// キャンペーン開始コードが"ネットモバイルセット割"
		else if (getCampaign_sta_cd().equals(CAMP_STA_CD_NETMOBWARI))
		{
			// ネットの照査年月日を設定する
			baseYmd1 = getMinYmd(kk0081Info, JUDGE_NET, KK0081ETMsg.SHOSA_YMD);
		}
// ▽▽▽ ANK-3412-03-00 ADD START
		// キャンペーン開始コードが"高速割"
		else if (getCampaign_sta_cd().equals(CAMP_STA_CD_KOSOKUWARI))
		{
			// ネットのプラン課金開始日を設定する
			baseYmd1 = getMinYmd(kk0081Info, JUDGE_NET, KK0081ETMsg.PLAN_CHRG_STAYMD);
		}
// ▲▲▲ ANK-3412-03-00 ADD END
		else
		{
			throw new CAANRuntimeException("キャンペーン開始コードが想定外の値です。キャンペーン開始コード=[ " + getCampaign_sta_cd() + " ]");
		}
		// 算出された基準日１を設定する
		setBase_ymd1(baseYmd1);
	}

	/**
	 * <p>
	 * 基準日2を設定します
	 * </p>
	 * @throws ParseException 
	 */
	private void setBaseYmd2() throws ParseException
	{
		if (kk0081Info == null)
		{
			return;
		}

		if(getCampaign_sta_cd() == null){
			
			return;
		}

		String baseYmd2 = null;
		// キャンペーン開始コードが"長割"または"即割"
		if (getCampaign_sta_cd().equals(CAMP_STA_CD_TYOWARI) || getCampaign_sta_cd().equals(CAMP_STA_CD_SOKWARI))
		{
			// 未設定
			baseYmd2 = null;
		}
		// キャンペーン開始コードが"長期継続利用割引"
		else if (getCampaign_sta_cd().equals(CAMP_STA_CD_TYOKEIWARI))
		{
			// 未設定
			baseYmd2 = null;
		}
		// キャンペーン開始コードが"ネットＴＶセット割"
		else if (getCampaign_sta_cd().equals(CAMP_STA_CD_TVNETWARI))
		{
			// TVのサービス開始年月日を設定する
			baseYmd2 = getMinYmd(kk0081Info, JUDGE_TV, KK0081ETMsg.SVC_STA_YMD);
		}
		// キャンペーン開始コードが"ネット電話セット割"
		else if (getCampaign_sta_cd().equals(CAMP_STA_CD_NETTELWARI))
		{
			// 電話のサービス課金開始年月日を設定する
			baseYmd2 = getMinYmd(kk0081Info, JUDGE_TEL, KK0081ETMsg.SVC_CHRG_STAYMD);
		}
		// キャンペーン開始コードが"電話ＴＶセット割"
		else if (getCampaign_sta_cd().equals(CAMP_STA_CD_TELTVWARI))
		{
			// TVのサービス開始年月日を設定する
			baseYmd2 = getMinYmd(kk0081Info, JUDGE_TV, KK0081ETMsg.SVC_STA_YMD);
		}
		// キャンペーン開始コードが"ネットモバイルセット割"
		else if (getCampaign_sta_cd().equals(CAMP_STA_CD_NETMOBWARI))
		{
			// モバイルのサービス課金開始年月日を設定する
			baseYmd2 = getMinYmd(kk0081Info, JUDGE_MOBILE, KK0081ETMsg.SVC_CHRG_STAYMD);
		}
// ▽▽▽ ANK-3412-03-00 ADD START
		// キャンペーン開始コードが"高速割"
		else if (getCampaign_sta_cd().equals(CAMP_STA_CD_KOSOKUWARI))
		{
			// 未設定
			baseYmd2 = null;
		}
// ▲▲▲ ANK-3412-03-00 ADD END
		else
		{
			throw new CAANRuntimeException("キャンペーン開始コードが想定外の値です。キャンペーン開始コード=[ " + getCampaign_sta_cd() + " ]");
		}
		// 算出された基準日２を設定する
		setBase_ymd2(baseYmd2);
	}

	/**
	 * <p>
	 * 指定されたデータの中から最小の年月日を算出します
	 * </p>
	 * @param baseList 対象のデータ群
	 * @param key1 対象の年月日
	 * @return 最小の年月日
	 */
	private String getMinYmd(CAANMsg[] baseList, String prcGrpFlg, String key1)
	{
		String minYmd = null;

		for (CAANMsg inMsg : baseList)
		{
			// 省くステータス(受付済、解約済、キャンセル）
			if (SVC_KEI_STAT_LIST.contains(inMsg.getString(KK0081ETMsg.SVC_KEI_STAT)))
			{
				continue;
			}
			// 料金グループコードを取得する
			String prcGrpCd = inMsg.getString(KK0081ETMsg.PRC_GRP_CD);
			
			if (prcGrpFlg.equals(JUDGE_NET))
			{
				// 料金グループコードが"ネット"以外の場合
				if (!PRC_GRP_CD_NET.contains(prcGrpCd))
				{
					continue;
				}
			}
			else if (prcGrpFlg.equals(JUDGE_TEL))
			{
				// 料金グループコードが"電話"以外の場合
				if (!PRC_GRP_CD_TEL.contains(prcGrpCd))
				{
					continue;
				}
			}
			else if (prcGrpFlg.equals(JUDGE_TV))
			{
				// 料金グループコードが"TV"以外の場合
				if (!PRC_GRP_CD_TV.contains(prcGrpCd))
				{
					continue;
				}
			}
			else if (prcGrpFlg.equals(JUDGE_MOBILE))
			{
				// 料金グループコードが"モバイル"以外の場合
				if (!PRC_GRP_CD_MOBILE.contains(prcGrpCd))
				{
					continue;
				}				
			}
			else
			{
				continue;
			}
			
			// 取得した年月日が未設定の場合
			if (inMsg.isNull(key1))
			{
				continue;
			}

			// 対象の年月日を取得する
			String ymd = inMsg.getString(key1);

			// 初回と取得した年月日が設定されている年月日より過去日の場合
			if (minYmd == null || JKKModelCommon.isPastDate(ymd, minYmd, "0"))
			{
				minYmd = ymd;
			}
		}
		// 最小値を返却する
		return minYmd;
	}

	/**
	 * <p>
	 * 割引サービス契約番号に紐付いた割引サービス契約のカレントレコードを取得します。
	 * </p>
	 */
	private void getKK0081CurrentDate()
	{
		// 割引サービス契約のカレントレコードを取得する
		JKKejbKK0081DBABase jk0081db = new JKKejbKK0081DBABase();
		kk0081Info = jk0081db.getKK0081byWribSvcKei(getWrib_svc_kei_no(), null, JKKModelCommon.getOpeDate(getCBSMsg()), "1");
	}
// ▽▽▽ ANK-3412-03-00 ADD START
	/**
	 * 料金コースコードを返却する
	 */
	public String getPcrsCd() {
		return pcrsCd;
	}

	/**
	 * 料金コースコードを設定する
	 * @param pcrsCd
	 */
	public void setPcrsCd(String pcrsCd) {
		this.pcrsCd = pcrsCd;
	}
	
	/**
	 * 料金コースコードを自動設定する。
	 */
	private void setPcrsCd()
	{
		if (kk0081Info == null)
		{
			return;
		}

		if(getCampaign_sta_cd() == null){
			
			return;
		}

		String code = null;
		// キャンペーン開始コードが高速割の場合
		if (getCampaign_sta_cd().equals(CAMP_STA_CD_KOSOKUWARI))
		{
			// ネットの料金コースコードを設定
			for (CAANMsg inMsg : kk0081Info)
			{
				// 省くステータス(受付済、解約済、キャンセル）
				if (SVC_KEI_STAT_LIST.contains(inMsg.getString(KK0081ETMsg.SVC_KEI_STAT)))
				{
					continue;
				}
				// 料金グループコードを取得する
				String prcGrpCd = inMsg.getString(KK0081ETMsg.PRC_GRP_CD);
				
				// 料金グループコードが"ネット"以外の場合
				if (!PRC_GRP_CD_NET.contains(prcGrpCd))
				{
					continue;
				}
				code = inMsg.getString(KK0081ETMsg.PCRS_CD);
			}
		}
			
		setPcrsCd(code);
	}
// ▲▲▲ ANK-3412-03-00 ADD END
}
