/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKapKeiWaribStaTrgtCst
*	ソースファイル名	：JBSbatKKKapKeiWaribStaTrgtCst.java
*	作成者				：富士通　
*	作成日				：2012年07月19日
*＜機能概要＞
*　割賦契約割引開始対象情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/07/19   富士通		新規作成
*	v4.00.01	2012/10/25   富士通		IT1-2012-0001703
*	v4.00.02	2013/02/27   富士通		ST3-2013-0000473
*	v4.00.03	2013/05/27   富士通		TG1-2013-0000547
*	v6.00.00	2013/09/27   富士通		ANK-1580-00-00
*	v6.00.01	2013/12/19   富士通		OM-2013-0005053
*********************************************************************/
package eo.business.service;


import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM230;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatStringUtil;

/**
* 割引サービス契約と、割引に紐づく各種契約をチェックして、開始可能な割引情報を抽出する <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKKapKeiWaribStaTrgtCst extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 入力情報（サービス契約.サービス契約番号） */
	private static final String KK0081_SVC_KEI_NO           = "KK0081_SVC_KEI_NO";
	/** 入力情報（サービス契約.ＳＹＳＩＤ） */
	private static final String KK0081_SYSID                = "KK0081_SYSID";
	/** 入力情報（機器提供サービス契約.サービス課金開始年月日） */
	private static final String KK0341_SVC_CHRG_STAYMD      = "KK0341_SVC_CHRG_STAYMD";
	/** 入力情報（割引サービス契約.割引サービス契約番号） */
	private static final String KK0451_WRIB_SVC_KEI_NO      = "KK0451_WRIB_SVC_KEI_NO";
	/** 入力情報（割引サービス契約.世代登録年月日時分秒） */
	private static final String KK0451_GENE_ADD_DTM         = "KK0451_GENE_ADD_DTM";
	/** 入力情報（割引サービス契約.割引サービスコード） */
	private static final String KK0451_WRIB_SVC_CD          = "KK0451_WRIB_SVC_CD";
	/** 入力情報（サービス契約.異動区分） */
	private static final String KK0081_IDO_DIV              = "KK0081_IDO_DIV";
	/** 入力情報（サービス契約.サービス契約ステータス） */
	private static final String KK0081_SVC_KEI_STAT         = "KK0081_SVC_KEI_STAT";
	/** 入力情報（オプションサービス契約.オプションサービス契約番号） */
	private static final String KK0351_OP_SVC_KEI_NO        = "KK0351_OP_SVC_KEI_NO";
	/** 入力情報（オプションサービス契約.異動区分） */
	private static final String KK0351_IDO_DIV              = "KK0351_IDO_DIV";
	/** 入力情報（オプションサービス契約.オプションサービス契約ステータス） */
	private static final String KK0351_OP_SVC_KEI_STAT      = "KK0351_OP_SVC_KEI_STAT";
	/** 入力情報（機器提供サービス契約.機器提供サービス契約番号） */
	private static final String KK0341_KKTK_SVC_KEI_NO      = "KK0341_KKTK_SVC_KEI_NO";
	/** 入力情報（機器提供サービス契約.異動区分） */
	private static final String KK0341_IDO_DIV              = "KK0341_IDO_DIV";
	/** 入力情報（機器提供サービス契約.機器提供サービス契約ステータス） */
	private static final String KK0341_KKTK_SVC_KEI_STAT    = "KK0341_KKTK_SVC_KEI_STAT";
	/** 入力情報（割賦契約・割賦契約課金開始年月日） */
	private static final String KK2541_KAP_KEI_CHRG_STAYMD  = "KK2541_KAP_KEI_CHRG_STAYMD";
/* v4.00.03 mod start ++++++++++++++++++++++++++++++++++++++++++++++++ */
	private static final String KK0351_SVC_CHRG_STAYMD      = "KK0351_SVC_CHRG_STAYMD";
/* v4.00.03 mod end   ++++++++++++++++++++++++++++++++++++++++++++++++ */
	
	/* v6.00.00 add start ++++++++++++++++++++++++++++++++++++++++++++++++ */
	/** 入力情報（割賦契約.割賦プランコード) */
	private static final String KK2541_KAP_PLAN_CD          = "KK2541_KAP_PLAN_CD";
/* v6.00.00 add end   ++++++++++++++++++++++++++++++++++++++++++++++++ */
// v6.00.01 ADD Start
	/** 入力情報（割賦契約.引継元割賦契約番号) */
	private static final String KK2541_HKTGI_MOTO_KAP_KEI_NO = "KK2541_HKTGI_MOTO_KAP_KEI_NO";
