/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHCvstrNkinDataChg
*	ソースファイル名	：JBSbatCHCvstrNkinDataChg.java
*	作成者				：富士通　
*	作成日				：2011年12月08日
*＜機能概要＞
*　コンビニ入金データ変換部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/12/08   富士通		新規作成
*	v3.00		2012/07/06	FJ)後藤		【IT2-2012-0001203】CVS変換エラー時、入金データに出力させないように修正
*	v3.01		2012/07/17  FJ)冨井	    【TAI-2012-0000054】SQL性能監査対応
*	v3.02		2012/08/29  FJ)岡田		【TG1-2012-0000137・138】金額の属性チェック変更
*	v3.03		2012/09/02  FJ)成田		【TG1-2012-0000145】パラメータ取得部品の共通化、それに伴う不要な初期化削除、クローズ処理を追加。
*	v3.04		2012/10/05  FJ)岡田		【ST1-2012-0000681】妥当性チェック削除（前ジョブへ移動）
*	v3.05		2012/11/02  FJ)垣内		【ST2-2012-0001778】存在しない請求契約番号で金庫TBLに登録される
*	v4.00.00	2012/12/05  FJ)加島     【内部管理番号-0000273】法人の場合、請求情報存在チェック、請求契約情報存在チェックを行わないよう修正
*	v4.01.00	2013/01/18  FJ)浜口     【内部管理番号-0000272】法人の場合、収納機関コードを82で出力する。契約情報が存在しない場合、請求年月を空
*	v4.02.00	2013/02/18  FJ)小柴		【TG1-2013-0000042】契約情報がない場合も請求年月を出力するように修正
*	v4.03.00	2013/05/01  FJ)大塚		【TG1-2013-0000263】ワーニングレベルのメッセージを出力しないように修正
*	v4.04.00	2013/05/02	FJ)大塚	    【TG1-2013-0000261】収納年月日を運用日に変更
*	v5.00.00	2013/08/25  FJ)小柴		【OM-2013-0000882】入金データファイル項目追加
*	v6.00.00	2014/01/22  FJ)小掠		【OM-2014-0000245】請求契約の世代抽出に予約適用年月日、予約適用コードを追加。
*	v52.00.00	2020/11/12	FJ)星野		【ANK-3838-0000】窓口払い手数料の顧客負担方式導入
*	v67.00.00	2023/08/24	FJ)福島		【ANK-4417-00-00】コンビニ入金 同一請求書で複数確報受信時の改善
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.util.file.JBSbatCHIFE022;
import eo.business.util.file.JBSbatCHIFM016;
import eo.business.util.file.JBSbatCHIFM043;
import eo.business.util.table.JBSbatCH_M_CVSTORE;
import eo.business.util.table.JBSbatCH_T_SEIKY;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCHStringUtil;
import eo.common.util.JPCUtilCommon;
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 JBSbatCHCvstrNkinDataChg extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(コンビニエンスストア)*/
	private static final String D_TBL_NAME_CH_M_CVSTORE = "CH_M_CVSTORE";

	/** テーブル(請求)*/
	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";

	/** SQL定義キー(CH_SELECT_001)*/
	private static final String CH_M_CVSTORE_CH_SELECT_001 = "CH_SELECT_001";

	/** SQL定義キー(CH_SELECT_007)*/
	private static final String CH_T_SEIKY_CH_SELECT_007 = "CH_SELECT_007";

	/** SQL定義キー(CH_SELECT_013)*/
	private static final String KK_T_SEIKY_KEI_CH_SELECT_013 = "CH_SELECT_013";

	/** テーブルアクセスクラス(コンビニエンスストア)*/
	private JBSbatSQLAccess db_CH_M_CVSTORE = null;

	/** テーブルアクセスクラス(請求)*/
	private JBSbatSQLAccess db_CH_T_SEIKY = null;

	/** テーブルアクセスクラス(請求契約)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;
/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 退避.企業コード */
	private String taihiCompCd 	= null;
	/** 退避.請求番号 */
	private String taihiSkyNo 		= null;
	/** 退避.入金経路コード */
	private String nknRootCd 		= null;
	/** 退避.収納機関コード */
	private String synKknCd 		= null;
// ANK-3838-00-00対応 20201112 星野 ADD START
	/** 退避.収納機関コードマップ（さくらＫＣＳ用） */
	private Map<String, String> synKknCdMap = new HashMap<String, String>();
// ANK-3838-00-00対応 20201112 星野 ADD END
	/** 退避.コンビニエンスストアコード */
	private String cvsStCd 		= null;
	/** 退避.作成年月日 */
	private String taihiMakeYmd	= null;
	/** 退避.請求契約番号 */
	private String taihiSkyKeiNo 	= null;
	/** 退避.請求年月 */
	private String taihiseikyYm 	= null;
	/** 退避．請求契約番号有無 */
	private String taihiSeikyKeiUm = null;
	
	/** 出力用エラー情報マップ */
	private Map<String, String> 	errorInfoMap 	= null;
	/** エラー判定フラグ */
	private String 				taihiErrCd		= null;

	/** ヘッダ:作成年月日 */
	private static final String HD_MAKE_YMD 		= "HD_MAKE_YMD";
	/** ヘッダ:企業コード */
	private static final String HD_COMP_CD 		= "HD_COMP_CD";
	/** ヘッダ:種別 */
	private static final String HD_SBT 			= "HD_SBT";
	/** ヘッダ:支払予定日 */
	private static final String HD_PAY_DAY 		= "HD_PAY_DAY";
	/** ヘッダ:予備 */
	private static final String HD_YOBI 			= "HD_YOBI";

	/** データ:種別 */
	private static final String DT_SBT 			= "DT_SBT";
	/** データ:収納年月日 */
	private static final String DT_KKN_YMD 		= "DT_KKN_YMD";
	/** データ:収納時分 */
	private static final String DT_KKN_TM 		= "DT_KKN_TM";
	/** データ:予備１ */
	private static final String DT_YOBI_1 		= "DT_YOBI_1";
	/** データ:請求月 */
	private static final String DT_SKY_MON 		= "DT_SKY_MON";
	/** データ:請求年 */
	private static final String DT_CUST_SKY_YEAR 	= "DT_CUST_SKY_YEAR";
	/** データ:群番号 */
	private static final String DT_CUST_GUN 		= "DT_CUST_GUN";
	/** データ:発行シーケンス */
	private static final String DT_CUST_HK_SEQ 	= "DT_CUST_HK_SEQ";
	/** データ:予備２ */
	private static final String DT_YOBI_2 		= "DT_YOBI_2";
	/** データ:請求先番号 */
	private static final String DT_CUST_SKY_NO 	= "DT_CUST_SKY_NO";
	/** データ:予備３ */
	private static final String DT_YOBI_3 		= "DT_YOBI_3";
	/** データ:収納金額 */
	private static final String DT_KKN_AMNT 		= "DT_KKN_AMNT";
	/** データ:予備４ */
	private static final String DT_YOBI_4 		= "DT_YOBI_4";
	/** データ:収納店舗コード */
	private static final String DT_KKN_TENCD 		= "DT_KKN_TENCD";
	/** データ:支払予定日 */
	private static final String DT_PAY_DAY 		= "DT_PAY_DAY";
	/** データ:予備５ */
	private static final String DT_YOBI_5 		= "DT_YOBI_5";
	/** データ:CVSコード */
	private static final String DT_CVS_CD 		= "DT_CVS_CD";
	/** データ:予備６ */
	private static final String DT_YOBI_6 		= "DT_YOBI_6";
