/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHTogtuSikyDataCst
*	ソースファイル名	：JBSbatCHTogtuSikyDataCst.java
*	作成者				：富士通　
*	作成日				：2011年08月19日
*＜機能概要＞
*　当月請求データ抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/19   富士通		新規作成
*	v3.00		2012/05/07	 FJ)古谷	【ANK-0024-04-00】ファイル項目の追加
*********************************************************************/
package eo.business.service;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil.FillType;
import eo.business.util.file.JBSbatCHIFM070;
import eo.business.util.table.JBSbatCH_T_SEIKY;
import eo.business.util.table.JBSbatCH_T_SEIKY_UCWK;
import eo.business.util.table.JBSbatCH_T_TOKUSOKU;
import eo.common.constant.JACStrConst;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;

/**
* 当月請求データ抽出 <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHTogtuSikyDataCst extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 請求金額 */
	private static final String SEIKY_AMNT = "SEIKY_AMNT";

	/** 消費税額 */
	private static final String STAX_AMNT = "STAX_AMNT";

	/** 機能コード（当月請求データ抽出） */
	private static final String FUNC_CD_TOGTU_SEIKY_CST = "1";

//	/** 機能コード（口振有領収データ抽出） */
//	private static final String FUNC_CD_RECEIPT_CST_KHRI_ARI = "2";

	/** 機能コード（口振無領収データ抽出） */
	private static final String FUNC_CD_RECEIPT_CST_KHRI_NSI = "3";
	
	/** 当月_請求．請求番号列名 */
	private static final String TOGETSU_SEIKY_NO = "TOUGETSU_SEIKY_NO";

	/** 桁数(同封コード) */
	private static final int DOFU_CD_LENGTH = 12;

	/** 請求収納業務共通クラス */
	private JCHbatSeikyKaknoBusinessUtil seikyUtil = null;

	/**
	 * 初期処理
	 * @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, "[L][initial][opeDate=" + super.opeDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItem=" + super.freeItem + "]");

		this.seikyUtil = new JCHbatSeikyKaknoBusinessUtil(commonItem);

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]");
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		return this.makeOutputBean(inMap);
		
		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		this.seikyUtil.close();
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 出力電文(当月請求データ)を取得します。
	 * 
	 * @param inMap 入力電文
	 * @return JBSbatOutputItem 出力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private JBSbatOutputItem makeOutputBean(JBSbatServiceInterfaceMap inMap) throws Exception 
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputBean]");

		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();

		// 01. 請求番号
		outmap.setString(JBSbatCHIFM070.SEIKY_NO,			inMap.get(JBSbatCH_T_SEIKY.SEIKY_NO));
		// 02. 請求契約番号
		outmap.setString(JBSbatCHIFM070.SEIKY_KEI_NO,		inMap.get(JBSbatCH_T_SEIKY.SEIKY_KEI_NO));
		// 03. 請求年月
		outmap.setString(JBSbatCHIFM070.SEIKY_YM,			inMap.get(JBSbatCH_T_SEIKY.SEIKY_YM));
		// 04. 支払方法コード
		outmap.setString(JBSbatCHIFM070.PAY_WAY_CD,			inMap.get(JBSbatCH_T_SEIKY.SEIKY_WAY_CD));
		// 05. 請求金額(請求内訳．金額)
		// 料金項目コード「請求額」で取得した請求内訳．金額（入力電文マップキーは「SEIKY_AMNT」）
		outmap.setString(JBSbatCHIFM070.SEIKY_AMNT,			inMap.get(SEIKY_AMNT));
		// 06. 支払期限年月日
		outmap.setString(JBSbatCHIFM070.PAY_KIGEN_YMD,		inMap.get(JBSbatCH_T_SEIKY.PAY_KIGEN_YMD));
		// 07. 利用開始年月日
		outmap.setString(JBSbatCHIFM070.USE_STAYMD,			inMap.get(JBSbatCH_T_SEIKY_UCWK.USE_STAYMD));
		// 08. 利用終了年月日
		outmap.setString(JBSbatCHIFM070.USE_ENDYMD,			inMap.get(JBSbatCH_T_SEIKY_UCWK.USE_ENDYMD));
		// 09. 消費税額(請求内訳．金額)
		// 料金項目コード「消費税額」で取得した請求内訳．金額（入力電文マップキーは「STAX_AMNT」）
		outmap.setString(JBSbatCHIFM070.AMNT,				inMap.get(STAX_AMNT));
		// 10. 請求方法コード
		outmap.setString(JBSbatCHIFM070.SEIKY_WAY_CD,		inMap.get(JBSbatCH_T_SEIKY.SEIKY_WAY_CD));
		// 11. 金融機関コード
		outmap.setString(JBSbatCHIFM070.BANK_CD,			inMap.get(JBSbatCH_T_SEIKY.BANK_CD));
		// 12. 金融機関支店コード
		outmap.setString(JBSbatCHIFM070.BANK_SHITEN_CD,		inMap.get(JBSbatCH_T_SEIKY.BANK_SHITEN_CD));
		// 13. 口座種別コード
		outmap.setString(JBSbatCHIFM070.YOKIN_SHUMOKU_CD,	inMap.get(JBSbatCH_T_SEIKY.YOKIN_SHUMOKU_CD));
		// 14. 口座番号
		outmap.setString(JBSbatCHIFM070.KOZA_NO,			inMap.get(JBSbatCH_T_SEIKY.KOZA_NO));
		// 15. 通帳記号
		outmap.setString(JBSbatCHIFM070.TSUCHO_SYMBOL,		inMap.get(JBSbatCH_T_SEIKY.TSUCHO_SYMBOL));
		// 16. 通帳番号
		outmap.setString(JBSbatCHIFM070.TSUCHO_NO,			inMap.get(JBSbatCH_T_SEIKY.TSUCHO_NO));
		// 17. 口座名義人カナ名
		outmap.setString(JBSbatCHIFM070.KOZA_MEIGIN_KANA,	inMap.get(JBSbatCH_T_SEIKY.KOZA_MEIGIN_KANA));
		// 機能コード"1"（当月請求データ抽出）の場合
		if(super.freeItem.equals(FUNC_CD_TOGTU_SEIKY_CST))
		{
			// 18. クレジットカード会社コード
			outmap.setString(JBSbatCHIFM070.CRECARD_COMP_CD,	inMap.get(JBSbatCH_T_SEIKY.CRECARD_COMP_CD));
			// 19. クレジットカード番号(請求．クレジットカード番号)
			// TODO クレジット暗号化暫定対応 
			// outmap.setString(JBSbatCHIFM070.CRECARD_NO,			inMap.get(JBSbatCH_T_SEIKY.CRECARD_NO));
			outmap.setString(JBSbatCHIFM070.CRECARD_NO,			JACStrConst.KARA_MOJI);
			// 20. クレジット交換コード(請求．クレジット交換コード)
			outmap.setString(JBSbatCHIFM070.CREDIT_KOKAN_CD,	inMap.get(JBSbatCH_T_SEIKY.CREDIT_KOKAN_CD));
			// 21. クレジットカード名義カナ名(請求．クレジットカード名義カナ名)
			outmap.setString(JBSbatCHIFM070.CRECARD_NM_KANA,	inMap.get(JBSbatCH_T_SEIKY.CRECARD_NM_KANA));
			// 22. オーソリ結果フラグ(請求．オーソリ結果フラグ)
			outmap.setString(JBSbatCHIFM070.AUTHORI_RSLT_CD,	inMap.get(JBSbatCH_T_SEIKY.AUTHORI_RSLT_CD));
		}
		// 機能コード"1"（当月請求データ抽出）
		// または機能コード"3"（当月口振請求無領収データ抽出）の場合
		if (super.freeItem.equals(FUNC_CD_TOGTU_SEIKY_CST)
			|| super.freeItem.equals(FUNC_CD_RECEIPT_CST_KHRI_NSI))
		{
			// 23. 同封コード(請求．同封コード)
			outmap.setString(JBSbatCHIFM070.DOFU_CD,					this.seikyUtil.fillString(FillType.HalfSpace, inMap.getString(JBSbatCH_T_SEIKY.DOFU_CD), DOFU_CD_LENGTH, true));
			// 24. 送付先住所コード(請求．送付先住所コード)
			outmap.setString(JBSbatCHIFM070.SOHUS_AD_CD,				inMap.get(JBSbatCH_T_SEIKY.SOHUS_AD_CD));
			// 25. 送付先郵便番号(請求．送付先郵便番号)
			outmap.setString(JBSbatCHIFM070.SOHUS_PCD,					inMap.get(JBSbatCH_T_SEIKY.SOHUS_PCD));
			// 26. 送付先都道府県名(請求．送付先都道府県名)
			outmap.setString(JBSbatCHIFM070.SOHUS_STATE_NM,				inMap.get(JBSbatCH_T_SEIKY.SOHUS_STATE_NM));
			// 27. 送付先市区町村名(請求．送付先市区町村名)
			outmap.setString(JBSbatCHIFM070.SOHUS_CITY_NM,				inMap.get(JBSbatCH_T_SEIKY.SOHUS_CITY_NM));
			// 28. 送付先大字通称名(請求．送付先大字通称名)
			outmap.setString(JBSbatCHIFM070.SOHUS_OAZTSU_NM,			inMap.get(JBSbatCH_T_SEIKY.SOHUS_OAZTSU_NM));
			// 29. 送付先字丁目名(請求．送付先字丁目名)
			outmap.setString(JBSbatCHIFM070.SOHUS_AZCHO_NM,				inMap.get(JBSbatCH_T_SEIKY.SOHUS_AZCHO_NM));
			// 30. 送付先住所番地号(請求．送付先住所番地号)
			outmap.setString(JBSbatCHIFM070.SOHUS_AD_BNCHIGO,			inMap.get(JBSbatCH_T_SEIKY.SOHUS_AD_BNCHIGO));
			// 31. 送付先住所補記・建物名(請求．送付先住所補記・建物名)
			outmap.setString(JBSbatCHIFM070.SOHUS_ADRTTM,				inMap.get(JBSbatCH_T_SEIKY.SOHUS_ADRTTM));
			// 32. 送付先住所補記・部屋番号(請求．送付先住所補記・部屋番号)
			outmap.setString(JBSbatCHIFM070.SOHUS_ADRRM,				inMap.get(JBSbatCH_T_SEIKY.SOHUS_ADRRM));
			// 33. 送付先名(請求．送付先名)
			outmap.setString(JBSbatCHIFM070.SOHUS_NM,					inMap.get(JBSbatCH_T_SEIKY.SOHUS_NM));
			// 34. 送付先部課名(請求．送付先部課名)
			outmap.setString(JBSbatCHIFM070.SOHUS_BKM,					inMap.get(JBSbatCH_T_SEIKY.SOHUS_BKM));
			// 35. 送付先担当名(請求．送付先担当名)
			outmap.setString(JBSbatCHIFM070.SOHUS_TNTSHA_NM,			inMap.get(JBSbatCH_T_SEIKY.SOHUS_TNTSHA_NM));
			// 36. 請求契約ステータス(請求．請求契約ステータス)
			outmap.setString(JBSbatCHIFM070.SKHK_SVKEI_STAT_CD,			inMap.get(JBSbatCH_T_SEIKY.SKHK_SVKEI_STAT_CD));
			// 37. 請求契約解約理由コード(請求．請求契約解約理由コード)
			outmap.setString(JBSbatCHIFM070.SKHK_SVKEI_DLRE_SKBT_CD,	inMap.get(JBSbatCH_T_SEIKY.SKHK_SVKEI_DLRE_SKBT_CD));
			// 38. 請求書発行要否(請求．請求書発行要否)
			outmap.setString(JBSbatCHIFM070.SEIKYUS_HAKKO_YH,			inMap.get(JBSbatCH_T_SEIKY.SEIKYUS_HAKKO_YH));
			// 39. 督促ステータス(請求．督促ステータス)
			outmap.setString(JBSbatCHIFM070.TOKUSOKU_STAT,				inMap.get(JBSbatCH_T_TOKUSOKU.TOKUSOKU_STAT));
			// 40. 申込時支払方法
			outmap.setString(JBSbatCHIFM070.MSKM_PAY_WAY_CD,			inMap.get(JBSbatCH_T_SEIKY.NEXT_SEIKY_WAY_DIV));
			// 41. 強制窓口フラグ(請求．強制窓口フラグ)
			outmap.setString(JBSbatCHIFM070.KYOSEI_MADOGUCHI_FLG,		inMap.get(JBSbatCH_T_SEIKY.KYOSEI_MADOGUCHI_FLG));
		}

		// 42. 合算請求有無フラグ
		if (super.freeItem.equals(FUNC_CD_RECEIPT_CST_KHRI_NSI))
		{
			// 機能コード（口振無領収データ抽出）の場合
			// 合算請求なし
			outmap.setString(JBSbatCHIFM070.GSAN_SEIKY_UMU_FLG,		JACStrConst.GASSAN_SEIKY_UM_FLG_NASHI);
		}

		// 43. 前受金相殺有無フラグ
		// 機能コード（口振無領収データ抽出）の場合
		if (super.freeItem.equals(FUNC_CD_RECEIPT_CST_KHRI_NSI))
		{
			// 前受金相殺なし
			outmap.setString(JBSbatCHIFM070.MAEUKKIN_SOSAI_UMU_FLG,	JACStrConst.MAEUKKIN_SOSAI_UM_FLG_NASHI);
		}

		// 44. 領収証泣き別れ有無フラグ
		// 機能コード（口振無領収データ抽出）の場合
		if (super.freeItem.equals(FUNC_CD_RECEIPT_CST_KHRI_NSI))
		{
			// 当月_請求．請求番号がある場合
			String seikyNo = inMap.getString(TOGETSU_SEIKY_NO);
			if ((seikyNo != null) && (seikyNo.length() > 0))
			{
				// あり
				outmap.setString(JBSbatCHIFM070.RECEIPT_NAKIWAKARE_UMU_FLG,	JACStrConst.RECEIPT_NAKIWAKARE_UMU_FLG_ARI);
			}
			else
			{
				// なし
				outmap.setString(JBSbatCHIFM070.RECEIPT_NAKIWAKARE_UMU_FLG,	JACStrConst.RECEIPT_NAKIWAKARE_UMU_FLG_NSI);
			}
		}
		// 機能コード（当月請求データ抽出）の場合
		else if (super.freeItem.equals(FUNC_CD_TOGTU_SEIKY_CST))
		{
			// なし
			outmap.setString(JBSbatCHIFM070.RECEIPT_NAKIWAKARE_UMU_FLG,		JACStrConst.RECEIPT_NAKIWAKARE_UMU_FLG_NSI);
		}

		// ファイル出力する
		outmap.setOutFlg(true);
		
		// 出力共通電文に設定
		outputBean.addOutMapList(outmap);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutputBean][outmap=" + outmap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutputBean]");
		
		return outputBean;
	}

}