// v6.00.01 ADD End
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		super.logPrint.printDebugLog("execute_START");
		
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		//-------------------------------------------
		// 出力判定
		//-------------------------------------------
		boolean filewrite = isFileWrite(inMap);
		
		//-------------------------------------------
		// ファイル出力項目の設定
		//-------------------------------------------
		if(filewrite)
		{
			// 割賦契約割引設定開始対象情報リスト 出力データ格納用
			JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
			
			outmap.setString(JBSbatKKIFM230.SVC_KEI_NO, inMap.getString(KK0081_SVC_KEI_NO));					// サービス契約番号
			outmap.setString(JBSbatKKIFM230.SYSID, inMap.getString(KK0081_SYSID)); 								// ＳＹＳＩＤ
			
/* v4.00.03 mod start ++++++++++++++++++++++++++++++++++++++++++++++++ */
///* v4.00.02 mod start ++++++++++++++++++++++++++++++++++++++++++++++++ */
////		outmap.setString(JBSbatKKIFM230.SVC_CHRG_STAYMD, inMap.getString(KK0341_SVC_CHRG_STAYMD)); 			// サービス課金開始年月日
//			outmap.setString(JBSbatKKIFM230.SVC_CHRG_STAYMD, inMap.getString(KK2541_KAP_KEI_CHRG_STAYMD)); 		// サービス課金開始年月日
///* v4.00.02 mod end   ++++++++++++++++++++++++++++++++++++++++++++++++ */
			
			String kk2541_ChrgStaymd = inMap.getString(KK2541_KAP_KEI_CHRG_STAYMD);
			String kk0351_ChrgStaymd = inMap.getString(KK0351_SVC_CHRG_STAYMD);
			
			// オプションサービス契約と割賦契約のサービス課金開始年月日の比較を行い、新しい日付をファイルに出力する
			if(kk2541_ChrgStaymd.compareTo(kk0351_ChrgStaymd) < 0)
			{
				// オプションサービス契約のサービス課金開始年月日の方が新しい日付
				outmap.setString(JBSbatKKIFM230.SVC_CHRG_STAYMD, kk0351_ChrgStaymd);
			}
			else
			{
				// 割賦契約のサービス課金開始年月日の方が新しい日付
				outmap.setString(JBSbatKKIFM230.SVC_CHRG_STAYMD, kk2541_ChrgStaymd);
			}
/* v4.00.03 mod end   ++++++++++++++++++++++++++++++++++++++++++++++++ */
			
			outmap.setString(JBSbatKKIFM230.WRIB_SVC_KEI_NO, inMap.getString(KK0451_WRIB_SVC_KEI_NO));			// 割引サービス契約番号
			outmap.setString(JBSbatKKIFM230.GENE_ADD_DTM, inMap.getString(KK0451_GENE_ADD_DTM)); 				// 世代登録年月日時分秒
			outmap.setString(JBSbatKKIFM230.WRIB_SVC_CD, inMap.getString(KK0451_WRIB_SVC_CD)); 					// 割引サービスコード
			outmap.setString(JBSbatKKIFM230.SVC_KEI_NO_NET, inMap.getString(KK0081_SVC_KEI_NO)); 				// (ネット契約用) サービス契約番号
			outmap.setString(JBSbatKKIFM230.IDO_DIV_NET, inMap.getString(KK0081_IDO_DIV)); 						// (ネット契約用) 異動区分
			outmap.setString(JBSbatKKIFM230.KKTK_SVC_KEI_NO_KAP, inMap.getString(KK0341_KKTK_SVC_KEI_NO));		// (割賦割引用)   機器提供サービス契約番号
			outmap.setString(JBSbatKKIFM230.IDO_DIV_KAP, inMap.getString(KK0341_IDO_DIV)); 						// (割賦割引用)   異動区分
			outmap.setString(JBSbatKKIFM230.OP_SVC_KEI_NO_PRM, inMap.getString(KK0351_OP_SVC_KEI_NO));			// (プレミアム用) オプションサービス契約番号
			outmap.setString(JBSbatKKIFM230.IDO_DIV_PRM, inMap.getString(KK0351_IDO_DIV)); 						// (プレミアム用) 異動区分
/* v6.00.00 add start ++++++++++++++++++++++++++++++++++++++++++++++++ */			
			outmap.setString(JBSbatKKIFM230.KAP_PLAN_CD, inMap.getString(KK2541_KAP_PLAN_CD));					// 割賦プランコード
/* v6.00.00 add end   ++++++++++++++++++++++++++++++++++++++++++++++++ */				
// v6.00.01 ADD Start
			outmap.setString(JBSbatKKIFM230.HKTG_KAP_KEI_NO, inMap.getString(KK2541_HKTGI_MOTO_KAP_KEI_NO));	// 引継元割賦契約番号
// v6.00.01 ADD End
			
			outmap.setOutFlg(true);
			outputBean.addOutMapList(outmap);
		}
		super.logPrint.printDebugLog("execute_END");
		
		// 出力共通電文を返却
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * ファイルへの出力要否について判定を行う
	 * 
	 * @param  inMap
	 * @return fileWrite
	 * @throws Exception 
	 */
	private boolean isFileWrite(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		/** 
		 *  割引開始判定　
		 * 
		 *   サービス契約ステータス、オプションサービス契約ステータス、機器提供サービス契約ステータスすべてが
		 *   割引開始可能なステータス(「サービス提供中」、「休止・中断中」、「停止中」のいずれか)
		 *   且つ、
		 *   割賦契約の課金開始基準日が決定済（入力あり）
		 * 
		*/
		if (isStartStat(inMap.getString(KK0081_SVC_KEI_STAT)) && 
			isStartStat(inMap.getString(KK0351_OP_SVC_KEI_STAT)) &&
			isStartStat(inMap.getString(KK0341_KKTK_SVC_KEI_STAT)))
		{
			if (!"".equals(JBSbatStringUtil.Rtrim(inMap.getString(KK2541_KAP_KEI_CHRG_STAYMD))))
			{
				return true;
			}
		}
		return false;
	}

	/**
	 * 割引開始可否を判定する
	 * 
	 * サービス契約ステータスが「サービス提供中」、「休止・中断中」、「停止中」のいずれかであれば
	 * 割引開始が可能である。
	 * 
	 * @param  サービス契約ステータス
	 * @return true 割引開始可能　／　false 割引開始不可
	 * @throws Exception 
	 */
	private boolean isStartStat(String state)
	{
		
		if (JKKBatConst.CD_SBT_SVC_KEI_STAT_100.equals(state) || 
			JKKBatConst.CD_SBT_SVC_KEI_STAT_210.equals(state) ||
			JKKBatConst.CD_SBT_SVC_KEI_STAT_220.equals(state))
		{
			return true;
		}
		return false;
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