// ANK-3838-00-00対応 20201112 星野 ADD START
	/** データ:コンビニ負担方式　さくらＫＣＳの場合のみ使用 */
	private static final String DT_CVSTORE_FTN_HOSHIKI = "DT_CVSTORE_FTN_HOSHIKI";
// ANK-3838-00-00対応 20201112 星野 ADD END


	/** 請求発行シーケンス桁数 */
	private static final int HK_SEQ_CNT 			= 2;

	/** パラメータ取得部品 */
	private JACbatParamUtil paramUtil = null;

	/** CH_ */
	private String 				errCDinitial 	= null;

	/** 抽出対象 */
	private String tgCst = null;

// ANK-4417-00-00 ADD START
	/** 入金重複チェック用コンビニ入金情報マップ */
	private ArrayList<JBSbatServiceInterfaceMap> cvsNknDtList = new ArrayList<JBSbatServiceInterfaceMap>();
// ANK-4417-00-00 ADD END

	/** 抽出対象判定:コンシューマ */
	private static final String CH_TG_CONS 				= "1";
// ANK-3838-00-00対応 20201112 星野 ADD START
	/** 抽出対象判定:コンシューマ（さくらＫＣＳ） */
	private static final String CH_TG_CONS_SAKURA 		= "3";
// ANK-3838-00-00対応 20201112 星野 ADD END

	/** 請求契約番号判定有無 無 */
	private static final String NONE = "0";
	
	/** 請求契約存在有無（無） */
	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_M_CVSTORE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_CVSTORE);
		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);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");

		paramUtil = new JACbatParamUtil(commonItem);
		// フリー項目より取得
		tgCst = super.freeItem;

		// 入金経路コードの取得
// ANK-3838-00-00対応 20201112 星野 ADD START
		// さくらＫＣＳの場合
		if(tgCst.equals(CH_TG_CONS_SAKURA))
		{
			// 入金経路コード(コンビニ等)
			this.nknRootCd 		= paramUtil.getGyoumuParameter(JACStrConst.WORKID_NKIN_ROUTE_CD_CVT);
		}
		else
		{
// ANK-3838-00-00対応 20201112 星野 ADD END
			// 入金経路コード(コンビニ)
			this.nknRootCd 		= paramUtil.getGyoumuParameter(JACStrConst.WORKID_NKIN_ROUTE_CD_CVS);
// ANK-3838-00-00対応 20201112 星野 ADD START
		}
// ANK-3838-00-00対応 20201112 星野 ADD END
		
		// コンシューマの場合
		if (tgCst.equals(CH_TG_CONS))
		{
			// 収納機関コードの取得:収納機関コード(コンビニ)
			this.synKknCd 		= paramUtil.getGyoumuParameter(JACStrConst.WORKID_SHUNOKIKAN_CD_CVS);
		}
// ANK-3838-00-00対応 20201112 星野 ADD START
		// さくらＫＣＳの場合
		else if(tgCst.equals(CH_TG_CONS_SAKURA))
		{
			// 収納機関コードの取得
			// コンビニ負担方式 により収納機関コードが異なる
			this.synKknCd = "";
			this.synKknCdMap.put(JACStrConst.CVSTORE_FTN_HOSHIKI_NORMAL_CUST, 	paramUtil.getGyoumuParameter(JACStrConst.WORKID_SHUNOKIKAN_CD_NCU));		// 収納機関コード（コンビニ等（通：顧））
			this.synKknCdMap.put(JACStrConst.CVSTORE_FTN_HOSHIKI_NORMAL_COMP, 	paramUtil.getGyoumuParameter(JACStrConst.WORKID_SHUNOKIKAN_CD_NCO));		// 収納機関コード（コンビニ等（通：企））
			this.synKknCdMap.put(JACStrConst.CVSTORE_FTN_HOSHIKI_REAL_CUST, 	paramUtil.getGyoumuParameter(JACStrConst.WORKID_SHUNOKIKAN_CD_RCU));		// 収納機関コード（コンビニ等（リ：顧））
			this.synKknCdMap.put(JACStrConst.CVSTORE_FTN_HOSHIKI_REAL_COMP, 	paramUtil.getGyoumuParameter(JACStrConst.WORKID_SHUNOKIKAN_CD_RCO));		// 収納機関コード（コンビニ等（リ：企））
		}
