/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKzkSvKeiInfCht
*	ソースファイル名	：JBSbatKKKzkSvKeiInfCht.java
*	作成者				：富士通　
*	作成日				：2011年05月18日
*＜機能概要＞
*　継続分サービス契約情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/05/18   富士通		新規作成
*	v3.01.00	2012/06/14   FJ)北守	【IT1-2012-0000814】
*	v4.01.00	2012/11/30   FJ)上田	【IT2-2012-0001862】
*	v5.00.00	2013/04/03   AS)新居	【TAI-2012-0000142】従量キー項目が未設定時、ログ出力
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM019;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI_DUMMY;
import eo.business.util.table.JBSbatKK_T_SVC_KEI_EOMOBA;
import eo.business.util.table.JBSbatKK_T_SVC_KEI_UCWK;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
* * 継続分サービス契約情報抽出<BR>
*月末に有効なサービス契約情報を、継続契約情報として取得する。 
*料金計算対象として抽出されたサービス契約を、契約抽出の共通フォーマットに編集して出力する。
*<BR>
*1. 月末時点で有効なサービス契約情報を、サービス契約テーブルより取得する。 
*2. 料金計算対象サービス契約情報を出力する。
*<BR>
* @author 富士通
*/
public class JBSbatKKKzkSvKeiInfCht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 契約数 */
	private static final int KEI_CNT = 1;

	/** フリー項目 */
	private String free = "";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// フリー項目[処理区分]
		free = commonItem.getFreeItem();
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		/* 出力共通電文を生成する。 */
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// +++++++++++++++ ver4.01.00 修正開始 +++++++++++++++++++++
		// プラン課金開始年月日が存在する場合、継続分サービス契約情報を抽出
		if(null != inMap.getString(JBSbatKK_T_SVC_KEI.PLAN_CHRG_STAYMD)
				&& 0 != inMap.getString(JBSbatKK_T_SVC_KEI.PLAN_CHRG_STAYMD).trim().length())
		{
			// 従量インターフェイスの場合、キー情報が未設定のレコードは出力対象外
			if(JBSbatKKConst.TRAN_TRGT_JURYO.equals(free))
			{
//				// ネット従量キー(サービス契約内訳番号)
//				String svcKeiUcwkNo = inMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO);
				// モバイル従量キー(事業者用契約ＩＤ)
				String jigyosyaKeiId = inMap.getString(JBSbatKK_T_SVC_KEI_EOMOBA.JIGYOSHA_KEI_ID);
				
//				if((null == svcKeiUcwkNo || 0 == svcKeiUcwkNo.length())
//						&& (null == jigyosyaKeiId || 0 == jigyosyaKeiId.length()) )
				if(null == jigyosyaKeiId || 0 == jigyosyaKeiId.length())
				{
					return outputBean;
				}
				else
				{
					// FTTH用に抽出時に設定したダミー事業者契約用IDの場合、当該値をクリア
					if("DUMMY".equals(jigyosyaKeiId))
					{
						inMap.setString(JBSbatKKIFM019.JIGYOSHA_KEI_ID, "");
					}
				}
			}
			
			/* 料金計算用サービス契約情報レコードの作成 */
			JBSbatServiceInterfaceMap outmap = setOutMap(inMap);
			
			// 出力フラグ
			outmap.setOutFlg(true);
	
			outputBean.addOutMapList(outmap);
		}
		// +++++++++++++++ ver4.01.00修正終了 +++++++++++++++++++++
		
		return outputBean;
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * <dd>メソッド名	：ファイル編集
	 * <dd>メソッド説明	：1.ファイル編集対象項目を取得します。
	 *                    2.取得した項目を元にファイル編集を行います。
	 * @param  inMap     データ取得情報Map
	 * @return outMap    出力Map
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap setOutMap(JBSbatServiceInterfaceMap inMap) throws Exception 
	{
		// 出力情報を設定するMap
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
		
		outmap.setString(JBSbatKKIFM019.CHSHT_KEI_DIV, JKKBatConst.CHSHT_KEI_DIV_10);										// 抽出契約区分
		outmap.setString(JBSbatKKIFM019.SVC_KEI_NO, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));						// サービス契約番号
		outmap.setString(JBSbatKKIFM019.SVC_KEI_UCWK_NO, inMap.getString(JBSbatKK_T_SVC_KEI_UCWK.SVC_KEI_UCWK_NO));			// サービス契約内訳番号 ※従量
		outmap.setString(JBSbatKKIFM019.SVC_CD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_CD));								// サービスコード
		outmap.setString(JBSbatKKIFM019.PRC_GRP_CD, inMap.getString(JBSbatKK_T_SVC_KEI.PRC_GRP_CD));						// 料金グループコード
		outmap.setString(JBSbatKKIFM019.PCRS_CD, inMap.getString(JBSbatKK_T_SVC_KEI.PCRS_CD));								// 料金コースコード
		outmap.setString(JBSbatKKIFM019.PPLAN_CD, inMap.getString(JBSbatKK_T_SVC_KEI.PPLAN_CD));							// 料金プランコード
		// +++++++++++++++ ver3.01.00 削除開始 +++++++++++++++++++++
