/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHSknksitkcmNyukinDataMake
*	ソースファイル名	：JBSbatCHSknksitkcmNyukinDataMake.java
*	作成者				：富士通　
*	作成日				：2021年07月30日
*＜機能概要＞
*　債権回収委託会社入金データ作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v54.00.00	2021/07/30  FJ)山地		【ANK-4079-00-00】債権委託先会社からの入金処理システム化対応
*	v63.00.00	2022/12/20  FJ)中尾		【ANK-4289-00-00】債権委託先会社からの一括入金登録処理の改善
*********************************************************************/
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.common.JCCBatCommon;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.common.JKKBatCommon;
import eo.business.util.file.JBSbatCHIFM397;
import eo.business.util.file.JBSbatCHIFM398;
import eo.business.util.file.JBSbatCHIFM399;
import eo.business.util.table.JBSbatCH_T_TOKUSOKU;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
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;
import eo.framework.log.JBSbatLogPrintControl;

/**
* 債権回収委託会社一括入金指示ファイル変換 <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHSknksitkcmNyukinDataMake extends JBSbatBusinessService
{
	/** テーブル(請求契約)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";
	
	/** テーブル(督促)*/
	private static final String D_TBL_NAME_CH_T_TOKUSOKU = "CH_T_TOKUSOKU";
	
	/** SQL定義キー(CH_SELECT_020)*/
	private static final String KK_T_SEIKY_KEI_CH_SELECT_020 = "CH_SELECT_020";
	
	/** SQL定義キー(CH_SELECT_012)*/
	private static final String CH_T_TOKUSOKU_CH_SELECT_012 = "CH_SELECT_012";
	
	/** テーブルアクセスクラス(請求契約)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;
	
	/** テーブルアクセスクラス(督促)*/
	private JBSbatSQLAccess db_CH_T_TOKUSOKU = null;
	
	/** 請求収納業務共通クラス */
	private JCHbatSeikyKaknoBusinessUtil seikyUtil = null;
	
	/** 重複チェック用 請求契約番号リスト **/
	private ArrayList<String> seikyKeiNoList = new ArrayList<String>();
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_KK_T_SEIKY_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_KEI);
		db_CH_T_TOKUSOKU = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_TOKUSOKU);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][opeDate=" + super.opeDate + "]");
		
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		paramUtil.close();
		
		seikyUtil = new JCHbatSeikyKaknoBusinessUtil(commonItem);
		
		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]");
		assert inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]"): true;
		
		JBSbatOutputItem outputInItem = new JBSbatOutputItem();
		
		// 妥当性チェック・ファイル出力を行う
		dataCheck(inMap, outputInItem);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		db_KK_T_SEIKY_KEI.close();
		db_CH_T_TOKUSOKU.close();
		seikyUtil.close();
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * データレコードの妥当性チェックを行います。
	 * 
	 * @param inMap 入力電文
	 * @param outputItem 出力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void dataCheck(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][dataCheck]");
		
		boolean errFlg	= false;															// エラーフラグ
		String errMsgId = null;																// エラーメッセージID
		String[] errMsgValue = null;														// エラーメッセージ置換文字
		String errCd	= null;																// エラーコード
		String errMsg	= null;																// エラーメッセージ
		
		String seiky_kei_no = inMap.getString(JBSbatCHIFM397.SEIKY_KEI_NO);					// 請求契約番号
		String receipt_ymd = inMap.getString(JBSbatCHIFM397.RECEIPT_YMD);					// 領収年月日
		String nyukin_amnt = inMap.getString(JBSbatCHIFM397.NYUKIN_AMNT);					// 入金額
		String nyukin_route_cd = inMap.getString(JBSbatCHIFM397.NYUKIN_ROUTE_CD);			// 入金経路
		String sknksitkcm_cd = inMap.getString(JBSbatCHIFM397.SKNKSITKCM_CD);				// 債権回収委託会社コード
		String kiji = inMap.getString(JBSbatCHIFM397.KIJI);									// 記事
		
		// 入力Map＝nullの場合
		if(inMap.getMap().size() == 0)
		{
			// エラーログ:ファイル形式チェックエラー
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][ファイル形式チェックエラー]");
			
			// エラーファイル出力用に設定
			errFlg = true;
			errMsgId = JPCBatchMessageConstant.ECHB1420TE;
			errMsgValue = new String[]{};
			errCd = "H01";
		}
		
		// ==================================
		// === 請求契約番号妥当性チェック ===
		// ==================================
		// 請求契約番号が""(空)なら
		if(JACStrConst.KARA_MOJI.equals(seiky_kei_no))
		{
			// 請求契約番号が""(空)ならエラー
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][請求契約番号必須チェックエラー]");
			
			// エラーファイル出力用に設定
			errFlg = true;
			errMsgId = JPCBatchMessageConstant.ECHB1870TW;
			errMsgValue = new String[]{"請求契約番号"};
			errCd = "E01";
		}
		
		// ================================
		// === 領収年月日妥当性チェック ===
		// ================================
		if (!errFlg)
		{
			// ""(空)ならエラー
			if(JACStrConst.KARA_MOJI.equals(receipt_ymd))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][領収年月日必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1880TW;
				errMsgValue = new String[]{"領収年月日"};
				errCd = "E02";
			}
			// 暦日でなければエラー
			else if (!JCCBatCommon.checkDate(receipt_ymd, 8))
			{
				JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][領収年月日暦日チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1890TW;
				errMsgValue = new String[]{"領収年月日"};
				errCd = "E03";
			}
			// 「領収年月日」 > 「オンライン運用日」 ならエラー
			else if (JPCUtilCommon.isFutureDate(receipt_ymd, super.onlineOpeDate, "0"))
			{
				JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][領収年月日未来日チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1900TW;
				errMsgValue = new String[]{"領収年月日"};
				errCd = "E04";
			}
		}
		
		// ==========================
		// === 金額妥当性チェック ===
		// ==========================
		if (!errFlg)
		{
			// ""(空)ならエラー
			if(JACStrConst.KARA_MOJI.equals(nyukin_amnt))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][金額必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1880TW;
				errMsgValue = new String[]{"金額"};
				errCd = "E05";
			}
			// 半角数値でなければエラー
			else if (!JCCBatCommon.isHannkakuSuuji1(nyukin_amnt))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][金額半角不正チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1890TW;
				errMsgValue = new String[]{"金額"};
				errCd = "E06";
			}
			// 0 より大きくなければエラー
			else if (new BigDecimal(nyukin_amnt).compareTo(BigDecimal.ZERO) <= 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][金額マイナスチェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1910TW;
				errMsgValue = new String[]{};
				errCd = "E07";
			}
		}
		
		// ========================================
		// === 入金経路妥当性チェック ===
		// ========================================
		if (!errFlg)
		{
			// ""(空)ならエラー
			if(JACStrConst.KARA_MOJI.equals(nyukin_route_cd))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][入金経路必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1880TW;
				errMsgValue = new String[]{"入金経路"};
				errCd = "E08";
			}
			// "99"（債権回収委託会社）以外ならエラー
			else if (!JACStrConst.NYKNKEIRCD_SAIKEN_KAISHU.equals(nyukin_route_cd))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][入金経路不正チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1890TW;
				errMsgValue = new String[]{"入金経路"};
				errCd = "E09";
			}
		}
		
		// ========================================
		// === 債権回収委託会社コード妥当性チェック ===
		// ========================================
		if (!errFlg)
		{
			// ""(空)ならエラー
			if(JACStrConst.KARA_MOJI.equals(sknksitkcm_cd))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][債権回収委託会社コード必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1880TW;
				errMsgValue = new String[]{"債権回収委託会社"};
				errCd = "E10";
			}
			// "01"(ニッテレ債権会社株式会社)
			// "02"(子浩弁護士事務所)
			// "03"(東新宿弁護士事務所)のいずれかでなければエラー
			else if(!JACStrConst.SKNKSITK_CM_CD_01.equals(sknksitkcm_cd) && 
			   !JACStrConst.SKNKSITK_CM_CD_02.equals(sknksitkcm_cd) && 
			   !JACStrConst.SKNKSITK_CM_CD_03.equals(sknksitkcm_cd))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][債権回収委託会社コード不正チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1890TW;
				errMsgValue = new String[]{"債権回収委託会社"};
				errCd = "E11";
			}
		}
		
		// ========================================
		// === 記事妥当性チェック ===
		// ========================================
		if (!errFlg)
		{
			// ""(空)ならエラー
			if(JACStrConst.KARA_MOJI.equals(kiji))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][記事必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1870TW;
				errMsgValue = new String[]{"記事"};
				errCd = "E12";
			}
			// 桁数チェック
			// 桁数が100桁より大きいならエラー
			else if(kiji.length() > 100)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][記事不正チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1890TW;
				errMsgValue = new String[]{"記事"};
				errCd = "E13";
			}
		}
		
		// ======================================
		// === 請求契約番号妥当性関連チェック ===
		// ======================================
		if (!errFlg)
		{
			// 請求契約に存在しなければエラー
			if (skyKeicheck(seiky_kei_no))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][請求契約番号存在チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1920KW;
				errMsgValue = new String[]{"請求契約なし"};
				errCd = "E14";
			}
			
			// 督促ステータスが「貸倒登録済：90」ならエラー
			else if(tokusokuStatcheck(seiky_kei_no))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][督促ステータスチェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1930KW;
				errMsgValue = new String[]{"貸倒登録済"};
				errCd = "E15";
			}
			
			// 請求契約番号リストに重複する請求契約番号が存在する場合エラー
			else if(this.seikyKeiNoList.contains(seiky_kei_no))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][dataCheck][請求契約番号重複チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1940KW;
				errMsgValue = new String[]{};
				errCd = "E16";
			}
		}
		
		// 請求契約番号リストへ格納する
		this.seikyKeiNoList.add(seiky_kei_no);
		
		// エラーがあればエラーを出力する
		if(errFlg)
		{
			// エラーメッセージ設定
			errMsg = JBSbatLogPrintControl.getMessage(errMsgId, errMsgValue);
			// エラーログ出力
			super.logPrint.printBusinessErrorLog(errMsgId, errMsgValue);
			
			// 債権回収委託会社入金結果情報エラーリスト出力
			setErrData(errCd, errMsg, outputItem, seiky_kei_no,nyukin_amnt, receipt_ymd, nyukin_route_cd, sknksitkcm_cd, kiji);
		}
		else
		{
		// 債権回収委託会社入金データ作成
		setSknksitkcmNkin(outputItem, seiky_kei_no, nyukin_route_cd, receipt_ymd, nyukin_amnt, sknksitkcm_cd, kiji);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][dataCheck]");
	}
	
	/**
	 * 債権回収委託会社入金データを作成します。
	 * 
	 * @param outputItem 出力電文
	 * @param seiky_kei_no 請求契約番号
	 * @param nyukin_route_cd 入金経路コード
	 * @param receipt_ymd 収納年月日
	 * @param nyukin_amnt 入金額
	 * @param sknksitkcm_cd 債権回収委託会社コード
	 * @param kiji 記事
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setSknksitkcmNkin(JBSbatOutputItem outputItem, String seiky_kei_no, String nyukin_route_cd, String receipt_ymd, String nyukin_amnt, String sknksitkcm_cd, String kiji) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setSknksitkcmNkin]");
		
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// システム年月日時分秒を取得
		String sys_date = JKKBatCommon.getSysDateTimeStamp();
		
		outMap.setString(JBSbatCHIFM398.SEIKY_KEI_NO, 				seiky_kei_no);													// 請求契約番号
		outMap.setString(JBSbatCHIFM398.SEIKY_YM, 					JACStrConst.KARA_MOJI);											// 請求年月
		outMap.setString(JBSbatCHIFM398.SEIKY_NO, 					JACStrConst.KARA_MOJI);											// 請求番号
		outMap.setString(JBSbatCHIFM398.SKS_HAKKO_SEQ, 				JACStrConst.KARA_MOJI);											// 請求書発行シーケンス
		outMap.setString(JBSbatCHIFM398.NYUKIN_ROUTE_CD, 			nyukin_route_cd);												// 入金経路コード
		outMap.setString(JBSbatCHIFM398.SHUNOKIKAN_CD, 				JACStrConst.SHNKKNCD_SAIKEN_ITAKU);								// 収納期間コード
		// ANK-4289-00-00 MOD START
//		outMap.setString(JBSbatCHIFM398.OUT_ORG_SHUNO_YMD, 			super.opeDate);													// 収納年月日
		outMap.setString(JBSbatCHIFM398.OUT_ORG_SHUNO_YMD, 			receipt_ymd);													// 収納年月日
		// ANK-4289-00-00 MOD END
		outMap.setString(JBSbatCHIFM398.NYUKIN_AMNT, 				nyukin_amnt);													// 入金額
		outMap.setString(JBSbatCHIFM398.RECEIPT_YMD, 				receipt_ymd);													// 領収年月日
		outMap.setString(JBSbatCHIFM398.RECEIPT_HMS, 				sys_date.substring(8, 14));										// 領収時分秒（システム時分秒（hhmmss））
		outMap.setString(JBSbatCHIFM398.NYUKIN_SYRZM_FLG, 			JACStrConst.NKIN_SYORI_ZUMI_FLG_MI);							// 入金処理済フラグ
		outMap.setString(JBSbatCHIFM398.SKNKSITKCM_CD, 				sknksitkcm_cd);													// 債権回収委託会社コード
		outMap.setString(JBSbatCHIFM398.KIJI, 						kiji);															// 記事
		
		// 出力フラグ ← true
		outMap.setOutFlg(true);
		
		outputItem.addOutMapList(outMap);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setSknksitkcmNkin]");
	}
	
	/**
	 * 債権回収委託会社入金結果情報エラーリストを出力します。
	 * 
	 * @param errCd エラーコード
	 * @param errMsg エラー内容
	 * @param outputItem 出力電文
	 * @param seiky_kei_no 請求契約番号
	 * @param receipt_ymd 収納年月日
	 * @param nyukin_amnt 入金額
	 * @param sknksitkcm_cd 債権回収委託会社コード
	 * @param kiji 記事
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setErrData(String errCd, String errMsg, JBSbatOutputItem outputItem, String seiky_kei_no, String nyukin_amnt, String receipt_ymd, String nyukin_route_cd, String sknksitkcm_cd, String kiji) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setErrData]");
		JBSbatServiceInterfaceMap errMap = new JBSbatServiceInterfaceMap();
		
		errMap.setString(JBSbatCHIFM399.ERR_CD,				errCd);														// エラーコード
		errMap.setString(JBSbatCHIFM399.ERR_MSG,			errMsg);													// エラーメッセージ
		errMap.setString(JBSbatCHIFM399.SEIKY_KEI_NO,		seiky_kei_no);												// 請求契約番号
		errMap.setString(JBSbatCHIFM399.RECEIPT_YMD,		receipt_ymd);												// 領収年月日
		errMap.setString(JBSbatCHIFM399.NYUKIN_AMNT,		nyukin_amnt);												// 入金額
		errMap.setString(JBSbatCHIFM399.NYUKIN_ROUTE_CD,	nyukin_route_cd);											// 入金経路
		errMap.setString(JBSbatCHIFM399.SKNKSITKCM_CD,		sknksitkcm_cd);												// 債権回収委託会社コード
		errMap.setString(JBSbatCHIFM399.KIJI,				kiji);														// 記事
				
		// 出力フラグ ← true
		errMap.setOutFlg(true);
		
		outputItem.addOutMapList_2(errMap);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setErrData]");
	}
	
	/**
	 * 請求契約情報存在チェック
	 * 
	 * @param  seikyKeiNo 請求契約番号
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public boolean skyKeicheck(String seikyKeiNo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][skyKeicheck]");
		
		boolean seikyKeiUmu = false;
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// 請求先番号
		paramList.setValue(seikyKeiNo);
		// 請求契約.予約適用年月日
		paramList.setValue(super.opeDate);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][skyKeicheck][paramList=" + paramList.getList().toString() + "]");		
		
		executeKK_T_SEIKY_KEI_CH_SELECT_020(paramList.getList().toArray());
		
		// 結果を取得
		JBSbatCommonDBInterface dbMap =  db_KK_T_SEIKY_KEI.selectNext();
		if(dbMap == null)
		{
			seikyKeiUmu = true;
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][skyKeicheck]");
		return seikyKeiUmu;
	}
	
	/**
	 * 督促ステータスチェック
	 * 
	 * @param  seikyKeiNo 請求契約番号
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public boolean tokusokuStatcheck(String seikyKeiNo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][tokusokuStatcheck]");
		
		boolean tokusokuCheck =false;
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		// 請求先番号
		whereParam.setValue(seikyKeiNo);
		// 督促管理開始年月日
		whereParam.setValue(super.opeDate);
		// 督促管理終了年月日
		whereParam.setValue(super.opeDate);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][tokusokuStatcheck][whereParam=" + whereParam.getList().toString() + "]");
		
		// SQL実行
		this.executeCH_T_TOKUSOKU_CH_SELECT_012(whereParam.getList().toArray());
		
		// 検索結果取得
		JBSbatCommonDBInterface dbMap = this.db_CH_T_TOKUSOKU.selectNext();
		
		// 返却文字列
		String tokusokuStat = JACStrConst.KARA_MOJI;
		
		// 取得結果ありの場合
		if(null != dbMap)
		{
			// 督促．督促ステータス設定
			tokusokuStat = dbMap.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_STAT);
		}
		
		if(JACStrConst.TOKUSOKU_STAT_KASHID_ZUMI.equals(tokusokuStat))
		{
			tokusokuCheck = true;
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][tokusokuStatcheck]");
		return tokusokuCheck;
	}
	
	/**
	 * SQLKEY(CH_SELECT_012)で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_CH_SELECT_012(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_TOKUSOKU.selectBySqlDefine(paramList, CH_T_TOKUSOKU_CH_SELECT_012);
	}
	
	/**
	 * SQLKEY(CH_SELECT_020)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	請求契約番号
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SEIKY_KEI_CH_SELECT_020(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		
		// DBアクセスを実行します
		db_KK_T_SEIKY_KEI.selectBySqlDefine(paramList, KK_T_SEIKY_KEI_CH_SELECT_020);
	}
}