// ANK-3838-00-00対応 20201112 星野 ADD END
		else
		{
			// 収納機関コードの取得:収納機関コード（法人）コンビニ（ＣＰ）
			this.synKknCd 		= paramUtil.getGyoumuParameter(JACStrConst.WORKID_SHUNOKIKAN_CD_CVH);
		}
		
		
		// エラー内容取得
		getErrorInfoMap();
		// エラーコードの頭に付与する文字列("CH_")作成
		this.errCDinitial = super.systemCode + JACStrConst.UNDER_BAR;

		paramUtil.close();
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * エラー内容を取得し、出力用エラー内容マップに格納します。
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void getErrorInfoMap() throws Exception
	{
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getErrorInfoMap]");

		errorInfoMap = new HashMap<String, String>();

		// TG1-2013-0000263 2013/05/01 Otsuka start
		// コンビニコード変換エラー
		errorInfoMap.put(JACStrConst.WKPARA_CH_ECHB0650AE, paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_ECHB0650AE));
		// TG1-2013-0000263 2013/05/01 Otsuka end

		// 2013/05/07 Otsuka ログも出力しないように修正
		// 請求情報を取得することができませんでした
		//		errorInfoMap.put(JACStrConst.WKPARA_CH_ECHB0920AW, paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_ECHB0920AW));
		// 2013/05/07 Otsuka ログも出力しないように修正

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getErrorInfoMap]");
	}

	/**
	 * 主処理
	 * @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, "[L][execute][inMap 		= " + inMap.getMap().toString() + "]") : true;
		
		// 出力情報データ
		JBSbatServiceInterfaceMap resultMap 	= new JBSbatServiceInterfaceMap();
		// エラー情報格納マップ
		JBSbatServiceInterfaceMap errMap 		= new JBSbatServiceInterfaceMap();
		// 出力情報データ格納マップ
		JBSbatServiceInterfaceMap outMap 		= new JBSbatServiceInterfaceMap();
		// 出力情報マップ
		JBSbatOutputItem outputItem 			= new JBSbatOutputItem();

		// 入力情報抽出処理
		// 入力.レコード区分が"1"(ヘッダ)か"2"(データ)のレコードのみ処理対象とする
		if(JACStrConst.DATA_KUBUN_HEADER.equals(inMap.get(JBSbatCHIFE022.REC_DIV))
			|| JACStrConst.DATA_KUBUN_DATA.equals(inMap.get(JBSbatCHIFE022.REC_DIV)))
		{
			// 入力情報マップ詰め替え
			resultMap = makeInfoMap(inMap);
			
			// 入力.レコード区分が"1"(ヘッダ)の場合
			if(JACStrConst.DATA_KUBUN_HEADER.equals(resultMap.get(JBSbatCHIFE022.REC_DIV)))
			{
				// 入力.企業コードを退避.企業コードに退避させる
				this.taihiCompCd = resultMap.getString(HD_COMP_CD);
				// 入力.作成年月日を退避.作成年月日に退避させる
				this.taihiMakeYmd = resultMap.getString(HD_MAKE_YMD);
				
				return outputItem;
			}
			// 請求年月＝バッチ運用日（上2桁）＋ コンビニ入金情報コンシューマ．請求年＋請求月
			this.taihiseikyYm = super.opeDate.substring(0, 2) 
									+ resultMap.getString(DT_CUST_SKY_YEAR) 
									+ resultMap.getString(DT_SKY_MON);
			// フリー項目より、コンシューマの場合のみチェック処理を行う
// ANK-3838-00-00対応 20201112 星野 MOD START
//			if (tgCst.equals(CH_TG_CONS))
			if ( tgCst.equals(CH_TG_CONS) || tgCst.equals(CH_TG_CONS_SAKURA))
// ANK-3838-00-00対応 20201112 星野 MOD END
			{
				// 請求情報有無チェック
				checkSkyUmu(resultMap);
				// ワーニングとなった場合
				if(this.taihiErrCd != null)
				{
					errMap = setOutMapErr(resultMap, this.taihiErrCd);
					// TG1-2013-0000263 2013/05/01 Otsuka start
					if(errMap != null)
					{
						outputItem.addOutMapList_2(errMap);
					}
					// TG1-2013-0000263 2013/05/01 Otsuka end
				
					this.taihiErrCd = null;
				}

				// 請求情報が未存在の場合のみ、請求契約情報存在チェック
				if(this.taihiSkyNo == null || "".equals(this.taihiSkyNo))
				{
					checkSkyKeiChk(resultMap);
					this.taihiSkyKeiNo = (String)resultMap.get(DT_CUST_SKY_NO);
				}
				else
				{
					this.taihiSkyKeiNo = (String)resultMap.get(DT_CUST_SKY_NO);
					this.taihiSeikyKeiUm = SEIKY_KEI_UMU_ARI;
				}
			}
			else
			{
				// 法人の場合、請求契約番号をコンビニ入金情報受信の「請求先番号」を設定
				this.taihiSkyKeiNo = (String)resultMap.get(DT_CUST_SKY_NO);
				this.taihiSeikyKeiUm = SEIKY_KEI_UMU_ARI;
			}
			// CVSコード変換処理
			checkCvsCdCg(resultMap);
			// エラーとなった場合
			if(this.taihiErrCd != null)
			{
				errMap = setOutMapErr(resultMap, this.taihiErrCd);
				outputItem.addOutMapList_2(errMap);
				this.taihiErrCd = null;
				return outputItem;
			}

// ANK-4417-00-00 ADD START
			// さくらＫＣＳの場合
			if(tgCst.equals(CH_TG_CONS_SAKURA))
			{
				// 入金情報重複チェック
				checkNkn(resultMap);
				// 入金情報リスト設定
				setNknMapList(resultMap);
			}
// ANK-4417-00-00 ADD END

			// コンビニ入金変換データ作成設定
			outMap = makeCvsNknCgData(resultMap);
			outputItem.addOutMapList(outMap);
		}
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 入力情報マップ詰め替え
	 * @param inMap  		入力電文
	 * @return resultMap	処理結果情報
	 * @throws Exception
	 */
	public JBSbatServiceInterfaceMap makeInfoMap(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeInfoMap]");
		JBSbatServiceInterfaceMap inDataMap = new JBSbatServiceInterfaceMap();
		// 入力情報．レコード区分が「"1"：ヘッダレコード」
		if(JACStrConst.DATA_KUBUN_HEADER.equals(inMap.getString(JBSbatCHIFE022.REC_DIV)))
		{
			// レコード区分
			inDataMap.setString(JBSbatCHIFE022.REC_DIV, inMap.getString(JBSbatCHIFE022.REC_DIV));
			// 作成年月日
			inDataMap.setString(HD_MAKE_YMD, 		inMap.getString(JBSbatCHIFE022.OTHER).substring(0, 8));
			// 企業コード
			inDataMap.setString(HD_COMP_CD, 		inMap.getString(JBSbatCHIFE022.OTHER).substring(8, 13));
			// 種別
			inDataMap.setString(HD_SBT, 			inMap.getString(JBSbatCHIFE022.OTHER).substring(13, 15));
			// 支払予定日
			inDataMap.setString(HD_PAY_DAY, 		inMap.getString(JBSbatCHIFE022.OTHER).substring(15, 23));
			// 予備
			inDataMap.setString(HD_YOBI, 			inMap.getString(JBSbatCHIFE022.OTHER).substring(23, 99));
		}
		// 入力情報．レコード区分が「"2"：データレコード」
		else if(JACStrConst.DATA_KUBUN_DATA.equals(inMap.getString(JBSbatCHIFE022.REC_DIV)))
		{
			// レコード区分
			inDataMap.setString(JBSbatCHIFE022.REC_DIV, inMap.getString(JBSbatCHIFE022.REC_DIV));
			// 種別
			inDataMap.setString(DT_SBT,			inMap.getString(JBSbatCHIFE022.OTHER).substring(0, 2));
			// 収納年月日
			inDataMap.setString(DT_KKN_YMD,		inMap.getString(JBSbatCHIFE022.OTHER).substring(2, 10));
			// 収納時分
			inDataMap.setString(DT_KKN_TM,		inMap.getString(JBSbatCHIFE022.OTHER).substring(10, 14));
			// 予備１
			inDataMap.setString(DT_YOBI_1,		inMap.getString(JBSbatCHIFE022.OTHER).substring(14, 28));
			// 請求月
			inDataMap.setString(DT_SKY_MON,		inMap.getString(JBSbatCHIFE022.OTHER).substring(28, 30));
			// 顧客番号１
				// 請求年
			inDataMap.setString(DT_CUST_SKY_YEAR,	inMap.getString(JBSbatCHIFE022.OTHER).substring(30, 32));
				// 群番号
			inDataMap.setString(DT_CUST_GUN,		inMap.getString(JBSbatCHIFE022.OTHER).substring(32, 33));
				// 発行シーケンス
			inDataMap.setString(DT_CUST_HK_SEQ,		inMap.getString(JBSbatCHIFE022.OTHER).substring(33, 34));
			// 予備２
			inDataMap.setString(DT_YOBI_2,			inMap.getString(JBSbatCHIFE022.OTHER).substring(34, 36));
			// 顧客番号２
				// 請求先番号
			inDataMap.setString(DT_CUST_SKY_NO,		inMap.getString(JBSbatCHIFE022.OTHER).substring(36, 46));
			// 予備３
			inDataMap.setString(DT_YOBI_3,			inMap.getString(JBSbatCHIFE022.OTHER).substring(46, 54));
			// 収納金額
			inDataMap.setString(DT_KKN_AMNT,		inMap.getString(JBSbatCHIFE022.OTHER).substring(54, 60));
			// 予備４
			inDataMap.setString(DT_YOBI_4,			inMap.getString(JBSbatCHIFE022.OTHER).substring(60, 61));
			// 収納店舗コード
			inDataMap.setString(DT_KKN_TENCD,		inMap.getString(JBSbatCHIFE022.OTHER).substring(61, 68));
			// 支払予定日
			inDataMap.setString(DT_PAY_DAY,			inMap.getString(JBSbatCHIFE022.OTHER).substring(68, 76));
			// 予備５
			inDataMap.setString(DT_YOBI_5,			inMap.getString(JBSbatCHIFE022.OTHER).substring(76, 92));
			// CVSコード
			inDataMap.setString(DT_CVS_CD,			inMap.getString(JBSbatCHIFE022.OTHER).substring(92, 97));
			// 予備６
			inDataMap.setString(DT_YOBI_6,			inMap.getString(JBSbatCHIFE022.OTHER).substring(97, 99));
// ANK-3838-00-00対応 20201112 星野 ADD START
			// さくらＫＣＳの場合
			if(tgCst.equals(CH_TG_CONS_SAKURA))
			{
				// 予備６項目をコンビニ負担方式として取得
				inDataMap.setString(DT_CVSTORE_FTN_HOSHIKI,			inMap.getString(JBSbatCHIFE022.OTHER).substring(97, 99));
			}
// ANK-3838-00-00対応 20201112 星野 ADD END

		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeInfoMap][inDataMap=" + inDataMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeInfoMap]");
		return inDataMap;
	}

	/**
	 * 出力ファイル編集：エラー(整合性)
	 * @param  resultMap  	詰め替え後、入力電文
	 * @param  errCd 		エラーコード
	 * @return errMakeMap	処理結果情報
	 * @throws Exception 	業務サービス内で発生した例外全般
	 */
	public JBSbatServiceInterfaceMap setOutMapErr(JBSbatServiceInterfaceMap resultMap, String errCd) throws Exception
	{
		// 2013/05/07 Otsuka ログも出力しないように修正 start
		if(errCd.equals(NONE))
		{
			// ワーニングの場合、NULLを返す。
			return null;
		}
		// 2013/05/07 Otsuka ログも出力しないように修正 end
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setOutMapErr1]");
		JBSbatServiceInterfaceMap errMakeMap = new JBSbatServiceInterfaceMap();

		//  1.企業コード
		errMakeMap.set(JBSbatCHIFM016.CMN_KMK_COMP_CD, 	this.taihiCompCd);
		//  2.エラー種別
		// TG1-2013-0000263 2013/05/01 Otsuka start
		// エラーの場合
		errMakeMap.set(JBSbatCHIFM016.ERR_SBT, 			JACStrConst.ERR_KUBUN_ERR);
		// TG1-2013-0000263 2013/05/01 Otsuka end
		
		//  3.エラー内容
		errMakeMap.set(JBSbatCHIFM016.ERR_NAIYO, 		errorInfoMap.get(this.errCDinitial + errCd));
		//  4.レコード区分
		errMakeMap.set(JBSbatCHIFM016.REC_DIV, 			JACStrConst.KARA_MOJI);
		//  5.データ種別１
		errMakeMap.set(JBSbatCHIFM016.DATA_SBT_1, 		JACStrConst.KARA_MOJI);
		//  6.企業コード１
		errMakeMap.set(JBSbatCHIFM016.COMP_CD_1, 		JACStrConst.KARA_MOJI);
		//  7.支払予定日１
		errMakeMap.set(JBSbatCHIFM016.PAY_RSVD_1, 		JACStrConst.KARA_MOJI);
		//  8.速報合計件数
		errMakeMap.set(JBSbatCHIFM016.SOKHO_GOKEI_CNT, 	JACStrConst.KARA_MOJI);
		//  9.速報合計金額
		errMakeMap.set(JBSbatCHIFM016.SOKHO_GOKEI_AMNT, JACStrConst.KARA_MOJI);
		// 10.確定合計件数
		errMakeMap.set(JBSbatCHIFM016.FIX_GOKEI_CNT, 	JACStrConst.KARA_MOJI);
		// 11.確定合計金額
		errMakeMap.set(JBSbatCHIFM016.FIX_GOKEI_AMNT, 	JACStrConst.KARA_MOJI);
		// 12.取消合計件数
		errMakeMap.set(JBSbatCHIFM016.CL_GOKEI_CNT, 	JACStrConst.KARA_MOJI);
		// 13.取消合計金額
		errMakeMap.set(JBSbatCHIFM016.CL_GOKEI_AMNT, 	JACStrConst.KARA_MOJI);
		// 14.レコード件数
		errMakeMap.set(JBSbatCHIFM016.REC_CNT, 			JACStrConst.KARA_MOJI);
		// 15.データ種別２
		errMakeMap.set(JBSbatCHIFM016.DATA_SBT_2, 		JACStrConst.KARA_MOJI);
		// 16.収納日付
		errMakeMap.set(JBSbatCHIFM016.KAKNO_YMD, 		JACStrConst.KARA_MOJI);
		// 17.収納時間
		errMakeMap.set(JBSbatCHIFM016.KAKNO_TIME, 		JACStrConst.KARA_MOJI);
		// 18.企業コード２
		errMakeMap.set(JBSbatCHIFM016.COMP_CD_2, 		JACStrConst.KARA_MOJI);
		// 19.請求先番号
		errMakeMap.set(JBSbatCHIFM016.SEIKY_SAKI_NO, 	JACStrConst.KARA_MOJI);
		// 20.群
		errMakeMap.set(JBSbatCHIFM016.GUN, 				JACStrConst.KARA_MOJI);
		// 21.請求月
		errMakeMap.set(JBSbatCHIFM016.SEIKY_MON, 		JACStrConst.KARA_MOJI);
		// 22.発行シーケンス
		errMakeMap.set(JBSbatCHIFM016.HAKKO_SEQ, 		JACStrConst.KARA_MOJI);
		// 23.請求額
		errMakeMap.set(JBSbatCHIFM016.SEIKY_AMNT, 		JACStrConst.KARA_MOJI);
		// 24.収納店舗
		errMakeMap.set(JBSbatCHIFM016.KAKNO_TENPO, 		JACStrConst.KARA_MOJI);
		// 25.支払予定日２
		errMakeMap.set(JBSbatCHIFM016.PAY_RSVD_2, 		JACStrConst.KARA_MOJI);
		// 26.CVSコード
		errMakeMap.set(JBSbatCHIFM016.CVS_CD, 			JACStrConst.KARA_MOJI);
		// 27.レコード内容
		errMakeMap.set(JBSbatCHIFM016.REC_NAIYO, 		JACStrConst.KARA_MOJI);
		
		// 15.データ種別２
		errMakeMap.set(JBSbatCHIFM016.DATA_SBT_2, 		resultMap.get(DT_SBT));
		// 退避マップより収納年月日を取得
		String kknYMD = resultMap.getString(DT_KKN_YMD);
		// 収納日付がyyyy/MM/ddに変換可能であれば
		if(JPCUtilCommon.formatDate(resultMap.getString(DT_KKN_YMD)).length() > 8)
		{
			// 収納日付をyyyy//MM/ddに変換後、yy/MM/ddを切り取り格納
			kknYMD = JPCUtilCommon.formatDate(kknYMD).substring(2, 10);
		}
		// 16.収納日付
		errMakeMap.set(JBSbatCHIFM016.KAKNO_YMD, 		kknYMD);
		// 17.収納時間
		errMakeMap.set(JBSbatCHIFM016.KAKNO_TIME, 		resultMap.get(DT_KKN_TM));
		// 18.企業コード２
		errMakeMap.set(JBSbatCHIFM016.COMP_CD_2, 		this.taihiCompCd);
		// 19.請求先番号
		errMakeMap.set(JBSbatCHIFM016.SEIKY_SAKI_NO, 	resultMap.get(DT_CUST_SKY_NO));
		// 20.群
		errMakeMap.set(JBSbatCHIFM016.GUN, 				resultMap.get(DT_CUST_GUN));
		// 21.請求月 請求年＋"/"＋請求月
		errMakeMap.set(JBSbatCHIFM016.SEIKY_MON,  		resultMap.get(DT_CUST_SKY_YEAR) + JACStrConst.SLASH + resultMap.getString(DT_SKY_MON));
		// 22.発行シーケンス
		errMakeMap.set(JBSbatCHIFM016.HAKKO_SEQ, 		resultMap.get(DT_CUST_HK_SEQ));
		// 23.請求額
		errMakeMap.set(JBSbatCHIFM016.SEIKY_AMNT, 		JPCUtilCommon.formatNumber(resultMap.getString(DT_KKN_AMNT)));
		// 24.収納店舗
		errMakeMap.set(JBSbatCHIFM016.KAKNO_TENPO, 		resultMap.get(DT_KKN_TENCD));
		// 退避マップより支払予定日を取得
		String payDay2 = resultMap.getString(DT_PAY_DAY);
		// 支払予定日がyyyy/MM/ddに変換可能であれば
		if(JPCUtilCommon.formatDate(resultMap.getString(DT_PAY_DAY)).length() > 8)
		{
			// 支払予定日をyyyy//MM/ddに変換後、yy/MM/ddを切り取り格納
			payDay2 = JPCUtilCommon.formatDate(payDay2).substring(2, 10);
		}
		// 25.支払予定日２
		errMakeMap.set(JBSbatCHIFM016.PAY_RSVD_2, 		payDay2);
		// 26.CVSコード
		errMakeMap.set(JBSbatCHIFM016.CVS_CD, 			resultMap.get(DT_CVS_CD));
		
		// 囲み文字付加
		errMakeMap.setMap(JCHbatSeikyKaknoBusinessUtil.quote(errMakeMap.getMap(), JACStrConst.DOUBLE_QUOTE, JACStrConst.DOUBLE_QUOTE));
		// 出力フラグ
		errMakeMap.setOutFlg(true);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setOutMapErr1][errMakeMap=" + errMakeMap + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setOutMapErr1]");
		
		return errMakeMap;
	}

	/**
	 * 出力情報作成
	 * @param  resultMap 入力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 * @return outDataMap 出力情報
	 */
	public JBSbatServiceInterfaceMap makeCvsNknCgData(JBSbatServiceInterfaceMap resultMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutDataInfo]");

		// 出力情報格納マップ
		JBSbatServiceInterfaceMap outDataMap = new JBSbatServiceInterfaceMap();

		// 1.請求契約番号
		outDataMap.set(JBSbatCHIFM043.SEIKY_KEI_NO, 				this.taihiSkyKeiNo);
		// 2.請求年月 
		outDataMap.set(JBSbatCHIFM043.SEIKY_YM, 					this.taihiseikyYm);
		// 3.請求番号
		outDataMap.set(JBSbatCHIFM043.SEIKY_NO, 					this.taihiSkyNo);
		// 4.請求発行シーケンス
		outDataMap.set(JBSbatCHIFM043.SKS_HAKKO_SEQ, 				JPCUtilCommon.fillZero(resultMap.getString(DT_CUST_HK_SEQ), HK_SEQ_CNT, false));
		// 5.入金経路コード
		outDataMap.set(JBSbatCHIFM043.NYUKIN_ROUTE_CD, 				this.nknRootCd);
		// 6.収納機関コード
