/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JBSbatCHKsdAddTgSaikenUcwkCst
 *	ソースファイル名	：JBSbatCHKsdAddTgSaikenUcwkCst.java
 *	作成者				：富士通　
 *	作成日				：2014年07月15日
 *＜機能概要＞
 *　貸倒登録対象情報債権内訳抽出部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v10.00.00	2014/07/15   富士通		新規作成
 *********************************************************************/
package eo.business.service;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatCHIFM178;
import eo.business.util.file.JBSbatCHIFM232;
import eo.business.util.table.JBSbatCH_T_SAIKEN;
import eo.business.util.table.JBSbatCH_T_SAIKEN_UCWK;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
 * (クラスの機能概要)
 * <p>
 *<BR>
 * 
 * @author 富士通
 */
public class JBSbatCHKsdAddTgSaikenUcwkCst extends JBSbatBusinessService
{
	/** ▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼ */
	/** テーブル(債権内訳) */
	private static final String D_TBL_NAME_CH_T_SAIKEN_UCWK = "CH_T_SAIKEN_UCWK";

	/** SQL定義キー(CH_SELECT_002) */
	private static final String CH_T_SAIKEN_UCWK_CH_SELECT_002 = "CH_SELECT_002";

	/** SQL定義キー(CH_SELECT_003) */
	private static final String CH_T_SAIKEN_UCWK_CH_SELECT_003 = "CH_SELECT_003";

	/** テーブルアクセスクラス(債権内訳) */
	private JBSbatSQLAccess db_CH_T_SAIKEN_UCWK = null;
	/** ▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲ */

	/** 処理モード_貸倒登録対象の充当額・前受金充当額の抽出 */
	private static final String KSD_ADD_TG = "0";

	/** 処理モード_貸倒れ対象者の充当額・前受金充当額の抽出 */
	private static final String KSD_TRGTS = "1";

	/** 処理モード */
	private String prcMode = null;

	/** 業務機能識別コード＿料金項目コード（前受金充当額（請求先単位） */
	private String workKinoSkbCd1 = null;

	/** 業務機能識別コード＿料金項目コード（充当額＿合計） */
	private String workKinoSkbCd2 = null;

	/**
	 * 初期処理
	 * 
	 * @param JBSbatCommonItem commonItem バッチ共通パラメータ電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼ */
		/** ▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼ */
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");

