/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom  					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHNkinDataMake
*	ソースファイル名	：JBSbatCHNkinDataMake.java
*	作成者				：富士通　
*	作成日				：2011年05月23日
*＜機能概要＞
*　入金データ作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/05/23	 富士通		新規作成
*	v5.00.00	2013/08/25	 FJ)小柴	【OM-2013-0000882】請求契約存在有無の出力を追加（固定値1）
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatCHIFM042;
import eo.business.util.file.JBSbatCHIFM043;
import eo.common.constant.JACStrConst;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatDateUtil;

/**
 * 入金データ作成<p>
 *<BR>
 * @author 富士通
 */
public class JBSbatCHNkinDataMake extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 請求契約存在有無（有） */
	private static final String SEIKY_KEI_UMU_ARI = "1";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		// 引数有無判定
		if (inMap.getMap().isEmpty()) {
			return null;
		}

		// レイアウト出力制御コード
		String ctlCode = freeItem;

		// 請求年月の翌月末日算出
		String seikyYm = inMap.getString(JBSbatCHIFM042.SEIKY_YM);
		// 末日算出
		String day = JBSbatDateUtil.getEndOfMonth(seikyYm);
		// 翌月算出
		String nextYmd = JBSbatDateUtil.adjustMonth(seikyYm + day, 1);
		
		// 入金データ作成
		JBSbatOutputItem outputItem = makeNkinData(ctlCode, inMap, nextYmd);
		
		return outputItem;
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 請求情報から入金データを作成します。
	 * 
	 * @param ctlCode レイアウト制御コード
	 * @param inMap 入力電文
	 * @param nextYmd 翌月末日
	 * @return outputItem 出力共通電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private JBSbatOutputItem makeNkinData(String ctlCode, JBSbatServiceInterfaceMap inMap, String nextYmd) throws Exception
	{
		
		// 入金経路コード
		String nyukinRouteCd = null;
		// 収納機関コード
		String kaknoBankCd = null;
		
		// クレジットの場合
		if (JACStrConst.LAYOUT_CTL_CODE_CREDIT.equals(ctlCode))
		{
			nyukinRouteCd = JACStrConst.NYKNKEIRCD_CREDIT;
			kaknoBankCd = JACStrConst.SHNKKNCD_CREDIT;
		}
		// 社内使用分の場合
		else if (JACStrConst.LAYOUT_CTL_CODE_SHANAIUSE.equals(ctlCode))
		{
			nyukinRouteCd = JACStrConst.NYKNKEIRCD_SHANAI_USE;
			kaknoBankCd = JACStrConst.SHNKKNCD_SYAYO;
		}
		
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		
		// 入金データ
		JBSbatServiceInterfaceMap nkinDataMap = new JBSbatServiceInterfaceMap();
		
		// 請求契約番号
		nkinDataMap.setString(JBSbatCHIFM043.SEIKY_KEI_NO,					inMap.getString(JBSbatCHIFM042.SEIKY_KEI_NO));
		// 請求年月
		nkinDataMap.setString(JBSbatCHIFM043.SEIKY_YM,						inMap.getString(JBSbatCHIFM042.SEIKY_YM));
		// 請求番号
		nkinDataMap.setString(JBSbatCHIFM043.SEIKY_NO,						inMap.getString(JBSbatCHIFM042.SEIKY_NO));
		// 請求書発行シーケンス
		nkinDataMap.setString(JBSbatCHIFM043.SKS_HAKKO_SEQ,					JACStrConst.KARA_MOJI);
		// 入金経路コード
		nkinDataMap.setString(JBSbatCHIFM043.NYUKIN_ROUTE_CD,				nyukinRouteCd);
		// 収納機関コード
		nkinDataMap.setString(JBSbatCHIFM043.SHUNOKIKAN_CD,					kaknoBankCd);
		// 収納年月日
		nkinDataMap.setString(JBSbatCHIFM043.OUT_ORG_SHUNO_YMD,				nextYmd);
		// 入金額
		nkinDataMap.setString(JBSbatCHIFM043.NYUKIN_AMNT,					inMap.getBigDecimal(JBSbatCHIFM042.SEIKY_AMNT).toString());
		// 領収年月日
		nkinDataMap.setString(JBSbatCHIFM043.RECEIPT_YMD,					nextYmd);
		// 入金処理済フラグ
		nkinDataMap.setString(JBSbatCHIFM043.NYUKIN_SYRZM_FLG,				JACStrConst.NKIN_SYORI_ZUMI_FLG_MI);
		// 窓口金融機関コード
		nkinDataMap.setString(JBSbatCHIFM043.MADOGUCHI_BANK_CD,				JACStrConst.KARA_MOJI);
		// 窓口金融機関支店コード
		nkinDataMap.setString(JBSbatCHIFM043.MADOGUCHI_BANK_SHITEN_CD,		JACStrConst.KARA_MOJI);
		// コンビニエンスストアコード
		nkinDataMap.setString(JBSbatCHIFM043.CVSTORE_CD,					JACStrConst.KARA_MOJI);
		// コンビニ受付店コード
		nkinDataMap.setString(JBSbatCHIFM043.CVSTORE_UK_TEN_CD,				JACStrConst.KARA_MOJI);
		// 業務区分
		nkinDataMap.setString(JBSbatCHIFM043.WORK_DIV,						JACStrConst.KARA_MOJI);
		// 請求契約存在有無
		nkinDataMap.setString(JBSbatCHIFM043.SEIKY_KEI_UMU,					SEIKY_KEI_UMU_ARI);
		
		// 出力フラグON
		nkinDataMap.setOutFlg(true);

		// 出力共通電文設定
		outputItem.addOutMapList(nkinDataMap);
		
		return outputItem;
	}
	
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
