/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom  					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACKojiFinRptDlySvErrMan
*	ソースファイル名	：JBSbatACKojiFinRptDlySvErrMan.java
*	作成者				：富士通　
*	作成日				：2011年07月11日
*＜機能概要＞
*　工事完了報告遅延サービス契約エラー判定（マン）部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/11   富士通		新規作成
*	v3.00.00	2012/04/26   FJ）冨井	【ANK-0024-04-00】ファイル項目追加
*	v9.00.00	2014/04/25   FJ)狭間	【ANK-2054-00-00】スマートリンク端末補償対応
*********************************************************************/
package eo.business.service;

import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatInterface;
import eo.business.util.file.JBSbatACIFM053;
import eo.common.constant.JACStrConst;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACKojiFinRptDlySvErrMan extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 群締め日(前月) */
	private String gunSimeYmd = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// 群締め日(前月)取得
		JACbatSchdlUtil su = new JACbatSchdlUtil(commonItem);
		try
		{
			String skyYm = null;
			String[] retYmd = new String[2];
			
			// 請求年月
			skyYm = su.getBillDate(super.opeDate, JACStrConst.EVENT_CD_RYOKIN_KEISAN_YMD);
			
			// 請求月前月
			skyYm = JBSbatInterface.adjustMonth(skyYm.concat("01"), -1);
			
			// 群締め日(前月)
			retYmd = su.getUseStrEnd(skyYm.substring(0, 6), JACStrConst.EVENT_CD_USE_STAYMD, JACStrConst.EVENT_CD_USE_ENDYMD);
			this.gunSimeYmd = retYmd[1];
		}
		finally
		{
			su.close();
		}
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		// 課金開始日
		String chrgStayYmd = inMap.getString(JBSbatACIFM053.CHRG_STAYMD);
		
		// 出力ファイル用
		JBSbatOutputItem outItem = new JBSbatOutputItem();
		
		
		// 工事完了報告遅延サービス契約エラー判定
		if (chrgStayYmd.compareTo(this.gunSimeYmd) <= 0)
		// 課金対象外エラー
		{
			outItem.addOutMapList_2(this.makeOutMap(inMap));
		}
		else
		// 課金対象
		{
			outItem.addOutMapList(this.makeOutMap(inMap));
		}
		
		
		return(outItem);
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	
	/**
	 * 課金対象マンションサービス契約情報を作成
	 * 
	 * @param inMap　課金対象マンションサービス契約情報
	 * @return JBSbatServiceInterfaceMap　課金対象マンションサービス契約情報
	 * @throws Exception　業務サービス内で発生した例外全般
	 */
	private JBSbatServiceInterfaceMap makeOutMap(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		outMap.setString(JBSbatACIFM053.SEIRI_NO,
				inMap.getString(JBSbatACIFM053.SEIRI_NO));					// 整理番号
		outMap.setString(JBSbatACIFM053.SVC_SKBT_CD,
				inMap.getString(JBSbatACIFM053.SVC_SKBT_CD));				// 料金サービス識別コード
		outMap.setString(JBSbatACIFM053.PRC_GRP_CD,
				inMap.getString(JBSbatACIFM053.PRC_GRP_CD)); 				// 料金グループコード
		outMap.setString(JBSbatACIFM053.PCRS_CD,
				inMap.getString(JBSbatACIFM053.PCRS_CD));					// 料金コースコード
		outMap.setString(JBSbatACIFM053.PRC_SVC_CD,
				inMap.getString(JBSbatACIFM053.PRC_SVC_CD));				// 料金サービスコード
		outMap.setString(JBSbatACIFM053.SVC_NO,
				inMap.getString(JBSbatACIFM053.SVC_NO));					// サービス番号
		outMap.setString(JBSbatACIFM053.OP_SVKEI_NO,
				inMap.getString(JBSbatACIFM053.OP_SVKEI_NO));				// オプションサービス契約番号
		outMap.setString(JBSbatACIFM053.SEIKY_KEI_NO,
				inMap.getString(JBSbatACIFM053.SEIKY_KEI_NO));				// 請求先番号
		outMap.setString(JBSbatACIFM053.SEIKY_YM,
				inMap.getString(JBSbatACIFM053.SEIKY_YM));					// 請求年月
		outMap.setString(JBSbatACIFM053.WRIB_SVC_KEI_NO,
				inMap.getString(JBSbatACIFM053.WRIB_SVC_KEI_NO));			// 割引サービス契約番号
		outMap.setString(JBSbatACIFM053.WRISVC_TRGT_KEI_NO,
				inMap.getString(JBSbatACIFM053.WRISVC_TRGT_KEI_NO));		// 割引サービス対象契約番号
		outMap.setString(JBSbatACIFM053.SVC_STAYMD,
				inMap.getString(JBSbatACIFM053.SVC_STAYMD));				// サービス開始日
		outMap.setString(JBSbatACIFM053.SVC_DSL_YMD,
				inMap.getString(JBSbatACIFM053.SVC_DSL_YMD));				// サービス解約日
		outMap.setString(JBSbatACIFM053.SVC_DLRE,
				inMap.getString(JBSbatACIFM053.SVC_DLRE));					// サービス解約理由
		outMap.setString(JBSbatACIFM053.SVC_KAIHK_DAY,
				inMap.getString(JBSbatACIFM053.SVC_KAIHK_DAY));				// サービス回復日
		outMap.setString(JBSbatACIFM053.SVC_CANCEL_DAY,
				inMap.getString(JBSbatACIFM053.SVC_CANCEL_DAY));			// サービスキャンセル日
		outMap.setString(JBSbatACIFM053.SVC_PAUSE_DAY,
				inMap.getString(JBSbatACIFM053.SVC_PAUSE_DAY));				// サービス休止日
		outMap.setString(JBSbatACIFM053.SVC_PAUSE_RLS_YMD,
				inMap.getString(JBSbatACIFM053.SVC_PAUSE_RLS_YMD));			// サービス休止解除日
		outMap.setString(JBSbatACIFM053.USE_STAYMD,
				inMap.getString(JBSbatACIFM053.USE_STAYMD));				// 利用開始日
		outMap.setString(JBSbatACIFM053.USE_ENDYMD,
				inMap.getString(JBSbatACIFM053.USE_ENDYMD));				// 利用終了日
		outMap.setBigDecimal(JBSbatACIFM053.USE_DAY_CNT,
				inMap.getBigDecimal(JBSbatACIFM053.USE_DAY_CNT));			// 利用日数
		outMap.setBigDecimal(JBSbatACIFM053.USE_FAIL_DAY_CNT,
				inMap.getBigDecimal(JBSbatACIFM053.USE_FAIL_DAY_CNT));		// 利用不可日数
		outMap.setString(JBSbatACIFM053.CHRG_STAYMD,
				inMap.getString(JBSbatACIFM053.CHRG_STAYMD));				// 課金開始日
		outMap.setString(JBSbatACIFM053.FIRST_CHRG_STAYMD,
				inMap.getString(JBSbatACIFM053.FIRST_CHRG_STAYMD));			// 初回課金開始日
		outMap.setString(JBSbatACIFM053.CHRG_ENDYMD,
				inMap.getString(JBSbatACIFM053.CHRG_ENDYMD));				// 課金終了日
		outMap.setBigDecimal(JBSbatACIFM053.SVC_KEIZOKU_MON_CNT,
				inMap.getBigDecimal(JBSbatACIFM053.SVC_KEIZOKU_MON_CNT));	// サービス継続月数
		outMap.setBigDecimal(JBSbatACIFM053.SVC_KEIZOKU_DAY_CNT,
				inMap.getBigDecimal(JBSbatACIFM053.SVC_KEIZOKU_DAY_CNT));	// サービス継続日数
		outMap.setBigDecimal(JBSbatACIFM053.CHRG_KEIZOKU_MON_CNT,
				inMap.getBigDecimal(JBSbatACIFM053.CHRG_KEIZOKU_MON_CNT));	// 課金継続月数
		outMap.setBigDecimal(JBSbatACIFM053.CHRG_KEIZOKU_DAY_CNT,
				inMap.getBigDecimal(JBSbatACIFM053.CHRG_KEIZOKU_DAY_CNT));	// 課金継続日数
		outMap.setBigDecimal(JBSbatACIFM053.KEI_CNT,
				inMap.getBigDecimal(JBSbatACIFM053.KEI_CNT));				// 契約数
		outMap.setBigDecimal(JBSbatACIFM053.MON_CHU_MAX_KEI_CNT,
				inMap.getBigDecimal(JBSbatACIFM053.MON_CHU_MAX_KEI_CNT));	// 月中最大契約数
		outMap.setString(JBSbatACIFM053.AIT_DIV,
				inMap.getString(JBSbatACIFM053.AIT_DIV));					// 相対区分
		outMap.setString(JBSbatACIFM053.SIME_DAY,
				inMap.getString(JBSbatACIFM053.SIME_DAY));					// 締め日
		outMap.setString(JBSbatACIFM053.MANSION_ID,
				inMap.getString(JBSbatACIFM053.MANSION_ID));				// マンションＩＤ
		outMap.setString(JBSbatACIFM053.TK_HOSHIKI_KEI_NO,
				inMap.getString(JBSbatACIFM053.TK_HOSHIKI_KEI_NO));			// 提供方式契約番号
		outMap.setString(JBSbatACIFM053.KANYU_KEI_PAY_HOSHIKI_CD,
				inMap.getString(JBSbatACIFM053.KANYU_KEI_PAY_HOSHIKI_CD)); 	// 加入契約支払方式コード 
		outMap.setString(JBSbatACIFM053.TTL_KOSU,
				inMap.getString(JBSbatACIFM053.TTL_KOSU)); 					// 総戸数
		outMap.setString(JBSbatACIFM053.SVC_DTL_SKBT_NO,
				inMap.getString(JBSbatACIFM053.SVC_DTL_SKBT_NO)); 			// サービス詳細識別番号

		// 出力
		outMap.setOutFlg(true);
		
		
		return(outMap);
	}
}
