/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JKUejbGetAddSvcKeiNo
*	ソースファイル名	：JKUejbGetAddSvcKeiNo.java
*	作成者				：富士通　
*	作成日				：2011年09月27日
*＜機能概要＞
*	追加サービス契約番号取得部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/09/27   富士通		新規作成
*********************************************************************/
package eo.ejb.common;

import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.common.constant.JKUStrConst;
import eo.ejb.cbm.entity.KU0081ETMsg;
import eo.ejb.common.db.JKUejbKU0081SecProc;

/**
 *  <dd>クラス名：追加サービス契約番号取得
 *  <dd>クラス説明：追加サービス契約番号取得部品です。
 *  <dd>備考：
 * @version  3.00 2012/09/27
 * @author 富士通
 *
 */
public class JKUejbGetAddSvcKeiNo
{

	/**
	 * 追加サービス契約番号取得処理
	 * @param svcKeiKaisenUcwkNo	サービス契約回線内訳番号
	 * @param svcCd					サービスコード
	 * @param kojiakSbtCd			工事案件種別コード
	 * @param simRepKojiakNo		同時代表工事案件番号
	 * @return	追加サービス契約番号
	 * @throws CAANException
	 */
	public static String getAddSvcKeiNo(String svcKeiKaisenUcwkNo, String svcCd, String kojiakSbtCd, String simRepKojiakNo) throws CAANException
	{
		// ---引数チェック
		
		// -nullチェック（必要項目がnullの場合は何もしない）
		
		// サービス契約回線内訳番号
		if(null == svcKeiKaisenUcwkNo)
		{
			return null;
		}
		
		// サービスコード
		if (null == svcCd)
		{
			return null;
		}
		
		// -工事案件種別コードが新設、住変（新設）以外の場合は何もしない（nullの場合は、判断不要で以降の処理を実行する）
		
		if (null != kojiakSbtCd)
		{
			if (false == JKUStrConst.CD00577_NEWESTA.equals(kojiakSbtCd))
			{
				return null;
			}
		}
		
		// 同時代表工事案件番号が存在する場合はnullを返して終了する
		if (null != simRepKojiakNo)
		{
			return null;
		}
		
		// ---追加サービス契約番号取得
		
		String retStr = null;
		
		// インターネットサービスまたは電話サービスの場合
		if (JKUStrConst.CD00130_NET.equals(svcCd)
				|| JKUStrConst.CD00130_TEL.equals(svcCd))
		{
			// テレビサービスの追加サービス契約番号を取得する
			retStr = getSvcKeiNo(svcKeiKaisenUcwkNo, JKUStrConst.CD00130_TV);
		}
		// テレビサービスの場合
		else if (JKUStrConst.CD00130_TV.equals(svcCd))
		{
			// インターネットサービスの追加サービス契約番号を取得する
			retStr = getSvcKeiNo(svcKeiKaisenUcwkNo, JKUStrConst.CD00130_NET);
			
			// 存在しない場合のみ、電話サービスの追加サービス契約番号を取得する
			if (null == retStr)
			{
				retStr = getSvcKeiNo(svcKeiKaisenUcwkNo, JKUStrConst.CD00130_TEL);
			}
		}
		
		return retStr;
	}
	
	/**
	 * 追加サービス契約番号取得処理
	 * @param svcKeiKaisenUcwkNo	サービス契約回線内訳番号
	 * @param svcCd					サービスコード
	 * @return	追加サービス契約番号
	 * @throws CAANException
	 */
	public static String getAddSvcKeiNo(String svcKeiKaisenUcwkNo, String svcCd) throws CAANException
	{
		return getAddSvcKeiNo(svcKeiKaisenUcwkNo, svcCd, null, null);
	}
	
	/**
	 * サービス契約番号取得処理
	 * @param svcKeiKaisenUcwkNo	サービス契約回線内訳番号
	 * @param svcCd					サービスコード
	 * @return	追加サービス契約番号
	 * @throws CAANException
	 */
	private static String getSvcKeiNo(String svcKeiKaisenUcwkNo, String svcCd) throws CAANException
	{
		CAANMsg ku0081Msg = new CAANMsg(KU0081ETMsg.class.getName());
		
		// サービス契約回線内訳番号
		ku0081Msg.set(KU0081ETMsg.SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo);
		// サービスコード
		ku0081Msg.set(KU0081ETMsg.SVC_CD, svcCd);
		// サービス契約_工事案件適用終了年月日
		ku0081Msg.set(KU0081ETMsg.SVKEI_KOJIAK_TENDYMD, JKUStrConst.MAX_YMD);
		// 無効フラグ
		ku0081Msg.set(KU0081ETMsg.MK_FLG, JKUStrConst.MK_FLG_YUKO);
		
		CAANMsg[] ku0081MsgArray = new JKUejbKU0081SecProc().findByCondition(ku0081Msg);
		
		return getNewestSvcKeiNo(ku0081MsgArray);
	}
	
	/**
	 * 最新適用開始サービス契約番号取得処理
	 * @param ku0081MsgArray	サービス契約_工事案件情報
	 * @return	最新適用開始サービス契約番号
	 */
	private static String getNewestSvcKeiNo(CAANMsg[] ku0081MsgArray)
	{
		if (null == ku0081MsgArray)
		{
			return null;
		}
		
		int maxTStaYmd = 0;
		int tmpTStaYmd = 0;
		String retSvcKeiNo = null;
		
		// ---サービス契約_工事案件適用開始年月日が最大のものを取得する
		
		for (int i = 0; i < ku0081MsgArray.length; ++i)
		{
			// サービス契約_工事案件適用開始年月日を数値変換する
			tmpTStaYmd = Integer.parseInt(ku0081MsgArray[i].getString(KU0081ETMsg.SVKEI_KOJIAK_TSTAYMD));
			
			if (tmpTStaYmd > maxTStaYmd)
			{
				// 最大値の更新と、戻り値の取得
				maxTStaYmd = tmpTStaYmd;
				retSvcKeiNo = ku0081MsgArray[i].getString(KU0081ETMsg.SVC_KEI_NO);
			}
		}
		return retSvcKeiNo;
	}
}