// ANK-3838-00-00対応 20201112 星野 ADD START
		// さくらＫＣＳの場合
		if(tgCst.equals(CH_TG_CONS_SAKURA))
		{
			if( this.synKknCdMap.containsKey( resultMap.getString(DT_CVSTORE_FTN_HOSHIKI)) ){
				// コンビニ負担方式に応じた収納機関コードを設定
				outDataMap.set(JBSbatCHIFM043.SHUNOKIKAN_CD, 			this.synKknCdMap.get(resultMap.getString(DT_CVSTORE_FTN_HOSHIKI)));
			}
			else
			{
				// 想定外の場合は、一旦 通常・顧客負担 へ倒す（フェイルセーフ）
				outDataMap.set(JBSbatCHIFM043.SHUNOKIKAN_CD, 			this.synKknCdMap.get(JACStrConst.CVSTORE_FTN_HOSHIKI_NORMAL_CUST));
			}
		}
		else
		{
// ANK-3838-00-00対応 20201112 星野 ADD END
			outDataMap.set(JBSbatCHIFM043.SHUNOKIKAN_CD, 				this.synKknCd);
// ANK-3838-00-00対応 20201112 星野 ADD START
		}
// ANK-3838-00-00対応 20201112 星野 ADD END
		
		
		// 7.収納年月日