//		outmap.setString(JBSbatKKIFM019.SVC_STAYMD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_STA_YMD));						// サービス開始年月日
//		outmap.setString(JBSbatKKIFM019.SVC_CHRG_STAYMD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD));				// サービス課金開始年月日
		// +++++++++++++++ ver3.01.00 削除終了 +++++++++++++++++++++
		outmap.setString(JBSbatKKIFM019.PLAN_STAYMD, inMap.getString(JBSbatKK_T_SVC_KEI.PLAN_CHRG_STAYMD));					// プラン課金開始年月日
		outmap.setString(JBSbatKKIFM019.PLAN_ENDYMD, inMap.getString(JBSbatKK_T_SVC_KEI.PLAN_CHRG_ENDYMD));					// プラン課金終了年月日
		outmap.setString(JBSbatKKIFM019.SVC_DSL_YMD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_DSL_YMD));						// サービス解約年月日
		outmap.setString(JBSbatKKIFM019.SVC_DLRE_CD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_DLRE_CD));						// サービス解約理由コード
		outmap.setString(JBSbatKKIFM019.PNLTY_HASSEI_CD, inMap.getString(JBSbatKK_T_SVC_KEI.PNLTY_HASSEI_CD));				// 違約金発生コード
		outmap.setString(JBSbatKKIFM019.PLAN_END_SBT_CD, inMap.getString(JBSbatKK_T_SVC_KEI.PLAN_END_SBT_CD));				// プラン終了種別コード
		outmap.setString(JBSbatKKIFM019.KAIHK_YMD, inMap.getString(JBSbatKK_T_SVC_KEI.KAIHK_YMD));							// 回復年月日
		outmap.setString(JBSbatKKIFM019.SVC_CANCEL_YMD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_CANCEL_YMD));				// サービスキャンセル年月日
		outmap.setString(JBSbatKKIFM019.SVC_ENDYMD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_ENDYMD));						// サービス終了年月日
		outmap.setString(JBSbatKKIFM019.SVC_CHRG_ENDYMD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_ENDYMD));				// サービス課金終了年月日
		outmap.setString(JBSbatKKIFM019.IDO_DIV, inMap.getString(JBSbatKK_T_SVC_KEI.IDO_DIV));								// 異動区分
		outmap.setString(JBSbatKKIFM019.JIGYOSHA_KEI_ID, inMap.getString(JBSbatKK_T_SVC_KEI_EOMOBA.JIGYOSHA_KEI_ID));		// 事業者用契約ID
		outmap.setBigDecimal(JBSbatKKIFM019.KEI_CNT, KEI_CNT);																// 契約数
		outmap.setString(JBSbatKKIFM019.SEIRI_NO, inMap.getString(JBSbatKK_T_SVC_KEI.SEIRI_NO));							// 整理番号
		
		// 休止・中断情報(中断レコードの場合には設定不要)
		if(!JBSbatKKConst.PAUSE_STP_CD_STP.equals(inMap.getString(JBSbatKK_T_SVC_KEI.PAUSE_STP_CD)))
		{
			outmap.setString(JBSbatKKIFM019.PAUSE_STP_CD, inMap.getString(JBSbatKK_T_SVC_KEI.PAUSE_STP_CD));					// 休止中断コード
			outmap.setString(JBSbatKKIFM019.SVC_PAUSE_YMD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_PAUSE_YMD));					// サービス休止年月日
			outmap.setString(JBSbatKKIFM019.SVC_PAUSE_PRC_TSTAYMD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_PAUSE_CHRG_STA_YMD));	// サービス休止課金開始年月日
			outmap.setString(JBSbatKKIFM019.SVC_PAUSE_RLS_YMD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_PAUSE_RLS_YMD));			// サービス休止解除年月日
		}
		
		// +++++++++++++++ ver3.01.00 追加開始 +++++++++++++++++++++
		// [サービス開始年月日]：継続サービス開始年月日 が存在する場合、継続サービス開始年月日を設定
		if (null != inMap.getString(JBSbatKK_T_SVC_KEI.KEIZK_SVC_STAYMD)
				&& 0 != inMap.getString(JBSbatKK_T_SVC_KEI.KEIZK_SVC_STAYMD).trim().length())
		{
			outmap.setString(JBSbatKKIFM019.SVC_STAYMD, inMap.getString(JBSbatKK_T_SVC_KEI.KEIZK_SVC_STAYMD));
		}
		else
		{
			outmap.setString(JBSbatKKIFM019.SVC_STAYMD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_STA_YMD));
		}
		
		// [サービス課金開始年月日]：継続サービス課金開始年月日 が存在する場合、継続サービス課金開始年月日を設定
		if (null != inMap.getString(JBSbatKK_T_SVC_KEI.KEIZK_SVC_CHRG_STAYMD)
				&& 0 != inMap.getString(JBSbatKK_T_SVC_KEI.KEIZK_SVC_CHRG_STAYMD).trim().length())
		{
			outmap.setString(JBSbatKKIFM019.SVC_CHRG_STAYMD, inMap.getString(JBSbatKK_T_SVC_KEI.KEIZK_SVC_CHRG_STAYMD));
		}
		else
		{
			outmap.setString(JBSbatKKIFM019.SVC_CHRG_STAYMD, inMap.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD));
		}
		// +++++++++++++++ ver3.01.00 追加終了 +++++++++++++++++++++
		
		// [提供方式契約番号]：オーナーダミー契約の場合、サービス契約ダミーの複製元提供方式契約番号を設定
		if(JBSbatKKConst.PGRP_OWNER.equals(inMap.getString(JBSbatKK_T_SVC_KEI.PRC_GRP_CD)))
		{
			outmap.setString(JBSbatKKIFM019.TK_HOSHIKI_KEI_NO, inMap.getString(JBSbatKK_T_SVC_KEI_DUMMY.REPLICA_MOTO_TK_HSK_KEI_NO));
		}
		else
		{
			outmap.setString(JBSbatKKIFM019.TK_HOSHIKI_KEI_NO, inMap.getString(JBSbatKK_T_SVC_KEI.TK_HOSHIKI_KEI_NO));
		}
		
		return outmap ;
	}

}
