/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKChoKeiWriFinPic
*	ソースファイル名	：JBSbatKKChoKeiWriFinPic.java
*	作成者				：富士通　
*	作成日				：2012年06月18日
*＜機能概要＞
*　長期継続利用割引終了情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00		2012/06/18  FJ)井熊		新規作成
*	v4.01		2013/02/20  FJ)鷲塚		【ANK-1458-00-00】サービス課金開始日の不正使用対応
*   v4.02		2013/02/21  FJ)泉		【TAI-2012-0000143】バッチ異常終了時のログのメッセージ修正
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatInterface;
import eo.business.common.JKKBatCommon;
import eo.business.util.file.JBSbatKKIFM215;
import eo.business.util.table.JBSbatKK_T_WRIB_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_WRISVC_KEI_UCWK;
import eo.business.util.table.JBSbatKK_T_WRISVC_TG_KEI;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKChoKeiWriFinPic extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 長期継続割引区切り月数 .*/
	private int mCHO_WRI_LOOP_MONTH = 0;
	/** 初回割引開始月数 .*/
	private int mFIRST_START_MONTH = 0;
	/** 業務パラメータ 長期継続利用割引適用可能月数 .*/
	private static final String WORK_PARAM_FIRST = "KK_CHKZWRI_APLY_MCNT";
	/** 業務パラメータ 長期継続利用割引最低利用期間 .*/
	private static final String WORK_PARAM_SECOND = "KK_CHKZWRI_USE_PRD";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// 長期継続割引初回開始月数と継続ループ月数を取得
		String month1 = JKKBatCommon.getWorkParamSetteValue(super.commonItem, WORK_PARAM_FIRST);
		String month2 = JKKBatCommon.getWorkParamSetteValue(super.commonItem, WORK_PARAM_SECOND);
		try
		{
			if(month1 != null && month2 != null)
			{
				this.mFIRST_START_MONTH = Integer.parseInt(month1);
				this.mCHO_WRI_LOOP_MONTH = Integer.parseInt(month2);
			}
		}
		catch(NumberFormatException e)
		{
			// 取得した月数が不正な値
			
			// TAI-2012-0000143 2013/02/21 MOD START
			// String[] msgParam = new String[] { "業務パラメータ：月数" };
			   String[] msgParam = new String[] { "長期継続割引初回開始月数:" + month1 + "、継続ループ月数:" + month2 };
			// TAI-2012-0000143 2013/02/21 MOD END
			
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0090TE, msgParam);
		}
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// ANK-1458-00-00 2013/02/20 MOD START
		// 割引額算出基準年月日を取得
		String start_ymD = inMap.getString(JBSbatKK_T_WRIB_SVC_KEI.WRIB_AMNT_SNST_STDARDYMD);
		if(JKKBatCommon.isYearMonthDay1(start_ymD))
		{
			if(start_ymD == null || "".equals(start_ymD))
			{
				// 日付が不正
				String[] msgParam = new String[] { "割引額算出基準年月日に値がない("
						+ "割引サービス契約番号:"
						+ inMap.getString(JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_NO) + ")"
				};
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0090TE, msgParam);
			}
		}
		// ANK-1458-00-00 2013/02/20 MOD END
		
		// 契約開始年月日の翌月の年月を取得する
		String start_yM = JKKBatCommon.addMonth(start_ymD, 1).substring(0, 6);
		// 経過月数を取得
		int o_month = JBSbatInterface.monthDiff(super.opeDate.substring(0, 6), start_yM, "1");
		
		// 契約開始年月日から初回割引適用月数以上経過していること
		o_month -= mFIRST_START_MONTH;
		// 長期契約割引適用開始から継続ループ月数の区切りかどうかチェック
		if(o_month < 1 || o_month % mCHO_WRI_LOOP_MONTH != 0)
		{
			// 継続区切りではないのでこのレコードをスキップする
			return null;
		}
		
		// =====================================
		// 出力共通電文を作成
		// =====================================
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		// 入出力インターフェースオブジェクト作成
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		// ===========================
		// 長期継続利用割引終了対象情報出力
		// ===========================
		// 割引サービス契約番号
		outMap.setString(JBSbatKKIFM215.WRIB_SVC_KEI_NO, inMap.getString((JBSbatKK_T_WRIB_SVC_KEI.WRIB_SVC_KEI_NO)));
		// 割引サービス契約内訳番号
		outMap.setString(JBSbatKKIFM215.WRIB_SVC_KEI_UCWK_NO, inMap.getString((JBSbatKK_T_WRISVC_KEI_UCWK.WRIB_SVC_KEI_UCWK_NO)));
		// 割引サービス対象契約番号
		outMap.setString(JBSbatKKIFM215.WRIB_SVC_TRGT_KEI_NO, inMap.getString((JBSbatKK_T_WRISVC_TG_KEI.WRIB_SVC_TRGT_KEI_NO)));
		
		// 出力共通電文ファイル１に入出力インターフェースをセット
		outputBean.addOutMapList(outMap);
		// 出力フラグをセット
		outMap.setOutFlg(true);
		// 出力共通電文を返す
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