// ANK-3838-00-00対応 20201112 星野 ADD START
		// さくらＫＣＳの場合
		if(tgCst.equals(CH_TG_CONS_SAKURA))
		{
			// さくらＫＣＳの場合は運用日付ではなく「収納年月日」を設定
			outDataMap.set(JBSbatCHIFM043.OUT_ORG_SHUNO_YMD, 			resultMap.get(DT_KKN_YMD));
		}
		else
		{
// ANK-3838-00-00対応 20201112 星野 ADD END
			outDataMap.set(JBSbatCHIFM043.OUT_ORG_SHUNO_YMD, 			super.opeDate); // 2013/05/02 Otsuka 収納年月日を運用日に変更
// ANK-3838-00-00対応 20201112 星野 ADD START
		}
// ANK-3838-00-00対応 20201112 星野 ADD END
		
		
		// 8.入金額
		outDataMap.set(JBSbatCHIFM043.NYUKIN_AMNT, 					resultMap.get(DT_KKN_AMNT));
		// 9.領収年月
		outDataMap.set(JBSbatCHIFM043.RECEIPT_YMD, 					resultMap.get(DT_KKN_YMD));
		// 10.領収時分秒
		outDataMap.set(JBSbatCHIFM043.RECEIPT_HMS, 					resultMap.get(DT_KKN_TM));
		// 11.入金処理済フラグ
		outDataMap.set(JBSbatCHIFM043.NYUKIN_SYRZM_FLG, 			JACStrConst.SPACE_1);
		if(JACStrConst.SYUBETU_KAKUHOU.equals(resultMap.get(DT_SBT)))
		{
			// 種別が確報の場合
			outDataMap.set(JBSbatCHIFM043.NYUKIN_SYRZM_FLG, 		JACStrConst.NKIN_SYORI_ZUMI_FLG_MI);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeCvsNknCgData][確報（入金処理済フラグ）]");
		}
		// 12.窓口金融機関コード
		outDataMap.set(JBSbatCHIFM043.MADOGUCHI_BANK_CD, 			JACStrConst.KARA_MOJI);
		// 13.窓口金融機関支店コード
		outDataMap.set(JBSbatCHIFM043.MADOGUCHI_BANK_SHITEN_CD, 	JACStrConst.KARA_MOJI);
		// 14.コンビニエンスストアコード
		outDataMap.set(JBSbatCHIFM043.CVSTORE_CD, 					this.cvsStCd);
		// 15.コンビニ受付店コード
		outDataMap.set(JBSbatCHIFM043.CVSTORE_UK_TEN_CD, 			resultMap.get(DT_KKN_TENCD));
		// 16.コンビニリアル業務区分コード
		outDataMap.set(JBSbatCHIFM043.WORK_DIV, 					JACStrConst.KARA_MOJI);

		// 17.コンビニリアル速報通知年月日
		outDataMap.set(JBSbatCHIFM043.CVSTORE_REAL_SOKHO_TCH_YMD,	JACStrConst.KARA_MOJI);
		// 18.コンビニリアル速報通知時分秒
		outDataMap.set(JBSbatCHIFM043.CVSTORE_REAL_SOKHO_TCH_HMS,	JACStrConst.KARA_MOJI);
		// 19.コンビニリアル速報処理済フラグ
		outDataMap.set(JBSbatCHIFM043.CVS_REAL_SOKHO_SYRZM_FLG,		JACStrConst.KARA_MOJI);
		
		// 20.コンビニデータ種別
		outDataMap.set(JBSbatCHIFM043.CVSTORE_DATA_SBT, 			resultMap.get(DT_SBT));
		
		// 21.コンビ二速報通知年月日
		outDataMap.set(JBSbatCHIFM043.CVSTORE_SOKHO_TCH_YMD, 		JACStrConst.KARA_MOJI);
		if(JACStrConst.SYUBETU_SOKUHOU.equals(resultMap.get(DT_SBT)))
		{
			outDataMap.set(JBSbatCHIFM043.CVSTORE_SOKHO_TCH_YMD, 	this.taihiMakeYmd);
		}
		// 22.コンビニ速報処理済フラグ
		outDataMap.set(JBSbatCHIFM043.CVSTORE_SOKHO_SYRZM_FLG, 		JACStrConst.KARA_MOJI);
		if(JACStrConst.SYUBETU_SOKUHOU.equals(resultMap.get(DT_SBT)))
		{
			outDataMap.set(JBSbatCHIFM043.CVSTORE_SOKHO_SYRZM_FLG, 	JACStrConst.NKIN_SYORI_ZUMI_FLG_MI);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeCvsNknCgData][速報（コンビニ速報処理済フラグ）]");
		}
		// 23.コンビニ確報通知年月日
		outDataMap.set(JBSbatCHIFM043.CVSTORE_KAKHO_TCH_YMD, 		JACStrConst.KARA_MOJI);
		if(JACStrConst.SYUBETU_KAKUHOU.equals(resultMap.get(DT_SBT)))
		{
			outDataMap.set(JBSbatCHIFM043.CVSTORE_KAKHO_TCH_YMD, 	this.taihiMakeYmd);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeCvsNknCgData][確報（コンビニ確報通知年月日）]");
		}
		// 24.コンビニ取消通知年月日
		outDataMap.set(JBSbatCHIFM043.CVSTORE_SOKHO_CL_TCH_YMD, 	JACStrConst.KARA_MOJI);
		if(JACStrConst.SYUBETU_TORIKESI.equals(resultMap.get(DT_SBT)))
		{
			outDataMap.set(JBSbatCHIFM043.CVSTORE_SOKHO_CL_TCH_YMD, 	this.taihiMakeYmd);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeCvsNknCgData][取消（コンビニ取消通知年月日）]");
		}
		// 25.コンビニ支払予定年月日
		outDataMap.set(JBSbatCHIFM043.CVSTORE_PAY_RSV_YMD, 			resultMap.get(DT_PAY_DAY));
		// 26.コンビニ収納代行会社
