/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSBatCHKsDkCmpRealNkDataMake
*	ソースファイル名	：JBSBatCHKsDkCmpRealNkDataMake.java
*	作成者				：富士通　
*	作成日				：2017年04月05日
*＜機能概要＞
*　決済代行会社リアル入金データ作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v32.00.00	2017/04/05   FJ）清原	【ANK-2996-00-00】ＳＭＳを利用した即時決済サービスの導入
*	v32.00.01	2017/05/08   FJ) 西面	【ANK-2996-00-00】ＳＭＳを利用した即時決済サービスの導入
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatCHIFM043;
import eo.business.util.table.JBSbatCH_T_KSDKCP_NKIF_RCV;
import eo.business.util.table.JBSbatCH_T_SEIKY;
import eo.common.constant.JACStrConst;
import eo.common.util.JCHStringUtil;
import eo.framework.application.JBSbatBusinessError;
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 JBSBatCHKsDkCmpRealNkDataMake extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(請求)*/
	private static final String D_TBL_NAME_CH_T_SEIKY = "CH_T_SEIKY";

	/** テーブル(請求契約)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";

	/** テーブル(決済代行会社入金情報受信)*/
	private static final String D_TBL_NAME_CH_T_KSDKCP_NKIF_RCV = "CH_T_KSDKCP_NKIF_RCV";

	/** SQL定義キー(CH_SELECT_044)*/
	private static final String CH_T_SEIKY_CH_SELECT_044 = "CH_SELECT_044";

	/** SQL定義キー(CH_SELECT_016)*/
	private static final String KK_T_SEIKY_KEI_CH_SELECT_016 = "CH_SELECT_016";

	/** テーブルアクセスクラス(請求)*/
	private JBSbatSQLAccess db_CH_T_SEIKY = null;

	/** テーブルアクセスクラス(請求契約)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;

	/** テーブルアクセスクラス(決済代行会社入金情報受信)*/
	private JBSbatSQLAccess db_CH_T_KSDKCP_NKIF_RCV = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼クラス変数追加 開始▼▼▼▼▼▼*/
	
	/** 請求契約存在有無（無） */
	private static final String SEIKY_KEI_UMU_NASI = "0";

	/** 請求契約存在有無（有） */
	private static final String SEIKY_KEI_UMU_ARI = "1";
	
	/**▲▲▲▲▲▲クラス変数追加 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CH_T_SEIKY = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_SEIKY);
		db_KK_T_SEIKY_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_KEI);
		db_CH_T_KSDKCP_NKIF_RCV = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_KSDKCP_NKIF_RCV);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		JBSbatOutputItem outputItem = new JBSbatOutputItem();

		// 請求番号取得
		String seikyNo = this.checkSkyUmu(inMap);

		// 請求契約存在有無
		String seikyKeiUmu = JACStrConst.KARA_MOJI;

		// 請求情報が未存在の場合のみ、請求契約情報存在チェック
		if(JCHStringUtil.isNullBlank(seikyNo))
		{
			seikyKeiUmu = checkSkyKeiChk(inMap);
		}
		else
		{
			// 請求情報が存在した場合、'1'（請求契約存在有無：有）を設定
			seikyKeiUmu = SEIKY_KEI_UMU_ARI;
		}

		// 決済代行会社入金データ作成
		outputItem.addOutMapList(this.makeKsDkCmpNyukinInfo(inMap, seikyNo, seikyKeiUmu));

		// 決済代行会社入金情報受信テーブル更新
		updateKsdcpNkifRcv(inMap, seikyKeiUmu);
		
		// 業務エラー出力
		outPutErrMsg(seikyKeiUmu);
		
		return outputItem;
	
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CH_T_SEIKY.close();
		db_KK_T_SEIKY_KEI.close();
		db_CH_T_KSDKCP_NKIF_RCV.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(CH_SELECT_044)で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_SEIKY_CH_SELECT_044(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_SEIKY.selectBySqlDefine(paramList, CH_T_SEIKY_CH_SELECT_044);
	}

	/**
	 * SQLKEY(CH_SELECT_016)で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_016(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_016);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	決済代行会社入金情報受信種別コード				KSDKCP_NKIF_RCV_SBT_CD
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	KSDKCP_NKIF_RCV_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_KSDKCP_NKIF_RCV_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("NYUKIN_ADD_STAT_CD", setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("KSDKCP_NKIF_RCV_NO", whereParam[0]);

		// DBアクセスを実行します
		db_CH_T_KSDKCP_NKIF_RCV.updateByPrimaryKeys(whereMap, setMap);
	}
	/**
	 * 請求情報有無チェック
	 * @param  inMap 入力情報
	 * @return String 請求番号
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public String checkSkyUmu(JBSbatServiceInterfaceMap inMap) throws Exception
	{

		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();

		// 請求年月
		paramList.setValue(inMap.get(JBSbatCH_T_KSDKCP_NKIF_RCV.SEIKY_YM));
		// 請求先番号
		paramList.setValue(inMap.get(JBSbatCH_T_KSDKCP_NKIF_RCV.SEIKY_KEI_NO));
		// 群番号＋発行シーケンス(下1桁）
		paramList.setValue(JACStrConst.GUN_NO + inMap.getString(JBSbatCH_T_KSDKCP_NKIF_RCV.SKS_HAKKO_SEQ).substring(1));
		
		
		executeCH_T_SEIKY_CH_SELECT_044(paramList.getList().toArray());
		JBSbatCommonDBInterface selectMap = db_CH_T_SEIKY.selectNext(); 
		// 請求番号
		String seikyNo = JACStrConst.KARA_MOJI;
		// 取得結果判定
		if (selectMap != null)
		{
			seikyNo = selectMap.getString(JBSbatCH_T_SEIKY.SEIKY_NO);
		}
		
		return seikyNo;

	}
	
	/**
	 * 請求契約情報存在チェック
	 * @param  resultMap 入力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public String checkSkyKeiChk(JBSbatServiceInterfaceMap inMap) throws Exception
	{

		String seikyKeiUmu = JACStrConst.KARA_MOJI;
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// 請求先番号
		paramList.setValue(inMap.get(JBSbatCH_T_KSDKCP_NKIF_RCV.SEIKY_KEI_NO));
		// 請求契約.予約適用年月日
		paramList.setValue(super.opeDate);

		executeKK_T_SEIKY_KEI_CH_SELECT_016(paramList.getList().toArray());
		// 結果を取得
		JBSbatCommonDBInterface dbMap =  db_KK_T_SEIKY_KEI.selectNext();
		if(dbMap == null)
		{
			// 取得できなかった場合、'0'（請求契約存在有無：無）を設定
			seikyKeiUmu = SEIKY_KEI_UMU_NASI;
		}
		else
		{
			// 取得できた場合、'1'（請求契約存在有無：有）を設定
			seikyKeiUmu = SEIKY_KEI_UMU_ARI;
		}
		return seikyKeiUmu;
	}

	
	/**
	 * 決済代行会社入金データを作成します。
	 * 
	 * @param inMap 編集後入力情報マップ
	 * @param seikyNo 請求番号
	 * @param seikyKeiUmu 請求契約存在有無
	 * @return 決済代行会社入金データ
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private JBSbatServiceInterfaceMap makeKsDkCmpNyukinInfo(JBSbatServiceInterfaceMap inMap, String seikyNo, String seikyKeiUmu) throws Exception
	{
		// 決済手段区分
		String kssaiWayDiv = inMap.getString(JBSbatCH_T_KSDKCP_NKIF_RCV.KSSAI_WAY_DIV);
		
		// 決済代行会社入金データ
		JBSbatServiceInterfaceMap cvsKariNyukinInfo = new JBSbatServiceInterfaceMap();
		
		// 請求契約番号
		cvsKariNyukinInfo.set(JBSbatCHIFM043.SEIKY_KEI_NO,					inMap.get(JBSbatCH_T_KSDKCP_NKIF_RCV.SEIKY_KEI_NO));
		
		// 請求年月
		cvsKariNyukinInfo.set(JBSbatCHIFM043.SEIKY_YM,						inMap.get(JBSbatCH_T_KSDKCP_NKIF_RCV.SEIKY_YM));
		
		// 請求番号
		cvsKariNyukinInfo.set(JBSbatCHIFM043.SEIKY_NO,						seikyNo);
		
		// 請求書発行シーケンス
		cvsKariNyukinInfo.set(JBSbatCHIFM043.SKS_HAKKO_SEQ,					inMap.get(JBSbatCH_T_KSDKCP_NKIF_RCV.SKS_HAKKO_SEQ));
		
		// 入金経路コード
		cvsKariNyukinInfo.set(JBSbatCHIFM043.NYUKIN_ROUTE_CD,				JACStrConst.NYKNKEIRCD_KESSAI_SMBC);
		
		// 収納機関コード
		cvsKariNyukinInfo.set(JBSbatCHIFM043.SHUNOKIKAN_CD,					getShnkknCd(kssaiWayDiv));
		
		// 収納年月日
		cvsKariNyukinInfo.set(JBSbatCHIFM043.OUT_ORG_SHUNO_YMD,				super.opeDate);
		
		// 入金額
		cvsKariNyukinInfo.set(JBSbatCHIFM043.NYUKIN_AMNT,					inMap.get(JBSbatCH_T_KSDKCP_NKIF_RCV.NYUKIN_AMNT));
		
		// 領収年月日
		cvsKariNyukinInfo.set(JBSbatCHIFM043.RECEIPT_YMD,					inMap.get(JBSbatCH_T_KSDKCP_NKIF_RCV.NYUKIN_YMD));
		
		// 領収時分秒
		cvsKariNyukinInfo.set(JBSbatCHIFM043.RECEIPT_HMS,					inMap.getString(JBSbatCH_T_KSDKCP_NKIF_RCV.NYUKIN_HM));
		
		
//v32.00.01 2017/05/08 Mod Start
		// 入金処理済フラグ
		//cvsKariNyukinInfo.set(JBSbatCHIFM043.NYUKIN_SYRZM_FLG,				JACStrConst.SPACE_1);
		
		//決済手段区分がコンビニの場合半角スペースを設定する。
		if(isKessaiWayDivCvs(kssaiWayDiv))
		{
			cvsKariNyukinInfo.set(JBSbatCHIFM043.NYUKIN_SYRZM_FLG,				JACStrConst.SPACE_1);
		}else{
			//決済手段区分がコンビニ以外の場合、収納機関別入金票の対象とするため、入金処理済フラグに処理済を設定する
			cvsKariNyukinInfo.set(JBSbatCHIFM043.NYUKIN_SYRZM_FLG,				JACStrConst.NKIN_SYORI_ZUMI_FLG_SUMI);
		}

//v32.00.01 2017/05/08 Mod End
		
		// 窓口金融機関コード
		cvsKariNyukinInfo.set(JBSbatCHIFM043.MADOGUCHI_BANK_CD,				JACStrConst.KARA_MOJI);
		
		// 窓口金融機関支店コード
		cvsKariNyukinInfo.set(JBSbatCHIFM043.MADOGUCHI_BANK_SHITEN_CD,		JACStrConst.KARA_MOJI);
		
		// コンビニエンスストアコード
		cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_CD,					JACStrConst.KARA_MOJI);
		
		// コンビニ受付店コード
		cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_UK_TEN_CD,				JACStrConst.KARA_MOJI);
		
		// コンビニリアル業務区分コード
		cvsKariNyukinInfo.set(JBSbatCHIFM043.WORK_DIV,						JACStrConst.KARA_MOJI);
		
		// コンビニリアル速報通知年月日
		if(isKessaiWayDivCvs(kssaiWayDiv))
		{
			// 決済手段区分：コンビニの場合、決済代行会社入金情報受信.決済代行会社入金情報処理年月日時分秒のYYYYMMDDを設定
			cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_REAL_SOKHO_TCH_YMD,	getSubstring(inMap.getString(JBSbatCH_T_KSDKCP_NKIF_RCV.KSDKCP_NKIF_TRN_DTM), 0, 8));
		}
		else
		{
			// 決済手段区分：コンビニ以外の場合、nullを設定
			cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_REAL_SOKHO_TCH_YMD,	JACStrConst.KARA_MOJI);
		}
		// コンビニリアル速報通知時分秒
		if(isKessaiWayDivCvs(kssaiWayDiv))
		{
			// 決済手段区分：コンビニの場合、決済代行会社入金情報受信.決済代行会社入金情報処理年月日時分秒のhhmmssを設定
//v32.00.01 2017/05/08 Mod Start
//			cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_REAL_SOKHO_TCH_HMS,	getSubstring(inMap.getString(JBSbatCH_T_KSDKCP_NKIF_RCV.KSDKCP_NKIF_TRN_DTM), 8, 14));
			cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_REAL_SOKHO_TCH_HMS,	getSubstring2(inMap.getString(JBSbatCH_T_KSDKCP_NKIF_RCV.KSDKCP_NKIF_TRN_DTM), 8, 14));
//v32.00.01 2017/05/08 Mod End
		}
		else
		{
			// 決済手段区分：コンビニ以外の場合、nullを設定
			cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_REAL_SOKHO_TCH_HMS,	JACStrConst.KARA_MOJI);
		}
		// コンビニリアル速報処理済フラグ
		cvsKariNyukinInfo.set(JBSbatCHIFM043.CVS_REAL_SOKHO_SYRZM_FLG,		JACStrConst.CVS_REAL_SOKHO_SYRZM_FLG_MI);
		
		// コンビニデータ種別
		cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_DATA_SBT,				JACStrConst.KARA_MOJI);
		
		// コンビ二速報通知年月日
		cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_SOKHO_TCH_YMD,			JACStrConst.KARA_MOJI);
		
		// コンビニ速報処理済フラグ
		cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_SOKHO_SYRZM_FLG,		JACStrConst.KARA_MOJI);
		
		// コンビニ確報通知年月日
		if(isKessaiWayDivCvs(kssaiWayDiv))
		{
			// 決済手段区分：コンビニの場合、nullを設定
			cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_KAKHO_TCH_YMD,			JACStrConst.KARA_MOJI);
		}
		else
		{
			// 決済手段区分：コンビニ以外の場合、決済代行会社入金情報受信.決済代行会社入金情報処理年月日時分秒のYYYYMMDDを設定
			cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_KAKHO_TCH_YMD,		getSubstring(inMap.getString(JBSbatCH_T_KSDKCP_NKIF_RCV.KSDKCP_NKIF_TRN_DTM), 0, 8));
		}
		
		// コンビニ速報取消通知年月日
		cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_SOKHO_CL_TCH_YMD,		JACStrConst.KARA_MOJI);
		
		// コンビニ支払予定年月日
		if(isKessaiWayDivCvs(kssaiWayDiv))
		{
			// 決済手段区分：コンビニの場合、nullを設定
			cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_PAY_RSV_YMD,		JACStrConst.KARA_MOJI);
		}
		else
		{
			// 決済手段区分：コンビニ以外の場合、決済代行会社入金情報受信.振込予定日を設定
			cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_PAY_RSV_YMD,		inMap.getString(JBSbatCH_T_KSDKCP_NKIF_RCV.HRIKOMI_RSV_YMD));
		}
		
		// コンビニ収納代行会社
		cvsKariNyukinInfo.set(JBSbatCHIFM043.CVSTORE_KAKNO_DAIKO_COMP,		JACStrConst.KARA_MOJI);
		
		// 振替結果コード
		cvsKariNyukinInfo.set(JBSbatCHIFM043.FURIKAE_RSLT_CD,				JACStrConst.KARA_MOJI);
		
		// 履歴詳細区分
		cvsKariNyukinInfo.set(JBSbatCHIFM043.RIREKI_DTL_DIV,				JACStrConst.KARA_MOJI);
		
		// 請求契約存在有無
		cvsKariNyukinInfo.set(JBSbatCHIFM043.SEIKY_KEI_UMU,					seikyKeiUmu);
		
		// 出力フラグON
		cvsKariNyukinInfo.setOutFlg(true);
		
		return cvsKariNyukinInfo;
	}
	

	/**
	 * 文字列切り出し処理
	 * 処理対象文字列の開始インデックス〜終了インデックスを取得して返却します。
	 * 入力の文字列がnullもしくは桁数が終了インデックス未満の場合は" "（半角空白）を返却します。
	 * @param str    処理対象文字列
	 * @param staIdx 開始インデックス
	 * @param endIdx 終了インデックス
	 * @return
	 */
	private String getSubstring(String str, int staIdx, int endIdx) 
	{
		// 入力の文字列がnullでない且つ終了インデックス以上であれば切り出した文字を返却する。
		if (!JCHStringUtil.isNullBlank(str)  && str.length() >= endIdx)
		{
			return str.substring(staIdx, endIdx);
		}
		// 上記以外の場合、半角空白を返却します。
		return JACStrConst.SPACE_1;
	}
	
