/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHSknChgTkTrgtChsht
*	ソースファイル名	：JBSbatCHSknChgTkTrgtChsht.java
*	作成者				：富士通　
*	作成日				：2012年01月11日
*＜機能概要＞
*　債権額変更・取下対象抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/01/11   富士通		新規作成
*	v5.00.00	2013/11/11   FJ)		小掠【OM-2013-0003538】 債権額変更・取下対象抽出の方法を変更、及び各項目の取得方法の変更
*	v11.00.00	2014/12/01   FJ)中山	【OM-2014-0003606】債権額変更・取下対象抽出の条件修正
*	v41.00.00	2019/04/18   FJ)塩津	【ANK-3544-00-00】債権回収会社の追加
*	v44.00.00	2019/07/18   FJ)塩津	【OM-2019-0000704】コンビニリアル速報・速報入金時の債権回収会社名の不正出力
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.util.ArrayList;


import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatCHIFM128;
import eo.business.util.table.JBSbatCH_T_NYUKIN;

import eo.business.util.table.JBSbatCH_T_TOKUSOKU;
import eo.business.util.table.JBSbatCH_T_TOKUSOKU_IDO;
import eo.common.constant.JACStrConst;
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 JBSbatCHSknChgTkTrgtChsht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(督促異動)*/
	private static final String D_TBL_NAME_CH_T_TOKUSOKU_IDO = "CH_T_TOKUSOKU_IDO";

	/** テーブル(入金)*/
	private static final String D_TBL_NAME_CH_T_NYUKIN = "CH_T_NYUKIN";

	/** SQL定義キー(CH_SELECT_006)*/
	private static final String CH_T_TOKUSOKU_IDO_CH_SELECT_006 = "CH_SELECT_006";

	/** SQL定義キー(CH_SELECT_015)*/
	private static final String CH_T_NYUKIN_CH_SELECT_015 = "CH_SELECT_015";

	/** テーブルアクセスクラス(督促異動)*/
	private JBSbatSQLAccess db_CH_T_TOKUSOKU_IDO = null;

	/** テーブルアクセスクラス(入金)*/
	private JBSbatSQLAccess db_CH_T_NYUKIN = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 退避．業務識別コード:リアル速報*/
	private String tihKinoReal = null;

	/** 退避．業務識別コード:速報*/
	private String tihKinoSokuho = null;

	/** 退避．入金額*/
	private String tihNyukinAmnt = null;
	
	/** 退避．仮入金額*/
	private String tihKariNyukinAmnt = null;
	
	/** 退避．領収日*/
	private String tihReceiptYmd = null;
	
	//v41.00.00 2019/04/18 Add Start
	/** 退避．債権回収委託会社コード*/
	private String tihSknksitkcmCd = null;
	//v41.00.00 2019/04/18 Add End
	
	/** ワーク前．督促ステータス*/
	private String wkBfTokusokuStat = null;
	
	/** ワーク前．督促金額*/
	private BigDecimal wkBfTokusokuAmnt = null;
	
	/** ワーク前．督促異動年月日*/
	private String wkBfTokusokuIdoYmd = null;
	
	/** ワーク前．督促異動No*/
	private String wkBfTokusokuIdoNo = null;
	
	/** ワーク前．督促イベントコード*/
	private String wkBfTokusokuEventCd = null;
	
	/** ワーク前.金額変更イベント */
	private boolean wkBfKingakuEventFlg = false;
	
	/** ワーク後．督促ステータス*/
	private String wkAfTokusokuStat = null;
	
	/** ワーク後．督促金額*/
	private BigDecimal wkAfTokusokuAmnt = null;
	
	/** ワーク後．督促異動年月日*/
	private String wkAfTokusokuIdoYmd = null;
	
	/** ワーク後．督促イベントコード*/
	private String wkAfTokusokuEventCd = null;
	
	/** ワーク後.金額変更イベント */
	private boolean wkAfKingakuEventFlg = false;
	
	/** ワーク．督促金額Max*/
	private BigDecimal wkfTokusokuAmntMax = null;
	
	/** ワーク．督促異動番号MAX*/
	private String wkfTokusokuIdoNoMax = null;
	
	/** ワーク．督促移動日MIN*/
	private String wkfTokusokuYMDMin = null;
	
	/** ワーク前.督促移動日MINStartFlg */
	private boolean wkfTokusokuYMDMinStartFlg = false;
	
	/** ワーク前.督促移動日MINEndFlg */
	private boolean wkfTokusokuYMDMinEndFlg = false;
	
	/** ZERO */
	private static final String ZERO = "0";
	
	/** 督促異動NO　MIN */
	private static final String MIN_TOKUSOKU_NO = "000000000000";

	/** MAXYMD */
	private static final String MAX_YMD = "99999999";
	
	/** 領収日REC */
	private static final String RECEIPT_REC = "999";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CH_T_TOKUSOKU_IDO = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_TOKUSOKU_IDO);
		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 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");

		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		// システムパラメータ管理から業務機能識別コード取得
		tihKinoReal 	= paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_RL_SKH_JT_GK);		// リアル速報充当額＿合計
		tihKinoSokuho	= paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_SOKHO_JUTO_GK);		// 速報充当額＿合計
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @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() + "]") ;
		
		// 1. ワーク変数の初期化
		// (1) 督促異動後データの設定
		// ワーク後．督促ステータス ← 入力．督促ステータス
		// ワーク後．督促金額　　　 ← 入力．督促金額
		// ワーク後．督促異動年月日 ← 入力．督促異動年月日
		// ワーク後．督促イベントコード ← 入力．督促異動イベントコード
		wkAfTokusokuStat 	= inMap.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_STAT);
		wkAfTokusokuAmnt 	= inMap.getBigDecimal(JBSbatCH_T_TOKUSOKU.TOKUSOKU_AMNT);
		wkAfTokusokuIdoYmd 	= inMap.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_IDO_YMD);
		wkAfTokusokuEventCd	= inMap.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_IDO_EVENT_CD);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][金額変更有無判定:ワーク後．イベントコード=" + wkAfTokusokuEventCd + "]");
		
		// (2) 入金額、仮入金額に0を設定する。(常に取得できる項目なので、主処理の始めに初期化)
		tihNyukinAmnt 		= ZERO;
		tihKariNyukinAmnt 	= ZERO;
		tihReceiptYmd       = JACStrConst.SPACE_1;

		// 督促.金額変更イベントの判定
		// ワーク後．督促ステータス　＝　"30"（債権仮充当(リアル)）または
		// ワーク後．督促ステータス　＝　"31"（債権仮充当(速報)）または
		// ワーク後．督促ステータス　＝　"32"（債権充当）または
		// ワーク後．督促ステータス　＝　"40"（入金登録画面）または
		// ワーク後．督促ステータス　＝　"60"（入金取消画面）または
		// ワーク後．督促ステータス　＝　"70"（料金変更画面）
		wkAfKingakuEventFlg = JACStrConst.TKSKIDO_EVCD_KRJUTO_REAL.equals(wkAfTokusokuEventCd)
							|| JACStrConst.TKSKIDO_EVCD_KRJUTO_SKH.equals(wkAfTokusokuEventCd)
							|| JACStrConst.TKSKIDO_EVCD_SKN_JUTO.equals(wkAfTokusokuEventCd)
							|| JACStrConst.TKSKIDO_EVCD_NYKIN_ADD_DISP.equals(wkAfTokusokuEventCd)
							|| JACStrConst.TKSKIDO_EVCD_NYKIN_CLR_DISP.equals(wkAfTokusokuEventCd)
							|| JACStrConst.TKSKIDO_EVCD_PRC_CHG_DISP.equals(wkAfTokusokuEventCd);

		// 2. 督促異動の取得
		// (1) 督促異動スキーマ検索
		ArrayList<JBSbatCommonDBInterface> tokusokuIdoInfoList = getTokusokuIdoInfo(inMap.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_NO));

		// 3. ニッテレ債権委託済債権の金額変更有無判定
		// (1) 2.(1)の処理にて取得した件数分(a)〜(d)の処理を繰り返す。
		for(int i = 0; i < tokusokuIdoInfoList.size(); i++)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute]["+ i + tokusokuIdoInfoList.size() +" ]");
			JBSbatCommonDBInterface dbMap = tokusokuIdoInfoList.get(i);
			if(dbMap == null)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][該当データなしの場合 ]");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
				// 該当データなしの場合、主処理を抜け次のデータを読み込む。
				return null;
			}
			
			// (a) 督促異動前データの設定
			// ワーク前．督促ステータス ← 督促異動．督促ステータス
			// ワーク前．督促金額　　　 ← 督促異動．督促金額
			// ワーク前．督促異動年月日 ← 督促異動．督促異動年月日
			// ワーク前．督促イベントコード ← 督促異動．督促異動イベントコード
			wkBfTokusokuStat 	= dbMap.getString(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_STAT);
			wkBfTokusokuAmnt 	= dbMap.getBigDecimal(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_AMNT);
			wkBfTokusokuIdoYmd 	= dbMap.getString(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_IDO_YMD);
			wkBfTokusokuEventCd 	= dbMap.getString(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_IDO_EVENT_CD);
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][金額変更有無判定:ワーク後．督促異動年月日=" + wkAfTokusokuIdoYmd + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][金額変更有無判定:ワーク前．督促異動年月日=" + wkBfTokusokuIdoYmd + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][金額変更有無判定:ワーク前．督促ステータス=" + wkBfTokusokuStat + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][金額変更有無判定:ワーク後．督促金額=" + wkAfTokusokuAmnt + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][金額変更有無判定:ワーク前．督促金額=" + wkBfTokusokuAmnt + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][金額変更有無判定:ワーク前．イベントコード=" + wkBfTokusokuEventCd + "]");

			// 督促異動.金額変更イベントの判定
			// ワーク前．督促ステータス　＝　"30"（債権仮充当(リアル)）または
			// ワーク前．督促ステータス　＝　"31"（債権仮充当(速報)）または
			// ワーク前．督促ステータス　＝　"32"（債権充当）または
			// ワーク前．督促ステータス　＝　"40"（入金登録画面）または
			// ワーク前．督促ステータス　＝　"60"（入金取消画面）または
			// ワーク前．督促ステータス　＝　"70"（料金変更画面）
			wkBfKingakuEventFlg = JACStrConst.TKSKIDO_EVCD_KRJUTO_REAL.equals(wkBfTokusokuEventCd)
								|| JACStrConst.TKSKIDO_EVCD_KRJUTO_SKH.equals(wkBfTokusokuEventCd)
								|| JACStrConst.TKSKIDO_EVCD_SKN_JUTO.equals(wkBfTokusokuEventCd)
								|| JACStrConst.TKSKIDO_EVCD_NYKIN_ADD_DISP.equals(wkBfTokusokuEventCd)
								|| JACStrConst.TKSKIDO_EVCD_NYKIN_CLR_DISP.equals(wkBfTokusokuEventCd)
								|| JACStrConst.TKSKIDO_EVCD_PRC_CHG_DISP.equals(wkBfTokusokuEventCd);

			// (a) ニッテレ債権委託済債権の金額変更有無判定