// ANK-3838-00-00対応 20201112 星野 ADD START
		// さくらＫＣＳの場合
		if(tgCst.equals(CH_TG_CONS_SAKURA))
		{
			// コンビニ負担方式 により設定するべきメーカーコードが異なる
			
			if( JACStrConst.CVSTORE_FTN_HOSHIKI_NORMAL_CUST.equals( resultMap.getString(DT_CVSTORE_FTN_HOSHIKI) ) )
			{
				// 通常・顧客負担
				outDataMap.set(JBSbatCHIFM043.CVSTORE_KAKNO_DAIKO_COMP, JACStrConst.MAKER_CD_NOMAL_CUST_FTN_SAKURA);
			}
			else if( JACStrConst.CVSTORE_FTN_HOSHIKI_NORMAL_COMP.equals( resultMap.getString(DT_CVSTORE_FTN_HOSHIKI) ) )
			{
				// 通常・企業負担
				outDataMap.set(JBSbatCHIFM043.CVSTORE_KAKNO_DAIKO_COMP, JACStrConst.MAKER_CD_NOMAL_COMP_FTN_SAKURA);
			}
			else if( JACStrConst.CVSTORE_FTN_HOSHIKI_REAL_CUST.equals( resultMap.getString(DT_CVSTORE_FTN_HOSHIKI) ) )
			{
				// リアル・顧客負担
				outDataMap.set(JBSbatCHIFM043.CVSTORE_KAKNO_DAIKO_COMP, JACStrConst.MAKER_CD_REAL_CUST_FTN_SAKURA);
			}
			else if( JACStrConst.CVSTORE_FTN_HOSHIKI_REAL_COMP.equals( resultMap.getString(DT_CVSTORE_FTN_HOSHIKI) ) )
			{
				// リアル・企業負担
				outDataMap.set(JBSbatCHIFM043.CVSTORE_KAKNO_DAIKO_COMP, JACStrConst.MAKER_CD_REAL_COMP_FTN_SAKURA);
			}
			else
			{
				// 上記以外は、一旦 通常・顧客負担 へ倒す（フェイルセーフ）
				// 通常・顧客負担
				outDataMap.set(JBSbatCHIFM043.CVSTORE_KAKNO_DAIKO_COMP, JACStrConst.MAKER_CD_NOMAL_CUST_FTN_SAKURA);
			}
		}
		else
		{
// ANK-3838-00-00対応 20201112 星野 ADD END
			// 上記以外の場合
			// 企業コードにより設定するべきメーカーコードが異なる
			
			if(JACStrConst.KIGYO_CD_TUJO.equals(this.taihiCompCd))
			{
				// クリアパス(通常)
				outDataMap.set(JBSbatCHIFM043.CVSTORE_KAKNO_DAIKO_COMP, JACStrConst.MAKER_CD_CP);
			}
			else if(JACStrConst.KIGYO_CD_REAL.equals(this.taihiCompCd))
			{
				// NTTインターネット(リアル)
				outDataMap.set(JBSbatCHIFM043.CVSTORE_KAKNO_DAIKO_COMP, JACStrConst.MAKER_CD_REAL);
			}
// ANK-3838-00-00対応 20201112 星野 ADD START
		}
