/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACKaikUwChgKnkInfCt
*	ソースファイル名	：JBSbatACKaikUwChgKnkInfCt.java
*	作成者				：富士通　
*	作成日				：2012年05月23日
*＜機能概要＞
*　会計内訳変換用金庫情報抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00		2012/06/12   山下		新規作成
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;

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.JBSbatACIFM148;
import eo.business.util.table.JBSbatCH_M_KKKRK_SUMUP_YJN;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_CS_CHGE;
import eo.business.util.table.JBSbatCH_T_KNK;
import eo.common.constant.JACStrConst;
import eo.common.util.JPCUtilCommon;
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 JBSbatACKaikUwChgKnkInfCt extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(金庫)*/
	private static final String D_TBL_NAME_CH_T_KNK = "CH_T_KNK";

	/** テーブル(料金項目抽出変換)*/
	private static final String D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE = "CH_M_PRC_KMK_CS_CHGE";

	/** テーブル(会計用金庫料金項目計上優先順位)*/
	private static final String D_TBL_NAME_CH_M_KKKRK_SUMUP_YJN = "CH_M_KKKRK_SUMUP_YJN";

	/** テーブル(入金)*/
	private static final String D_TBL_NAME_CH_T_NYUKIN = "CH_T_NYUKIN";

	/** SQL定義キー(AC_SELECT_002)*/
	private static final String CH_T_KNK_AC_SELECT_002 = "AC_SELECT_002";

	/** SQL定義キー(AC_SELECT_003)*/
	private static final String CH_T_KNK_AC_SELECT_003 = "AC_SELECT_003";

	/** SQL定義キー(AC_SELECT_004)*/
	private static final String CH_T_KNK_AC_SELECT_004 = "AC_SELECT_004";

	/** SQL定義キー(AC_SELECT_015)*/
	private static final String CH_M_PRC_KMK_CS_CHGE_AC_SELECT_015 = "AC_SELECT_015";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String CH_M_KKKRK_SUMUP_YJN_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_002)*/
	private static final String CH_M_KKKRK_SUMUP_YJN_AC_SELECT_002 = "AC_SELECT_002";

	/** SQL定義キー(AC_SELECT_011)*/
	private static final String CH_T_NYUKIN_AC_SELECT_011 = "AC_SELECT_011";

	/** テーブルアクセスクラス(金庫)*/
	private JBSbatSQLAccess db_CH_T_KNK = null;

	/** テーブルアクセスクラス(料金項目抽出変換)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_CS_CHGE = null;

	/** テーブルアクセスクラス(会計用金庫料金項目計上優先順位)*/
	private JBSbatSQLAccess db_CH_M_KKKRK_SUMUP_YJN = null;

	/** テーブルアクセスクラス(入金)*/
	private JBSbatSQLAccess db_CH_T_NYUKIN = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 会計計上月 */
	private String kaikYm = null;
	
	/** 前月会計計上月 */
	private String befKaikYm = null;
	
	/** [0].月初日、[1].月末日 */
	private String[] useStrEnd = null;
	
	/** [0].前回月末日、[1].前回会計処理日 */
	private String[] befUseStrEnd = null;
	
	/** 業務パラメータ:金庫料金項目コード仮受金 */
	private String wkparaAcKnkKmkKariuke = null;
	
	/** 業務パラメータ:金庫料金項目コード預り金 */
	private String wkparaAcKnkKmkDpsit = null;
	
	/** 業務パラメータ:金庫料金項目コード前受金 */
	private String wkparaAcKnkKmkMaeuk = null;
	
	/** 業務パラメータ:金庫料金項目コード不明金 */
	private String wkparaAcKnkKmkHumei = null;
	
	/** 当月計上対象金庫料金項目コードリスト */
	private List<String> wksKaikKnkPrcKmkCdList = null;
	
	/** カレント金庫データ処理順マップ */
	private Map<String, String> curtKnkYjnMap = null;
	
	/** 会計用金庫料金項目計上優先順位マップ */
	private Map<String, Map<String, String>> kaiKnkPrcKmkYjnMap = null;
	
	/** 金庫情報マップ  */
	private Map<String, Map<String, String>> knkInfMap = null;

	/** 金庫情報マップキー(最古金庫フラグ) */
	private static final String SAIKO_KNK_FLG = "SAIKO_KNK_FLG";

	/** 金庫情報マップ用初期値 */
	private static final String INIT_VALUE = "0";

	/** 最古金庫フラグ(最古金庫) */
	private static final String SAIKO_KNK = "1";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CH_T_KNK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_KNK);
		db_CH_M_PRC_KMK_CS_CHGE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE);
		db_CH_M_KKKRK_SUMUP_YJN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_KKKRK_SUMUP_YJN);
		db_CH_T_NYUKIN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_NYUKIN);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		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 + "]");
		
		// スケジュール取得
		{
			JACbatSchdlUtil schdlUtil = new JACbatSchdlUtil(commonItem);
			
			// 会計計上月を取得
			this.kaikYm = schdlUtil.getBillDate(super.opeDate, JACStrConst.EVENT_CD_KAIK_SHORI_YMD);
			
			// 前月会計計上月を取得
			this.befKaikYm = JPCUtilCommon.addMonth(this.kaikYm.concat(JACStrConst.STR_OF_MONTH), -1).substring(0, 6);
			
			// 月初日、月末日を取得
			this.useStrEnd = schdlUtil.getUseStrEnd(this.kaikYm, JACStrConst.EVENT_CD_USE_STAYMD, JACStrConst.EVENT_CD_USE_ENDYMD);
			
			// 前回会計処理日、前回月末日を取得
			this.befUseStrEnd = schdlUtil.getUseStrEnd(this.befKaikYm, JACStrConst.EVENT_CD_KAIK_SHORI_YMD, JACStrConst.EVENT_CD_USE_ENDYMD);
			
			assert 	this.kaikYm != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][会計計上月=" + this.kaikYm + "]") : true;
			assert 	this.befKaikYm != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][前月会計計上月=" + this.befKaikYm + "]") : true;
			assert 	this.useStrEnd != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][月初日=" + this.useStrEnd[0] + "｜月末日=" + this.useStrEnd[1] + "]") : true;
			assert 	this.befUseStrEnd != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][前回月末日=" + this.befUseStrEnd[0] + "｜前回会計処理日=" + this.befUseStrEnd[1] + "]") : true;
			schdlUtil.close();
		}
		
		// 業務パラメータの取得
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		String wkparaAcWksKaikKnkPrc 	= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_KAIK_KNK_PRC);
		this.wkparaAcKnkKmkKariuke 		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_KNK_KMK_KARIUKE);
		this.wkparaAcKnkKmkDpsit 		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_KNK_KMK_DPSIT);
		this.wkparaAcKnkKmkMaeuk 		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_KNK_KMK_MAEUK);
		this.wkparaAcKnkKmkHumei 		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_KNK_KMK_HUMEI);
		assert 	this.wkparaAcKnkKmkKariuke != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][wkparaAcKnkKmkKariuke=" + this.wkparaAcKnkKmkKariuke + "]") : true;
		assert 	this.wkparaAcKnkKmkDpsit != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][wkparaAcKnkKmkDpsit=" + this.wkparaAcKnkKmkDpsit + "]") : true;
		assert 	this.wkparaAcKnkKmkMaeuk != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][wkparaAcKnkKmkMaeuk=" + this.wkparaAcKnkKmkMaeuk + "]") : true;
		assert 	this.wkparaAcKnkKmkHumei != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][wkparaAcKnkKmkHumei=" + this.wkparaAcKnkKmkHumei + "]") : true;
		paramUtil.close();
		
		// 当月計上対象金庫料金項目コードの取得
		selectChMPrcKmkCsChge(wkparaAcWksKaikKnkPrc);
		
		// カレント金庫データ処理順の取得
		selectChMKkkrkSumupYjn001();

		// 会計用金庫料金項目計上優先順位の取得
		selectChMKkkrkSumupYjn002();
		
		// 「会計計上月＋会計計上月翌月」金庫移動情報の抽出
		selectChTKnkMoveInf();
		
		assert 	this.wksKaikKnkPrcKmkCdList != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial][当月計上対象金庫料金項目コードリスト=" + this.wksKaikKnkPrcKmkCdList.toString() + "]") : true;
		assert 	this.curtKnkYjnMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial][カレント金庫データ処理順マップ=" + this.curtKnkYjnMap.toString() + "]") : true;
		assert 	this.kaiKnkPrcKmkYjnMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial][会計用金庫料金項目計上優先順位マップ=" + this.kaiKnkPrcKmkYjnMap.toString() + "]") : true;
		assert 	this.knkInfMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial][金庫情報マップ =" + this.knkInfMap.toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}


	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		
		// カレントデータを抽出
		Map<String, Map<String, String>> tempMap = new HashMap<String, Map<String, String>>();
		for(Map<String, String> tmpKnkInfMap :this.knkInfMap.values())
		{
			// 履歴データフラグが"1"のデータを抽出
			if(JACStrConst.KNK_RIREKI_DATA_FLG_CURRENT.equals(tmpKnkInfMap.get(JBSbatCH_T_KNK.RIREKI_DATA_FLG)))
			{
				tempMap.put(tmpKnkInfMap.get(JBSbatCH_T_KNK.KNK_NO), tmpKnkInfMap);
			}
		}
		
		// カレントデータ判定処理
		judgeCurData(tempMap);
		tempMap.clear();
		
		// 最古金庫データ判定用カレントデータを抽出
		for(Map<String, String> tmpKnkInfMap :this.knkInfMap.values())
		{
			// 履歴データフラグが"1"のデータを抽出
			if(JACStrConst.KNK_RIREKI_DATA_FLG_CURRENT.equals(tmpKnkInfMap.get(JBSbatCH_T_KNK.RIREKI_DATA_FLG)))
			{
				tempMap.put(tmpKnkInfMap.get(JBSbatCH_T_KNK.KNK_NO), tmpKnkInfMap);
			}
		}
		// 最古金庫データ判定処理
		judgeSaikoKnkData(tempMap);
		tempMap.clear();
		
		// 金庫移動における詳細移動金額導出
		for(Map<String, String> tmpKnkMap :this.knkInfMap.values())
		{
			// 最古金庫のデータのみを対象とする
			if(SAIKO_KNK.equals(tmpKnkMap.get(SAIKO_KNK_FLG)))
			{
				// 詳細移動金額の設定
				setDetailMoveAmnt(tmpKnkMap);
				// 計上先金庫データの検索
				searchSumupSaki(tmpKnkMap);
			}
		}
		
		// 会計内訳変換用金庫データ作成
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		
		for(Map<String, String> curKnkMap :this.knkInfMap.values())
		{
			// カレントのデータのみを対象とする
			if(JACStrConst.KNK_RIREKI_DATA_FLG_CURRENT.equals(curKnkMap.get(JBSbatCH_T_KNK.RIREKI_DATA_FLG)))
			{
				// 出力判定処理
				if(judgeOut(curKnkMap.get(JBSbatCH_T_KNK.KNK_IDO_YMD), curKnkMap.get(JBSbatCH_T_KNK.KNK_PRC_KMK_CD)))
				{
					// 会計内訳変換用金庫情報を作成
					outputItem.addOutMapList(createOutput(curKnkMap));
				}
			}
		}
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CH_T_KNK.close();
		db_CH_M_PRC_KMK_CS_CHGE.close();
		db_CH_M_KKKRK_SUMUP_YJN.close();
		db_CH_T_NYUKIN.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * SQLKEY(AC_SELECT_002)で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_KNK_AC_SELECT_002(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());

		// DBアクセスを実行します
		db_CH_T_KNK.selectBySqlDefine(paramList, CH_T_KNK_AC_SELECT_002);
	}

	/**
	 * SQLKEY(AC_SELECT_003)で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_KNK_AC_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_T_KNK.selectBySqlDefine(paramList, CH_T_KNK_AC_SELECT_003);
	}

	/**
	 * SQLKEY(AC_SELECT_004)で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_KNK_AC_SELECT_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_T_KNK.selectBySqlDefine(paramList, CH_T_KNK_AC_SELECT_004);
	}

	/**
	 * SQLKEY(AC_SELECT_015)で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_AC_SELECT_015(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());

		// DBアクセスを実行します
		db_CH_M_PRC_KMK_CS_CHGE.selectBySqlDefine(paramList, CH_M_PRC_KMK_CS_CHGE_AC_SELECT_015);
	}

	/**
	 * SQLKEY(AC_SELECT_001)で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_KKKRK_SUMUP_YJN_AC_SELECT_001(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());

		// DBアクセスを実行します
		db_CH_M_KKKRK_SUMUP_YJN.selectBySqlDefine(paramList, CH_M_KKKRK_SUMUP_YJN_AC_SELECT_001);
	}

	/**
	 * SQLKEY(AC_SELECT_002)で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_KKKRK_SUMUP_YJN_AC_SELECT_002(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());

		// DBアクセスを実行します
		db_CH_M_KKKRK_SUMUP_YJN.selectBySqlDefine(paramList, CH_M_KKKRK_SUMUP_YJN_AC_SELECT_002);
	}

	/**
	 * SQLKEY(AC_SELECT_011)で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_NYUKIN_AC_SELECT_011(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_CH_T_NYUKIN.selectBySqlDefine(paramList, CH_T_NYUKIN_AC_SELECT_011);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	
	
	/**
	 * 会計内訳変換用金庫情報を作成します。
	 * @param  curKnkMap	カレント金庫情報データマップ
	 * 
	 * @return outMap		出力情報
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private JBSbatServiceInterfaceMap createOutput(Map<String, String> curKnkMap) throws Exception
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][createOutput]");
		
		// 会計内訳変換会計用金庫情報の出力
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// カレント金庫情報データを設定
		outMap.setMap((HashMap<String, String>)curKnkMap);
		// 会計計上月
		outMap.setString(JBSbatACIFM148.KAIK_YM, this.kaikYm);
		
		// レコード出力判定フラグの設定
		outMap.setOutFlg(true);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][createOutput][outMap=" + outMap.getMap().toString() + "]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][createOutput]");
		return outMap;
	}

	/**
	 * レコードの出力可否を判定します。
	 * @param  knkIdoYmd		金庫移動年月日
	 * @param  knkPrcKmkCd		金庫料金項目コード
	 * 
	 * @return boolean true:出力する/false:出力しない
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private boolean judgeOut(String knkIdoYmd, String knkPrcKmkCd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][judgeOut]");
		boolean result = true;
		
		// 月初日≦ 金庫移動年月日 ≦ 前回会計計算日
		if(this.useStrEnd[0].compareTo(knkIdoYmd) <= 0 && knkIdoYmd.compareTo(this.befUseStrEnd[1]) <= 0)
		{
			// 金庫料金項目コードが当月計上対象金庫料金項目コードリストに含まれる場合
			if(this.wksKaikKnkPrcKmkCdList.contains(knkPrcKmkCd))
			{
				result = false;
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][judgeOut]][result=" + result + "]");
		return result;
	}

	/**
	 * 計上先金庫データを検索します。
	 * @param  sumupMotoKnkMap	入力マップ
	 * 
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private void searchSumupSaki(Map<String, String> sumupMotoKnkMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][searchSumupSaki]");
		assert 	sumupMotoKnkMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][searchSumupSaki][tmpKnkMap=" + sumupMotoKnkMap.toString() + "]") : true;
		
		// 統合先金庫番号
		String togoKnkNo = sumupMotoKnkMap.get(JBSbatCH_T_KNK.TOGO_KNK_NO);
		// 金庫番号
		String knkNo = sumupMotoKnkMap.get(JBSbatCH_T_KNK.KNK_NO);
		
		/*
		 *  金庫情報マップ．統合先金庫番号 ＝ NULL の場合
		 */
		if(togoKnkNo == null)
		{
			// 計上先金庫データマップ
			List<Map<String, String>> sumupKnkMapList = new ArrayList<Map<String, String>>();
			// 移動元金庫番号を検索し金庫番号に該当するデータを抽出する
			for(Map<String, String> tmpIdosakiMap : this.knkInfMap.values())
			{
				if(knkNo.equals(tmpIdosakiMap.get(JBSbatCH_T_KNK.IDOMOTO_KNK_NO)))
				{
					sumupKnkMapList.add(tmpIdosakiMap);
				}
			}
			// 該当データが1件以上の場合
			if(sumupKnkMapList.size() > 0)
			{
				// 金庫分割用マップを作成
				Map<String, String> knkSplitMap = new TreeMap<String, String>();
				for(Map<String, String> sumupMap : sumupKnkMapList)
				{
					knkSplitMap.put(sumupMap.get(JBSbatCH_T_KNK.KNK_NO), curtKnkYjnMap.get(sumupMap.get(JBSbatCH_T_KNK.KNK_PRC_KMK_CD)));
				}
				
				// 計上元金庫データの各金額を退避
				Map<String, String> tempSumupMotoKnkMap = sumupMotoKnkMap;
				// 退避計上元金庫データ．当月入金分
				BigDecimal togtuNyukin = chgBig(sumupMotoKnkMap.get(JBSbatACIFM148.TOGTU_NYUKIN));
				
				List<Entry<String, String>> knkSplitList = sortMap(knkSplitMap);
				for(Entry<String, String> splKnkEntry : knkSplitList)
				{
					// 累計計上額
					BigDecimal sumAmnt = BigDecimal.ZERO;
					// 計上先金庫データ
					Map<String, String> sumupSakiMap = this.knkInfMap.get(splKnkEntry.getKey());
					// 計上先金庫データ.金庫金額
					BigDecimal sumupSakiKnkAmnt = chgBig(sumupSakiMap.get(JBSbatCH_T_KNK.KNK_AMNT));
					
					// 金庫料金項目計上優先順位マップ 
					Map<String, String> knkPrcKmkYjnMap = this.kaiKnkPrcKmkYjnMap.get(sumupSakiMap.get(JBSbatCH_T_KNK.KNK_PRC_KMK_CD));
					List<Entry<String, String>> knkPrcKmkYjnList = sortMap(knkPrcKmkYjnMap);
					
					// 計上先金庫データに詳細移動金額を設定
					for(Entry<String, String> sumupKnkPrcKmkEntry : knkPrcKmkYjnList)
					{
						// 金庫料金項目コードが仮受金（業務パラメータ） の場合
						if(sumupKnkPrcKmkEntry.getKey().equals(this.wkparaAcKnkKmkKariuke))
						{
							sumAmnt = moveAmnt(sumupSakiMap, tempSumupMotoKnkMap, sumAmnt, sumupSakiKnkAmnt, JBSbatACIFM148.ZNGTU_KARIUKEKIN);
						}
						// 金庫料金項目コードが預り金（業務パラメータ） の場合
						if(sumupKnkPrcKmkEntry.getKey().equals(this.wkparaAcKnkKmkDpsit))
						{
							sumAmnt = moveAmnt(sumupSakiMap, tempSumupMotoKnkMap, sumAmnt, sumupSakiKnkAmnt, JBSbatACIFM148.ZNGTU_DPSIT);
						}
						// 金庫料金項目コードが前受金（業務パラメータ） の場合
						if(sumupKnkPrcKmkEntry.getKey().equals(this.wkparaAcKnkKmkMaeuk))
						{
							sumAmnt = moveAmnt(sumupSakiMap, tempSumupMotoKnkMap, sumAmnt, sumupSakiKnkAmnt, JBSbatACIFM148.ZNGTU_MAEUKKIN);
						}
						// 金庫料金項目コードが不明金（業務パラメータ） の場合
						if(sumupKnkPrcKmkEntry.getKey().equals(this.wkparaAcKnkKmkHumei))
						{
							sumAmnt = moveAmnt(sumupSakiMap, tempSumupMotoKnkMap, sumAmnt, sumupSakiKnkAmnt, JBSbatACIFM148.ZNGTU_HUMEIKIN);
						}
					}
					
					// 計上先金庫データ．金庫金額 ＞ 累計計上額の場合、当月分を処理する
					if(sumupSakiKnkAmnt.compareTo(sumAmnt) > 0)
					{
						// 計上先金庫データ．当月入金分
						BigDecimal sakiTogtuNyukin = chgBig(sumupSakiMap.get(JBSbatACIFM148.TOGTU_NYUKIN));
						
						// 計上先金庫データ．金庫金額 ≧ 累計計上額 ＋ 計上元金庫データ．当月入金分 の場合
						if(sumupSakiKnkAmnt.compareTo(sumAmnt.add(togtuNyukin)) >= 0)
						{
							// 計上先金庫データ．当月入金分に金額を設定
							sumupSakiMap.put(JBSbatACIFM148.TOGTU_NYUKIN, togtuNyukin.add(sakiTogtuNyukin).toString());
							// 累計計上額を加算
							sumAmnt = sumAmnt.add(togtuNyukin);
							// 退避計上元金庫データをクリア
							togtuNyukin = BigDecimal.ZERO;
						}
						else
						{
							// 計上先金庫データ．当月入金分に金額を設定
							sumupSakiMap.put(JBSbatACIFM148.TOGTU_NYUKIN, sumupSakiKnkAmnt.subtract(sumAmnt).toString());
							// 累計計上額を設定
							sumAmnt = sumupSakiKnkAmnt;
							// 退避計上元金庫データを更新する
							togtuNyukin = togtuNyukin.subtract(chgBig(sumupSakiMap.get(JBSbatACIFM148.TOGTU_NYUKIN)));
						}
					}
				}
				
			}
			else
			{
				// 該当データなしの場合、処理終了
				return;
			}
			// 再度、計上先金庫データの検索を実行
			for(Map<String, String> sumupKnkMap : sumupKnkMapList)
			{
				// 終了条件判定
				if(judgeFin(sumupKnkMap, false))
				{
					searchSumupSaki(sumupKnkMap);
				}
			}
		}
		// 金庫情報マップ．統合先金庫番号 ≠ NULL の場合
		else
		{
			// 統合先金庫情報を取得
			Map<String, String> togSakiKnkMap = this.knkInfMap.get(togoKnkNo);
			
			if(togSakiKnkMap != null && !togSakiKnkMap.isEmpty())
			{
				// 計上先金庫データに、計上元金庫データの詳細移動金額を加算
				doTogo(sumupMotoKnkMap, togSakiKnkMap, JBSbatACIFM148.TOGTU_NYUKIN);
				doTogo(sumupMotoKnkMap, togSakiKnkMap, JBSbatACIFM148.ZNGTU_IZN_NYUKIN);
				doTogo(sumupMotoKnkMap, togSakiKnkMap, JBSbatACIFM148.ZNGTU_KARIUKEKIN);
				doTogo(sumupMotoKnkMap, togSakiKnkMap, JBSbatACIFM148.ZNGTU_DPSIT);
				doTogo(sumupMotoKnkMap, togSakiKnkMap, JBSbatACIFM148.ZNGTU_MAEUKKIN);
				doTogo(sumupMotoKnkMap, togSakiKnkMap, JBSbatACIFM148.ZNGTU_HUMEIKIN);
				
				// 終了条件判定
				if(judgeFin(togSakiKnkMap, true))
				{
					searchSumupSaki(togSakiKnkMap);
				}
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][searchSumupSaki]");
	}
	
	/**
	 * 対象マップをValueでソートします。
	 * 
	 * @param  map			ソート対象
	 * @return entry		ソート結果
	 * @throws Exception 業務サービス内で発生した例外全般 
	 */
	private List<Entry<String, String>> sortMap(Map<String, String> map) throws Exception
	{
		
		List<Map.Entry<String, String>> entry = new ArrayList<Map.Entry<String, String>>();
		
		if(map == null || map.isEmpty())
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][sortMap][会計用金庫料金項目計上優先順位マスタ未存在]");
			return entry;
		}
		entry = new ArrayList<Map.Entry<String, String>>(map.entrySet());
		Collections.sort(entry, new Comparator<Map.Entry<String, String>>() {

			/**
			 * <p>
			 * ソート用。
			 * </p>
			 * 
			 * @param o1
			 *            入力1
			 * @param o2
			 *            入力2
			 * @return int compareTo結果
			 */
			@Override
			public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2)
			{
				// キー取得
				String o1Key = String.valueOf(o1.getValue());
				String o2Key = String.valueOf(o2.getValue());
				return o1Key.compareTo(o2Key);
			}
		});
		return entry;
	}

	/**
	 * 金庫移動における詳細移動金額を設定します。
	 * @param  sumupSakiKnkMap		計上先金庫データ
	 * @param  flg					実行フラグ
	 * 
	 * @return boolean true:続行/false:終了
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private boolean judgeFin(Map<String, String> sumupSakiKnkMap, boolean flg) throws Exception
	{
		boolean result = true;
		
		// 計上先金庫データがカレントデータの場合
		if(JACStrConst.KNK_RIREKI_DATA_FLG_CURRENT.equals(sumupSakiKnkMap.get(JBSbatCH_T_KNK.RIREKI_DATA_FLG)))
		{
			result = false;
		}
		else if(flg)
		{
			// 金庫金額
			BigDecimal knkAmnt = chgBig(sumupSakiKnkMap.get(JBSbatCH_T_KNK.KNK_AMNT));
			// 当月入金分
			BigDecimal togtuNyukin = chgBig(sumupSakiKnkMap.get(JBSbatACIFM148.TOGTU_NYUKIN));
			// 前月以前入金分
			BigDecimal zngtuIznNyukin = chgBig(sumupSakiKnkMap.get(JBSbatACIFM148.ZNGTU_IZN_NYUKIN));
			if(!knkAmnt.equals(togtuNyukin.add(zngtuIznNyukin)))
			{
				result = false;
			}
		}
		return result;
	}

	/**
	 * 金庫移動における詳細移動金額を設定します。
	 * @param  sumupMotoKnkMap		計上元金庫データ
	 * @param  togSakiKnkMap		計上先金庫データ
	 * @param  knkPrcKmk			金庫料金項目
	 * 
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private void doTogo(Map<String, String> sumupMotoKnkMap, Map<String, String> togSakiKnkMap, String knkPrcKmk) throws Exception
	{
		// 計上元金額
		BigDecimal togMotoAmnt = chgBig(sumupMotoKnkMap.get(knkPrcKmk));
		// 計上先金額
		BigDecimal togSakiAmnt = chgBig(togSakiKnkMap.get(knkPrcKmk));
		
		// 加算して設定
		togSakiAmnt = togSakiAmnt.add(togMotoAmnt);
		togSakiKnkMap.put(knkPrcKmk, togSakiAmnt.toString());
	}

	/**
	 * 金庫移動における詳細移動金額を設定します。
	 * @param  sumupSakiMap		計上先金庫データ
	 * @param  tempMotoMap		退避計上元金庫データ
	 * @param  sumAmnt			累計計上額
	 * @param  sumupSakiKnkAmnt	金庫金額
	 * @param  knkPrcKmk		金庫料金項目
	 * 
	 * @return result			累計計上額
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private BigDecimal moveAmnt(Map<String, String> sumupSakiMap, Map<String, String> tempMotoMap, BigDecimal sumAmnt, BigDecimal sumupSakiKnkAmnt, String knkPrcKmk) throws Exception
	{
		// 累計計上結果
		BigDecimal result = sumAmnt;
		// 退避計上元金庫詳細金額
		BigDecimal wkAmnt = chgBig(tempMotoMap.get(knkPrcKmk));
		
		// 計上先金庫データ．前月以前入金分
		BigDecimal zngtuIznNyukin = chgBig(sumupSakiMap.get(JBSbatACIFM148.ZNGTU_IZN_NYUKIN));
		
		// 計上先金庫データ．金庫金額 ≧ 累計計上額 ＋ 退避計上元金庫データ の場合
		if(sumupSakiKnkAmnt.compareTo(result.add(wkAmnt)) >= 0)
		{
			// 計上先金庫データ．前月以前入金分を加算
			sumupSakiMap.put(JBSbatACIFM148.ZNGTU_IZN_NYUKIN, zngtuIznNyukin.add(wkAmnt).toString());
			// 計上先金庫データに金額を設定
			sumupSakiMap.put(knkPrcKmk, wkAmnt.toString());
			// 累計計上額を加算
			result = result.add(wkAmnt);
			// 退避計上元金庫データをクリア
			tempMotoMap.put(knkPrcKmk, JACStrConst.CNT_ZERO);
		}
		else
		{
			// 計上先金庫データ．前月以前入金分に金庫金額を設定
			sumupSakiMap.put(JBSbatACIFM148.ZNGTU_IZN_NYUKIN, sumupSakiKnkAmnt.toString());
			// 計上先金庫データに金額を設定
			sumupSakiMap.put(knkPrcKmk, sumupSakiKnkAmnt.subtract(result).toString());
			// 累計計上額を設定
			result = sumupSakiKnkAmnt;
			// 退避計上元金庫データを更新する
			tempMotoMap.put(knkPrcKmk, wkAmnt.subtract(chgBig(sumupSakiMap.get(knkPrcKmk))).toString());
		}
		return result;
	}
	
	
	/**
	 * StringをBigDecimal型に変換する。
	 * @param  str	文字列
	 * @return str BigDecimal型
	 * 
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private BigDecimal chgBig(String str) throws Exception
	{
		return new BigDecimal(str);
	}
	
	/**
	 * 金庫移動における詳細移動金額を設定します。
	 * @param  tmpKnkMap	入力マップ
	 * 
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private void setDetailMoveAmnt(Map<String, String> tmpKnkMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setDetailMoveAmnt]");
		assert 	tmpKnkMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setDetailMoveAmnt][tmpKnkMap=" + tmpKnkMap.toString() + "]") : true;
		
		// 金庫移動年月日
		String knkIdoYmd = tmpKnkMap.get(JBSbatCH_T_KNK.KNK_IDO_YMD);
		// 金庫料金項目コード 
		String knkPrcKmkCd = tmpKnkMap.get(JBSbatCH_T_KNK.KNK_PRC_KMK_CD);
		// 金庫移動コード 
		String knkMoveCd = tmpKnkMap.get(JBSbatCH_T_KNK.KNK_MOVE_CD);
		
		/*
		 *  金庫移動年月日 < 月初日 の場合
		 */
		if(knkIdoYmd.compareTo(this.useStrEnd[0]) < 0)
		{
			// 前月以前入金分として金額を設定
			setzngtuIznNyukin(tmpKnkMap, knkPrcKmkCd);
		}
		
		/*
		 *  月初日 ≦ 金庫移動年月日 ≦ 前回会計計算日 の場合
		 */
		if(this.useStrEnd[0].compareTo(knkIdoYmd) <= 0 && knkIdoYmd.compareTo(this.befUseStrEnd[1]) <= 0)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setDetailMoveAmnt][月初日 ≦ 金庫移動年月日 ≦ 前回会計処理日");
			
			// 金庫移動コードが "01"（金庫登録） の場合
			if(JACStrConst.KINKO_IDO_ADD.equals(knkMoveCd))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setDetailMoveAmnt][金庫移動コード＝金庫登録");
				
				// 入金スキーマを検索
				if(selectChTNyukin(tmpKnkMap.get(JBSbatCH_T_KNK.NYUKIN_NO)))
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setDetailMoveAmnt][入金スキーマにデータが存在する");
					// 当月入金分
					tmpKnkMap.put(JBSbatACIFM148.TOGTU_NYUKIN, tmpKnkMap.get(JBSbatCH_T_KNK.KNK_AMNT));
				}
				else
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setDetailMoveAmnt][入金スキーマにデータが存在しない");
					// 前月以前入金分として金額を設定
					setzngtuIznNyukin(tmpKnkMap, knkPrcKmkCd);
				}
			}
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setDetailMoveAmnt][金庫移動コード≠金庫登録");
				// 当月入金分
				String knkAmnt = tmpKnkMap.get(JBSbatCH_T_KNK.KNK_AMNT);
				tmpKnkMap.put(JBSbatACIFM148.TOGTU_NYUKIN, knkAmnt);
			}
		}
		
		/*
		 *  前回会計計算日 ＜ 金庫移動年月日 の場合
		 */
		if(this.befUseStrEnd[1].compareTo(knkIdoYmd) < 0)
		{
			// 当月入金分
			tmpKnkMap.put(JBSbatACIFM148.TOGTU_NYUKIN, tmpKnkMap.get(JBSbatCH_T_KNK.KNK_AMNT));
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setDetailMoveAmnt]");
	}

	/**
	 * 前月以前入金分を設定します。
	 * @param  tmpKnkMap	入力マップ
	 * @param  knkPrcKmkCd	金庫料金項目コード
	 * 
	 */
	private void setzngtuIznNyukin(Map<String, String> tmpKnkMap, String knkPrcKmkCd)
	{
		
		// 前月以前入金分
		tmpKnkMap.put(JBSbatACIFM148.ZNGTU_IZN_NYUKIN, tmpKnkMap.get(JBSbatCH_T_KNK.KNK_AMNT));
		
		// 金庫料金項目コードが仮受金（業務パラメータ） の場合
		if(knkPrcKmkCd.equals(this.wkparaAcKnkKmkKariuke))
		{
			// 前月仮受金
			tmpKnkMap.put(JBSbatACIFM148.ZNGTU_KARIUKEKIN, tmpKnkMap.get(JBSbatCH_T_KNK.KNK_AMNT));
		}
		// 金庫料金項目コードが預り金（業務パラメータ） の場合
		if(knkPrcKmkCd.equals(this.wkparaAcKnkKmkDpsit))
		{
			// 前月預り金
			tmpKnkMap.put(JBSbatACIFM148.ZNGTU_DPSIT, tmpKnkMap.get(JBSbatCH_T_KNK.KNK_AMNT));
		}
		// 金庫料金項目コードが前受金（業務パラメータ） の場合
		if(knkPrcKmkCd.equals(this.wkparaAcKnkKmkMaeuk))
		{
			// 前月前受金
			tmpKnkMap.put(JBSbatACIFM148.ZNGTU_MAEUKKIN, tmpKnkMap.get(JBSbatCH_T_KNK.KNK_AMNT));
		}
		// 金庫料金項目コードが不明金（業務パラメータ） の場合
		if(knkPrcKmkCd.equals(this.wkparaAcKnkKmkHumei))
		{
			// 前月不明金
			tmpKnkMap.put(JBSbatACIFM148.ZNGTU_HUMEIKIN, tmpKnkMap.get(JBSbatCH_T_KNK.KNK_AMNT));
		}
	}
	
	/**
	 * 最古金庫データ判定処理を行います。
	 * @param  curKnkMap	入力マップ
	 * 
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private void judgeSaikoKnkData(Map<String, Map<String, String>> curKnkMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][judgeSaikoKnkData]");
		assert 	curKnkMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][judgeSaikoKnkData][curKnkMap=" + curKnkMap.toString() + "]") : true;
		
		for(Map<String, String> tmpCurKnkMap :curKnkMap.values())
		{
			// 金庫移動コード
			String knkMoveCd = tmpCurKnkMap.get(JBSbatCH_T_KNK.KNK_MOVE_CD);
			// 金庫番号
			String knkNo = tmpCurKnkMap.get(JBSbatCH_T_KNK.KNK_NO);
			// 移動元金庫番号
			String idomotoKnkNo = tmpCurKnkMap.get(JBSbatCH_T_KNK.IDOMOTO_KNK_NO);
			
			// 金庫移動コード ＝ "04"（金庫統合） の場合
			if(JACStrConst.KINKO_IDO_TOGO.equals(knkMoveCd))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeSaikoKnkData][金庫移動コード＝金庫統合");
				
				
				// 統合金庫情報マップを作成する
				Map<String, Map<String, String>> knkTogMap = new HashMap<String, Map<String, String>>();
				for(Map<String, String> tmpKnkTogMap :this.knkInfMap.values())
				{
					// 当該、金庫番号に一致する統合先金庫番号を検索し該当データを抽出
					if(knkNo.equals(tmpKnkTogMap.get(JBSbatCH_T_KNK.TOGO_KNK_NO)))
					{
						knkTogMap.put(tmpKnkTogMap.get(JBSbatCH_T_KNK.KNK_NO), tmpKnkTogMap);
					}
				}
				
				if(!knkTogMap.isEmpty())
				{
					// 再度、最古金庫データ判定処理
					judgeSaikoKnkData(knkTogMap);
				}
				
				// 会計計上月前月以前金庫データの抽出
				selectChTKnkSaikoTogou(knkNo);
			}
			
			// 移動元金庫番号 ≠ NULL の場合
			else if(idomotoKnkNo != null)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeSaikoKnkData][移動元金庫番号 ≠ NULL");
				
				// 移動元金庫情報マップを作成する
				Map<String, Map<String, String>> knkMoveMap = new HashMap<String, Map<String, String>>();
				for(Map<String, String> tmpKnkMoveMap :this.knkInfMap.values())
				{
					// 移動元金庫番号に一致する金庫番号を検索し該当データを抽出
					if(idomotoKnkNo.equals(tmpKnkMoveMap.get(JBSbatCH_T_KNK.KNK_NO)))
					{
						knkMoveMap.put(tmpKnkMoveMap.get(JBSbatCH_T_KNK.KNK_NO), tmpKnkMoveMap);
					}
				}
				
				// 移動元金庫情報マップが空になるまで
				if(!knkMoveMap.isEmpty())
				{
					// 再度、最古金庫データ判定処理
					judgeSaikoKnkData(knkMoveMap);
				}
				// 会計計上月前月以前金庫データの抽出
				selectChTKnkSaikoIdomoto(idomotoKnkNo);
			}
			// 上記以外
			else
			{
				this.knkInfMap.get(knkNo).put(SAIKO_KNK_FLG, SAIKO_KNK);
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][judgeSaikoKnkData]");
	}

	
	/**
	 * カレントデータ判定処理を行います。
	 * @param  curKnkMap	入力マップ
	 * 
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private void judgeCurData(Map<String, Map<String, String>> curKnkMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][judgeCurData]");
		assert 	curKnkMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][judgeCurData][curKnkMap=" + curKnkMap.toString() + "]") : true;
		
		for(Map<String, String> tmpCurKnkMap :curKnkMap.values())
		{
			assert 	tmpCurKnkMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][tmpCurKnkMap=" + tmpCurKnkMap.toString() + "]") : true;
			
			// 金庫移動年月日
			String knkIdoYmd = tmpCurKnkMap.get(JBSbatCH_T_KNK.KNK_IDO_YMD);
			// 金庫移動コード
			String knkMoveCd = tmpCurKnkMap.get(JBSbatCH_T_KNK.KNK_MOVE_CD);
			// 金庫番号
			String knkNo = tmpCurKnkMap.get(JBSbatCH_T_KNK.KNK_NO);
			// 移動元金庫番号
			String idomotoKnkNo = tmpCurKnkMap.get(JBSbatCH_T_KNK.IDOMOTO_KNK_NO);
			
			/*
			 *  月初日 ≦ 金庫移動年月日 ≦ 前回会計処理日 の場合
			 */
			if(this.useStrEnd[0].compareTo(knkIdoYmd) <= 0 && knkIdoYmd.compareTo(this.befUseStrEnd[1]) <= 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][月初日 ≦ 金庫移動年月日 ≦ 前回会計処理日]");
				
				// 金庫移動コードが "01"（金庫登録） の場合
				if(JACStrConst.KINKO_IDO_ADD.equals(knkMoveCd))
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][金庫移動コード＝金庫登録]");
					
					// 入金スキーマを検索
					if(!selectChTNyukin(tmpCurKnkMap.get(JBSbatCH_T_KNK.NYUKIN_NO)))
					{
						// 入金スキーマにデータが存在しない場合、当該レコードを金庫情報マップより削除
						assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][入金スキーマにデータが存在しない]");
						this.knkInfMap.remove(knkNo);
						continue;
					}
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][入金スキーマにデータが存在する]");
				}
				else
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][金庫移動コード≠金庫登録]");
				}
				// 履歴データフラグに"1"（カレント）を設定
				this.knkInfMap.get(knkNo).put(JBSbatCH_T_KNK.RIREKI_DATA_FLG, JACStrConst.KNK_RIREKI_DATA_FLG_CURRENT);
			}
			
			/*
			 *  前回会計処理日 ＜ 金庫移動年月日 ≦ 月末日 の場合
			 */
			else if(this.befUseStrEnd[1].compareTo(knkIdoYmd) < 0 && knkIdoYmd.compareTo(this.useStrEnd[1]) <= 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][前回会計処理日 ＜ 金庫移動年月日 ≦ 月末日]");
				// 履歴データフラグに"1"（カレント）を設定
				this.knkInfMap.get(knkNo).put(JBSbatCH_T_KNK.RIREKI_DATA_FLG, JACStrConst.KNK_RIREKI_DATA_FLG_CURRENT);
			}
			
			/*
			 *  月末日 ＜ 金庫移動年月日 ≦ 会計計算日（バッチ運用日） の場合
			 */
			else if(this.useStrEnd[1].compareTo(knkIdoYmd) < 0 && knkIdoYmd.compareTo(super.opeDate) <= 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][月末日 ＜ 金庫移動年月日 ≦ 会計計算日（バッチ運用日）]");
				
				// 金庫料金項目コードが、当月計上対象金庫料金項目コードに含まれない場合
				if(!this.wksKaikKnkPrcKmkCdList.contains(tmpCurKnkMap.get(JBSbatCH_T_KNK.KNK_PRC_KMK_CD)))
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][当月計上対象金庫料金項目コードではない]");
					// 金庫移動コードが "01"（金庫登録） の場合
					if(JACStrConst.KINKO_IDO_ADD.equals(knkMoveCd))
					{
						assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][金庫移動コード＝金庫登録]");
						
						// 入金スキーマを検索
						if(!selectChTNyukin(tmpCurKnkMap.get(JBSbatCH_T_KNK.NYUKIN_NO)))
						{
							assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][入金スキーマにデータが存在しない]");
							// 入金スキーマにデータが存在しない場合、当該レコードを金庫情報マップより削除
							this.knkInfMap.remove(knkNo);
							continue;
						}
						assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][入金スキーマにデータが存在する]");
						// 履歴データフラグに"1"（カレント）を設定
						this.knkInfMap.get(knkNo).put(JBSbatCH_T_KNK.RIREKI_DATA_FLG, JACStrConst.KNK_RIREKI_DATA_FLG_CURRENT);
					}
					
					// 金庫移動コード ＝ "04"（金庫統合） の場合
					else if(JACStrConst.KINKO_IDO_TOGO.equals(knkMoveCd))
					{
						assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][金庫移動コード＝金庫統合]");
						// 当該レコードを金庫情報マップより削除
						this.knkInfMap.remove(knkNo);
						
						// 統合金庫情報マップを作成する
						Map<String, Map<String, String>> knkTogMap = new HashMap<String, Map<String, String>>();
						for(Map<String, String> tmpKnkTogMap :this.knkInfMap.values())
						{
							// 当該、金庫番号に一致する統合先金庫番号を検索し該当データを抽出
							if(knkNo.equals(tmpKnkTogMap.get(JBSbatCH_T_KNK.TOGO_KNK_NO)))
							{
								knkTogMap.put(tmpKnkTogMap.get(JBSbatCH_T_KNK.KNK_NO), tmpKnkTogMap);
							}
						}
						if(!knkTogMap.isEmpty())
						{
							// 再度、カレントデータ判定処理
							judgeCurData(knkTogMap);
						}
					}
					
					// 移動元金庫番号 ≠ NULL の場合
					else if(idomotoKnkNo != null)
					{
						assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][移動元金庫番号 ≠ NULL]");
						
						// 当該レコードを金庫情報マップより削除
						this.knkInfMap.remove(knkNo);
						
						// 移動元金庫情報マップを作成する
						Map<String, Map<String, String>> knkMoveMap = new HashMap<String, Map<String, String>>();
						for(Map<String, String> tmpKnkMoveMap :this.knkInfMap.values())
						{
							// 同一の移動元金庫番号であるデータが金庫情報マップに存在する場合
							if(idomotoKnkNo.equals(tmpKnkMoveMap.get(JBSbatCH_T_KNK.IDOMOTO_KNK_NO)))
							{
								// 次データへ
								knkMoveMap = new HashMap<String, Map<String, String>>();
								break;
							}
							// 移動元金庫番号に一致する金庫番号を検索し該当データを抽出
							if(idomotoKnkNo.equals(tmpKnkMoveMap.get(JBSbatCH_T_KNK.KNK_NO)))
							{
								knkMoveMap.put(tmpKnkMoveMap.get(JBSbatCH_T_KNK.KNK_NO), tmpKnkMoveMap);
							}
						}
						if(!knkMoveMap.isEmpty())
						{
							// 再度、カレントデータ判定処理
							judgeCurData(knkMoveMap);
						}
					}
					// 上記以外
					else
					{
						this.knkInfMap.remove(tmpCurKnkMap.get(JBSbatCH_T_KNK.KNK_NO));
						continue;
					}
				}
				else
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][judgeCurData][当月計上対象金庫料金項目コード]");
					// 履歴データフラグに"1"（カレント）を設定
					this.knkInfMap.get(knkNo).put(JBSbatCH_T_KNK.RIREKI_DATA_FLG, JACStrConst.KNK_RIREKI_DATA_FLG_CURRENT);
				}
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][judgeCurData]");
	}

	/**
	 * 入金スキーマより、入金番号 に紐づくデータを抽出します。
	 * @param  nyukinNo	入金番号
	 * 
	 * @return boolean	true:データが存在する/false:データが存在しない
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private boolean selectChTNyukin(String nyukinNo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectChTNyukin]");
		
		Boolean result = false;
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(nyukinNo);				// 入金番号
		paramList.setValue(this.useStrEnd[0]);		// 外部組織収納年月日
		paramList.setValue(this.useStrEnd[1]);		// 外部組織収納年月日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChTNyukin][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeCH_T_NYUKIN_AC_SELECT_011(paramList.getList().toArray());
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_CH_T_NYUKIN.selectNext();
		
		if (dbMap != null)
		{
			// 取得できた場合
			result = true;
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChTNyukin][入金データが存在する]");
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectChTNyukin]");
		return result;
	}
	
	/**
	 * 金庫スキーマより、金庫番号を検索し最古金庫データを抽出します。
	 * 
	 * @param  idomotoKnkNo		移動元金庫番号
	 * @throws Exception 　	業務サービス内で発生した例外全般
	 */
	private void selectChTKnkSaikoIdomoto(String idomotoKnkNo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectChTKnkSaikoIdomoto]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(idomotoKnkNo);				// 金庫番号
		paramList.setValue(this.useStrEnd[0]);			// 金庫移動年月日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChTKnkSaikoIdomoto][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeCH_T_KNK_AC_SELECT_004(paramList.getList().toArray());
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_CH_T_KNK.selectNext();
		
		while (dbMap != null)
		{
			// 金庫情報マップ作成
			makeKnkInfMap(dbMap, SAIKO_KNK);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChTKnkSaikoIdomoto][dbMap=" + dbMap.getMap().toString() + "]");
			dbMap = db_CH_T_KNK.selectNext();
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChTKnkSaikoIdomoto][knkInfMap=" + knkInfMap.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectChTKnkSaikoIdomoto]");
	}
	
	/**
	 * 金庫スキーマより、統合先金庫番号を検索し最古金庫データを抽出します。
	 * 
	 * @param  knkNo		金庫番号
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private void selectChTKnkSaikoTogou(String knkNo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectChTKnkSaikoTogou]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(knkNo);					// 統合先金庫番号
		paramList.setValue(this.useStrEnd[0]);		// 金庫移動年月日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChTKnkSaikoTogou][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeCH_T_KNK_AC_SELECT_003(paramList.getList().toArray());
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_CH_T_KNK.selectNext();
		
		while (dbMap != null)
		{
			// 金庫情報マップ作成
			makeKnkInfMap(dbMap, SAIKO_KNK);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChTKnkSaikoTogou][dbMap=" + dbMap.getMap().toString() + "]");
			dbMap = db_CH_T_KNK.selectNext();
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChTKnkSaikoTogou][knkInfMap=" + knkInfMap.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectChTKnkSaikoTogou]");
	}
	
	/**
	 * 金庫スキーマより、金庫移動が発生した金庫データを抽出します。
	 * 
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private void selectChTKnkMoveInf() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectChTKnkMoveInf]");
		
		this.knkInfMap = new HashMap<String, Map<String, String>>();
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(JACStrConst.EVENT_CD_USE_STAYMD);			// イベントコード（月初日１）
		paramList.setValue(JACStrConst.EVENT_CD_KAIK_SHORI_YMD);		// イベントコード（月初日２）
		paramList.setValue(super.opeDate);								// イベント年月日（月初日）
		paramList.setValue(JACStrConst.EVENT_CD_KAIK_SHORI_YMD);		// イベントコード（会計計算日）
		paramList.setValue(super.opeDate);								// イベント年月日（会計計算日）
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChTKnkMoveInf][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeCH_T_KNK_AC_SELECT_002(paramList.getList().toArray());
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_CH_T_KNK.selectNext();
		
		while (dbMap != null)
		{
			// 金庫情報マップ作成
			makeKnkInfMap(dbMap, INIT_VALUE);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChTKnkMoveInf][dbMap=" + dbMap.getMap().toString() + "]");
			dbMap = db_CH_T_KNK.selectNext();
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChTKnkMoveInf][knkInfMap=" + knkInfMap.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectChTKnkMoveInf]");
	}

	/**
	 * 金庫情報マップを作成します。
	 * 
	 * @param  dbMap			DB情報取得結果
	 * @param  saikoKnkFlg		最古金庫フラグ
	 * @throws Exception 　	業務サービス内で発生した例外全般
	 */
	private void makeKnkInfMap(JBSbatCommonDBInterface dbMap, String saikoKnkFlg) throws Exception
	{
		// 金庫情報マップ
		Map<String, String> tempKnkInfMap = new HashMap<String, String>();
		
		// DB取得結果を設定
		tempKnkInfMap.putAll(dbMap.getMap());
		tempKnkInfMap.put(JBSbatCH_T_KNK.KNK_AMNT, dbMap.getString(JBSbatCH_T_KNK.KNK_AMNT));
		// その他の項目に初期値を設定
		tempKnkInfMap.put(SAIKO_KNK_FLG, saikoKnkFlg);
		tempKnkInfMap.put(JBSbatACIFM148.TOGTU_NYUKIN, INIT_VALUE);
		tempKnkInfMap.put(JBSbatACIFM148.ZNGTU_IZN_NYUKIN, INIT_VALUE);
		tempKnkInfMap.put(JBSbatACIFM148.ZNGTU_KARIUKEKIN, INIT_VALUE);
		tempKnkInfMap.put(JBSbatACIFM148.ZNGTU_DPSIT, INIT_VALUE);
		tempKnkInfMap.put(JBSbatACIFM148.ZNGTU_MAEUKKIN, INIT_VALUE);
		tempKnkInfMap.put(JBSbatACIFM148.ZNGTU_HUMEIKIN, INIT_VALUE);
		
		// キー:金庫番号 | 値:金庫情報マップ
		this.knkInfMap.put(dbMap.getString(JBSbatCH_T_KNK.KNK_NO), tempKnkInfMap);
	}
	
	/**
	 * 会計用金庫料金項目計上優先順位スキーマより、カレント金庫データ処理順を取得します。
	 * 
	 * @return prcKmkCdList	料金項目コードリスト
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private void selectChMKkkrkSumupYjn002() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectChMKkkrkSumupYjn002]");
		
		Map<String, String> knkPrcKmkYjnMap = null;
		this.kaiKnkPrcKmkYjnMap = new HashMap<String, Map<String, String>>();
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(super.opeDate);						// 会計用金庫料金項目計上優先順位適用開始 
		paramList.setValue(super.opeDate);						// 会計用金庫料金項目計上優先順位適用終了
		paramList.setValue(super.opeDate);						// 予約適用年月日
		paramList.setValue(JACStrConst.PRC_KMK_CD_SP);			// 計上元金庫料金項目コード
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChMKkkrkSumupYjn002][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeCH_M_KKKRK_SUMUP_YJN_AC_SELECT_002(paramList.getList().toArray());
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_CH_M_KKKRK_SUMUP_YJN.selectNext();
		
		while (dbMap != null)
		{
			// 計上先金庫料金項目コード
			String sumupSkKnkpkCd = dbMap.getString(JBSbatCH_M_KKKRK_SUMUP_YJN.SUMUP_SK_KNKPK_CD);
			
			if(this.kaiKnkPrcKmkYjnMap.containsKey(sumupSkKnkpkCd))
			{
				knkPrcKmkYjnMap = this.kaiKnkPrcKmkYjnMap.get(sumupSkKnkpkCd);
			}
			else
			{
				knkPrcKmkYjnMap = new HashMap<String, String>();
			}
			knkPrcKmkYjnMap.put(dbMap.getString(JBSbatCH_M_KKKRK_SUMUP_YJN.SUMUP_MT_KNKPK_CD), dbMap.getString(JBSbatCH_M_KKKRK_SUMUP_YJN.KNKPK_SUMUP_YJN));
			
			// キー:計上先金庫料金項目コード | 金庫料金項目計上優先順位マップ
			this.kaiKnkPrcKmkYjnMap.put(sumupSkKnkpkCd, knkPrcKmkYjnMap);
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChMKkkrkSumupYjn002][dbMap=" + dbMap.getMap().toString() + "]");
			dbMap = db_CH_M_KKKRK_SUMUP_YJN.selectNext();
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChMKkkrkSumupYjn002][kaiKnkPrcKmkYjnMap=" + kaiKnkPrcKmkYjnMap.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectChMKkkrkSumupYjn002]");
	}
	
	/**
	 * 会計用金庫料金項目計上優先順位スキーマより、カレント金庫データ処理順を取得します。
	 * 
	 * @return prcKmkCdList	料金項目コードリスト
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private void selectChMKkkrkSumupYjn001() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectChMKkkrkSumupYjn001]");
		
		this.curtKnkYjnMap = new HashMap<String, String>();
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(super.opeDate);						// 会計用金庫料金項目計上優先順位適用開始 
		paramList.setValue(super.opeDate);						// 会計用金庫料金項目計上優先順位適用終了
		paramList.setValue(super.opeDate);						// 予約適用年月日
		paramList.setValue(JACStrConst.PRC_KMK_CD_SP);			// 計上元金庫料金項目コード
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChMKkkrkSumupYjn001][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeCH_M_KKKRK_SUMUP_YJN_AC_SELECT_001(paramList.getList().toArray());
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_CH_M_KKKRK_SUMUP_YJN.selectNext();
		
		while (dbMap != null)
		{
			// キー:計上先金庫料金項目コード | 値:金庫料金項目計上優先順位
			this.curtKnkYjnMap.put(dbMap.getString(JBSbatCH_M_KKKRK_SUMUP_YJN.SUMUP_SK_KNKPK_CD), dbMap.getString(JBSbatCH_M_KKKRK_SUMUP_YJN.KNKPK_SUMUP_YJN));
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChMKkkrkSumupYjn001][dbMap=" + dbMap.getMap().toString() + "]");
			dbMap = db_CH_M_KKKRK_SUMUP_YJN.selectNext();
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChMKkkrkSumupYjn001][curtKnkYjnMap=" + curtKnkYjnMap.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectChMKkkrkSumupYjn001]");
	}
	
	/**
	 * 料金項目抽出変換スキーマより、料金項目コードリストを取得します。
	 * 
	 * @param workKinoSkbt 		業務機能識別コード
	 * @return prcKmkCdList	料金項目コードリスト
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private void selectChMPrcKmkCsChge(String workKinoSkbt) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectChMPrcKmkCsChge]");
		
		this.wksKaikKnkPrcKmkCdList =  new ArrayList<String>();
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(JACStrConst.SYS_CD_AC);				// システムコード
		paramList.setValue(workKinoSkbt);						// 業務機能識別コード
		paramList.setValue(JACStrConst.CHSHT_CHG_CD_CST);		// 抽出変換コード
		paramList.setValue(super.opeDate);						// 料金項目抽出変換適用開始年月日 
		paramList.setValue(super.opeDate);						// 料金項目抽出変換適用終了年月日
		paramList.setValue(super.opeDate);						// 予約適用年月日
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChMPrcKmkCsChge][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeCH_M_PRC_KMK_CS_CHGE_AC_SELECT_015(paramList.getList().toArray());
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		
		while (dbMap != null)
		{
			// 当月計上対象金庫料金項目コードリストに結果を追加
			this.wksKaikKnkPrcKmkCdList.add(dbMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD));
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChMPrcKmkCsChge][dbMap=" + dbMap.getMap().toString() + "]");
			dbMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChMPrcKmkCsChge][wksKaikKnkPrcKmkCdList=" + wksKaikKnkPrcKmkCdList.toArray().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectChMPrcKmkCsChge]");
	}
}
