/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom  					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACIdoKeiInfoFileCsk
*	ソースファイル名	：JBSbatACIdoKeiInfoFileCsk.java
*	作成者				：富士通　
*	作成日				：2011年07月11日
*＜機能概要＞
*　異動契約情報ファイル蓄積部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/11   富士通		新規作成
*	v4.00.00	2013/02/08   FJ)早崎	【ST2-2013-0000543】対応
*********************************************************************/
package eo.business.service;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatACIFI001;
import eo.business.util.file.JBSbatACIFM052;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;


/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACIdoKeiInfoFileCsk extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**▼▼▼▼▼▼クラス変数追加 開始▼▼▼▼▼▼*/
	
	/** 退避．キー **/
	private String tmpKey = "";
	
	/** 退避．前回出力情報 */
	private String bfOutputInfo = "";
	
	/**▲▲▲▲▲▲クラス変数追加 終了▲▲▲▲▲▲*/
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		
		// 出力情報
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
	
		// ファイル区分
		String fileDiv = inMap.getString(JBSbatACIFM052.FILE_DIV);
		// 請求先番号
		String wkKey   = inMap.getString(JBSbatACIFM052.SEIKY_KEI_NO);


		// キーブレイク または 1レコード目の場合
		if (!tmpKey.equals(wkKey) || tmpKey.length() == 0)
		{
			// 出力情報設定
			outputItem.addOutMapList(getOutputInfo(inMap));

			// キー退避
			tmpKey = wkKey;

			// 前回出力情報更新
			bfOutputInfo = fileDiv;
		}
		// 退避．キー　＝　WKキーの場合
		else
		{
			// 前回出力情報　＝　ファイル区分
			if(bfOutputInfo.equals(fileDiv))
			{
				// 出力情報設定
				outputItem.addOutMapList(getOutputInfo(inMap));
			}
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**▼▼▼▼▼▼メソッド追加 開始▼▼▼▼▼▼*/
	
	/**
	 * サービス契約情報（異動契約）に出力する情報を取得します
	 * 
	 * @param inMap 入力情報
	 * @return JBSbatServiceInterfaceMap 出力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private JBSbatServiceInterfaceMap getOutputInfo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		outMap.setString(JBSbatACIFI001.PRC_GRP_CD,					inMap.get(JBSbatACIFM052.PRC_GRP_CD)); 					// 料金グループコード
		outMap.setString(JBSbatACIFI001.PCRS_CD, 					inMap.get(JBSbatACIFM052.PCRS_CD));						// 料金コースコード
		outMap.setString(JBSbatACIFI001.TRGT_PRC_SVC_CD, 			inMap.get(JBSbatACIFM052.TRGT_PRC_SVC_CD));				// 料金サービスコード
		outMap.setString(JBSbatACIFI001.SEIRI_NO, 					inMap.get(JBSbatACIFM052.SEIRI_NO));					// 整理番号 
		outMap.setString(JBSbatACIFI001.SVC_NO, 					inMap.get(JBSbatACIFM052.SVC_NO));						// サービス番号
		outMap.setString(JBSbatACIFI001.JYUZOKU_SVC_NO, 			inMap.get(JBSbatACIFM052.JYUZOKU_SVC_NO));				// 従属サービス番号
		outMap.setString(JBSbatACIFI001.SEIKY_KEI_NO,				inMap.get(JBSbatACIFM052.SEIKY_KEI_NO));				// 請求契約番号
		outMap.setString(JBSbatACIFI001.WRIB_SVC_KEI_NO, 			inMap.get(JBSbatACIFM052.WRIB_SVC_KEI_NO));				// 割引サービス契約番号
		outMap.setString(JBSbatACIFI001.SVC_STAYMD, 				inMap.get(JBSbatACIFM052.SVC_STAYMD));					// サービス開始日
		outMap.setString(JBSbatACIFI001.SVC_DSL_YMD,				inMap.get(JBSbatACIFM052.SVC_DSL_YMD));					// サービス解約日
		outMap.setString(JBSbatACIFI001.SVC_DLRE, 					inMap.get(JBSbatACIFM052.SVC_DLRE));					// サービス解約理由
		outMap.setString(JBSbatACIFI001.SVC_KAIHK_DAY, 				inMap.get(JBSbatACIFM052.SVC_KAIHK_DAY));				// サービス回復日
		outMap.setString(JBSbatACIFI001.SVC_CANCEL_DAY, 			inMap.get(JBSbatACIFM052.SVC_CANCEL_DAY));				// サービスキャンセル日
		outMap.setString(JBSbatACIFI001.SVC_PAUSE_DAY,				inMap.get(JBSbatACIFM052.SVC_PAUSE_DAY));				// サービス休止日
		outMap.setString(JBSbatACIFI001.SVC_PAUSE_RLS_YMD, 			inMap.get(JBSbatACIFM052.SVC_PAUSE_RLS_YMD));			// サービス休止解除日
		outMap.setString(JBSbatACIFI001.SVC_USE_FAIL_STAYMD, 		inMap.get(JBSbatACIFM052.SVC_USE_FAIL_STAYMD));			// サービス利用不可開始日
		outMap.setString(JBSbatACIFI001.SVC_USE_FAIL_ENDYMD, 		inMap.get(JBSbatACIFM052.SVC_USE_FAIL_ENDYMD));			// サービス利用不可終了日
		outMap.setString(JBSbatACIFI001.CHRG_STAYMD,				inMap.get(JBSbatACIFM052.CHRG_STAYMD));					// 課金開始日
		outMap.setString(JBSbatACIFI001.FIRST_CHRG_STAYMD, 			inMap.get(JBSbatACIFM052.FIRST_CHRG_STAYMD));			// 初回課金開始日
		outMap.setString(JBSbatACIFI001.CHRG_ENDYMD, 				inMap.get(JBSbatACIFM052.CHRG_ENDYMD));					// 課金終了日
		outMap.setBigDecimal(JBSbatACIFI001.SVC_KEIZOKU_MON_CNT, 	inMap.get(JBSbatACIFM052.SVC_KEIZOKU_MON_CNT));			// サービス継続月数
		outMap.setBigDecimal(JBSbatACIFI001.SVC_KEIZOKU_DAY_CNT, 	inMap.get(JBSbatACIFM052.SVC_KEIZOKU_DAY_CNT));			// サービス継続日数
		outMap.setBigDecimal(JBSbatACIFI001.CHRG_KEIZOKU_MON_CNT, 	inMap.get(JBSbatACIFM052.CHRG_KEIZOKU_MON_CNT));		// 課金継続月数
		outMap.setBigDecimal(JBSbatACIFI001.CHRG_KEIZOKU_DAY_CNT, 	inMap.get(JBSbatACIFM052.CHRG_KEIZOKU_DAY_CNT));		// 課金継続日数
		outMap.setBigDecimal(JBSbatACIFI001.KEI_CNT, 				inMap.get(JBSbatACIFM052.KEI_CNT));						// 契約数
		outMap.setBigDecimal(JBSbatACIFI001.MON_CHU_MAX_KEI_CNT, 	inMap.get(JBSbatACIFM052.MON_CHU_MAX_KEI_CNT));			// 月中最大契約数
		outMap.setString(JBSbatACIFI001.AIT_DIV, 					inMap.get(JBSbatACIFM052.AIT_DIV));						// 相対区分
		outMap.setString(JBSbatACIFI001.SIME_DAY,					inMap.get(JBSbatACIFM052.SIME_DAY));					// 締め日
		outMap.setString(JBSbatACIFI001.MANSION_ID, 				inMap.get(JBSbatACIFM052.MANSION_ID));					// マンションＩＤ
		outMap.setString(JBSbatACIFI001.TK_HOSHIKI_KEI_NO,			inMap.get(JBSbatACIFM052.TK_HOSHIKI_KEI_NO));			// 提供方式契約番号
		outMap.setString(JBSbatACIFI001.KANYU_KEI_PAY_HOSHIKI_CD,	inMap.get(JBSbatACIFM052.KANYU_KEI_PAY_HOSHIKI_CD));	// 加入契約支払方式コード 
		outMap.setString(JBSbatACIFI001.TTL_KOSU,					inMap.get(JBSbatACIFM052.TTL_KOSU)); 					// 総戸数

		outMap.setOutFlg(true);		// 出力フラグをtrue
		return outMap;
	}
	
	/**▲▲▲▲▲▲メソッド追加 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