// ANK-3838-00-00対応 20201112 星野 ADD END
		// 27.振替結果コード
		outDataMap.set(JBSbatCHIFM043.FURIKAE_RSLT_CD, 				JACStrConst.KARA_MOJI);
		// 28.履歴詳細区分
		outDataMap.set(JBSbatCHIFM043.RIREKI_DTL_DIV, 				JACStrConst.KARA_MOJI);
		
		// 29.請求契約有無
		outDataMap.set(JBSbatCHIFM043.SEIKY_KEI_UMU,				this.taihiSeikyKeiUm);
		
		// 出力フラグ
		outDataMap.setOutFlg(true);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutDataInfo]");
		return outDataMap;
	}

	/**
	 * 請求情報有無チェック
	 * @param  resultMap 入力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public void checkSkyUmu(JBSbatServiceInterfaceMap resultMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][checkSkyUmu]");

		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// 請求年月
		paramList.setValue(editSeikyYm(resultMap.getString(DT_CUST_SKY_YEAR).concat(resultMap.getString(DT_SKY_MON))));
		// 請求先番号
		paramList.setValue(resultMap.get(DT_CUST_SKY_NO));
		// 群番号＋発行シーケンス
		paramList.setValue(resultMap.getString(DT_CUST_GUN).concat(resultMap.getString(DT_CUST_HK_SEQ)));
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][checkSkyUmu][paramList=" + paramList.getList().toString() + "]");		

		executeCH_T_SEIKY_CH_SELECT_007(paramList.getList().toArray());
		// 結果を取得
		JBSbatCommonDBInterface dbMap =  db_CH_T_SEIKY.selectNext();
		if(dbMap == null)
		{
			this.taihiErrCd = NONE; // 2013/05/07 Otsuka ログも出力しないように修正
			this.taihiSkyNo = null;
		}
		else
		{
			this.taihiSkyNo = dbMap.getString(JBSbatCH_T_SEIKY.SEIKY_NO);

		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkSkyUmu]");
	}

	/**
	 * CVSコード変換処理
	 * @param  resultMap 入力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public void checkCvsCdCg(JBSbatServiceInterfaceMap resultMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][checkCvsCdCg]");

		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		// 入力.CVSコード
		paramList.setValue(resultMap.get(DT_CVS_CD));
		// バッチ運用日
		paramList.setValue(super.opeDate);
		// バッチ運用日
		paramList.setValue(super.opeDate);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][checkCvsCdCg][paramList=" + paramList.getList().toString() + "]");		

		executeCH_M_CVSTORE_CH_SELECT_001(paramList.getList().toArray());
		// 結果を取得
		JBSbatCommonDBInterface dbMap =  db_CH_M_CVSTORE.selectNext();
		if(dbMap == null)
		{
			this.taihiErrCd = JPCBatchMessageConstant.ECHB0650AE;
			this.cvsStCd = null;
		}
		else
		{
			// 退避.コンビニエンスストアコードに取得したコンビニエンスストアコードを格納
			this.cvsStCd = dbMap.getString(JBSbatCH_M_CVSTORE.CVSTORE_CD);
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkCvsCdCg]");
	}

	/**
	 * 請求契約情報存在チェック
	 * @param  resultMap 入力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public void checkSkyKeiChk(JBSbatServiceInterfaceMap resultMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][checkSkyKeiChk]");

		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// 請求先番号
		paramList.setValue(resultMap.get(DT_CUST_SKY_NO));
		// 請求契約.予約適用年月日
		paramList.setValue(super.opeDate);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][checkSkyKeiChk][paramList=" + paramList.getList().toString() + "]");		

		executeKK_T_SEIKY_KEI_CH_SELECT_013(paramList.getList().toArray());
		// 結果を取得
		JBSbatCommonDBInterface dbMap =  db_KK_T_SEIKY_KEI.selectNext();
		if(dbMap == null)
		{
			
			// 取得できなかった場合、項目「請求契約存在有無」に0を設定
			this.taihiSeikyKeiUm = SEIKY_KEI_UMU_NASI;
		}
		else
		{
			// 取得できた場合、項目「請求契約存在有無」に1を設定
			this.taihiSeikyKeiUm = SEIKY_KEI_UMU_ARI;
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkSkyKeiChk]");
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");

		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CH_M_CVSTORE.close();
		db_CH_T_SEIKY.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * SQLKEY(CH_SELECT_001)で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_CVSTORE_CH_SELECT_001(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_M_CVSTORE.selectBySqlDefine(paramList, CH_M_CVSTORE_CH_SELECT_001);
	}

	/**
	 * SQLKEY(CH_SELECT_007)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	請求．請求年月
	 *		 	請求．請求契約番号
	 *		 	請求．EANバーコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_SEIKY_CH_SELECT_007(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_007);
	}

	/**
	 * 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_013(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);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 日付に年（yyyy形式）を付加します。
	 * 
	 * @param befDate 編集前日付(yyMM形式またはMMdd形式)
	 * @return 編集後日付(yyyyMM形式またはyyyyMMdd形式)
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String editSeikyYm(String befDate) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][editSeikyYm]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][editSeikyYm][befDate=" + befDate + "]");
		
		// 編集後日付
		String aftDate = null;
		
		// yyMM形式からyyyyMM形式に変換
		// 年（yyyy形式）の先頭２桁
		String yearTop2Length = super.opeDate.substring(0, 2);
		aftDate = yearTop2Length + befDate;
		
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][editSeikyYm][aftDate=" + aftDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][editSeikyYm]");
		
		return aftDate;
	}

// ANK-4417-00-00 ADD START
	/**
	 * 入金情報重複チェック
	 * @param  resultMap 入力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void checkNkn(JBSbatServiceInterfaceMap resultMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][checkNkn]");

		// 種別が確報の場合
		if(JACStrConst.SYUBETU_KAKUHOU.equals(resultMap.get(DT_SBT)))
		{
			// 2.請求番号が空以外の場合
			if(!JCHStringUtil.isNullBlank(this.taihiSkyNo))
			{
				// 入金情報リストとの重複チェック
				for (int i = 0; this.cvsNknDtList.size() > i; i++)
				{
					JBSbatServiceInterfaceMap nknMap = cvsNknDtList.get(i);
					// 2.請求番号の比較
					if(!nknMap.get(JBSbatCHIFM043.SEIKY_NO).equals(this.taihiSkyNo))
					{
						continue;
					}
					// 1.請求年月の比較
					if(!nknMap.get(JBSbatCHIFM043.SEIKY_YM).equals(this.taihiseikyYm))
					{
						continue;
					}
					// 3.請求発行シーケンスの比較
					if(!nknMap.get(JBSbatCHIFM043.SKS_HAKKO_SEQ).equals(JPCUtilCommon.fillZero(resultMap.getString(DT_CUST_HK_SEQ), HK_SEQ_CNT, false)))
					{
						continue;
					}
					// 4.群番号の比較
					if(!nknMap.get(DT_CUST_GUN).equals(resultMap.getString(DT_CUST_GUN)))
					{
						continue;
					}
					// 5.入金経路コードの比較
					if(!nknMap.get(JBSbatCHIFM043.NYUKIN_ROUTE_CD).equals(this.nknRootCd))
					{
						continue;
					}
					// 6.収納年月日の比較
					if(!nknMap.get(JBSbatCHIFM043.OUT_ORG_SHUNO_YMD).equals(resultMap.get(DT_KKN_YMD)))
					{
						continue;
					}
					// 7.CVSコードの比較
					if(!nknMap.get(DT_CVS_CD).equals(resultMap.get(DT_CVS_CD)))
					{
						continue;
					}
					// 入金情報重複マイナーアラーム発行
					setNknErrorLog(resultMap);
					break;
				}
			}
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkNkn]");
	}

	/**
	 * 入金情報リスト設定
	 * @param  resultMap 入力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setNknMapList(JBSbatServiceInterfaceMap resultMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setNknMapList]");

		// 種別が確報の場合
		if(JACStrConst.SYUBETU_KAKUHOU.equals(resultMap.get(DT_SBT)))
		{
			// 2.請求番号が空以外の場合
			if(!JCHStringUtil.isNullBlank(this.taihiSkyNo))
			{
				// 入金情報格納マップ
				JBSbatServiceInterfaceMap nknDataMap = new JBSbatServiceInterfaceMap();
				// 1.請求年月
				nknDataMap.set(JBSbatCHIFM043.SEIKY_YM, 					this.taihiseikyYm);
				// 2.請求番号
				nknDataMap.set(JBSbatCHIFM043.SEIKY_NO, 					this.taihiSkyNo);
				// 3.請求発行シーケンス
				nknDataMap.set(JBSbatCHIFM043.SKS_HAKKO_SEQ, 				JPCUtilCommon.fillZero(resultMap.getString(DT_CUST_HK_SEQ), HK_SEQ_CNT, false));
				// 4.群番号
				nknDataMap.set(DT_CUST_GUN,									resultMap.get(DT_CUST_GUN));
				// 5.入金経路コード
				nknDataMap.set(JBSbatCHIFM043.NYUKIN_ROUTE_CD, 				this.nknRootCd);
				// 6.収納年月日
				nknDataMap.set(JBSbatCHIFM043.OUT_ORG_SHUNO_YMD, 			resultMap.get(DT_KKN_YMD));
				// 7.CVSコード
				nknDataMap.set(DT_CVS_CD, 									resultMap.get(DT_CVS_CD));
				// 入金情報リストに入金情報の追加
				this.cvsNknDtList.add(nknDataMap);
			}
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setNknMapList]");
	}

	/**
	 * 入金情報重複マイナーアラーム発行処理
	 * @param  resultMap 入力情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setNknErrorLog(JBSbatServiceInterfaceMap resultMap)  throws Exception
	{
		String keylog = "(Key：請求年月=" + this.taihiseikyYm;
		keylog += ",請求番号=" + this.taihiSkyNo;
		keylog += ",請求先番号=" + resultMap.get(DT_CUST_SKY_NO);
		keylog += ",請求発行シーケンス=" + JPCUtilCommon.fillZero(resultMap.getString(DT_CUST_HK_SEQ), HK_SEQ_CNT, false);
		keylog += ",群番号=" + resultMap.get(DT_CUST_GUN);
		keylog += ",入金経路コード=" + this.nknRootCd;
		keylog += ",収納年月日=" + resultMap.get(DT_KKN_YMD);
		keylog += ",CVSコード=" + resultMap.get(DT_CVS_CD);
		keylog += ")";

		commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECHB1500KW,
				new String[] {"コンビニ(さくらKCS)入金情報が重複しています。" + keylog});
	}
// ANK-4417-00-00 ADD END
}
