/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHSknJutoDataSaksei
*	ソースファイル名	：JBSbatCHSknJutoDataSaksei.java
*	作成者				：富士通　
*	作成日				：2011年09月09日
*＜機能概要＞
*　債権充当データ作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/09/09   富士通		新規作成
*	v3.00		2012/05/30   FJ)山下	【ANK-0024-04-00】処理見直しによる修正
*	v4.00.00	2012/11/22   FJ)加島	入金状態コードによるリアル・速報の制御追加
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.util.file.JBSbatACIFM048;
import eo.business.util.file.JBSbatCHIFM068;
import eo.business.util.file.JBSbatCHIFM093;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_CS_CHGE;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
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 JBSbatCHSknJutoDataSaksei extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(料金項目抽出変換)*/
	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_AC_M_PRC_SHUK = "AC_M_PRC_SHUK";

	/** テーブル(入金)*/
	private static final String D_TBL_NAME_CH_T_NYUKIN = "CH_T_NYUKIN";

	/** SQL定義キー(CH_SELECT_004)*/
	private static final String CH_M_PRC_KMK_CS_CHGE_CH_SELECT_004 = "CH_SELECT_004";

	/** テーブルアクセスクラス(料金項目抽出変換)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_CS_CHGE = null;

	/** テーブルアクセスクラス(料金集計)*/
	private JBSbatSQLAccess db_AC_M_PRC_SHUK = null;

	/** テーブルアクセスクラス(入金)*/
	private JBSbatSQLAccess db_CH_T_NYUKIN = null;

	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	// ログ出力用ファイル名
	/** マスタファイル名 */ 
	private static final String MAST_FILE_NAME = "集約結果";
	
	/** トランファイル名 */
	private static final String TRAN_FILE_NAME = "入金・未収債権情報";
	
	// 料金項目リスト
	/** 充当料金項目リスト */
	private ArrayList<String> jutoPrcKmkList = null;

	/** 未収料金項目リスト */
	private ArrayList<String> mishuPrcKmkList = null;

	/** 入金料金項目リスト */
	private ArrayList<String> nkinPrcKmkList = null;

	/** 金庫料金項目リスト */
	private ArrayList<String> knkPrcKmkList = null;
	
	/** 充当額合計項目リスト */
	private  ArrayList<String> jutoGokeiList = null;
	
	/** リアル速報充当料金項目マップ */
	private JBSbatCommonDBInterface realJutoPrcKmkMap = null;
	
	/** 速報充当料金項目マップ */
	private JBSbatCommonDBInterface sokuhoJutoPrcKmkMap = null;

	/** 退避．料金グループコード  */
	private String prcGrpCd = null;
	
	/** 退避．料金コースコード */
	private String pcrsCd = null;
	
	/** 退避．料金サービスコード */
	private String prcSvcCd = null;
	
	/** 退避．料金項目コード  */
	private String prcKmkCd = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CH_M_PRC_KMK_CS_CHGE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE);
		db_AC_M_PRC_SHUK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_M_PRC_SHUK);
		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, "[S][initial][opeDate=" + super.opeDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial][freeItem=" + super.freeItem + "]");

		JACbatParamUtil paramUtil = new JACbatParamUtil(super.commonItem);

		// 業務機能識別コード取得
		// 料金項目コード（入金額）
		String workKinoSkbtNkin = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_WKS_NYUKIN_AMNT);
		// 料金項目コード（充当額）
		String workKinoSkbtJuto = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_WKS_JUTO_AMNT);
		// 料金項目コード（未収額）
		String workKinoSkbtMisyu = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_WKS_MI_SKN_INFO);
		// 料金項目コード（金庫登録額）
		String workKinoSkbtKinko = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_KNKADD_AMNT);
		// 料金項目コード（リアル速報充当額＿合計）
		String workKinoReal 	= paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_RL_SKH_JT_GK);
		// 料金項目コード（速報充当額＿合計）
		String workKinoSokuho	= paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_SOKHO_JUTO_GK);
		// 料金項目コード（充当額＿合計）
		String workJutoGokei	= paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_JUTO_GOKEI);

		jutoPrcKmkList = new ArrayList<String>();
		mishuPrcKmkList = new ArrayList<String>();
		nkinPrcKmkList = new ArrayList<String>();
		knkPrcKmkList = new ArrayList<String>();
		jutoGokeiList = new ArrayList<String>();
		
		// 料金項目取得
		selectPrcKmkCdChsht(workKinoSkbtJuto, jutoPrcKmkList);
		selectPrcKmkCdChsht(workKinoSkbtMisyu, mishuPrcKmkList);
		selectPrcKmkCdChsht(workKinoSkbtNkin, nkinPrcKmkList);
		selectPrcKmkCdChsht(workKinoSkbtKinko, knkPrcKmkList);
		selectPrcKmkCdChsht(workJutoGokei, jutoGokeiList);

		// 入金状態コード債権仮充当（リアル速報）の場合
		if(super.freeItem.equals(JACStrConst.NKIN_STAT_SKN_REAL_SKH))
		{
			selectPrcKmkCdChshtRealSkh(workKinoReal, realJutoPrcKmkMap);
		}
		// 入金状態コード債権仮充当債権仮充当（速報）の場合
		else if(super.freeItem.equals(JACStrConst.NKIN_STAT_SKN_SKH))
		{
			selectPrcKmkCdChshtRealSkh(workKinoSokuho, sokuhoJutoPrcKmkMap);
		}

		paramUtil.close();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 料金項目コードを返します。
	 * @param workKinoSkbtCdd 業務機能識別コード
	 * @param prcKmkList 料金項目リスト
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void selectPrcKmkCdChsht(String workKinoSkbtCd,  ArrayList<String> prcKmkList) throws Exception
	{
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectPrcKmkCdChsht]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectPrcKmkCdChsht][workKinoSkbtCd=" + workKinoSkbtCd + "]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// 料金項目抽出変換．システムコード
		paramList.setValue(super.systemCode);
		// 料金項目抽出変換．業務機能識別コード
		paramList.setValue(workKinoSkbtCd);
		// 料金項目抽出変換．抽出変換コード
		paramList.setValue(JACStrConst.CHSHT_CHG_CD_CST);
		// 料金項目抽出変換．適用開始年月日
		paramList.setValue(super.opeDate);
		// 料金項目抽出変換．適用終了年月日
		paramList.setValue(super.opeDate);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectPrcKmkCdChsht][paramList=" + paramList.getList().toString() + "]");
		
		// SQL実行
		executeCH_M_PRC_KMK_CS_CHGE_CH_SELECT_004(paramList.getList().toArray());
		JBSbatCommonDBInterface prcKmkCsChgeMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext(); 
		
		// 取得結果判定
		if (prcKmkCsChgeMap == null)
		{
			// マスタ未存在エラー
			String[] msgParam = new String[]
			{
				JBSbatCH_M_PRC_KMK_CS_CHGE.TABLE_NAME,
				paramList.getList().toString()
			};
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
		}
		
		StringBuffer prckmk = null;
		while(prcKmkCsChgeMap != null)
		{
			prckmk = new StringBuffer();
			prckmk.append(prcKmkCsChgeMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_GRP_CD));
			prckmk.append(prcKmkCsChgeMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PCRS_CD));
			prckmk.append(prcKmkCsChgeMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_SVC_CD));
			prckmk.append(prcKmkCsChgeMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD));
			
			prcKmkList.add(prckmk.toString());
			prcKmkCsChgeMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext(); 
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectPrcKmkCdChsht]");
		
		return;
	}

	/**
	 * 料金項目コードを返します(リアル・速報充当額)。
	 * @param workKinoSkbtCdd 業務機能識別コード
	 * @param prcKmkMap 料金項目マップ
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void selectPrcKmkCdChshtRealSkh(String workKinoSkbtCd, JBSbatCommonDBInterface prcKmkMap) throws Exception
	{
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectPrcKmkCdChshtRealSkh]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectPrcKmkCdChshtRealSkh][workKinoSkbtCd=" + workKinoSkbtCd + "]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// 料金項目抽出変換．システムコード
		paramList.setValue(super.systemCode);
		// 料金項目抽出変換．業務機能識別コード
		paramList.setValue(workKinoSkbtCd);
		// 料金項目抽出変換．抽出変換コード
		paramList.setValue(JACStrConst.CHSHT_CHG_CD_CST);
		// 料金項目抽出変換．適用開始年月日
		paramList.setValue(super.opeDate);
		// 料金項目抽出変換．適用終了年月日
		paramList.setValue(super.opeDate);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectPrcKmkCdChshtRealSkh][paramList=" + paramList.getList().toString() + "]");
		
		// SQL実行
		executeCH_M_PRC_KMK_CS_CHGE_CH_SELECT_004(paramList.getList().toArray());
		JBSbatCommonDBInterface prcKmkCsChgeMap = db_CH_M_PRC_KMK_CS_CHGE.selectNext(); 
		
		// 取得結果判定
		if (prcKmkCsChgeMap == null)
		{
			// マスタ未存在エラー
			String[] msgParam = new String[]
			{
				JBSbatCH_M_PRC_KMK_CS_CHGE.TABLE_NAME,
				paramList.getList().toString()
			};
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
		}
		
		// 退避．料金グループコード
		prcGrpCd = prcKmkCsChgeMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_GRP_CD);
		// 退避．料金コースコード
		pcrsCd = prcKmkCsChgeMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PCRS_CD);
		// 退避．料金サービスコード
		prcSvcCd = prcKmkCsChgeMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_SVC_CD);
		// 退避．料金項目コード
		prcKmkCd = prcKmkCsChgeMap.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.PRC_KMK_CD);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectPrcKmkCdChshtRealSkh][PRC_GRP_CD=" + prcGrpCd + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectPrcKmkCdChshtRealSkh][PCRS_CD=" + pcrsCd + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectPrcKmkCdChshtRealSkh][PRC_SVC_CD=" + prcSvcCd + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectPrcKmkCdChshtRealSkh][PRC_KMK_CD=" + prcKmkCd + "]");

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectPrcKmkCdChshtRealSkh]");
		
		return;
	}

	/**
	 * 主処理
	 * @param mastMap　入力電文
	 * @param tranMap　入力電文
	 * @param outputInItem  入力情報
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert mastMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][mastMap=" + mastMap.getMap().toString() + "]") : true;
		assert tranMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][tranMap=" + tranMap.getMap().toString() + "]") : true;
		
		// 入力Ｍのみ存在する
		if (mastMap != null && tranMap == null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍのみ存在する]");
			
			// エラーログを出力し、異常終了
			String[] msgParam = new String[] {MAST_FILE_NAME, TRAN_FILE_NAME};
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB1400CE, msgParam);
		}
		// 入力Ｔのみ存在する
		else if (mastMap == null && tranMap != null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｔのみ存在する]");
			
			this.setTranProcFlg(true);
		}
		// 入力Ｍ、入力Ｔともに存在する
		else
		{
			String mastKey = null;
			String svcNoTrim = mastMap.getString(JBSbatACIFM048.SVC_NO).trim();
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][JBSbatACIFM048.SVC_NO.trim() = " + svcNoTrim + "]");
			if (svcNoTrim.length() >= 12)
			{
				mastKey = makeStr(mastMap.getString(JBSbatACIFM048.SEIKY_YM), mastMap.getString(JBSbatACIFM048.SEIKY_KEI_NO), mastMap.getString(JBSbatACIFM048.SVC_NO).substring(0, 12));
			}
			else
			{
				mastKey = makeStr(mastMap.getString(JBSbatACIFM048.SEIKY_YM), mastMap.getString(JBSbatACIFM048.SEIKY_KEI_NO), svcNoTrim);
			}
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][mastKey = " + mastKey + "]");
			
			String tranKey = makeStr(tranMap.getString(JBSbatCHIFM093.SEIKY_YM), tranMap.getString(JBSbatCHIFM093.NYUKIN_NO), tranMap.getString(JBSbatCHIFM093.SAIKEN_NO).trim());
			
			// 入力Ｍ＝入力Ｔ（マッチ）
			if (mastKey.compareTo(tranKey) == 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＝入力Ｔ（マッチ）]");
				
				this.setMastProcFlg(true);
				
				StringBuffer tmpPrckmk =  new StringBuffer();
				tmpPrckmk.append(mastMap.getString(JBSbatACIFM048.PRC_GRP_CD));
				tmpPrckmk.append(mastMap.getString(JBSbatACIFM048.PCRS_CD));
				tmpPrckmk.append(mastMap.getString(JBSbatACIFM048.PRC_SVC_CD));
				tmpPrckmk.append(mastMap.getString(JBSbatACIFM048.PRC_KMK_CD));

				String prcKmk = tmpPrckmk.toString();
				// 入力Ｍ．料金項目コードが、料金項目リスト（未収額）に含まれる場合
				if(mishuPrcKmkList.contains(prcKmk))
				{
					// 入金状態コード（債権充当）の場合
					if(super.freeItem.equals(JACStrConst.NKIN_STAT_SKN_JUTO))
					{
						// 債権充当データ作成
						makeSaikenJutoData(mastMap, tranMap, outputInItem, JACStrConst.KARA_MOJI);
					}
				}
				// 入力Ｍ．料金項目コードが、料金項目リスト（充当額）に含まれる場合
				else if(jutoPrcKmkList.contains(prcKmk))
				{
					// 入金状態コード（債権充当）以外の場合
					if(!super.freeItem.equals(JACStrConst.NKIN_STAT_SKN_JUTO))
					{
						// 充当額合計以外の場合
						if(!jutoGokeiList.contains(prcKmk))
						{
							assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
							// 何もせず終了
							return outputInItem;
						}
						// 充当額合計の場合は項目を置き換える
						mastMap.setString(JBSbatACIFM048.PRC_GRP_CD, 	prcGrpCd);
						mastMap.setString(JBSbatACIFM048.PCRS_CD, 		pcrsCd);
						mastMap.setString(JBSbatACIFM048.PRC_SVC_CD, 	prcSvcCd);
						mastMap.setString(JBSbatACIFM048.PRC_KMK_CD, 	prcKmkCd);
						assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][mastMap=" + mastMap.getMap().toString() + "]");
					}
					// 債権充当データ作成
					makeSaikenJutoData(mastMap, tranMap, outputInItem, JACStrConst.KAGEN_SKBT_KASAN);
				}
				// 入力Ｍ．料金項目コードが、料金項目リスト（入金額）または料金項目リスト（金庫登録額）に含まれる場合
				else if(nkinPrcKmkList.contains(prcKmk) || knkPrcKmkList.contains(prcKmk))
				{
					// 債権充当データ作成
					makeSaikenJutoData(mastMap, tranMap, outputInItem, JACStrConst.KARA_MOJI);
				}
				
			}
			// 入力Ｍ＜入力Ｔ
			else if (mastKey.compareTo(tranKey) < 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＜入力Ｔ]");
				
				// エラーログを出力し、異常終了
				String[] msgParam = new String[] {MAST_FILE_NAME, TRAN_FILE_NAME};
				throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB1400CE, msgParam);
			}
			// 入力Ｍ＞入力Ｔ
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＞入力Ｔ]");
				
				this.setTranProcFlg(true);
			}
		}
		
		assert outputInItem != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute][outputInItem=" + outputInItem.getOutMapList().toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 債権充当データを作成します。
	 * 
	 * @param mastMap 入力電文
	 * @param tranMap 入力電文
	 * @param outputInItem  出力電文
	 * @param kagenSkbtCd 加減識別コード
	 * @throws Exception
	 */
	private void makeSaikenJutoData(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap, JBSbatOutputItem outputInItem, String kagenSkbtCd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeSaikenJutoData]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeSaikenJutoData][mastMap=" + mastMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeSaikenJutoData][tranMap=" + tranMap.getMap().toString() + "]");

		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		// 請求契約番号
		outMap.setString(JBSbatCHIFM093.SEIKY_KEI_NO, tranMap.getString(JBSbatCHIFM068.SEIKY_KEI_NO));
		// 入金番号
		outMap.setString(JBSbatCHIFM093.NYUKIN_NO, tranMap.getString(JBSbatCHIFM068.NYUKIN_NO));
		// 請求番号
		outMap.setString(JBSbatCHIFM093.SEIKY_NO, tranMap.getString(JBSbatCHIFM068.SEIKY_NO));
		// 請求年月
		outMap.setString(JBSbatCHIFM093.SEIKY_YM, tranMap.getString(JBSbatCHIFM068.SEIKY_YM));
		// 債権番号
		outMap.setString(JBSbatCHIFM093.SAIKEN_NO, tranMap.getString(JBSbatCHIFM068.SAIKEN_NO));
		// 整理番号
		outMap.setString(JBSbatCHIFM093.SEIRI_NO, tranMap.getString(JBSbatCHIFM068.SEIRI_NO));
		// サービス番号
		outMap.setString(JBSbatCHIFM093.SVC_NO, tranMap.getString(JBSbatCHIFM068.SVC_NO));
		// サービス識別
		outMap.setString(JBSbatCHIFM093.SVC_SKBT, tranMap.getString(JBSbatCHIFM068.SVC_SKBT));
		// 料金グループコード
		outMap.setString(JBSbatCHIFM093.PRC_GRP_CD, mastMap.getString(JBSbatACIFM048.PRC_GRP_CD));
		// 料金コースコード
		outMap.setString(JBSbatCHIFM093.PCRS_CD, mastMap.getString(JBSbatACIFM048.PCRS_CD));
		// 料金サービスコード
		outMap.setString(JBSbatCHIFM093.PRC_SVC_CD, mastMap.getString(JBSbatACIFM048.PRC_SVC_CD));
		// 料金項目コード
		outMap.setString(JBSbatCHIFM093.PRC_KMK_CD, mastMap.getString(JBSbatACIFM048.PRC_KMK_CD));
		// 金額
		outMap.setBigDecimal(JBSbatCHIFM093.AMNT, mastMap.getBigDecimal(JBSbatACIFM048.PRC));
		// 加減識別コード
		outMap.setString(JBSbatCHIFM093.KAGEN_SKBT_CD, kagenSkbtCd);
		// 入金ステータス
		outMap.setString(JBSbatCHIFM093.NYUKIN_STAT, tranMap.getString(JBSbatCHIFM068.NYUKIN_STAT));
		// 入金経路コード
		outMap.setString(JBSbatCHIFM093.NYUKIN_ROUTE_CD, tranMap.getString(JBSbatCHIFM068.NYUKIN_ROUTE_CD));
		// 債権ステータス
		outMap.setString(JBSbatCHIFM093.SAIKEN_STAT, tranMap.getString(JBSbatCHIFM068.SAIKEN_STAT));
		// 入金対象債権年月
		outMap.setString(JBSbatCHIFM093.NYUKIN_TG_SAIKEN_YM, tranMap.getString(JBSbatCHIFM068.NYUKIN_TG_SAIKEN_YM));
		// 督促番号
		outMap.setString(JBSbatCHIFM093.TOKUSOKU_NO, tranMap.getString(JBSbatCHIFM068.TOKUSOKU_NO));
		// 金庫番号
		outMap.setString(JBSbatCHIFM093.KNK_NO, JACStrConst.KARA_MOJI);
		// 入金処理年月日
		outMap.setString(JBSbatCHIFM093.NYUKIN_TRN_YMD, tranMap.getString(JBSbatCHIFM068.NYUKIN_TRN_YMD));
		// コンビニエンスストアコード
		outMap.setString(JBSbatCHIFM093.CVSTORE_CD, tranMap.getString(JBSbatCHIFM068.CVSTORE_CD));
		// コンビニリアル速報通知年月日
		outMap.setString(JBSbatCHIFM093.CVSTORE_REAL_SOKHO_TCH_YMD, tranMap.getString(JBSbatCHIFM068.CVSTORE_REAL_SOKHO_TCH_YMD));
		// コンビニ速報通知年月日
		outMap.setString(JBSbatCHIFM093.CVSTORE_SOKHO_TCH_YMD, tranMap.getString(JBSbatCHIFM068.CVSTORE_SOKHO_TCH_YMD));
		// 結果
		outMap.setString(JBSbatCHIFM093.RSLT, JACStrConst.KARA_MOJI);
		// データ種類
		outMap.setString(JBSbatCHIFM093.DATA, JACStrConst.KARA_MOJI);
		// エラー内容
		outMap.setString(JBSbatCHIFM093.ERR_NAIYO, tranMap.getString(JBSbatCHIFM068.ERR_NAIYO));
		
		outMap.setOutFlg(true);
		
		// 出力レコード（入金額）作成
		outputInItem.addOutMapList(outMap);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectPrcKmkCd][outputInItem=" + outputInItem.getOutMapList().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectPrcKmkCd]");
	}

	/**
	 * 文字を連結します
	 * @param string　文字
	 * @return strBuf　連結した文字列
	 */
	private String makeStr(String ...string)
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeStr]");
		
		StringBuffer strBuf = new StringBuffer();
		for(String str:string)
		{
			strBuf.append(str);
		}
		assert strBuf != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeStr][strBuf = " + strBuf.toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeStr]");
		
		return strBuf.toString();
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_AC_M_PRC_SHUK.close();
		db_CH_T_NYUKIN.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * @return mastProcFlg を戻します。
	 */
	public boolean isMastProcFlg()
	{
		return mastProcFlg;
	}

	/**
	 * @return matchProcFlg を戻します。
	 */
	public boolean isMatchProcFlg()
	{
		return matchProcFlg;
	}

	/**
	 * @return tranProcFlg を戻します。
	 */
	public boolean isTranProcFlg()
	{
		return tranProcFlg;
	}

	/**
	 * @param mast_ProcFlg 設定する mastProcFlg。
	 */
	public void setMastProcFlg(boolean mast_ProcFlg)
	{
		this.mastProcFlg = mast_ProcFlg;
	}

	/**
	 * @param match_ProcFlg 設定する matchProcFlg。
	 */
	public void setMatchProcFlg(boolean match_ProcFlg)
	{
		this.matchProcFlg = match_ProcFlg;
	}

	/**
	 * @param tran_ProcFlg 設定する tranProcFlg。
	 */
	public void setTranProcFlg(boolean tran_ProcFlg)
	{
		this.tranProcFlg = tran_ProcFlg;
	}

	/**
	 * SQLKEY(CH_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_M_PRC_KMK_CS_CHGE_CH_SELECT_004(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_M_PRC_KMK_CS_CHGE.selectBySqlDefine(paramList, CH_M_PRC_KMK_CS_CHGE_CH_SELECT_004);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
