/*********************************************************************
*  All Rights reserved,Copyright (c) Fujitsu ,2011					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACNHKWtchegIfReOtPrcTrkm
*	ソースファイル名	：JBSbatACNHKWtchegIfReOtPrcTrkm.java
*	作成者				：富士通　
*	作成日				：2011年07月08日
*＜機能概要＞
*　ＮＨＫ視聴課金情報外部料金取込データ再作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/08   富士通		新規作成
*	v5.00.00	2013/08/19   FJ) 小柴	【OM-2013-0000189】利用終了日の取得をマップから行うように修正、対象データがない場合にエラー終了しないように修正
*	v5.00.01	2013/10/15   FJ) 前田	【OM-2013-0001120】ディレイド二重起動防止対応
*	v8.00.00	2013/12/11   FJ）柴田	【ANK-1584-00-00】出力ファイルにサービス詳細識別番号を追加。
*	v8.01.00	2014/03/13   FJ) 伊藤	【OM-2014-0000842】ABEND時の更新日付を最大値に修正
*	v12.00.00	2014/10/09   FJ) 岡田	【ANK-2248-00-00】NHK団体一括契約の受付拡充
*	v12.00.01	2014/10/21   FJ) 岡田	【IT1-2014-0000339】外部料金取込データ作成ファイル出力内容変更
*	v12.00.02	2015/02/25   FJ) 桑島	【OM-2015-0000046】支払サイクルコードの変更対応
*	v23.00.00	2016/03/18	 FJ) 松岡	【OM-2016-0000545】性能障害対応
*	v25.00.00	2016/07/26	 FJ) 岡田	【OM-2016-0001766】
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import eo.business.common.JACBatCommon;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatShoriIraiUtil;
import eo.business.util.file.JBSbatACIFM014;
import eo.business.util.file.JBSbatACIFM097;
import eo.business.util.table.JBSbatAC_T_NHK_WTCHCRG_DTL;
import eo.business.util.table.JBSbatAC_T_NHK_WTCHCRG_TJK;
import eo.business.util.table.JBSbatAC_T_SVKEI_CHIKUSEKI;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_CS_CHGE;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_OPUT_NM;
import eo.business.util.table.JBSbatCH_M_PRC_SCHDL_TEIGI;
import eo.business.util.table.JBSbatKK_T_SEIOPSVC_KEI;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.constant.JZM0171Constant;
import eo.common.util.JPCUtilCommon;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACNHKWtchegIfReOtPrcTrkm extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(ＮＨＫ視聴課金処理状況)*/
	private static final String D_TBL_NAME_AC_T_NHK_WTCHCRG_TJK = "AC_T_NHK_WTCHCRG_TJK";

	/** テーブル(ＮＨＫ視聴課金明細)*/
	private static final String D_TBL_NAME_AC_T_NHK_WTCHCRG_DTL = "AC_T_NHK_WTCHCRG_DTL";

	/** テーブル(料金項目抽出変換)*/
	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_T_SVKEI_CHIKUSEKI = "AC_T_SVKEI_CHIKUSEKI";
	
	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";
	
	/** テーブル(料金スケジュール定義)*/
	private static final String D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI = "CH_M_PRC_SCHDL_TEIGI";
	
	// ANK-2248-00-00 ADD START
	/** テーブル(請求オプションサービス契約)*/
	private static final String D_TBL_NAME_KK_T_SEIOPSVC_KEI = "KK_T_SEIOPSVC_KEI";
	// ANK-2248-00-00 ADD END

	/** SQL定義キー(AC_SELECT_017)*/
	private static final String CH_M_PRC_KMK_CS_CHGE_AC_SELECT_017 = "AC_SELECT_017";

	// ANK-2248-00-00 MOD START
	/** SQL定義キー(AC_SELECT_003)*/
	//private static final String AC_T_SVKEI_CHIKUSEKI_AC_SELECT_003 = "AC_SELECT_003";
	/** SQL定義キー(AC_SELECT_014)*/
	private static final String AC_T_SVKEI_CHIKUSEKI_AC_SELECT_014 = "AC_SELECT_014";
	// ANK-2248-00-00 MOD END

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String AC_T_NHK_CHRG_JOKYO_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_004)*/
	private static final String AC_T_NHK_WTCHCRG_DTL_AC_SELECT_004 = "AC_SELECT_004";
	
	/** SQL定義キー(AC_SELECT_001)*/
	private static final String ZM_M_CD_NM_KANRI_AC_SELECT_001 = "AC_SELECT_001";
	
	/** SQL定義キー(AC_SELECT_012)*/
	private static final String CH_M_PRC_SCHDL_TEIGI_AC_SELECT_012 = "AC_SELECT_012";
	
	// ANK-2248-00-00 ADD START
	/** SQL定義キー(AC_SELECT_003)*/
	private static final String KK_T_SEIOPSVC_KEI_AC_SELECT_003 = "AC_SELECT_003";
	// ANK-2248-00-00 ADD END
	
	/** テーブルアクセスクラス(ＮＨＫ視聴課金処理状況)*/
	private JBSbatSQLAccess db_AC_T_NHK_WTCHCRG_TJK = null;

	/** テーブルアクセスクラス(ＮＨＫ視聴課金明細)*/
	private JBSbatSQLAccess db_AC_T_NHK_WTCHCRG_DTL = null;

	/** テーブルアクセスクラス(料金項目抽出変換)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_CS_CHGE = null;

	/** テーブルアクセスクラス(サービス契約蓄積)*/
	private JBSbatSQLAccess db_AC_T_SVKEI_CHIKUSEKI = null;
	
	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;
	
	/** テーブルアクセスクラス(料金スケジュール定義)*/
	private JBSbatSQLAccess db_CH_M_PRC_SCHDL_TEIGI = null;
	
	// ANK-2248-00-00 ADD START
	/** テーブルアクセスクラス(請求オプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_SEIOPSVC_KEI = null;
	// ANK-2248-00-00 ADD END
	
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 西暦上二桁 */
	private static final String BC20 = "20";

	/** 請求時期指定コード */
	private String seikyJikiShiteiCd = JACStrConst.KARA_MOJI;
	
	/** 処理識別コード */
	private String tranSkbtCd = JACStrConst.KARA_MOJI;
	
	/** 外部料金取込システム区分 */
	private String outPrcSysDiv = JACStrConst.KARA_MOJI;
	
	/** 業務機能識別コード */
	private String workKinoSkbCd = JACStrConst.KARA_MOJI;

	/** 未請求一時金ありエラー */
	private String[] ichjikinErr = null;
	
	/** 未請求一時金ありエラーコード */
	private String[] ichjikinErrCd = null;

	/** 利用終了日マップ */
	private HashMap<String, String> endYmd = null;
	
	/** ファイル取得ジョブID（ディレイド処理検索用） */
	private static final String FILE_GET_JOBID = "EO3150110J0";
		
	/** NHK視聴課金番号 */
	private String nhkWatchChrgTrnNo = JACStrConst.KARA_MOJI;
	
	/** ディレイド処理依頼番号 */
	private String shoriIraiNo = JACStrConst.KARA_MOJI;
	
	/** 最大日付 */
	private final String MAX_YMDHMS = "20991231000000000";
	
	// ANK-2248-00-00 ADD START
	/** 料金グループコード_eo光テレビ */
	private String prcGrpCdEohtv = "";
	
	// v25.00.00 ADD START
	/** 料金サービスコード_ＮＨＫ団体一括支払 */
	private static final String prcSvcCd_Nhk = "PE0201      ";
	// v25.00.00 ADD END
	
	/** 請求オプションサービス契約番号情報 */
	private HashMap<String, ArrayList<Object>> seiopSvcKeiNoInfMap = null;
	
	/** ファイル定義 */
	private static final String PRM_OTD = "OTD";
	
	/** 課金対象件数 */
	private long chrgTgCount = 0;
	
	/** 課金金額合計 */
	private BigDecimal chrgAmntTotal= BigDecimal.ZERO;
	// ANK-2248-00-00 ADD END
	
	/**
	 * 初期処理
	 * @param commonItem バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_AC_T_NHK_WTCHCRG_TJK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_T_NHK_WTCHCRG_TJK);
		db_AC_T_NHK_WTCHCRG_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_T_NHK_WTCHCRG_DTL);
		db_CH_M_PRC_KMK_CS_CHGE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE);
		db_AC_T_SVKEI_CHIKUSEKI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_T_SVKEI_CHIKUSEKI);
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		db_CH_M_PRC_SCHDL_TEIGI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI);
		// ANK-2248-00-00 ADD START
		db_KK_T_SEIOPSVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIOPSVC_KEI);
		// ANK-2248-00-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		/** (1) 情報付加 */
		
		// (a)請求時期指定コード
		seikyJikiShiteiCd 	= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_SJC_SIKY_STI_MON);
		
		// (b) 処理識別コード
		tranSkbtCd 			= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_OPT_ADD);

		// (c) 外部料金取込システム区分
		outPrcSysDiv 		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_OPS_NHK_WATCH_CRG);

		// (d) 業務機能識別コード
		workKinoSkbCd 		= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_OT_NK_WT_CRIF);
		
		//未請求一時金エラーコード取得
		ichjikinErrCd=paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_RSLT_ICJKIN_ERR).split(JACStrConst.COMMA);
		ichjikinErr=getCdNmKanri(JZM0171Constant.CD01172,ichjikinErrCd[0]);
		
		// ANK-2248-00-00 ADD START
		// 料金グループコード_eo光テレビ
		prcGrpCdEohtv = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_EOHTV_PRC_GRP_CD);
		// ANK-2248-00-00 ADD END
		
		paramUtil.close();
		
		// NHK視聴課金処理状況取得
		executeAC_T_NHK_WTCHCRG_TJK_AC_SELECT_001();
		JBSbatCommonDBInterface nhkRecord = db_AC_T_NHK_WTCHCRG_TJK.selectNext();
		if(nhkRecord != null)
		{
			nhkWatchChrgTrnNo = nhkRecord.getString(JBSbatAC_T_NHK_WTCHCRG_TJK.NHK_WTCHCRG_TJK_NO);
			shoriIraiNo = nhkRecord.getString(JBSbatAC_T_NHK_WTCHCRG_TJK.DLYD_TRN_REQ_NO);
		}
		else
		{
			// NHK視聴課金処理状況テーブルから取得できない場合はエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] { JBSbatAC_T_NHK_WTCHCRG_TJK.TABLE_NAME });
		}
		
		//利用終了日マップを取得
		endYmd = new HashMap<String, String>();
		getendYmd();
		
		// ANK-2248-00-00 ADD START
		// 請求オプションサービス契約番号情報用Mapの初期化
		seiopSvcKeiNoInfMap = new HashMap<String, ArrayList<Object>>();
		// ANK-2248-00-00 ADD END

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap 入力電文
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");
		super.logPrint.printDebugLog("onlineOpeDate" + super.onlineOpeDate);
		
		// 変数宣言
		Object[] setParam = null;
		Object[] whereParam = null;
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		JBSbatServiceInterfaceMap outputMap = new JBSbatServiceInterfaceMap();
		boolean icjprcFlag=false;
		
		// NHK視聴課金明細.請求年月 YYMMに変換
		String nhkSikyYYMM 		= JACStrConst.KARA_MOJI;
		String nhkSikyYYYMM 	= JACStrConst.KARA_MOJI;
		nhkSikyYYMM 			= inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.NHK_SIKY_YM).replace(JACStrConst.SLASH, JACStrConst.KARA_MOJI);
		
		// YYYYMM変換
		String nhkSikyYYYYMM 	= BC20 + nhkSikyYYMM;
		
		// 利用終了日マップより利用終了日を取得
		String useEndYmd = endYmd.get(nhkSikyYYYYMM);
		
		// 取得できなかった場合は空文字にする
		if (useEndYmd == null || useEndYmd.isEmpty())
		{
			useEndYmd = JACStrConst.KARA_MOJI;
		}

		try
		{
			/** (1) 情報付加 */
			String prcGrpCd 	= JACStrConst.KARA_MOJI;
			String prcCourseCd 	= JACStrConst.KARA_MOJI;
			String prcSvcCd 	= JACStrConst.KARA_MOJI;
			setParam = new Object[] {
//OM-2016-0000545 MOD START 2016/03/11
//					nhkSikyYYYYMM,
//					// ANK-2248-00-00 MOD START
//					//inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.SVC_KEI_NO),
//					//super.systemCode,
//					//JACStrConst.SVC_SKBT_CD_NRML};
//					inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.SEIKY_KEI_NO),
//					inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.CATV_KNYSHA_CD),
//					super.onlineOpeDate};
					inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.CATV_KNYSHA_CD),
					super.onlineOpeDate,
					nhkSikyYYYYMM,
					inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.SEIKY_KEI_NO)
					};
