/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHKsdTrgtsInfChsht
*	ソースファイル名	：JBSbatCHKsdTrgtsInfChsht.java
*	作成者				：富士通　
*	作成日				：2012年01月21日
*＜機能概要＞
*　貸倒れ対象者情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/01/21   富士通		新規作成
*	v3.00		2012/06/14   FJ）冨井	【ANK-0024-04-00】処理変更
*	v3.01		2012/08/03   FJ）冨井	【TAI-2012-0000094】税額計算部品修正（DBアクセスクラス見直し対応）
*	v4.00.00	2012/12/21   FJ) 藤田	【ST4-2012-0000217】性能改善　利用開始日付の取得を未納債権情報の取得にまとめる
*	v4.01.00	2013/05/29   FJ) 藤田	【TG1-2013-0000325】未納債権抽出条件に債権ステータスを追加する
*	v10.00.00	2014/07/09   FJ) 中作	【ANK-2053-00-00】貸倒れ対象者一覧の免税額追加対応
*********************************************************************/
package eo.business.service;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatCHIFM101;
import eo.business.util.file.JBSbatCHIFM178;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHKsdTrgtsInfChsht extends JBSbatBusinessService
{
// ANK-2053-00-00 DEL STA
//	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
//	/** テーブル(債権)*/
//	private static final String D_TBL_NAME_CH_T_SAIKEN = "CH_T_SAIKEN";
//
//	/** テーブル(料金スケジュール定義)*/
//	private static final String D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI = "CH_M_PRC_SCHDL_TEIGI";
//
//	/** SQL定義キー(CH_SELECT_014)*/
//	private static final String CH_T_SAIKEN_CH_SELECT_014 = "CH_SELECT_014";
//
//	/** テーブルアクセスクラス(債権)*/
//	private JBSbatSQLAccess db_CH_T_SAIKEN = null;
//
//	/** テーブルアクセスクラス(料金スケジュール定義)*/
//	private JBSbatSQLAccess db_CH_M_PRC_SCHDL_TEIGI = null;
//	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
//
//	/** 課税未収金額（KAZEI_AMNT） */
//	private static final String KAZEI_AMNT 	= "KAZEI_AMNT";
//	/** 非課税未収金額（HIKAZEI_AMNT） */
//	private static final String HIKAZEI_AMNT 	= "HIKAZEI_AMNT";
//	/** 0 */
//	private static final String ZERO 	= "0";
//	
//	/** 督促データ識別 */
//	private String tkskDataSkbt 		= null;
//	/** 課税未収金額 */
//	private String kazeiAmnt 			= null;
//	/** 非課税未収金額 */
//	private String hikazeiAmnt 		= null;
//	/** 当月 */
//	private String seikyYM 			= null;
//	
//	/** 料金業務共通クラス */
//	private JACbatRknBusinessUtil jACbatRknBusinessUtil = null;
// ANK-2053-00-00 DEL END
	
// ANK-2053-00-00 ADD STA
	/** 督促データ識別(13:貸倒対象者データ) */
	private static final String TOKUSOKU_DATA_SKBT_13 	= "13";
// ANK-2053-00-00 ADD END
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
// ANK-2053-00-00 DEL STA
//		// DBアクセスクラスを生成します
//		db_CH_T_SAIKEN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_SAIKEN);
//		db_CH_M_PRC_SCHDL_TEIGI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI);
//		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
//		
//		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 + "]");
//		// パラメータ取得クラス生成
//		JACbatParamUtil paramUtil 	= new JACbatParamUtil(commonItem);
//		// 貸倒対象者データ
//		this.tkskDataSkbt 	= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_TKSK_DATA_SKBT_13);
//		// 課税未収金額
//		this.kazeiAmnt 			= paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_KAZEI_AMNT);
//		// 非課税未収金額
//		this.hikazeiAmnt 		= paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_HIKAZEI_AMNT);
//		paramUtil.close();
//		
//		// 料金スケジュール定義アクセス部品初期処理
//		JCHbatSeikyKaknoBusinessUtil schdlUtil = new JCHbatSeikyKaknoBusinessUtil(commonItem);
//		// 請求年月取得
//		this.seikyYM = schdlUtil.getBillYmContain(super.opeDate, JACStrConst.EVENT_CD_PRC_CALC_DAY);
//		schdlUtil.close();
//		
//		// 料金業務共通クラスインスタンス生成
//		this.jACbatRknBusinessUtil = new JACbatRknBusinessUtil(commonItem);
// ANK-2053-00-00 DEL END
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
// ANK-2053-00-00 DEL STA
/*		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert 	inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;
		// 出力情報
		JBSbatOutputItem outputItem 	= new JBSbatOutputItem();
		
		// 退避.督促データ識別＝入力.督促データ識別
		if(this.tkskDataSkbt.equals(inMap.get(JBSbatCHIFM101.TOKUSOKU_DATA_SKBT)))
		{
			// 未納債権情報取得
			this.getMinoSkn(inMap);
			
			JBSbatCommonDBInterface dbMap = db_CH_T_SAIKEN.selectNext();
			
			// 取得結果件数分、処理を継続
			while(dbMap != null)
			{
				// 利用開始日
				String staYmd = this.getStaYmd(dbMap);
				
				// 消費税算出
				String staxAmnt = this.getTaxAmnt(dbMap, staYmd);
				
				// 貸倒情報出力処理
				outputItem.addOutMapList(this.makeKsdInfo(inMap, dbMap, staxAmnt));
				
				dbMap = db_CH_T_SAIKEN.selectNext();
			}
		}
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		return outputItem;
*/		
// ANK-2053-00-00 DEL END
		
// ANK-2053-00-00 ADD STA
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		
		assert 	inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;
		// 出力情報
		JBSbatOutputItem outputItem 	= new JBSbatOutputItem();
		
		// 督促データ識別="13:貸倒対象者データ" 処理対象
		if(TOKUSOKU_DATA_SKBT_13.equals(inMap.get(JBSbatCHIFM101.TOKUSOKU_DATA_SKBT)))
		{
			// 出力情報格納用マップ
			JBSbatServiceInterfaceMap tmpMap 			= new JBSbatServiceInterfaceMap();
			
			// 請求契約番号
			tmpMap.set(JBSbatCHIFM178.SEIKY_KEI_NO, inMap.get(JBSbatCHIFM101.SEIKY_KEI_NO));
			
			tmpMap.setOutFlg(true);
			
			// 請求用請求契約番号情報出力処理
			outputItem.addOutMapList(tmpMap);
		}
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		return outputItem;
		
// ANK-2053-00-00 ADD END
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
// ANK-2053-00-00 DEL STA
//	
//	/**
//	 * 未納債権取得
//	 * @param  inMap            入力電文
//	 * @return JBSbatOutputItem 出力情報
//	 * @throws Exception        業務サービス内で発生した例外全般。
//	 */
//	private void getMinoSkn(JBSbatServiceInterfaceMap inMap) throws Exception
//	{
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getMinoSkn]");
//
//		JBSbatCommonDBInterface paramList	= new JBSbatCommonDBInterface();
//		paramList.setValue(super.systemCode);						// システムコード
//		paramList.setValue(this.kazeiAmnt);							// 業務機能識別コード
//		paramList.setValue(JACStrConst.CHSHT_CHG_CD_1);				// 抽出変換コード
//		paramList.setValue(super.opeDate);							// 料金項目抽出変換適用開始年月日
//		paramList.setValue(super.opeDate);							// 料金項目抽出変換適用終了年月日
//		paramList.setValue(super.opeDate);							// 予約適用年月日
//		paramList.setValue(inMap.get(JBSbatCHIFM101.SEIKY_KEI_NO));	// 請求契約番号
//		paramList.setValue(JACStrConst.SAIKEN_STAT_FIX_SEIKY);	// 債権ステータス 請求確定
//		paramList.setValue(JACStrConst.SAIKEN_STAT_ICHIBU_KAKNO);	// 債権ステータス 一部収納済
//		paramList.setValue(this.seikyYM);							// 債権確定年月
//		paramList.setValue(super.opeDate);							// 督促管理開始年月日
//		paramList.setValue(super.opeDate);							// 督促管理終了年月日
//		paramList.setValue(super.systemCode);						// システムコード
//		paramList.setValue(this.hikazeiAmnt);						// 業務機能識別コード
//		paramList.setValue(JACStrConst.CHSHT_CHG_CD_1);				// 抽出変換コード
//		paramList.setValue(super.opeDate);							// 料金項目抽出変換適用開始年月日
//		paramList.setValue(super.opeDate);							// 料金項目抽出変換適用終了年月日
//		paramList.setValue(super.opeDate);							// 予約適用年月日
//		paramList.setValue(inMap.get(JBSbatCHIFM101.SEIKY_KEI_NO));	// 請求契約番号
//		paramList.setValue(JACStrConst.SAIKEN_STAT_FIX_SEIKY);	// 債権ステータス 請求確定
//		paramList.setValue(JACStrConst.SAIKEN_STAT_ICHIBU_KAKNO);	// 債権ステータス 一部収納済
//		paramList.setValue(this.seikyYM);							// 債権確定年月
//		paramList.setValue(super.opeDate);							// 督促管理開始年月日
//		paramList.setValue(super.opeDate);							// 督促管理終了年月日
//		
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint
//				, "[L][getMinoSkn][paramList=" + paramList.getList().toString() + "]");
//
//		// SQL実行
//		executeCH_T_SAIKEN_CH_SELECT_014(paramList.getList().toArray());
//
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getMinoSkn]");
//	}
//	
//	/**
//	 * 利用開始日を取得します。
//	 * @param  dbMap            未納債権情報
//	 * @return String           利用開始日
//	 * @throws Exception        業務サービス内で発生した例外全般。
//	 */
//	private String getStaYmd(JBSbatCommonDBInterface dbMap) throws Exception
//	{
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getStaYmd]");
//
//		String saikenFixYMD = dbMap.getString(JBSbatCH_T_SAIKEN_UCWK.SAIKEN_FIX_YM);
//		if (!"".equals(saikenFixYMD)){
//			saikenFixYMD = saikenFixYMD + "01";
//		}
//
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getStaYmd]");
//
//		return saikenFixYMD;
//	}
//	
//	/**
//	 * 消費税計算を行う。
//	 * @param  dbMap            未納債権情報
//	 * @param  staYmd           利用開始日
//	 * @return String 税額
//	 * @throws Exception        業務サービス内で発生した例外全般。
//	 */
//	private String getTaxAmnt(JBSbatCommonDBInterface dbMap, String staYmd) throws Exception
//	{
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getTaxAmnt]");
//		
//		String amnt = ZERO;
//		if(!dbMap.getBigDecimal(KAZEI_AMNT).equals(BigDecimal.ZERO))
//		{
//			// 消費税計算
//			BigDecimal[] staxAmnt = this.jACbatRknBusinessUtil.calcTaxCharge(JACStrConst.TAX_CALC_SKBT_CD_STAX, dbMap.getBigDecimal(KAZEI_AMNT), staYmd);
//			amnt = staxAmnt[0].toString();
//		}
//		
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getTaxAmnt]");
//		return amnt; 
//
//	}
//
//	/**
//	 * 貸倒情報出力
//	 * @param  inMap            入力電文
//	 * @param  dbMap       	     未納債権情報
//	 * @param  staxAmnt         税額
//	 * @return JBSbatOutputItem 出力情報
//	 * @throws Exception        業務サービス内で発生した例外全般。
//	 */
//	private JBSbatServiceInterfaceMap makeKsdInfo(JBSbatServiceInterfaceMap inMap
//												, JBSbatCommonDBInterface dbMap
//												, String staxAmnt) throws Exception
//	{
//		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeKsdInfo]");
//		// 出力情報格納用マップ
//		JBSbatServiceInterfaceMap tmpMap 			= new JBSbatServiceInterfaceMap();
//		
//		tmpMap.set(JBSbatCHIFM132.SEIKY_KEI_NO, 	inMap.get(JBSbatCHIFM101.SEIKY_KEI_NO));					// 請求契約番号
//		tmpMap.set(JBSbatCHIFM132.PRC_GRP_CD, 		dbMap.getString(JBSbatCH_T_SAIKEN_UCWK.PRC_GRP_CD));		// 料金グループコード
//		tmpMap.set(JBSbatCHIFM132.MISYU_MON, 		dbMap.getString(JBSbatCH_T_SAIKEN_UCWK.SAIKEN_FIX_YM));		// 未収月
//		tmpMap.set(JBSbatCHIFM132.SEIKY_AMNT, 		dbMap.getBigDecimal(KAZEI_AMNT).add(dbMap.getBigDecimal(HIKAZEI_AMNT)));	// 請求金額
//		tmpMap.set(JBSbatCHIFM132.STAX, 			staxAmnt);													// 消費税
//		tmpMap.set(JBSbatCHIFM132.TOKUSOKU_STAT, 	dbMap.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_STAT));		// 督促ステータス
//
//		tmpMap.setOutFlg(true);
//
//		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeKsdInfo]");
//		return tmpMap;
//	}
// ANK-2053-00-00 DEL END
	/**
	 * 業務サービス終了処理
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
// ANK-2053-00-00 DEL STA
//		// DBアクセスクラスをクローズします
//		db_CH_T_SAIKEN.close();
//		db_CH_M_PRC_SCHDL_TEIGI.close();
// ANK-2053-00-00 DEL END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
// ANK-2053-00-00 DEL STA
//	/**
//	 * SQLKEY(CH_SELECT_014)でDBアクセスを行います。<br>
//	 * <p>
//	 * <b>処理フロー</b><br>
//	 * <pre>
//	 * 1.引数でバイント変数を設定します。<br>
//	 *
//	 * 2.DBアクセスを実行します。<br>
//	 * 
//	 * 3.メソッドの呼び出し方です。<br>
//	 *		引数:
//	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
//	 *		 	システムコード
//	 *		 	業務機能識別コード
//	 *		 	抽出変換コード
//	 *		 	料金項目抽出変換適用開始年月日
//	 *		 	料金項目抽出変換適用終了年月日
//	 *		 	予約適用年月日
//	 *		 	請求契約番号
//	 *		 	債権確定年月
//	 *		 	督促管理開始年月日
//	 *		 	督促管理終了年月日
//	 *		 	システムコード
//	 *		 	業務機能識別コード
//	 *		 	抽出変換コード
//	 *		 	料金項目抽出変換適用開始年月日
//	 *		 	料金項目抽出変換適用終了年月日
//	 *		 	予約適用年月日
//	 *		 	請求契約番号
//	 *		 	債権確定年月
//	 *		 	督促管理開始年月日
//	 *		 	督促管理終了年月日
//	 * </pre>
//	 * <p>
//	 * @param param バイント変数の値配列。
//	 * @throws Exception 業務サービス内で発生した例外全般。
//	 */
//	private void executeCH_T_SAIKEN_CH_SELECT_014(Object[] param) throws Exception
//	{
//		// バイント変数のリストを生成します
//		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
//		paramList.setValue(param[0].toString());
//		paramList.setValue(param[1].toString());
//		paramList.setValue(param[2].toString());
//		paramList.setValue(param[3].toString());
//		paramList.setValue(param[4].toString());
//		paramList.setValue(param[5].toString());
//		paramList.setValue(param[6].toString());
//		paramList.setValue(param[7].toString());
//		paramList.setValue(param[8].toString());
//		paramList.setValue(param[9].toString());
//		paramList.setValue(param[10].toString());
//		paramList.setValue(param[11].toString());
//		paramList.setValue(param[12].toString());
//		paramList.setValue(param[13].toString());
//		paramList.setValue(param[14].toString());
//		paramList.setValue(param[15].toString());
//		paramList.setValue(param[16].toString());
//		paramList.setValue(param[17].toString());
//		paramList.setValue(param[18].toString());
//		paramList.setValue(param[19].toString());
//		paramList.setValue(param[20].toString());
//		paramList.setValue(param[21].toString());
//		paramList.setValue(param[22].toString());
//		paramList.setValue(param[23].toString());
//
//		// DBアクセスを実行します
//		db_CH_T_SAIKEN.selectBySqlDefine(paramList, CH_T_SAIKEN_CH_SELECT_014);
//	}
// ANK-2053-00-00 DEL END
}
