/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHSeikyUcwkTogetsubunGet
*	ソースファイル名	：JBSbatCHSeikyUcwkTogetsubunGet.java
*	作成者				：富士通　
*	作成日				：2013年10月03日
*＜機能概要＞
*　請求内訳当月分抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/09/26   富士通		新規作成
*	v4.00		2013/01/07   FJ)後藤	処理パターン変更
*	v5.00.00	2013/10/03   FJ)黒木	新規作成
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatCHIFM050;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_CS_CHGE;
import eo.common.constant.JACStrConst;
import eo.common.util.JPCUtilCommon;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHSeikyUcwkTogetsubunGet extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	
	/** テーブル(料金グループ)*/
	private static final String D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE = "CH_M_PRC_KMK_CS_CHGE";
	
	/** SQL定義キー(CH_SELECT_018)*/
	private static final String CH_M_PRC_KMK_CS_CHGE_CH_SELECT_018 = "CH_SELECT_018";
	
	/** テーブルアクセスクラス(料金項目抽出変換)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_CS_CHGE = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 料金項目抽出変換リスト */
	ArrayList<JBSbatCommonDBInterface> prcKmkChshtChgList = null;

	/** 請求年月 */
	private String seikyYm = null;

	/** 整理番号項目長 */
	public static final int SEIRI_NO_LEN = 14;

	/** サービス契約番号項目長 */
	public static final int SVC_KEI_NO_LEN = 10;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		db_CH_M_PRC_KMK_CS_CHGE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		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 + "]");

		// バッチ運用日、イベントコード("04"（請求処理日)）から請求年月を求める
		JACbatSchdlUtil schdlUtil = new JACbatSchdlUtil(commonItem);
		this.seikyYm = schdlUtil.getBillDate(super.opeDate, JACStrConst.EVENT_CD_SEIKY_SHORI_YMD);
		schdlUtil.close();
		
		// 料金項目抽出変換リストを生成
		makePrcKmkChshtChgList();

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][seikyYm=" + this.seikyYm + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 料金項目抽出変換を取得し、退避リストに保存します。
	 * @throws Exception
	 */
	private void makePrcKmkChshtChgList() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makePrcKmkChshtChgList]");
		
		// 料金項目抽出変換リスト生成
		this.prcKmkChshtChgList = new ArrayList<JBSbatCommonDBInterface>();
		
		// 料金項目抽出変換リスト取得パラメータ
		JBSbatCommonDBInterface param = new JBSbatCommonDBInterface();

		// 業務パラメータ管理.業務パラメータID 合算請求作成（当月請求額合計）
		param.setValue(JACStrConst.WKPRA_CH_WKS_GSN_SK_TGT_GK);

		// 業務パラメータ管理.適用開始年月日
		param.setValue(super.opeDate);

		// 業務パラメータ管理.適用終了年月日
		param.setValue(super.opeDate);

		// 料金項目抽出変換.システムコード
		param.setValue(super.systemCode);

		// 料金項目抽出変換.抽出変換コード（抽出のみ）
		param.setValue(JACStrConst.CHSHT_CHG_CD_CST);

		// 料金項目抽出変換.適用開始年月日
		param.setValue(super.opeDate);

		// 料金項目抽出変換.適用終了年月日
		param.setValue(super.opeDate);
		
		// SQL実行
		executeCH_M_PRC_KMK_CS_CHGE_CH_SELECT_018(param.getList().toArray());
		
		JBSbatCommonDBInterface dbMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		
		// 料金グループコードリストに検索結果を設定
		while(null != dbMap)
		{
			// 料金サービスコードリストに追加
			this.prcKmkChshtChgList.add(dbMap);
			
			dbMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makePrcKmkChshtChgList]");
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		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();
		
		// 出力フラグにtrueを設定
		inMap.setOutFlg(true);
		
		// 全明細取消しの場合は当月請求額合計を出力
		if(JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM050.PRC_GRP_CD)) &&
			JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM050.PCRS_CD)) &&
			JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM050.PRC_SVC_CD)) &&
			JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM050.PRC_KMK_CD)))
		{
			// 料金項目抽出変換レコード数分の当月請求額合計出力
			for(JBSbatCommonDBInterface dbMap : prcKmkChshtChgList)
			{
				assert 	dbMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][dbMap=" + dbMap.getMap().toString() + "]") : true;

				JBSbatServiceInterfaceMap tmpInMap = new JBSbatServiceInterfaceMap();
				tmpInMap.getMap().putAll(inMap.getMap());
				
				// 整理番号
				tmpInMap.setString(JBSbatCHIFM050.SEIRI_NO, JPCUtilCommon.fillHalfSpace(JACStrConst.SPACE_1, SEIRI_NO_LEN, true));
				
				// サービス契約番号
				tmpInMap.setString(JBSbatCHIFM050.SVC_KEI_NO, JPCUtilCommon.fillHalfSpace(JACStrConst.SPACE_1, SVC_KEI_NO_LEN, true));
				
				// 料金グループコード
				tmpInMap.setString(JBSbatCHIFM050.PRC_GRP_CD, dbMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_GRP_CD));

				// 料金コースコード
				tmpInMap.setString(JBSbatCHIFM050.PCRS_CD, dbMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PCRS_CD));

				// 料金サービスコード
				tmpInMap.setString(JBSbatCHIFM050.PRC_SVC_CD, dbMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_SVC_CD));

				// 料金項目コード
				tmpInMap.setString(JBSbatCHIFM050.PRC_KMK_CD, dbMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD));
				
				// 合算請求年月
				tmpInMap.setString(JBSbatCHIFM050.GSAN_SEIKY_YM, this.seikyYm);
				
				// 出力フラグにtrueを設定
				tmpInMap.setOutFlg(true);

				// 出力情報にレコードを設定
				outputItem.addOutMapList(tmpInMap);
			}
		}
		else
		{
			
			// 出力フラグにtrueを設定
			inMap.setOutFlg(true);

			// 出力情報にレコードを設定
			outputItem.addOutMapList(inMap);
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		db_CH_M_PRC_KMK_CS_CHGE.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(CH_SELECT_018)で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_M_PRC_KMK_CS_CHGE_CH_SELECT_018(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());

		// DBアクセスを実行します
		db_CH_M_PRC_KMK_CS_CHGE.selectBySqlDefine(paramList, CH_M_PRC_KMK_CS_CHGE_CH_SELECT_018);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