//OM-2016-0000545 MOD END 2016/03/11
			// ANK-2248-00-00 MOD START
			//executeAC_T_SVKEI_CHIKUSEKI_AC_SELECT_003(setParam);
			executeAC_T_SVKEI_CHIKUSEKI_AC_SELECT_014(setParam);
			// ANK-2248-00-00 MOD END
			JBSbatCommonDBInterface keiRecord = db_AC_T_SVKEI_CHIKUSEKI.selectNext();
			
			if(keiRecord != null){
				String kakinStaYmd=keiRecord.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.CHRG_STAYMD);
				
				if ( useEndYmd.compareTo(kakinStaYmd) >= 0){
					
					while (keiRecord != null)
					{	
						kakinStaYmd=keiRecord.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.CHRG_STAYMD);
	
						if (useEndYmd.compareTo(kakinStaYmd)>=0){
	
							// 料金グループコード
							prcGrpCd 		= keiRecord.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.PRC_GRP_CD);
							// 料金コースコード
							prcCourseCd 	= keiRecord.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.PCRS_CD);
							// 料金サービスコード
							prcSvcCd 		= keiRecord.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.PRC_SVC_CD);
							
						}else
						{
							break;
							
						}
						keiRecord = db_AC_T_SVKEI_CHIKUSEKI.selectNext();
					}
					
					icjprcFlag=true;
	
				}else{
					while (keiRecord != null)
					{	
						String svcStaYmd=keiRecord.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.SVC_STAYMD);
						if (svcStaYmd != null && useEndYmd.compareTo(svcStaYmd) >= 0 ){
	
							// 料金グループコード
							prcGrpCd 		= keiRecord.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.PRC_GRP_CD);
							// 料金コースコード
							prcCourseCd 	= keiRecord.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.PCRS_CD);
							// 料金サービスコード
							prcSvcCd 		= keiRecord.getString(JBSbatAC_T_SVKEI_CHIKUSEKI.PRC_SVC_CD);
							
							icjprcFlag=true;
							break;
						}
							keiRecord = db_AC_T_SVKEI_CHIKUSEKI.selectNext();
					}
	
				}
			}else{
			}
			
			// (b) 料金項目コード
			String oytPrcKmkCd = JACStrConst.KARA_MOJI;
			
			// v25.00.00 ADD START
			// (c) 料金項目名称
			String oytPrcKmkNm = "";
			// v25.00.00 ADD END
			
			setParam = new Object[] {
					// v25.00.00 ADD START
					super.onlineOpeDate,
					super.onlineOpeDate,
					// v25.00.00 ADD END
					JACStrConst.SYS_CD_AC,
					workKinoSkbCd + inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.PAY_COURSE_CD),
					JACStrConst.CHSHT_CHG_CD_2,
					super.onlineOpeDate,
					super.onlineOpeDate,
					super.onlineOpeDate};
			executeCH_M_PRC_KMK_CS_CHGE_AC_SELECT_017(setParam);
			JBSbatCommonDBInterface prcSvcRecord = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
			if (prcSvcRecord != null)
			{
				// 出力料金項目コード
				oytPrcKmkCd = prcSvcRecord.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.OUT_PRC_KMK_CD);
				
				// v25.00.00 ADD START
				if(null != prcSvcRecord.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PRC_KMK_NM))
				{
					oytPrcKmkNm = prcSvcRecord.getString(JBSbatCH_M_PRC_KMK_OPUT_NM.PRC_KMK_NM);
				}
				// v25.00.00 ADD END
				
			}
			else
			{
				// 料金項目抽出変換テーブルから取得できない場合はエラーとする
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] { JBSbatCH_M_PRC_KMK_CS_CHGE.TABLE_NAME });
				
			}
			
			if(!icjprcFlag){
				
				//エラー情報を出力する（NHK視聴課金外部料金取込エラー情報（料金計算結果リスト））
				// v25.00.00 MOD START
				// outputItem.addOutMapList_2(setErrInfoFileMap(inMap,oytPrcKmkCd,nhkSikyYYYMM,nhkSikyYYMM ));
				outputItem.addOutMapList_2(setErrInfoFileMap(inMap,oytPrcKmkCd,nhkSikyYYYMM,nhkSikyYYMM,oytPrcKmkNm ));
				// v25.00.00 MOD END
				
				// サービス契約蓄積テーブルから取得できない場合は出力しない（暫定）
				return outputItem;
				
			}else{
	
				/** (2) 外部料金取込データ作成 */
				// 業務パラメータ管理.処理識別コード ⇒ 課金外部料金データ.処理識別コード
				outputMap.setString(JBSbatACIFM014.TRAN_SKBT_CD, tranSkbtCd);
	
				// NHK視聴課金明細.請求契約番号 ⇒ 課金外部料金データ.請求契約番号
				outputMap.setString(JBSbatACIFM014.SEIKY_KEI_NO, inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.SEIKY_KEI_NO));
	
				// ANK-2248-00-00 MOD START
				// 半角空白１０桁 ⇒ 課金外部料金データ.サービス契約番号
				//outputMap.setString(JBSbatACIFM014.SVC_KEI_NO, inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.SVC_KEI_NO));
				// IT1-2014-0000339 MOD START
				//outputMap.setString(JBSbatACIFM014.SVC_KEI_NO, JACStrConst.KARA_MOJI);
				outputMap.setString(JBSbatACIFM014.SVC_KEI_NO, JACStrConst.SVC_KEI_NO_SP);
				// IT1-2014-0000339 MOD END
	
				// 業務パラメータ管理.料金グループコード_eo光テレビ ⇒ 課金外部料金データ.料金グループコード
				//outputMap.setString(JBSbatACIFM014.PRC_GRP_CD, prcGrpCd);
				outputMap.setString(JBSbatACIFM014.PRC_GRP_CD, prcGrpCdEohtv);
				// ANK-2248-00-00 MOD END
	
				// IT1-2014-0000339 MOD START
				// 半角空白３桁 ⇒ 課金外部料金データ.料金コースコード
				//outputMap.setString(JBSbatACIFM014.PCRS_CD, prcCourseCd);
				outputMap.setString(JBSbatACIFM014.PCRS_CD, JACStrConst.PCRS_CD_SP);
				// IT1-2014-0000339 MOD END
	
				// サービス契約蓄積.料金サービスコード ⇒ 課金外部料金データ.料金サービスコード
				outputMap.setString(JBSbatACIFM014.PRC_SVC_CD, prcSvcCd);
	
				// 料金項目抽出変換.出力料金項目コード ⇒ 課金外部料金データ.料金項目コード
				outputMap.setString(JBSbatACIFM014.PRC_KMK_CD, oytPrcKmkCd);
	
				// 業務パラメータ管理.請求時期指定コード ⇒ 課金外部料金データ.請求時期指定
				outputMap.setString(JBSbatACIFM014.SEIKY_JIKI_SHITEI, seikyJikiShiteiCd);
	
				// 日付をData型へ変換
				DateFormat formatYYMM = new SimpleDateFormat("yyMM");
				Date sikyEndYm = formatYYMM.parse(nhkSikyYYMM);
				nhkSikyYYYMM = new SimpleDateFormat("yyyyMM").format(sikyEndYm);
				outputMap.setString(JBSbatACIFM014.SEIKY_YM, nhkSikyYYYMM);
	
				// NHK視聴課金明細.請求金額 ⇒ 課金外部料金データ.請求金額
				outputMap.setString(JBSbatACIFM014.SEIKY_AMNT, inMap.getBigDecimal(JBSbatAC_T_NHK_WTCHCRG_DTL.SIKY_AMNT));
	
				// 業務パラメータ．外部料金取込システム区分 ⇒ 課金外部料金データ.外部料金取込システム区分
				outputMap.setString(JBSbatACIFM014.OUT_PRC_TRKM_SYS_DIV, outPrcSysDiv);
	
				// 空文字 ⇒ 課金外部料金データ.サービス詳細識別番号
				outputMap.setString(JBSbatACIFM014.SVC_DTL_SKBT_NO, JACStrConst.KARA_MOJI);
	
				// 出力共通電文に入出力インターフェースを設定
				outputMap.setOutFlg(true);
				outputItem.addOutMapList(outputMap);
				
				// ANK-2248-00-00 ADD START
				// 契約Sへの請求サイクルの連携
				//「NHK団体一括支払サイクルコード受信」ファイル出力
				// NHK視聴課金情報の支払コースと請求オプションサービス契約のNHK一括団体支払サイクルコードが異なる場合出力します。
				super.logPrint.printDebugLog("契約Sへの請求サイクルの連携");
				super.logPrint.printDebugLog("CATV加入者コード：" + inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.CATV_KNYSHA_CD));
				super.logPrint.printDebugLog("支払コースコード：" + inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.PAY_COURSE_CD));
				
				setParam = new Object[] {
						inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.CATV_KNYSHA_CD),
						inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.PAY_COURSE_CD),
						super.onlineOpeDate};
				executeKK_T_SEIOPSVC_KEI_AC_SELECT_003(setParam);
				
				
				//OM-2015-0000046 MOD START
				
				//JBSbatCommonDBInterface seiopSvcRecord = db_KK_T_SEIOPSVC_KEI.selectNext();
				JBSbatCommonDBInterface seiopSvcRecord_info = db_KK_T_SEIOPSVC_KEI.selectNext();
				
				//NHK外部連携契約コードに紐づく請求オプションサービス契約番号の件数確認
				ArrayList<JBSbatCommonDBInterface> seiopSvcDataList = new ArrayList<JBSbatCommonDBInterface>();
				while(seiopSvcRecord_info != null)
				{
					seiopSvcDataList.add(seiopSvcRecord_info);
					seiopSvcRecord_info = db_KK_T_SEIOPSVC_KEI.selectNext();
				}
				
				super.logPrint.printDebugLog("seiopSvcDataList.size() --：" + seiopSvcDataList.size());
				
				//取得した請求オプションサービス契約番号の件数が複数件の場合　マイナーエラー
				if(seiopSvcDataList.size() > 1)
				{
					// EACB0560AI	%1%にて%2%件出力しました。
					String[] outCntMsg = {"請求オプションサービス契約番号の抽出", "複数"};
					super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0560AI, outCntMsg);
					throw new JBSbatBusinessError();
					
				}
				
				super.logPrint.printDebugLog("請求オプションサービス契約番号： 0件　または　1件");
				
				JBSbatCommonDBInterface seiopSvcRecord = null;
				if(seiopSvcDataList.size() == 1)
				{
					seiopSvcRecord = seiopSvcDataList.get(0);
				}
				//OM-2015-0000046 MOD END
				
				if (null != seiopSvcRecord)
				{
					// 請求オプションサービス契約番号
					String seiopSvcKeiNo = seiopSvcRecord.getString(JBSbatKK_T_SEIOPSVC_KEI.SEIOPSVC_KEI_NO);
					
					super.logPrint.printDebugLog("★契約Sへの請求サイクル連携あり★");
					super.logPrint.printDebugLog("請求オプションサービス契約番号：" + seiopSvcKeiNo);
					super.logPrint.printDebugLog("支払内容支払コース            ：" + inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.PAY_COURSE_CD));
					
					// 請求オプションサービス契約番号をキーにMapにファイル出力情報を格納します。
					ArrayList<Object> seiopSvcData = new ArrayList<Object>();
					seiopSvcData.add("\"" + seiopSvcKeiNo);												// 請求オプションサービス契約番号
					seiopSvcData.add(inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.PAY_COURSE_CD) + "\"");	// 支払内容支払コース
					
					seiopSvcKeiNoInfMap.put(seiopSvcKeiNo, seiopSvcData);
				}
				
				// 課金対象件数、課金金額合計の集計
				// 請求金額
				BigDecimal sikyAmnt = BigDecimal.ZERO;
				sikyAmnt = inMap.getBigDecimal(JBSbatAC_T_NHK_WTCHCRG_DTL.SIKY_AMNT);
				
				if (null != sikyAmnt)
				{
					super.logPrint.printDebugLog("請求金額：" + sikyAmnt);
					
					// 請求金額が０円以外の場合設定します。
					if (sikyAmnt.compareTo(BigDecimal.ZERO) > 0)
					{
						super.logPrint.printDebugLog("★課金対象件数、課金金額合計の集計実施★");
						
						// 課金対象件数のカウントアップ
						chrgTgCount = chrgTgCount + 1;
						
						// 課金金額合計の集計
						chrgAmntTotal = chrgAmntTotal.add(sikyAmnt);
					}
				}
				// ANK-2248-00-00 ADD END
	
				/** (3) NHK視聴課金明細更新 */
				setParam = new Object[] {super.onlineOpeDate};
				whereParam = new Object[] {
						(String)inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.CATV_KNYSHA_CD),
						(String)inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.NHK_SIKY_YM)};
				executeAC_T_NHK_WTCHCRG_DTL_PKUPDATE(setParam, whereParam);
				super.logPrint.printDebugLog("execute_END");
				return outputItem;
	
				/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
			}
		}
		catch(Exception ex)
		{
			// ロールバック実行
			this.commonItem.getConnection().rollback();

			//  エラー情報更新
			// NHK視聴課金処理状況更新
			setParam = new Object[] {MAX_YMDHMS};
			whereParam = new Object[] {nhkWatchChrgTrnNo};
			executeAC_T_NHK_WTCHCRG_TJK_PKUPDATE(setParam, whereParam);

			//  更新エラー情報を取得(初期処理で取得済)
			//  処理結果コード更新
			// ディレイド処理依頼更新
			JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JACStrConst.DLYD_TRN_RSLT_CD_SYS_ERR, null);

			// コミット実行
			this.commonItem.getConnection().commit();
			
			// ANK-2248-00-00 ADD START
			// 「NHK団体一括支払サイクルコード受信」ファイル出力を行います。
			// ファイル名を取得
			String freeItem = commonItem.getFreeItem();
			String[] files = freeItem.split(JACStrConst.FREE_DIV);

			// ファイルを取得
			JBSbatOutputFileUtil dataFile = new JBSbatOutputFileUtil(files[1]);
			String dataFileDefName = JBSbatAplConst.getAplConstValue(PRM_OTD) + files[0];
			JBSbatDefFileUtil dataFileDef = new JBSbatDefFileUtil(dataFileDefName, dataFile);

			// 「NHK団体一括支払サイクルコード受信」ファイル出力
			ArrayList<ArrayList<Object>> seiopSvcKeiNoInfList = new ArrayList<ArrayList<Object>>(seiopSvcKeiNoInfMap.values());
			this.createSeiopSvcKeiNoInfFile(files[1], seiopSvcKeiNoInfList, dataFile.getEncode(), JACBatCommon.chgKaigyo(dataFile.getLine()), dataFileDef.getDelimiter());
			// ANK-2248-00-00 ADD END

			// メッセージ
			throw ex;

		}
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		try
		{
			/** (1) データ更新 */
			// (a) NHK視聴課金処理状況更新
			// 更新条件取得
			String nhkWatchChrgTrnNo = JACStrConst.KARA_MOJI;
			String shoriIraiNo = JACStrConst.KARA_MOJI;
			
			// ディレイド処理依頼のディレイド処理依頼番号の取得
			List<HashMap<String, Object>> infoNhkList = new ArrayList<HashMap<String, Object>>();
			infoNhkList = JCCbatShoriIraiUtil.getShoriIraiInfo(commonItem, FILE_GET_JOBID);
			
			// ディレイド処理依頼が取得できた場合のみ処理を続行する
			if (infoNhkList != null)
			{
				// NHK視聴課金処理からデータを取得
				executeAC_T_NHK_WTCHCRG_TJK_AC_SELECT_001();
				JBSbatCommonDBInterface nhkTjkRecord = db_AC_T_NHK_WTCHCRG_TJK.selectNext();
				
				// データの取得ができた場合のみ更新処理を行う
				if (nhkTjkRecord != null)
				{
					// NHK視聴課金処理番号
					nhkWatchChrgTrnNo = nhkTjkRecord.getString(JBSbatAC_T_NHK_WTCHCRG_TJK.NHK_WTCHCRG_TJK_NO);
					// ディレイド処理依頼番号
					shoriIraiNo = nhkTjkRecord.getString(JBSbatAC_T_NHK_WTCHCRG_TJK.DLYD_TRN_REQ_NO);
					
					// 外部料金ファイル作成年月日時分秒
					String outPrcFileSakseiYmdHms = JBSbatDateUtil.getSystemDateTimeStamp();
					
					// ANK-2248-00-00 ADD START
					// 課金対象件数、課金金額合計の集計
					// NHK視聴課金処理状況TBLの各項目にNHK視聴課金外部料金取込データを作成したレコードのうち、請求金額が０円以外の件数、金額を加算します。
					// 課金対象件数
					long chrgTgCnt = 0;
					chrgTgCnt = Long.parseLong(JBSbatStringUtil.trim(nhkTjkRecord.getString(JBSbatAC_T_NHK_WTCHCRG_TJK.CHRG_TG_CNT)));
					chrgTgCnt = chrgTgCnt + chrgTgCount;
					
					// 課金金額合計
					BigDecimal chrgAmntGk = BigDecimal.ZERO;
					chrgAmntGk = new BigDecimal((JBSbatStringUtil.trim(nhkTjkRecord.getString(JBSbatAC_T_NHK_WTCHCRG_TJK.CHRG_AMNT_GK))));
					chrgAmntGk = chrgAmntGk.add(chrgAmntTotal);
					// ANK-2248-00-00 ADD END
					
					// 更新実施
					// ANK-2248-00-00 MOD START
					//Object[] nhkParam = new Object[] {outPrcFileSakseiYmdHms};
					//Object[] whereParam = new Object[] {nhkWatchChrgTrnNo};
					//executeAC_T_NHK_WTCHCRG_TJK_PKUPDATE(nhkParam, whereParam);
					Object[] nhkParam = new Object[] {outPrcFileSakseiYmdHms, chrgTgCnt, chrgAmntGk};
					Object[] whereParam = new Object[] {nhkWatchChrgTrnNo};
					executeAC_T_NHK_WTCHCRG_TJK_PKUPDATE_NORMAL(nhkParam, whereParam);
					// ANK-2248-00-00 MOD END
					
					// (b) ディレイド処理依頼更新
					shoriIraiUpd(shoriIraiNo);
					
					// ANK-2248-00-00 ADD START
					// 「NHK団体一括支払サイクルコード受信」ファイル出力を行います。
					// ファイル名を取得
					String freeItem = commonItem.getFreeItem();
					String[] files = freeItem.split(JACStrConst.FREE_DIV);

					// ファイルを取得
					JBSbatOutputFileUtil dataFile = new JBSbatOutputFileUtil(files[1]);
					String dataFileDefName = JBSbatAplConst.getAplConstValue(PRM_OTD) + files[0];
					JBSbatDefFileUtil dataFileDef = new JBSbatDefFileUtil(dataFileDefName, dataFile);

					// 「NHK団体一括支払サイクルコード受信」ファイル出力
					ArrayList<ArrayList<Object>> seiopSvcKeiNoInfList = new ArrayList<ArrayList<Object>>(seiopSvcKeiNoInfMap.values());
					this.createSeiopSvcKeiNoInfFile(files[1], seiopSvcKeiNoInfList, dataFile.getEncode(), JACBatCommon.chgKaigyo(dataFile.getLine()), dataFileDef.getDelimiter());
					// ANK-2248-00-00 ADD END
				}
			}
		}
		catch(Exception ex)
		{
			// ロールバック実行
			this.commonItem.getConnection().rollback();

			Object[] setParam = null;
			Object[] whereParam = null;
			
			//  エラー情報更新
			// NHK視聴課金処理状況更新
			setParam = new Object[] {MAX_YMDHMS};
			whereParam = new Object[] {nhkWatchChrgTrnNo};
			executeAC_T_NHK_WTCHCRG_TJK_PKUPDATE(setParam, whereParam);

			//  更新エラー情報を取得(初期処理で取得済)
			//  処理結果コード更新
			// ディレイド処理依頼更新
			JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JACStrConst.DLYD_TRN_RSLT_CD_SYS_ERR, null);

			// コミット実行
			this.commonItem.getConnection().commit();
			
			// ANK-2248-00-00 ADD START
			// 「NHK団体一括支払サイクルコード受信」ファイル出力を行います。
			// ファイル名を取得
			String freeItem = commonItem.getFreeItem();
			String[] files = freeItem.split(JACStrConst.FREE_DIV);

			// ファイルを取得
			JBSbatOutputFileUtil dataFile = new JBSbatOutputFileUtil(files[1]);
			String dataFileDefName = JBSbatAplConst.getAplConstValue(PRM_OTD) + files[0];
			JBSbatDefFileUtil dataFileDef = new JBSbatDefFileUtil(dataFileDefName, dataFile);

			// 「NHK団体一括支払サイクルコード受信」ファイル出力
			ArrayList<ArrayList<Object>> seiopSvcKeiNoInfList = new ArrayList<ArrayList<Object>>(seiopSvcKeiNoInfMap.values());
			this.createSeiopSvcKeiNoInfFile(files[1], seiopSvcKeiNoInfList, dataFile.getEncode(), JACBatCommon.chgKaigyo(dataFile.getLine()), dataFileDef.getDelimiter());
			// ANK-2248-00-00 ADD END

			// メッセージ
			throw ex;

		}
		
		
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_AC_T_NHK_WTCHCRG_TJK.close();
		db_AC_T_NHK_WTCHCRG_DTL.close();
		db_CH_M_PRC_KMK_CS_CHGE.close();
		db_AC_T_SVKEI_CHIKUSEKI.close();
		db_ZM_M_CD_NM_KANRI.close();
		db_CH_M_PRC_SCHDL_TEIGI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * ディレイド処理依頼を更新します。
	 * 
	 * @param shoriIraiNo 処理依頼番号
	 * @throws Exception
	 */
	private void shoriIraiUpd(String shoriIraiNo)throws Exception
	{
		
		// ＮＨＫ視聴課金明細のエラー件数を取得
		Object[] whereParam = new Object[] {JACStrConst.NHK_ERR_CD_NORMAL};
		executeAC_T_NHK_WTCHCRG_DTL_AC_SELECT_004(whereParam);
		JBSbatCommonDBInterface dbMap = db_AC_T_NHK_WTCHCRG_DTL.selectNext();

		// エラー件数＝０の場合
		if (dbMap != null && dbMap.getBigDecimal("ERR_RECODE_CNT").equals(BigDecimal.ZERO))
		{
			// ディレイド処理依頼更新＜更新＞
			JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, "1", null);
		}else{
			// ディレイド処理依頼更新＜エラー＞
			JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, "2", null);
		}
	}


	/**
	 * エラー情報の出力項目を設定する
	 * @param inMap		入力電文
	 * @param errMsg	エラーコード
	 * @return	JBSbatServiceInterfaceMap	出力電文
	 * @throws Exception
	 */
	// v25.00.00 MOD START
	// private JBSbatServiceInterfaceMap setErrInfoFileMap(JBSbatServiceInterfaceMap inMap, String oytPrcKmkCd,String nhkSikyYYYMM,String nhkSikyYYMM) throws Exception
	private JBSbatServiceInterfaceMap setErrInfoFileMap(JBSbatServiceInterfaceMap inMap, String oytPrcKmkCd,String nhkSikyYYYMM,String nhkSikyYYMM,String oytPrcKmkNm ) throws Exception
	// v25.00.00 MOD END
	{
		JBSbatServiceInterfaceMap retMap = new JBSbatServiceInterfaceMap();
		
		//エラーコード
		retMap.set(JBSbatACIFM097.RSLT_NYO_CD, ichjikinErrCd[0]);

		//エラー内容
		retMap.set(JBSbatACIFM097.RSLT_NYO, ichjikinErr[0]);

		//処理日
		retMap.set(JBSbatACIFM097.TRN_YMD, JPCUtilCommon.formatDate(super.opeDate));

		//請求先番号
		retMap.set(JBSbatACIFM097.SEIKY_KEI_NO, inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.SEIKY_KEI_NO));

		//請求先カナ名
		retMap.set(JBSbatACIFM097.SIKYS_KANA, JACStrConst.KARA_MOJI);

		//サービス契約番号
		retMap.set(JBSbatACIFM097.SVC_KEI_NO, inMap.getString(JBSbatAC_T_NHK_WTCHCRG_DTL.SVC_KEI_NO));

		//サービス詳細識別番号
		retMap.set(JBSbatACIFM097.SVC_DTL_SKBT_NO, JACStrConst.KARA_MOJI);

		//請求年月
		// 日付をData型へ変換
		DateFormat formatYYMM = new SimpleDateFormat("yyMM");
		Date sikyEndYm = formatYYMM.parse(nhkSikyYYMM);
		nhkSikyYYYMM = new SimpleDateFormat("yyyyMM").format(sikyEndYm);
		retMap.setString(JBSbatACIFM097.SEIKY_YM, nhkSikyYYYMM);
		

		//料金コースコード
		retMap.set(JBSbatACIFM097.PCRS_CD, JACStrConst.KARA_MOJI);

		//料金サービスコード
		retMap.set(JBSbatACIFM097.PRC_SVC_CD, JACStrConst.KARA_MOJI);

		//料金項目コード
		retMap.set(JBSbatACIFM097.PRC_KMK_CD, oytPrcKmkCd);

		//料金内訳明細
		// v25.00.00 MOD START
		// retMap.set(JBSbatACIFM097.PRC_UW_NM, JACStrConst.KARA_MOJI);
		retMap.set(JBSbatACIFM097.PRC_UW_NM, oytPrcKmkNm);
		// v25.00.00 MOD END

		//請求金額
		retMap.set(JBSbatACIFM097.SIKY_AMNT, inMap.getBigDecimal(JBSbatAC_T_NHK_WTCHCRG_DTL.SIKY_AMNT));

		//投入区分
		retMap.set(JBSbatACIFM097.TONYU_DIV, JACStrConst.KARA_MOJI);

		retMap.setOutFlg(true);

		return retMap;
	}


	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	外部料金ファイル作成年月日時分秒				OUT_PRC_FILE_SAKSEI_DTM
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	NHK_WTCHCRG_TJK_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_NHK_WTCHCRG_TJK_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue(JBSbatAC_T_NHK_WTCHCRG_TJK.OUT_PRC_FILE_SAKSEI_DTM, setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue(JBSbatAC_T_NHK_WTCHCRG_TJK.NHK_WTCHCRG_TJK_NO, whereParam[0]);

		// DBアクセスを実行します
		db_AC_T_NHK_WTCHCRG_TJK.updateByPrimaryKeys(whereMap, setMap);
	}
	
	// ANK-2248-00-00 ADD START
	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	外部料金ファイル作成年月日時分秒				OUT_PRC_FILE_SAKSEI_DTM
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	課金対象件数				CHRG_TG_CNT
	 *		 	課金合計金額				CHRG_AMNT_GK
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	NHK_WTCHCRG_TJK_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_NHK_WTCHCRG_TJK_PKUPDATE_NORMAL(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue(JBSbatAC_T_NHK_WTCHCRG_TJK.OUT_PRC_FILE_SAKSEI_DTM, setParam[0]);
		setMap.setValue(JBSbatAC_T_NHK_WTCHCRG_TJK.CHRG_TG_CNT, setParam[1]);
		setMap.setValue(JBSbatAC_T_NHK_WTCHCRG_TJK.CHRG_AMNT_GK, setParam[2]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue(JBSbatAC_T_NHK_WTCHCRG_TJK.NHK_WTCHCRG_TJK_NO, whereParam[0]);

		// DBアクセスを実行します
		db_AC_T_NHK_WTCHCRG_TJK.updateByPrimaryKeys(whereMap, setMap);
	}
	// ANK-2248-00-00 ADD END

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	料金計算取込年月日				PRC_CALC_TRKM_YMD
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	CATV_KNYSHA_CD
	 *		 	NHK_SIKY_YM
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_NHK_WTCHCRG_DTL_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue(JBSbatAC_T_NHK_WTCHCRG_DTL.PRC_CALC_TRKM_YMD, setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue(JBSbatAC_T_NHK_WTCHCRG_DTL.CATV_KNYSHA_CD, whereParam[0]);
		whereMap.setValue(JBSbatAC_T_NHK_WTCHCRG_DTL.NHK_SIKY_YM, whereParam[1]);

		// DBアクセスを実行します
		db_AC_T_NHK_WTCHCRG_DTL.updateByPrimaryKeys(whereMap, setMap);
	}

	/**
	 * SQLKEY(AC_SELECT_017)で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_AC_SELECT_017(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		// v25.00.00 MOD START
		
//		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());
//		paramList.setValue(param[5].toString());
		
		paramList.setValue(prcGrpCdEohtv);
		paramList.setValue(JACStrConst.PCRS_CD_SP);
		paramList.setValue(prcSvcCd_Nhk);
		paramList.setValue(JACStrConst.PRC_KMK_NM_SBT_CD_PRC_KMK_NM_RYAK);
		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());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());
		
		// v25.00.00 MOD END

		// DBアクセスを実行します
		db_CH_M_PRC_KMK_CS_CHGE.selectBySqlDefine(paramList, CH_M_PRC_KMK_CS_CHGE_AC_SELECT_017);
	}

	// ANK-2248-00-00 DEL START
	/**
	 * SQLKEY(AC_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	請求年月
	 *		 	サービス番号
	 *		 	イベントコード
	 *		 	請求年月
	 *		 	システムコード
	 *		 	料金サービス識別コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
/*	private void executeAC_T_SVKEI_CHIKUSEKI_AC_SELECT_003(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());
		

		// DBアクセスを実行します
		db_AC_T_SVKEI_CHIKUSEKI.selectBySqlDefine(paramList, AC_T_SVKEI_CHIKUSEKI_AC_SELECT_003);
	}
*/
	// ANK-2248-00-00 DEL END
	
	// ANK-2248-00-00 ADD START
	/**
	 * SQLKEY(AC_SELECT_014)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	請求年月
	 *		 	請求契約番号
	 *		 	NHK外部連携契約コード
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_SVKEI_CHIKUSEKI_AC_SELECT_014(Object[] param) throws Exception
	{
		super.logPrint.printDebugLog("executeAC_T_SVKEI_CHIKUSEKI_AC_SELECT_014_START");
		
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		
		super.logPrint.printDebugLog("param[0]：" + param[0].toString());
		super.logPrint.printDebugLog("param[1]：" + param[1].toString());
		super.logPrint.printDebugLog("param[2]：" + param[2].toString());
		super.logPrint.printDebugLog("param[3]：" + param[3].toString());
		
		db_AC_T_SVKEI_CHIKUSEKI.selectBySqlDefine(paramList, AC_T_SVKEI_CHIKUSEKI_AC_SELECT_014);
		super.logPrint.printDebugLog("executeAC_T_SVKEI_CHIKUSEKI_AC_SELECT_014_END");
	}
	// ANK-2248-00-00 ADD END

	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * </pre>
	 * <p>
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_NHK_WTCHCRG_TJK_AC_SELECT_001() throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();

		// DBアクセスを実行します
		db_AC_T_NHK_WTCHCRG_TJK.selectBySqlDefine(paramList, AC_T_NHK_CHRG_JOKYO_AC_SELECT_001);
	}

	/**
	 * SQLKEY(AC_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	NHKエラーコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_NHK_WTCHCRG_DTL_AC_SELECT_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_AC_T_NHK_WTCHCRG_DTL.selectBySqlDefine(paramList, AC_T_NHK_WTCHCRG_DTL_AC_SELECT_004);
	}
	
	// ANK-2248-00-00 ADD START
	/**
	 * SQLKEY(AC_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	NHK外部連携契約コード
	 *		 	NHK団体一括支払サイクルコード
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SEIOPSVC_KEI_AC_SELECT_003(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_KK_T_SEIOPSVC_KEI.selectBySqlDefine(paramList, KK_T_SEIOPSVC_KEI_AC_SELECT_003);
	}
	// ANK-2248-00-00 ADD END
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * コード名称管理テーブルからコード区分名、コード区分略称を取得する
	 * @param cdSbtCd	コード種別コード
	 * @param cdDiv	コード区分
	 * @return	String[]	0=コード区分名、1=コード区分略称
	 * @throws Exception
	 */
	private String[] getCdNmKanri(String cdSbtCd, String cdDiv) throws Exception
	{
		executeZM_M_CD_NM_KANRI_AC_SELECT_001(new Object[] {cdSbtCd, cdDiv, super.opeDate, super.opeDate});
		JBSbatCommonDBInterface record = db_ZM_M_CD_NM_KANRI.selectNext();
		if (record != null)
		{
			return new String[] {record.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM), 
					record.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_ALI)};
		}
		else
		{
			// コード名称管理テーブルから取得できない場合はエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE,
					new String[] { JBSbatZM_M_CD_NM_KANRI.TABLE_NAME });
		}
	}
	
	private void executeZM_M_CD_NM_KANRI_AC_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());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_AC_SELECT_001);
	}

	/**
	 * SQLKEY(AC_SELECT_012)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			イベントコード
	 *		 
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_M_PRC_SCHDL_TEIGI_AC_SELECT_012(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		
		// DBアクセスを実行します
		db_CH_M_PRC_SCHDL_TEIGI.selectBySqlDefine(paramList, CH_M_PRC_SCHDL_TEIGI_AC_SELECT_012);
	}
	
	/**
	 * 利用終了日を取得
	 * 
	 * @throws Exception
	 */
	private void getendYmd() throws Exception
	{
		// SQL実行
		executeCH_M_PRC_SCHDL_TEIGI_AC_SELECT_012(new Object[] {JACStrConst.EVENT_CD_USE_ENDYMD });

		// レコードの取得
		JBSbatCommonDBInterface record = db_CH_M_PRC_SCHDL_TEIGI.selectNext();
		
		// 取得した全件をマップに保存
		while(record != null)
		{
			String ymd = record.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.EVENT_YMD);
			String seikyYm = record.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.SEIKY_YM);
			
			endYmd.put(seikyYm, ymd);
			
			record = db_CH_M_PRC_SCHDL_TEIGI.selectNext();
		}
		
		// レコードの存在チェック
		if (endYmd == null)
		{
			// 業務例外
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] { JBSbatCH_M_PRC_SCHDL_TEIGI.TABLE_NAME });
		}
	}
	
	// ANK-2248-00-00 ADD START
	/**
	 * ファイル出力
	 * 
	 * @param file ファイル名
	 * @param arrayList 出力データを格納した配列
	 * @param encode エンコード
	 * @param line 改行コード
	 * @param div 区切文字
	 * @throws Exception
	 */
	private void createSeiopSvcKeiNoInfFile(String file, ArrayList<ArrayList<Object>> arrayList, String encode, String line, String div) throws Exception
	{
		// encodeの形式がSHIFT-JISの場合、MS932に変換
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(encode.toUpperCase()))
		{
			encode = JACStrConst.ENCODE_MS932;
		}
		
		// ファイルの生成
		JBSbatBusinessFileUtil fileUtil = JCCBatCommon.createBusinessFileUtil(file, encode, line, div);
		Iterator<ArrayList<Object>> it = arrayList.iterator();
		// データ数分繰り返し
		while (it.hasNext())
		{
			// データを取得
			ArrayList<Object> data = it.next();
			// ファイルに書き込み
			JCCBatCommon.printBusinessFileUtil(fileUtil, data);
		}
		// ファイルを閉じる
		JCCBatCommon.closeBusinessFileUtil(fileUtil);
	}
	// ANK-2248-00-00 ADD END
}