		// DBアクセスクラスを生成します
		db_CH_T_SAIKEN_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_SAIKEN_UCWK);
		/** ▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲ */

		// 処理モード取得
		this.prcMode = super.freeItem;

		// 業務パラメータ取得
		// パラメータ取得部品の初期処理
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		// 業務機能識別コード＿料金項目コード（前受金充当額（請求先単位）取得
		this.workKinoSkbCd1 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_MAEUK_JT_SIKY);
		// 業務機能識別コード＿料金項目コード（充当額＿合計）取得
		this.workKinoSkbCd2 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_JUTO_GOKEI);
		// パラメータ取得部品のクローズ処理
		paramUtil.close();

		/** ▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲ */
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][opeDate=" + super.opeDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItem=" + super.freeItem + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][prcMode=" + this.prcMode + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][workKinoSkbCd1=" + this.workKinoSkbCd1 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][workKinoSkbCd2=" + this.workKinoSkbCd2 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	}

	/**
	 * 主処理
	 * 
	 * @param inMap 入力電文
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		/** ▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼ */

		// ＤＢアクセス用のパラメータ定義
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		// 請求契約番号
		paramList.setValue(inMap.getString(JBSbatCHIFM178.SEIKY_KEI_NO));
		// 債権償却年月日
		if (KSD_ADD_TG.equals(prcMode))
		{
			// 処理モードが 貸倒登録対象の充当額・前受金充当額の抽出 の場合
			paramList.setValue(super.opeDate);
		}
		// 業務機能識別コード
		paramList.setValue(workKinoSkbCd1);
		// 業務機能識別コード
		paramList.setValue(workKinoSkbCd2);
		// 料金項目抽出変換適用開始年月日
		paramList.setValue(super.opeDate);
		// 料金項目抽出変換適用終了年月日
		paramList.setValue(super.opeDate);

		if (KSD_ADD_TG.equals(prcMode))
		{
			// 処理モードが 貸倒登録対象の充当額・前受金充当額の抽出 の場合
			executeCH_T_SAIKEN_UCWK_CH_SELECT_002(paramList.getList().toArray());

		}
		else if (KSD_TRGTS.equals(prcMode))
		{
			// 処理モードが 貸倒れ対象者の充当額・前受金充当額の抽出 の場合
			executeCH_T_SAIKEN_UCWK_CH_SELECT_003(paramList.getList().toArray());
		}
		else
		{
			// 上記以外はシステムエラー
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0530CE, new String[] { "パラメータが不正です。(パラメータ名:FREE)" });
		}

		// レコード読み込み
		JBSbatCommonDBInterface record = db_CH_T_SAIKEN_UCWK.selectNext();

		// 出力共通電文オブジェクト生成/
		JBSbatOutputItem outputItem = new JBSbatOutputItem();

		while (record != null)
		{
			// 取得結果が存在する場合

			// 出力データ編集
			JBSbatServiceInterfaceMap outputMap = makeOutPutMap(record);
			// 出力フラグ設定
			outputMap.setOutFlg(true);
			// ファイル出力
			outputItem.addOutMapList(outputMap);

			// 次レコード取得
			record = db_CH_T_SAIKEN_UCWK.selectNext();
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
		/** ▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲ */
	}

	/**
	 * 業務サービス終了処理
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public void terminal() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		/** ▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼ */
		/** ▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼ */
		// DBアクセスクラスをクローズします
		db_CH_T_SAIKEN_UCWK.close();
		/** ▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲ */
		/** ▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲ */
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	}

	/** ▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼ */
	/**
	 * SQLKEY(CH_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * 
	 * <pre>
	 * 1.引数でバイント変数を設定します。&lt;br&gt;
	 * 
	 * 2.DBアクセスを実行します。&lt;br&gt;
	 * 
	 * 3.メソッドの呼び出し方です。&lt;br&gt;
	 * 	引数:
	 * 	param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * 	 	請求契約番号
	 * 	 	債権償却年月日
	 * 	 	業務機能識別コード
	 * 	 	業務機能識別コード
	 * 	 	料金項目抽出変換適用開始年月日
	 * 	 	料金項目抽出変換適用終了年月日
	 * </pre>
	 * <p>
	 * 
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_SAIKEN_UCWK_CH_SELECT_002(Object[] param) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][executeCH_T_SAIKEN_UCWK_CH_SELECT_002]");

		// バイント変数のリストを生成します
		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());

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][executeCH_T_SAIKEN_UCWK_CH_SELECT_002][paramList=" + paramList.getList().toString() + "]");

		// DBアクセスを実行します
		db_CH_T_SAIKEN_UCWK.selectBySqlDefine(paramList, CH_T_SAIKEN_UCWK_CH_SELECT_002);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][executeCH_T_SAIKEN_UCWK_CH_SELECT_002]");
	}

	/** ▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼ */
	/**
	 * SQLKEY(CH_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * 
	 * <pre>
	 * 1.引数でバイント変数を設定します。&lt;br&gt;
	 * 
	 * 2.DBアクセスを実行します。&lt;br&gt;
	 * 
	 * 3.メソッドの呼び出し方です。&lt;br&gt;
	 * 	引数:
	 * 	param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * 	 	請求契約番号
	 * 	 	業務機能識別コード
	 * 	 	業務機能識別コード
	 * 	 	料金項目抽出変換適用開始年月日
	 * 	 	料金項目抽出変換適用終了年月日
	 * </pre>
	 * <p>
	 * 
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_SAIKEN_UCWK_CH_SELECT_003(Object[] param) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][executeCH_T_SAIKEN_UCWK_CH_SELECT_003]");
		// バイント変数のリストを生成します
		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());

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][executeCH_T_SAIKEN_UCWK_CH_SELECT_003][paramList=" + paramList.getList().toString() + "]");

		// DBアクセスを実行します
		db_CH_T_SAIKEN_UCWK.selectBySqlDefine(paramList, CH_T_SAIKEN_UCWK_CH_SELECT_003);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][executeCH_T_SAIKEN_UCWK_CH_SELECT_003]");
	}

	/** ▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲ */

	/**
	 * 出力データ編集
	 * 
	 * @param record 抽出結果
	 * @return 編集結果
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private JBSbatServiceInterfaceMap makeOutPutMap(JBSbatCommonDBInterface record) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutPutMap]");

		// 編集結果
		JBSbatServiceInterfaceMap outputMap = new JBSbatServiceInterfaceMap();

		// 請求契約番号
		outputMap.setString(JBSbatCHIFM232.SEIKY_KEI_NO, record.getString(JBSbatCH_T_SAIKEN.SEIKY_KEI_NO));
		// 債権番号
		outputMap.setString(JBSbatCHIFM232.SAIKEN_NO, record.getString(JBSbatCH_T_SAIKEN.SAIKEN_NO));
		// 料金グループコード
		outputMap.setString(JBSbatCHIFM232.PRC_GRP_CD, record.getString(JBSbatCH_T_SAIKEN_UCWK.PRC_GRP_CD));
		// 料金コースコード
		outputMap.setString(JBSbatCHIFM232.PCRS_CD, record.getString(JBSbatCH_T_SAIKEN_UCWK.PCRS_CD));
		// 料金サービスコード
		outputMap.setString(JBSbatCHIFM232.PRC_SVC_CD, record.getString(JBSbatCH_T_SAIKEN_UCWK.PRC_SVC_CD));
		// 料金項目コード
		outputMap.setString(JBSbatCHIFM232.PRC_KMK_CD, record.getString(JBSbatCH_T_SAIKEN_UCWK.PRC_KMK_CD));
		// 債権年月
		outputMap.setString(JBSbatCHIFM232.SAIKEN_YM, record.getString(JBSbatCH_T_SAIKEN.SAIKEN_YM));
		// 請求種別コード
		outputMap.setString(JBSbatCHIFM232.SEIKY_SBT_CD, record.getString(JBSbatCH_T_SAIKEN.SEIKY_SBT_CD));
		// 金額
		outputMap.setBigDecimal(JBSbatCHIFM232.AMNT, record.getBigDecimal(JBSbatCH_T_SAIKEN_UCWK.AMNT));

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutPutMap]");
		return outputMap;
	}
}