//v32.00.01 2017/05/08 Add Start
	/**
	 * 文字列切り出し処理
	 * 処理対象文字列の開始インデックス〜終了インデックスを取得して返却します。
	 * 入力の文字列がnullもしくは桁数が終了インデックス未満の場合は" "（半角空白）を返却します。
	 * @param str    処理対象文字列
	 * @param staIdx 開始インデックス
	 * @param endIdx 終了インデックス
	 * @return
	 */
	private String getSubstring2(String str, int staIdx, int endIdx) 
	{
		// 入力の文字列がnullでない且つ終了インデックス以上であれば切り出した文字を返却する。
		if (!JCHStringUtil.isNullBlank(str)  && str.length() >= endIdx)
		{
			StringBuilder tgHms = new StringBuilder();
			
			tgHms.append(str.substring(staIdx, endIdx));
			tgHms.append("00");
			
			return tgHms.toString();
		}
		// 上記以外の場合、半角空白を返却します。
		return JACStrConst.SPACE_1;
	}
//v32.00.01 2017/05/08 Add End

	/**
	 * 決済手段区分に紐づく収納機関コードを返却します。
	 * @param kssaiWayDiv 決済手段区分
	 * @return 収納機関コード
	 */
	private String getShnkknCd(String kssaiWayDiv) 
	{
		if(JACStrConst.KESSAI_WAY_DIV_CVS.equals(kssaiWayDiv))
		{
			// 決済手段区分：コンビニの場合、収納機関コード：コンビニ（ＳＭＢＣ）を設定
			return JACStrConst.SHNKKNCD_CVS_SMBC;
		}
		else if(JACStrConst.KESSAI_WAY_DIV_CRE.equals(kssaiWayDiv))
		{
			// 決済手段区分：クレジットの場合、収納機関コード：クレジット（ＳＭＢＣ）を設定
			return JACStrConst.SHNKKNCD_CRE_SMBC;
		}
		else if(JACStrConst.KESSAI_WAY_DIV_ATM.equals(kssaiWayDiv))
		{
			// 決済手段区分：銀行ＡＴＭの場合、収納機関コード：銀行ＡＴＭ（ＳＭＢＣ）を設定
			return JACStrConst.SHNKKNCD_ATM_SMBC;
		}
		else
		{
			// 決済手段区分が上記以外の場合、空白を設定
			return JACStrConst.SPACE_1;
		}
	}

	/**
	 * 決済代行会社入金情報受信更新
	 * @param  inMap 入力情報
	 * @param  seikyKeiUmu 請求契約有無
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public void updateKsdcpNkifRcv(JBSbatServiceInterfaceMap inMap,String seikyKeiUmu) throws Exception
	{
		
		// テーブル更新
		executeCH_T_KSDKCP_NKIF_RCV_PKUPDATE(new Object[] {getNyukinAddStatCd(seikyKeiUmu)},
				new Object[] {inMap.getString(JBSbatCH_T_KSDKCP_NKIF_RCV.KSDKCP_NKIF_RCV_NO)});
	}
	

	/**
	 * 入金登録ステータスコード取得
	 * @param seikyKeiUmu 請求契約有無
	 * @return 入金登録ステータスコード尾
	 */
	private String getNyukinAddStatCd(String seikyKeiUmu) {

		// 請求契約存在有無：有の場合、入金登録状態コード（処理済）を返却
		if(seikyKeiUmu.equals(SEIKY_KEI_UMU_ARI))
		{
			return JACStrConst.NYUKIN_ADD_STAT_CD_ZUMI;
		}
		// 上記以外の場合、入金登録状態コード（処理済（エラー））を返却
		else
		{
			return JACStrConst.NYUKIN_ADD_STAT_CD_ZUMI_ERR;
		}
			
	}

	/**
	 * 決済手段区分がコンビニかどうかの判定を行います。
	 * @param  kssaiWayDiv 決済手段区分
	 * @return true：決済手段区分がコンビニ、false；決済手段区分がコンビニ以外
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public boolean isKessaiWayDivCvs(String kssaiWayDiv) throws Exception
	{
		// 決済方法がコンビニの場合trueを返却する。
		if(JACStrConst.KESSAI_WAY_DIV_CVS.equals(kssaiWayDiv))
		{
			return true;
		}
		// 決済方法がコンビニ以外の場合falsseを返却する。
		else
		{
			return false;
		}
	}
	

	/**
	 * 請求契約有無が"無"の場合に業務エラーメッセージを出力します。
	 * @param seikyKeiUmu
	 * @throws JBSbatBusinessError
	 */
	private void outPutErrMsg(String seikyKeiUmu) throws JBSbatBusinessError 
	{
		// 請求契約有無が"0"（無）の場合、業務エラー出力。
		if(seikyKeiUmu.equals(SEIKY_KEI_UMU_NASI))
		{
			// 業務エラー「請求情報を取得することができませんでした」（都度通知）
			outErrLog("ECHB0920AW");
		}
	}
	

	/**
	 * 業務エラーログへの出力を行います。
	 * @throws JBSbatBusinessError
	 */
	private void outErrLog(String errID) throws JBSbatBusinessError 
	{
		// 業務エラーログ出力（都度通知）
		super.logPrint.printBusinessErrorLog(errID);
	}

	/**▲▲▲▲▲▲メソッド追加  終了▲▲▲▲▲▲*/
	
}