//OM-2014-0003606 MOD START
//			// ワーク後．督促異動年月日　＝　バッチ運用日　　　　　　　かつ
//			// ワーク前．督促ステータス　＝　"61"（ニッテレ債権委託済）かつ
//			// ワーク後．督促異動年月日　　　　>　ワーク前．督促異動年月日かつ　
//			// ワーク後．金額変更イベント==true　または　ワーク後．金額変更イベント==false かつ　ワーク前．金額変更イベント==true　
//			if(super.opeDate.equals(wkAfTokusokuIdoYmd) 
//					&& (JACStrConst.TOKUSOKU_STAT_NSAIKEN_ITK_ZUMI.equals(wkBfTokusokuStat)) 
//					&& (wkAfTokusokuIdoYmd.compareTo(wkBfTokusokuIdoYmd) > 0) 
//					&& (wkAfKingakuEventFlg == true || wkAfKingakuEventFlg == false && wkBfKingakuEventFlg == true))
			// ワーク後．金額変更イベント==trueまたは
			// ワーク後．督促異動年月日　＝　バッチ運用日かつワーク後．金額変更イベント==true
			if (wkAfKingakuEventFlg || (super.opeDate.equals(wkBfTokusokuIdoYmd) && wkBfKingakuEventFlg))
//OM-2014-0003606 MOD END
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][(b) ニッテレ債権委託済債権の金額変更有無判定 TRUE の場合 ]");
				break;
			}
			// 最終レコード時（1件も該当データが存在しない場合、主処理を抜け次のデータを読み込む）
			if(i == tokusokuIdoInfoList.size() - 1)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][1件も該当データが存在しない場合 ]");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
				// 該当データなしの場合、主処理を抜け次のデータを読み込む。
				return null;
			}
		}
		
		// 4. (b)(c)入金情報の取得
		setNyukinInfo(inMap.getString(JBSbatCH_T_TOKUSOKU.SEIKY_KEI_NO),inMap.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_NO));

		wkfTokusokuYMDMinEndFlg = false;
		wkfTokusokuYMDMinStartFlg = false;
		wkfTokusokuIdoNoMax = MIN_TOKUSOKU_NO;
		wkfTokusokuYMDMin = MAX_YMD;
		// 5. (d)旧督促金額・(e)委託年月取得
		for(int i = 0; i < tokusokuIdoInfoList.size(); i++)
		{
			//データ再取得
			JBSbatCommonDBInterface dbMap = tokusokuIdoInfoList.get(i);

			// ワーク前．督促ステータス ← 督促異動．督促ステータス
			// ワーク前．督促金額　　　 ← 督促異動．督促金額
			// ワーク前．督促異動年月日 ← 督促異動．督促異動年月日
			// ワーク前．督促イベントコード ← 督促異動．督促異動イベントコード
			// ワーク前．督促異動番号 ← 督促異動．督促異動番号
			wkBfTokusokuStat 	= dbMap.getString(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_STAT);
			wkBfTokusokuAmnt 	= dbMap.getBigDecimal(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_AMNT);
			wkBfTokusokuIdoYmd 	= dbMap.getString(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_IDO_YMD);
			wkBfTokusokuEventCd 	= dbMap.getString(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_IDO_EVENT_CD);
			wkBfTokusokuIdoNo 	= dbMap.getString(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_IDO_NO);

			//(d)督促ステータス'61'の連続している最古の督促移動日
			if(JACStrConst.TOKUSOKU_STAT_NSAIKEN_ITK_ZUMI.equals(wkBfTokusokuStat))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][督促ステータス'61'のデータ TRUE の場合 ]");

				if(wkfTokusokuYMDMinStartFlg == false )
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][督促ステータス'61'のデータ範囲開始 TRUE の場合 ]");
					wkfTokusokuYMDMin = wkBfTokusokuIdoYmd;
					wkfTokusokuYMDMinStartFlg = true;
				}

				//
				if (wkfTokusokuYMDMin.compareTo(wkBfTokusokuIdoYmd) > 0
						&& wkfTokusokuYMDMinStartFlg == true
						&& wkfTokusokuYMDMinEndFlg == false)
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][督促ステータス'61'の連続している最古のデータ TRUE の場合 ]");
					wkfTokusokuYMDMin = wkBfTokusokuIdoYmd;
				}
			}
			else if (wkfTokusokuYMDMinStartFlg == true)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][督促ステータス'61'のデータ範囲終了 TRUE の場合 ]");
				wkfTokusokuYMDMinEndFlg = true;
			}

			// (e) ワーク前．督促異動年月日 ＜ バッチ運用日 の場合
			if(super.opeDate.compareTo(wkBfTokusokuIdoYmd) > 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][ワーク前．督促異動年月日 ＜ バッチ運用日 の場合" + wkBfTokusokuIdoYmd + "<" + super.opeDate + " ]");

				if (wkfTokusokuIdoNoMax.compareTo(wkBfTokusokuIdoNo) < 0)
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][督促異動年月日の最小 TRUE の場合 ]");
					wkfTokusokuIdoNoMax = wkBfTokusokuIdoNo;
					wkfTokusokuAmntMax = wkBfTokusokuAmnt;
				}
			}
		}

		// 6. 債権額変更・取下対象データの出力
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		makeOutputInfo(outputItem, inMap);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 督促異動処理（督促異動の取得）<br>
	 * 検索結果は、ArrayListで返却する。 <br>
	 * @param tokusokuNo 督促対象情報．請求契約番号
	 * @return ArrayList 取得結果をセットしたリスト
	 * @throws Exception
	 */
	private ArrayList<JBSbatCommonDBInterface> getTokusokuIdoInfo(String tokusokuNo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][gettokusokuIdoInfo]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][gettokusokuIdoInfo][tokusokuNo=" + tokusokuNo + "]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(tokusokuNo);	// 督促番号

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][gettokusokuIdoInfo][dbList=" + paramList.getList().toString() + "]");
		
		// SQL実行
		executeCH_T_TOKUSOKU_IDO_CH_SELECT_006(paramList.getList().toArray());
		
		// 取得結果取得
		JBSbatCommonDBInterface dbMap = db_CH_T_TOKUSOKU_IDO.selectNext();
		// 初期化
		ArrayList<JBSbatCommonDBInterface> dbList = new ArrayList<JBSbatCommonDBInterface>();
		
		// 取得出来ない場合、空レコードを追加
		if(dbMap == null)
		{
			dbList.add(dbMap);
		}
		// 退避．料金集計リストに取得結果を設定
		while(dbMap != null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][gettokusokuIdoInfo][dbMap=" + dbMap.getMap().toString() + "]");
			
			dbList.add(dbMap);
			
			dbMap = db_CH_T_TOKUSOKU_IDO.selectNext();
		}
	
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][gettokusokuIdoInfo]");
		return dbList;
	}
	
	/**
	 * 入金処理（入金情報の取得）<br>
	 * 検索結果は、計算・設定する。 <br>
	 * @param seikyKeiNo 督促対象情報．請求契約番号
	 * @throws Exception
	 */
	private void setNyukinInfo(String seikyKeiNo,String tokusokuNo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setNyukinInfo]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setNyukinInfo][seikyKeiNo=" + seikyKeiNo + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setNyukinInfo][tokusokuNo=" + tokusokuNo + "]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();

		paramList.setValue(seikyKeiNo);		// 請求契約番号
		paramList.setValue(super.opeDate);	// 入金処理年月日
		paramList.setValue(tokusokuNo);		// 督促番号

		paramList.setValue(seikyKeiNo);		// 請求契約番号
		paramList.setValue(super.opeDate);	// コンビニリアル速報通知年月日
		paramList.setValue(tokusokuNo);		// 督促番号
		paramList.setValue(tihKinoReal);	// 業務識別コード:リアル即速報
		paramList.setValue(tihKinoSokuho);	// 業務識別コード:速報

		paramList.setValue(seikyKeiNo);		// 請求契約番号

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setNyukinInfo][dbList=" + paramList.getList().toString() + "]");
		
		// SQL実行
		executeCH_T_NYUKIN_CH_SELECT_015(paramList.getList().toArray());
		
		// 取得結果取得
		JBSbatCommonDBInterface dbMap = db_CH_T_NYUKIN.selectNext();
		
		// 取得出来ない場合
		if(dbMap == null)
		{
			// 該当データなしの場合、入金額、仮入金額に0、領収日にブランクを設定する。
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setNyukinInfo][該当データが存在しない場合 ]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setNyukinInfo]");
			return;
		}
		// 退避．料金集計リストに取得結果を設定
		while(dbMap != null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setNyukinInfo][dbMap=" + dbMap.getMap().toString() + "]");
			// 入金．入金ステータス ＝ 010（入金済み）の場合
			if(JACStrConst.NYUKIN_STAT_ZUMI.equals(dbMap.getString(JBSbatCH_T_NYUKIN.NYUKIN_STAT)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setNyukinInfo][入金．入金ステータス ＝ 010（入金済み）の場合 ]");
				// 入金額 ＝ 入金額 ＋ 入金．入金額
				tihNyukinAmnt = new BigDecimal(tihNyukinAmnt).add(new BigDecimal(dbMap.getString(JBSbatCH_T_NYUKIN.NYUKIN_AMNT))).toString();
				
				//v44.00.00 2019/07/08 Mod Start
				//v41.00.00 2019/04/18 Add Start
				// 債権回収委託会社コードの設定
				//tihSknksitkcmCd = dbMap.getString(JBSbatCH_T_NYUKIN.SKNKSITKCM_CD);
				//v41.00.00 2019/04/18 Add End
				//債権回収委託会社コードが取得できた場合
				if(dbMap.getString(JBSbatCH_T_NYUKIN.SKNKSITKCM_CD) != null)
				{
					// 債権回収委託会社コードの設定
					tihSknksitkcmCd = dbMap.getString(JBSbatCH_T_NYUKIN.SKNKSITKCM_CD);
				}
				// 取得できなかった場合は債権回収委託会社コードをnullで設定
				else
					tihSknksitkcmCd = null;
				//v44.00.00 2019/07/08 Mod End
			}
			// 入金．入金ステータス ＝ 001（リアル速報）または 002（速報）の場合
			else if(JACStrConst.NYUKIN_STAT_REAL_SOKHO.equals(dbMap.getString(JBSbatCH_T_NYUKIN.NYUKIN_STAT)) || JACStrConst.NYUKIN_STAT_SOKHO.equals(dbMap.getString(JBSbatCH_T_NYUKIN.NYUKIN_STAT)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setNyukinInfo][入金．入金ステータス ＝ 001（リアル速報）または 002（速報）の場合 ]");
				// 仮入金額 ＝ 仮入金額 ＋ 入金．入金額
				tihKariNyukinAmnt = new BigDecimal(tihKariNyukinAmnt).add(new BigDecimal(dbMap.getString(JBSbatCH_T_NYUKIN.NYUKIN_AMNT))).toString();
				//v44.00.00 2019/07/20 Add Start
				// 債権回収委託会社コードをnullで設定
				tihSknksitkcmCd = null;
				//v44.00.00 2019/07/20 Add End
			}
			//領収日(入金．入金ステータス ＝999で作成) 
			else if(RECEIPT_REC.equals(dbMap.getString(JBSbatCH_T_NYUKIN.NYUKIN_STAT)))
			{
				tihReceiptYmd = dbMap.getString(JBSbatCH_T_NYUKIN.RECEIPT_YMD);
			}
			
			dbMap = db_CH_T_NYUKIN.selectNext();
		}
	
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setNyukinInfo]");
		
	}
	

	/**
	 * 債権額変更・取下対象データ情報を作成します
	 * @param outputInItem　出力情報
	 * @param inMap　入力電文
	 * @throws Exception
	 */
	private void makeOutputInfo(JBSbatOutputItem outputInItem, JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputInfo]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputInfo][inMap=" + inMap.getMap().toString() + "]");
		
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 区分
		// ワーク後．督促金額 ＝ 0 の場合、"1"（取下）を設定。
		// ワーク後．督促金額 ≠ 0 の場合、"2"（変更）を設定。
		
		if(BigDecimal.ZERO.compareTo(wkAfTokusokuAmnt) == 0)
		{
			outMap.set(JBSbatCHIFM128.DIV, 		JACStrConst.FILE_DIV_CNCL);
		}
		else
		{
			outMap.set(JBSbatCHIFM128.DIV, 		JACStrConst.FILE_DIV_CHG);
		}
		// 委託月
		outMap.set(JBSbatCHIFM128.ITAKU_MON, 				wkfTokusokuYMDMin.substring(0, 6));
		
		// 請求契約番号
		outMap.set(JBSbatCHIFM128.SEIKY_KEI_NO, 			inMap.getString(JBSbatCH_T_TOKUSOKU.SEIKY_KEI_NO));
		//v41.00.00 2019/04/18 Add Start
		// 債権回収委託会社コード
		outMap.set(JBSbatCHIFM128.SKNKSITKCM_CD, 			tihSknksitkcmCd);
		//v41.00.00 2019/04/18 Add End
		// 旧督促残高額
		outMap.set(JBSbatCHIFM128.OLD_TOKUSOKU_ZAN_AMNT, 	wkfTokusokuAmntMax.toString());
		// 新督促残高額
		outMap.set(JBSbatCHIFM128.NEW_TOKUSOKU_ZAN_AMNT, 	wkAfTokusokuAmnt.toString());
		// 入金額
		outMap.set(JBSbatCHIFM128.NYUKIN_AMNT, 				tihNyukinAmnt);
		// 仮入金額
		outMap.set(JBSbatCHIFM128.KARI_NYUKIN_AMNT, 		tihKariNyukinAmnt);
		// 変更額
		outMap.set(JBSbatCHIFM128.CHGE_AMNT, 				wkfTokusokuAmntMax.subtract(wkAfTokusokuAmnt).toString());
		// 領収日
		outMap.set(JBSbatCHIFM128.RECEIPT_YMD, 				tihReceiptYmd);
		// 変更日
		outMap.set(JBSbatCHIFM128.CHGE_YMD, 				wkAfTokusokuIdoYmd);
		// 督促番号
		outMap.set(JBSbatCHIFM128.TOKUSOKU_NO, 				inMap.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_NO));

		// 出力フラグ設定
		outMap.setOutFlg(true);
		
		// 出力処理
		outputInItem.addOutMapList(outMap);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeOutputInfo][outputItem = " + outMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutputInfo]");
	}
	
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CH_T_TOKUSOKU_IDO.close();
		db_CH_T_NYUKIN.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(CH_SELECT_006)で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_TOKUSOKU_IDO_CH_SELECT_006(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CH_T_TOKUSOKU_IDO.selectBySqlDefine(paramList, CH_T_TOKUSOKU_IDO_CH_SELECT_006);
	}

	/**
	 * SQLKEY(CH_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_T_NYUKIN_CH_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());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());

		paramList.setValue(param[8].toString());

		// DBアクセスを実行します
		db_CH_T_NYUKIN.selectBySqlDefine(paramList, CH_T_NYUKIN_CH_SELECT_015);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
