/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKSvKeiIfFileTvPlanAdd
*	ソースファイル名	：JBSbatKKSvKeiIfFileTvPlanAdd.java
*	作成者				：富士通　
*	作成日				：2013年11月26日
*＜機能概要＞
*　マンション物件コードにより料金プランコードTV増幅データを作成する。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/11/26  AS)新居		新規作成
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.util.file.JBSbatKKIFM019;
import eo.business.util.file.JBSbatKKIFM564;
import eo.business.util.file.JBSbatKKIFM020;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
* 対象はグループコード11（ｅｏ光テレビ）,13（ｅｏ光テレビ（再送信））
* マンション物件コードにより増幅プランコードでデータを作成、出力する。
*<BR>
* @author 富士通
*/
public class JBSbatKKSvKeiIfFileTvPlanAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	/** 料金プランコード変換用変数 */
	private String outPlanCd = null;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		super.logPrint.printDebugLog("initial start");

		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
		super.logPrint.printDebugLog("initial end");
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute start");
		// 出力共通電文を生成する。
		
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		/* 料金計算用サービス契約インターフェイス情報 */
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		super.logPrint.printDebugLog("料金計算用ファイル出力 start");
		// 料金計算用サービス契約インターフェイス情報レコードの作成
		outMap = setOutMap(inMap);
		outMap.setOutFlg(true);
		// 出力共通電文に入出力インターフェースを設定する。
		outputBean.addOutMapList(outMap);
		
		chgPplanCd(inMap);

		if(outPlanCd != null)
		{
			outMap = setOutMap(inMap);
			outMap.setString(JBSbatKKIFM020.PRC_SVC_CD, JBSbatStringUtil.fillHalfSpace(outPlanCd, 12, true));
			outMap.setOutFlg(true);
			// 出力共通電文に入出力インターフェースを設定する。
			outputBean.addOutMapList(outMap);
		}

		super.logPrint.printDebugLog("料金計算用ファイル出力 end");
		
		super.logPrint.printDebugLog("execute end");
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("termial start");
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		super.logPrint.printDebugLog("termial end");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * <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(JBSbatKKIFM020.PRC_GRP_CD, inMap.getString(JBSbatKKIFM564.PRC_GRP_CD));							// 料金グループコード
		outMap.setString(JBSbatKKIFM020.PCRS_CD, inMap.getString(JBSbatKKIFM564.PCRS_CD));									// 料金コースコード
		outMap.setString(JBSbatKKIFM020.PRC_SVC_CD, inMap.getString(JBSbatKKIFM564.PRC_SVC_CD));							// 料金プランコード
		outMap.setString(JBSbatKKIFM020.SEIRI_NO, inMap.getString(JBSbatKKIFM564.SEIRI_NO));								// 整理番号
		outMap.setString(JBSbatKKIFM020.SVC_NO, inMap.getString(JBSbatKKIFM564.SVC_NO)); 									// サービス番号		
		outMap.setString(JBSbatKKIFM020.JUZOKU_SVC_NO, inMap.getString(JBSbatKKIFM564.JUZOKU_SVC_NO)); 						// 従属サービス番号		
		outMap.setString(JBSbatKKIFM020.SEIKY_KEI_NO, inMap.getString(JBSbatKKIFM564.SEIKY_KEI_NO)); 						// 請求契約番号
		outMap.setString(JBSbatKKIFM020.WRIB_SVC_KEI_NO, inMap.getString(JBSbatKKIFM564.WRIB_SVC_KEI_NO)); 					// 割引サービス契約番号
		outMap.setString(JBSbatKKIFM020.SVC_STAYMD, inMap.getString(JBSbatKKIFM564.SVC_STAYMD)); 							// サービス開始年月日
		outMap.setString(JBSbatKKIFM020.SVC_DSL_YMD, inMap.getString(JBSbatKKIFM564.SVC_DSL_YMD)); 							// サービス解約年月日
		outMap.setString(JBSbatKKIFM020.SVC_DLRE_CD, inMap.getString(JBSbatKKIFM564.SVC_DLRE_CD)); 							// サービス解約理由
		outMap.setString(JBSbatKKIFM020.KAIHK_YMD, inMap.getString(JBSbatKKIFM564.KAIHK_YMD)); 								// サービス回復日
		outMap.setString(JBSbatKKIFM020.SVC_CANCEL_YMD, inMap.getString(JBSbatKKIFM564.SVC_CANCEL_YMD)); 					// サービスキャンセル日
		outMap.setString(JBSbatKKIFM020.SVC_PAUSE_YMD, inMap.getString(JBSbatKKIFM564.SVC_PAUSE_YMD)); 						// サービス休止日
		outMap.setString(JBSbatKKIFM020.SVC_PAUSE_RLS_YMD, inMap.getString(JBSbatKKIFM564.SVC_PAUSE_RLS_YMD)); 				// サービス休止解除日
		outMap.setString(JBSbatKKIFM020.USE_FAIL_STAYMD, inMap.getString(JBSbatKKIFM564.USE_FAIL_STAYMD)); 					// サービス利用不可開始日
		outMap.setString(JBSbatKKIFM020.USE_FAIL_ENDYMD, inMap.getString(JBSbatKKIFM564.USE_FAIL_ENDYMD)); 					// サービス利用不可終了日
		outMap.setString(JBSbatKKIFM020.CHRG_STAYMD, inMap.getString(JBSbatKKIFM564.CHRG_STAYMD)); 							// 課金開始日
		outMap.setString(JBSbatKKIFM020.FIRST_CHRG_STAYMD, inMap.getString(JBSbatKKIFM564.FIRST_CHRG_STAYMD)); 				// 初回課金開始日
		outMap.setString(JBSbatKKIFM020.CHRG_ENDYMD, inMap.getString(JBSbatKKIFM564.CHRG_ENDYMD));							// 課金終了日
		if(inMap.getBigDecimal(JBSbatKKIFM564.SVC_KZK_MON_CNT) != null)
		{
			outMap.setBigDecimal(JBSbatKKIFM020.SVC_KZK_MON_CNT, inMap.getBigDecimal(JBSbatKKIFM564.SVC_KZK_MON_CNT)); 				// サービス継続月数
		}
		if(inMap.getBigDecimal(JBSbatKKIFM564.SVC_KZK_DAY_CNT) != null)
		{
			outMap.setBigDecimal(JBSbatKKIFM020.SVC_KZK_DAY_CNT, inMap.getBigDecimal(JBSbatKKIFM564.SVC_KZK_DAY_CNT)); 				// サービス継続日数
		}
		if(inMap.getBigDecimal(JBSbatKKIFM564.CHRG_KZK_MON_CNT) != null)
		{
			outMap.setBigDecimal(JBSbatKKIFM020.CHRG_KZK_MON_CNT, inMap.getBigDecimal(JBSbatKKIFM564.CHRG_KZK_MON_CNT)); 			// 課金継続月数
		}
		if(inMap.getBigDecimal(JBSbatKKIFM564.CHRG_KZK_DAY_CNT) != null)
		{
			outMap.setBigDecimal(JBSbatKKIFM020.CHRG_KZK_DAY_CNT, inMap.getBigDecimal(JBSbatKKIFM564.CHRG_KZK_DAY_CNT)); 			// 課金継続日数
		}
		if(inMap.getBigDecimal(JBSbatKKIFM564.KEI_CNT) != null)
		{
			outMap.setBigDecimal(JBSbatKKIFM020.KEI_CNT, inMap.getBigDecimal(JBSbatKKIFM564.KEI_CNT));							// 契約数
		}
		if(inMap.getBigDecimal(JBSbatKKIFM564.MON_MAX_KEI_CNT) != null)
		{
			outMap.setBigDecimal(JBSbatKKIFM020.MON_MAX_KEI_CNT, inMap.getBigDecimal(JBSbatKKIFM564.MON_MAX_KEI_CNT));  		// 月中最大契約数
		}
		outMap.setString(JBSbatKKIFM020.AITAI_DIV, inMap.getString(JBSbatKKIFM564.AITAI_DIV));								// 相対区分
		outMap.setString(JBSbatKKIFM020.SIME_DAY, inMap.getString(JBSbatKKIFM564.SIME_DAY)); 								// 締め日
		outMap.setString(JBSbatKKIFM020.MANSION_ID, inMap.getString(JBSbatKKIFM564.MANSION_ID));							// マンションＩＤ
		// outMap.setString(JBSbatKKIFM020.TK_HOSHIKI_KEI_NO, inMap.getString(JBSbatKKIFM564.TK_HOSHIKI_KEI_NO));				// 提供方式契約番号
		outMap.setString(JBSbatKKIFM020.KANYU_KEI_PAY_HOSHIKI_CD, inMap.getString(JBSbatKKIFM564.KANYU_KEI_PAY_HOSHIKI_CD)); // 加入者契約支払方式コード
		outMap.setString(JBSbatKKIFM020.TTL_KOSU, inMap.getString(JBSbatKKIFM564.TTL_KOSU));								// 総戸数
		
		return outMap;
	}
	/**
	 * <dd>メソッド名	：増幅用料金プランコード変換
	 * <dd>メソッド説明	：
	 * @param  inMap     データ取得情報Map
	 * @return pplan_Cd  料金プランコード
	 * @throws Exception
	 * */
	private void chgPplanCd(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		outPlanCd = null;
		
		// 入力レコードの料金プランコードを取得する。
		String inPlanCd = inMap.getString(JBSbatKKIFM564.PRC_SVC_CD).substring(0, 6);
		String inBukknCd = inMap.getString(JBSbatKKIFM564.MANSION_BUKKEN_CD);
		
		super.logPrint.printDebugLog("料金プランコード変換処理 start");
		
		if(inPlanCd.equals(JBSbatKKConst.PPLAN_CD_PA3801))
		{
			if(inBukknCd.equals(JBSbatKKConst.MANSION_BUKKEN_CD_001))
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA3892;
			}
			else if(inBukknCd.equals(JBSbatKKConst.MANSION_BUKKEN_CD_002))
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA3893;
			}
			else
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA3891;
			}
		}

		if(inPlanCd.equals(JBSbatKKConst.PPLAN_CD_PA3901))
		{
			if(inBukknCd.equals(JBSbatKKConst.MANSION_BUKKEN_CD_001))
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA3992;
			}
			else if(inBukknCd.equals(JBSbatKKConst.MANSION_BUKKEN_CD_002))
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA3993;
			}
			else
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA3991;
			}
		}

		if(inPlanCd.equals(JBSbatKKConst.PPLAN_CD_PA3901))
		{
			if(inBukknCd.equals(JBSbatKKConst.MANSION_BUKKEN_CD_001))
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA3992;
			}
			else if(inBukknCd.equals(JBSbatKKConst.MANSION_BUKKEN_CD_002))
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA3993;
			}
			else
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA3991;
			}
		}

		if(inPlanCd.equals(JBSbatKKConst.PPLAN_CD_PA2401))
		{
			if(inBukknCd.equals(JBSbatKKConst.MANSION_BUKKEN_CD_001))
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA2492;
			}
			else if(inBukknCd.equals(JBSbatKKConst.MANSION_BUKKEN_CD_002))
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA2493;
			}
			else
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA2491;
			}
		}

		if(inPlanCd.equals(JBSbatKKConst.PPLAN_CD_PA6401))
		{
			if(inBukknCd.equals(JBSbatKKConst.MANSION_BUKKEN_CD_001))
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA6492;
			}
			else if(inBukknCd.equals(JBSbatKKConst.MANSION_BUKKEN_CD_002))
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA6493;
			}
			else
			{
				outPlanCd = JBSbatKKConst.PPLAN_CD_PA6491;
			}
		}

		super.logPrint.printDebugLog("料金プランコード変換処理 end");
		return;
	}

}
