/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHPkozaNkinDataChs
*	ソースファイル名	：JBSbatCHPkozaNkinDataChs.java
*	作成者				：富士通　
*	作成日				：2020年11月18日
*＜機能概要＞
*　パーフェクト口座入金データ変換部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v52.00.00	2020/11/18  FJ) 吉田	【ANK-3838-00-00】窓口払い手数料の顧客負担方式導入
*	v52.00.01	2020/12/22	FJ)吉田		【ANK-3838-00-00】窓口払い手数料の顧客負担方式導入
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;

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.util.file.JBSbatCHIFE080;
import eo.business.util.file.JBSbatCHIFM370;
import eo.business.util.file.JBSbatCHIFM369;
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 JBSbatCHPkozaNkinDataChs extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(請求契約)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";

	/** SQL定義キー(CH_SELECT_013)*/
	private static final String KK_T_SEIKY_KEI_CH_SELECT_013 = "CH_SELECT_020";

	/** テーブルアクセスクラス(請求契約)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 請求収納業務共通クラス */
	private JCHbatSeikyKaknoBusinessUtil seikyUtil = null;
	
	/** 退避．入金経路コード */
	private String bkNkinRouteCd = null;
	
	/** 退避．収納機関コード */
	private String bkShunokikanCd = null;
	
	/** 請求契約存在有無（無） */
	private static final String SEIKY_KEI_UMU_NASI = "0";

	/** 請求契約存在有無（有） */
	private static final String SEIKY_KEI_UMU_ARI = "1";

	/** データ部開始終了桁数(開始桁,終了桁数) */
	private int[][] dataSet = {
			{0, 10},	// 請求契約番号
			{10, 18},	// 収納年月日
			{18, 22},	// 収納時分
			{22, 34},	// 金額
			{34, 82},	// 振込依頼名（カナ）
			{82, 97},	// 仕向銀行名（カナ）
			{97, 112},	// 仕向支店名（カナ）
			// ANK-3838-00-00 v52.00.01 MOD START
//			{112, 132},	// 仮想口座‐銀行名
//			{132, 152},	// 仮想口座‐支店名
//			{152, 156},	// 仮想口座‐預金種目名
//			{156, 163}	// 仮想口座‐口座番号
			{112, 122},	// 仮想口座‐銀行名
			{122, 132},	// 仮想口座‐支店名
			{132, 134},	// 仮想口座‐預金種目名
			{134, 141}	// 仮想口座‐口座番号
			// ANK-3838-00-00 v52.00.01 MOD END
	};

	/** 処理停止フラグ */
	private boolean tranStpFlg;

	/**
	 * 初期処理
	 * @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);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][opeDate=" + super.opeDate + "]");
		
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		// 収納機関コードの取得:収納機関コード（銀行振込）
		bkShunokikanCd = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_SHUNOKIKAN_CD_BNK);
		// 入金経路コードの取得:入金経路コード（銀行振込）
		bkNkinRouteCd = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_NKIN_ROUTE_CD_BNK);
		// エラーフラグ初期化
		tranStpFlg = false;
		
		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 outputItem = new JBSbatOutputItem();
		
		// 処理停止フラグがtrueなら後続処理を行わない
		if(tranStpFlg)
		{
			return outputItem;
		}
		
		// レコードを取得
		String inOthers = inMap.getString(JBSbatCHIFE080.OTHERS);
		// レコードの妥当性チェックを行う
		dataCheck(inOthers, outputItem);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		seikyUtil.close();
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * データレコードの妥当性チェックを行います。
	 * 
	 * @param recDiv レコード区分
	 * @param others その他
	 * @param outputItem 出力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void dataCheck(String others, 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 seikyKeium	= SEIKY_KEI_UMU_NASI;											// 請求契約有無
		
		// 各項目設定値をトリムして取得する。（全角型式は設定値をそのまま取得する）
		String seiKeiNo			= others.substring(dataSet[0][0], dataSet[0][1]).trim();	// 請求契約番号
		String syunoYmd			= others.substring(dataSet[1][0], dataSet[1][1]).trim();	// 収納年月日
		String syunoHm			= others.substring(dataSet[2][0], dataSet[2][1]).trim();	// 収納時分
		String amnt				= others.substring(dataSet[3][0], dataSet[3][1]).trim();	// 金額
		String frkmIraiNmKana	= others.substring(dataSet[4][0], dataSet[4][1]).trim();	// 振込依頼名（カナ）
		String shikoBankNm		= others.substring(dataSet[5][0], dataSet[5][1]).trim();	// 仕向銀行名（カナ）
		String shikoShitenNm	= others.substring(dataSet[6][0], dataSet[6][1]).trim();	// 仕向支店名（カナ）
		String kasoBankNm		= others.substring(dataSet[7][0], dataSet[7][1]);			// 仮想口座‐銀行名
		String kasoShitenNm		= others.substring(dataSet[8][0], dataSet[8][1]);			// 仮想口座‐支店名
		String kasoYokinSbtNm	= others.substring(dataSet[9][0], dataSet[9][1]);			// 仮想口座‐預金種目名
		String kasoKozaNo		= others.substring(dataSet[10][0], dataSet[10][1]).trim();	// 仮想口座‐口座番号
		
		// ==================================
		// === 請求契約番号妥当性チェック ===
		// ==================================
		// 請求契約番号が""(空)でなければ
		if(!JACStrConst.KARA_MOJI.equals(seiKeiNo))
		{
			// 数値でなければエラー
			if (!JCCBatCommon.isHannkakuSuuji1(seiKeiNo))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][請求契約番号半角数値チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1770TE;
				errMsgValue = new String[]{"請求契約番号"};
				errCd = "E01";
			}
			// 請求契約に存在しなければエラー
			else if (checkSkyKeiChk(seiKeiNo))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][請求契約番号存在チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1780KE;
				errMsgValue = new String[]{};
				errCd = "E02";
			}
			// 出力用の請求有無を"有"で設定
			seikyKeium = SEIKY_KEI_UMU_ARI;
		}
		// ================================
		// === 収納年月日妥当性チェック ===
		// ================================
		if (!errFlg)
		{
			// ""(空)ならエラー
			if(JACStrConst.KARA_MOJI.equals(syunoYmd))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][収納年月日必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1790TE;
				errMsgValue = new String[]{"収納年月日"};
				errCd = "E03";
			}
			// 暦日でなければエラー
			else if (!JCCBatCommon.checkDate(syunoYmd, 8))
			{
				JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][収納年月日暦日チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1770TE;
				errMsgValue = new String[]{"収納年月日"};
				errCd = "E04";
			}
			// 日中バッチ運用日より未来ならエラー
			// ANK-3838-00-00 v52.00.01 MOD START
//			else if (!JPCUtilCommon.isFutureDate(super.opeDate, syunoYmd, "0"))
			else if (JPCUtilCommon.isFutureDate(syunoYmd, super.opeDate, "0"))
			// ANK-3838-00-00 v52.00.01 MOD END
			{
				JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][収納年月日未来日チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1800NE;
				errMsgValue = new String[]{"収納年月日"};
				errCd = "E05";
			}
		}
		// ==============================
		// === 収納時分妥当性チェック ===
		// ==============================
		if (!errFlg)
		{
			// ""(空)ならエラー
			if(JACStrConst.KARA_MOJI.equals(syunoHm))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][収納時分必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1790TE;
				errMsgValue = new String[]{"収納時分"};
				errCd = "E06";
			}
			// 半角数値でなければエラー
			else if (!JCCBatCommon.isHannkakuSuuji1(syunoHm))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][収納時分半角数値チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1770TE;
				errMsgValue = new String[]{"収納時分"};
				errCd = "E07";
			}
			// 0000 〜 2359 でなければエラー
			else if (!JCCBatCommon.checkTime(syunoHm+"000",7))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][収納時分範囲チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1770TE;
				errMsgValue = new String[]{"収納時分"};
				errCd = "E07";
			}
		}
		
		// ==========================
		// === 金額妥当性チェック ===
		// ==========================
		if (!errFlg)
		{
			// ""(空)ならエラー
			if(JACStrConst.KARA_MOJI.equals(amnt))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][金額必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1790TE;
				errMsgValue = new String[]{"金額"};
				errCd = "E08";
			}
			// 半角数値でなければエラー
			else if (!JCCBatCommon.isHannkakuSuuji1(amnt))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][金額半角数値チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1770TE;
				errMsgValue = new String[]{"金額"};
				errCd = "E09";
			}
			// 0 より大きくなければエラー
			else if (new BigDecimal(amnt).compareTo(BigDecimal.ZERO) <= 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][金額マイナスチェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1860TE;
				errMsgValue = new String[]{};
				errCd = "E10";
			}
		}
		
		// ========================================
		// === 振込依頼名（カナ）妥当性チェック ===
		// ========================================
		if (!errFlg)
		{
			// ""(空)ならエラー
			if(JACStrConst.KARA_MOJI.equals(frkmIraiNmKana))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][振込依頼名（カナ）必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1790TE;
				errMsgValue = new String[]{"振込依頼名（カナ）"};
				errCd = "E11";
			}
			// 半角英数字カナでなければエラー
			else if (!JCCBatCommon.isHannkakuESuujiKana1(frkmIraiNmKana))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][振込依頼名（カナ）半角英数字カナチェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1770TE;
				errMsgValue = new String[]{"振込依頼名（カナ）"};
				errCd = "E12";
			}
		}
		
		// ========================================
		// === 仕向銀行名（カナ）妥当性チェック ===
		// ========================================
		if (!errFlg)
		{
			// ""(空)ならエラー
			if(JACStrConst.KARA_MOJI.equals(shikoBankNm))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][仕向銀行名（カナ）必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1790TE;
				errMsgValue = new String[]{"仕向銀行名（カナ）"};
				errCd = "E13";
			}
			// 半角英数字カナでなければエラー
			else if (!JCCBatCommon.isHannkakuESuujiKana1(shikoBankNm))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][仕向銀行名（カナ）半角英数字カナチェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1770TE;
				errMsgValue = new String[]{"仕向銀行名（カナ）"};
				errCd = "E14";
			}
		}
		
		// ========================================
		// === 仕向支店名（カナ）妥当性チェック ===
		// ========================================
		if (!errFlg)
		{
			// ""(空)ならエラー
			if(JACStrConst.KARA_MOJI.equals(shikoShitenNm))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][仕向支店名（カナ）必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1790TE;
				errMsgValue = new String[]{"仕向支店名（カナ）"};
				errCd = "E15";
			}
			// 半角英数字カナでなければエラー
			else if (!JCCBatCommon.isHannkakuESuujiKana1(shikoShitenNm))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][仕向支店名（カナ）半角英数字カナチェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1770TE;
				errMsgValue = new String[]{"仕向支店名（カナ）"};
				errCd = "E16";
			}
		}
		
		// ======================================
		// === 仮想口座‐銀行名妥当性チェック ===
		// ======================================
		if (!errFlg)
		{
			// "　"(全角スペース)のみならエラー
			if(JACStrConst.KARA_MOJI.equals(kasoBankNm.replace(JACStrConst.FULL_SPACE_1, JACStrConst.KARA_MOJI)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][仮想口座‐銀行名必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1790TE;
				errMsgValue = new String[]{"仮想口座‐銀行名"};
				errCd = "E17";
			}
			// 全角でなければエラー
			else if (!JCCBatCommon.isZenkaku(kasoBankNm))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][仮想口座‐銀行名全角チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1770TE;
				errMsgValue = new String[]{"仮想口座‐銀行名"};
				errCd = "E18";
			}
		}
		
		// ======================================
		// === 仮想口座‐支店名妥当性チェック ===
		// ======================================
		if (!errFlg)
		{
			// "　"(全角スペース)のみならエラー
			if(JACStrConst.KARA_MOJI.equals(kasoShitenNm.replace(JACStrConst.FULL_SPACE_1, JACStrConst.KARA_MOJI)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][仮想口座‐支店名必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1790TE;
				errMsgValue = new String[]{"仮想口座‐支店名"};
				errCd = "E19";
			}
			// 全角でなければエラー
			else if (!JCCBatCommon.isZenkaku(kasoShitenNm))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][仮想口座‐支店名全角チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1770TE;
				errMsgValue = new String[]{"仮想口座‐支店名"};
				errCd = "E20";
			}
		}
		
		// ==========================================
		// === 仮想口座‐預金種目名妥当性チェック ===
		// ==========================================
		if (!errFlg)
		{
			// "　"(全角スペース)のみならエラー
			if(JACStrConst.KARA_MOJI.equals(kasoYokinSbtNm.replace(JACStrConst.FULL_SPACE_1, JACStrConst.KARA_MOJI)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][仮想口座‐預金種目名必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1790TE;
				errMsgValue = new String[]{"仮想口座‐預金種目名"};
				errCd = "E21";
			}
			// 全角でなければエラー
			else if (!JCCBatCommon.isZenkaku(kasoYokinSbtNm))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][仮想口座‐預金種目名全角チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1770TE;
				errMsgValue = new String[]{"仮想口座‐預金種目名"};
				errCd = "E22";
			}
		}
		
		// ===========================================
		// === 仮想口座‐口座番号妥当性チェック ======
		// ===========================================
		if (!errFlg)
		{
			// ""(空)ならエラー
			if(JACStrConst.KARA_MOJI.equals(kasoKozaNo))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][仮想口座‐口座番号必須チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1790TE;
				errMsgValue = new String[]{"仮想口座‐口座番号"};
				errCd = "E23";
			}
			// 半角数字でなければエラー
			else if (!JCCBatCommon.isHannkakuSuuji1(kasoKozaNo))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutErrData][仮想口座‐口座番号半角数値チェックエラー]");
				
				// エラーファイル出力用に設定
				errFlg = true;
				errMsgId = JPCBatchMessageConstant.ECHB1770TE;
				errMsgValue = new String[]{"仮想口座‐口座番号"};
				errCd = "E24";
			}
		}
		
		// エラーがあればエラーを出力する
		if(errFlg)
		{
			errMsg = JBSbatLogPrintControl.getMessage(errMsgId, errMsgValue);
			// エラーログ出力
			super.logPrint.printBusinessErrorLog(errMsgId,errMsgValue);
			// パーフェクト口座入金結果情報エラー出力
			setErrData(others, errCd, errMsg, outputItem);
			this.tranStpFlg = true;
			return;
		}
		
		// パーフェクト入金変換データ作成
		setPkozaNkin(others, outputItem, seikyKeium);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][dataCheck]");
	}

	/**
	 * パーフェクト口座入金データを作成します。
	 * 
	 * @param others その他
	 * @param outputItem 出力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setPkozaNkin(String others, JBSbatOutputItem outputItem, String seikyKeiUm) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setPkozaNkin]");
		
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		outMap.setString(JBSbatCHIFM369.SEIKY_KEI_NO, 				others.substring(dataSet[0][0], dataSet[0][1]).trim());			// 請求契約番号
		outMap.setString(JBSbatCHIFM369.SEIKY_YM, 					JACStrConst.KARA_MOJI);											// 請求年月
		outMap.setString(JBSbatCHIFM369.SEIKY_NO, 					JACStrConst.KARA_MOJI);											// 請求番号
		outMap.setString(JBSbatCHIFM369.SKS_HAKKO_SEQ, 				JACStrConst.KARA_MOJI);											// 請求書発行シーケンス
		outMap.setString(JBSbatCHIFM369.NYUKIN_ROUTE_CD, 			bkNkinRouteCd);													// 入金経路コード
		outMap.setString(JBSbatCHIFM369.SHUNOKIKAN_CD, 				bkShunokikanCd);												// 収納期間コード
		outMap.setString(JBSbatCHIFM369.OUT_ORG_SHUNO_YMD, 			others.substring(dataSet[1][0], dataSet[1][1]).trim());			// 収納年月日
		outMap.setString(JBSbatCHIFM369.NYUKIN_AMNT, 				others.substring(dataSet[3][0], dataSet[3][1]).trim());			// 入金額
		outMap.setString(JBSbatCHIFM369.RECEIPT_YMD, 				others.substring(dataSet[1][0], dataSet[1][1]).trim());			// 領収年月日
		outMap.setString(JBSbatCHIFM369.RECEIPT_HMS, 				others.substring(dataSet[2][0], dataSet[2][1]).trim() + "00");	// 領収時分秒
		outMap.setString(JBSbatCHIFM369.NYUKIN_SYRZM_FLG, 			JACStrConst.NKIN_SYORI_ZUMI_FLG_MI);							// 入金処理済フラグ
		outMap.setString(JBSbatCHIFM369.MADOGUCHI_BANK_CD, 			JACStrConst.KARA_MOJI);											// 窓口金融機関コード
		outMap.setString(JBSbatCHIFM369.MADOGUCHI_BANK_SHITEN_CD, 	JACStrConst.KARA_MOJI);											// 窓口金融機関支店コード
		outMap.setString(JBSbatCHIFM369.CVSTORE_CD, 				JACStrConst.KARA_MOJI);											// コンビニエンスストアコード
		outMap.setString(JBSbatCHIFM369.CVSTORE_UK_TEN_CD, 			JACStrConst.KARA_MOJI);											// コンビニ受付店コード
		outMap.setString(JBSbatCHIFM369.WORK_DIV, 					JACStrConst.KARA_MOJI);											// コンビニリアル業務区分コード
		outMap.setString(JBSbatCHIFM369.CVSTORE_REAL_SOKHO_TCH_YMD, JACStrConst.KARA_MOJI);											// コンビニリアル速報通知年月日
		outMap.setString(JBSbatCHIFM369.CVSTORE_REAL_SOKHO_TCH_HMS, JACStrConst.KARA_MOJI);											// コンビニリアル速報通知時分秒
		outMap.setString(JBSbatCHIFM369.CVS_REAL_SOKHO_SYRZM_FLG, 	JACStrConst.KARA_MOJI);											// コンビニリアル速報処理済フラグ
		outMap.setString(JBSbatCHIFM369.CVSTORE_DATA_SBT, 			JACStrConst.KARA_MOJI);											// コンビニデータ種別
		outMap.setString(JBSbatCHIFM369.CVSTORE_SOKHO_TCH_YMD, 		JACStrConst.KARA_MOJI);											// コンビ二速報通知年月日
		outMap.setString(JBSbatCHIFM369.CVSTORE_SOKHO_SYRZM_FLG, 	JACStrConst.KARA_MOJI);											// コンビニ速報処理済フラグ
		outMap.setString(JBSbatCHIFM369.CVSTORE_KAKHO_TCH_YMD, 		JACStrConst.KARA_MOJI);											// コンビニ確報通知年月日
		outMap.setString(JBSbatCHIFM369.CVSTORE_SOKHO_CL_TCH_YMD, 	JACStrConst.KARA_MOJI);											// コンビニ速報取消通知年月日
		outMap.setString(JBSbatCHIFM369.CVSTORE_PAY_RSV_YMD, 		JACStrConst.KARA_MOJI);											// コンビニ支払予定年月日
		outMap.setString(JBSbatCHIFM369.CVSTORE_KAKNO_DAIKO_COMP, 	JACStrConst.KARA_MOJI);											// コンビニ収納代行会社
		outMap.setString(JBSbatCHIFM369.FURIKAE_RSLT_CD, 			JACStrConst.KARA_MOJI);											// 振替結果コード
		outMap.setString(JBSbatCHIFM369.RIREKI_DTL_DIV, 			JACStrConst.KARA_MOJI);											// 履歴詳細区分
		outMap.setString(JBSbatCHIFM369.SEIKY_KEI_UMU, 				seikyKeiUm);													// 履歴詳細区分
		outMap.setString(JBSbatCHIFM369.SHUNO_HM,					others.substring(dataSet[2][0], dataSet[2][1]).trim());			// 収納時分
		outMap.setString(JBSbatCHIFM369.AMNT		,				others.substring(dataSet[3][0], dataSet[3][1]).trim());			// 金額
		outMap.setString(JBSbatCHIFM369.HRIKOMI_IRAININ_KANA,		others.substring(dataSet[4][0], dataSet[4][1]).trim());			// 振込依頼名（カナ）
		outMap.setString(JBSbatCHIFM369.SHIKO_BANK_NM_KANA,			others.substring(dataSet[5][0], dataSet[5][1]).trim());			// 仕向銀行名（カナ）
		outMap.setString(JBSbatCHIFM369.SHIKO_SHITEN_NM_KANA,		others.substring(dataSet[6][0], dataSet[6][1]).trim());			// 仕向支店名（カナ）
		outMap.setString(JBSbatCHIFM369.KASOKOZA_BANK_NM,			others.substring(dataSet[7][0], dataSet[7][1]));				// 仮想口座‐銀行名
		outMap.setString(JBSbatCHIFM369.KASOKOZA_SHITEN_NM,			others.substring(dataSet[8][0], dataSet[8][1]));				// 仮想口座‐支店名
		outMap.setString(JBSbatCHIFM369.KASOKOZA_YOKIN_SBT_NM,		others.substring(dataSet[9][0], dataSet[9][1]));				// 仮想口座‐預金種目名
		outMap.setString(JBSbatCHIFM369.KASOKOZA_KOZANO,			others.substring(dataSet[10][0], dataSet[10][1]).trim());		// 仮想口座‐口座番号
		
		// 出力フラグ　←　true
		outMap.setOutFlg(true);
		
		outputItem.addOutMapList(outMap);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setPkozaNkin]");
	}
	
	/**
	 * パーフェクト口座入金結果情報エラーを出力します。
	 * 
	 * @param others その他
	 * @param errCd エラーコード
	 * @param errMsg エラー内容
	 * @param outputItem 出力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setErrData(String others, String errCd, String errMsg, JBSbatOutputItem outputItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setErrData]");
		JBSbatServiceInterfaceMap errMap = new JBSbatServiceInterfaceMap();
		
		errMap.setString(JBSbatCHIFM370.ERRCD,					errCd);														// エラー種類
		errMap.setString(JBSbatCHIFM370.ERRMSG,					errMsg);													// エラー内容
		errMap.setString(JBSbatCHIFM370.SEIKY_KEI_NO,			others.substring(dataSet[0][0], dataSet[0][1]).trim());		// 請求契約番号
		errMap.setString(JBSbatCHIFM370.SHUNO_YMD,				others.substring(dataSet[1][0], dataSet[1][1]).trim());		// 収納年月日
		errMap.setString(JBSbatCHIFM370.SHUNO_HM,				others.substring(dataSet[2][0], dataSet[2][1]).trim());		// 収納時分
		errMap.setString(JBSbatCHIFM370.AMNT,					others.substring(dataSet[3][0], dataSet[3][1]).trim());		// 金額
		errMap.setString(JBSbatCHIFM370.FRIKOMI_IRAININ_KANA,	others.substring(dataSet[4][0], dataSet[4][1]).trim());		// 振込依頼名（カナ）
		errMap.setString(JBSbatCHIFM370.SHIKO_BANK_NM_KANA,		others.substring(dataSet[5][0], dataSet[5][1]).trim());		// 仕向銀行名（カナ）
		errMap.setString(JBSbatCHIFM370.SHIKO_SHITEN_NM_KANA,	others.substring(dataSet[6][0], dataSet[6][1]).trim());		// 仕向支店名（カナ）
		errMap.setString(JBSbatCHIFM370.KASOKOZA_BANK_NM,		others.substring(dataSet[7][0], dataSet[7][1]));			// 仮想口座‐銀行名
		errMap.setString(JBSbatCHIFM370.KASOKOZA_SHITEN_NM,		others.substring(dataSet[8][0], dataSet[8][1]));			// 仮想口座‐支店名
		errMap.setString(JBSbatCHIFM370.KASOKOZA_YOKIN_SBT_NM,	others.substring(dataSet[9][0], dataSet[9][1]));			// 仮想口座‐預金種目名
		errMap.setString(JBSbatCHIFM370.KASOKOZA_KOZANO,	 	others.substring(dataSet[10][0], dataSet[10][1]).trim());	// 仮想口座‐口座番号
		
		errMap.setMap(JCHbatSeikyKaknoBusinessUtil.quote(errMap.getMap(), JACStrConst.DOUBLE_QUOTE, JACStrConst.DOUBLE_QUOTE));
		
		// 出力フラグ　←　true
		errMap.setOutFlg(true);
		
		outputItem.addOutMapList_2(errMap);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setErrData]");
	}
	
	/**
	 * 請求契約情報存在チェック
	 * 
	 * @param  seikyKeiNo 請求契約番号
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public boolean checkSkyKeiChk(String seikyKeiNo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][checkSkyKeiChk]");
		
		boolean seikyKeiUmu = false;
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// 請求先番号
		paramList.setValue(seikyKeiNo);
		// 請求契約.予約適用年月日
		paramList.setValue(super.opeDate);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][checkSkyKeiChk][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][checkSkyKeiChk]");
		return seikyKeiUmu;
	}
	
	/**
	 * SQLKEY(CH_SELECT_013)で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_013);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
