/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：UQChrgLogInfTrkm
*	ソースファイル名	：UQChrgLogInfTrkm.java
*	作成者				：富士通　
*	作成日				：2011年06月09日
*＜機能概要＞
*　ＵＱ課金ログ情報取込部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00		2011/06/09   富士通		新規作成
*	v3.00		2012/08/17   FJ）岡田	【TG1-2012-0000123】サービス契約内訳番号未設定対応
*	v3.01		2012/09/14   FJ）岡田	【TG1-2012-0000170】初回CDR発生情報内容不備対応
*	v4.00		2013/04/05   FJ) 小柴	【IKK-2013-0000783】文字化け対策のため、エンコード形式の変更
*	v5.00		2013/07/06   FJ) 前田   【TG1-2013-0000656】レコードチェックの条件変更
*	v5.01		2013/07/19   FJ) 狭間   【TG1-2013-0000710】eoモバイル明細テーブル登録時に料金サービスコードを設定するよう修正
*	v5.02		2013/07/09   FJ) 大戸	【TG1-2013-0000662】マスタ参照基準日対応
*	v15.00.00	2015/08/06   FJ) 黒田	【OM-2015-0001872】バッチ処理エラー対応
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import eo.business.common.JACbatParamUtil;
import eo.business.common.JACBatCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatACIFE012;
import eo.business.util.file.JBSbatACIFM023;
import eo.business.util.file.JBSbatKKIFI030;
import eo.business.util.table.JBSbatAC_M_JURYOPRC;
import eo.business.util.table.JBSbatAC_T_CHRG_JSVKEI_CKS;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_CS_CHGE;
import eo.business.util.table.JBSbatCH_M_PRC_SCHDL_TEIGI;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
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.JBSbatCheckUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACUQChrgLogInfTrkm extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(料金スケジュール定義)*/
	private static final String D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI = "CH_M_PRC_SCHDL_TEIGI";

	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/** テーブル(料金項目抽出変換)*/
	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_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(ＵＱ取込)*/
	private static final String D_TBL_NAME_AC_T_UQ_TRKM = "AC_T_UQ_TRKM";

	/** テーブル(課金対象従量サービス契約蓄積)*/
	private static final String D_TBL_NAME_AC_T_CHRG_JSVKEI_CKS = "AC_T_CHRG_JSVKEI_CKS";

	/** テーブル(従量料金)*/
	private static final String D_TBL_NAME_AC_M_JURYOPRC = "AC_M_JURYOPRC";

	/** テーブル(ｅｏモバイル明細)*/
	private static final String D_TBL_NAME_AC_T_EOMOBA_DTL = "AC_T_EOMOBA_DTL";
	
	/** SQL定義キー(AC_SELECT_003)*/
	private static final String CH_M_PRC_SCHDL_TEIGI_AC_SELECT_003 = "AC_SELECT_003";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String ZM_M_WORK_PARAM_KNRI_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_SELECT_002)*/
	private static final String CH_M_PRC_SCHDL_TEIGI_AC_SELECT_002 = "AC_SELECT_002";

	/** SQL定義キー(AC_SELECT_004)*/
	private static final String CH_M_PRC_KMK_CS_CHGE_AC_SELECT_004 = "AC_SELECT_004";

	/** SQL定義キー(AC_SELECT_018)*/
	private static final String KK_T_SVC_KEI_AC_SELECT_018 = "AC_SELECT_018";

	/** SQL定義キー(AC_SELECT_002)*/
	private static final String AC_T_UQ_TRKM_AC_SELECT_002 = "AC_SELECT_002";

	/** SQL定義キー(AC_SELECT_003)*/
	private static final String AC_T_UQ_TRKM_AC_SELECT_003 = "AC_SELECT_003";

	/** SQL定義キー(AC_SELECT_002)*/
	private static final String AC_T_CHRG_JSVKEI_CKS_AC_SELECT_002 = "AC_SELECT_002";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String AC_M_JURYOPRC_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_DELETE_001)*/
	private static final String AC_T_UQ_TRKM_AC_DELETE_001 = "AC_DELETE_001";
	
	/** SQL定義キー(AC_SELECT_004)*/
	private static final String AC_T_EOMOBA_DTL_AC_SELECT_004 = "AC_SELECT_004";

	/** テーブルアクセスクラス(料金スケジュール定義)*/
	private JBSbatSQLAccess db_CH_M_PRC_SCHDL_TEIGI = null;

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** テーブルアクセスクラス(料金項目抽出変換)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_CS_CHGE = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(ＵＱ取込)*/
	private JBSbatSQLAccess db_AC_T_UQ_TRKM = null;

	/** テーブルアクセスクラス(課金対象従量サービス契約蓄積)*/
	private JBSbatSQLAccess db_AC_T_CHRG_JSVKEI_CKS = null;

	/** テーブルアクセスクラス(従量料金)*/
	private JBSbatSQLAccess db_AC_M_JURYOPRC = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 空文字 */
	private static final String KARA_MOJI = "";

	/** ファイル定義 */
	private static final String PRM_OTD = "OTD";

	/** 埋め込み文字列を格納する配列 */
	private HashMap<String, String>itemValueMap = null;

	/** 請求契約番号情報(当日) */
	private HashMap<String, ArrayList<Object>> sikyKeiNoInfMap = null;

	/** 請求年月蓄積Map K:基準日 V:請求年月 */
	private Map<String, String> seikyYmMap = new HashMap<String, String>();
	
	/** 前回のレコードを保持する変数 */
	private JBSbatServiceInterfaceMap znkiInMap = null;

	/** 請求年月 */
	private String seikyYm = null;

	/** UQ課金ログ情報 */
	private String uqChrgLogInf = null;

	/** 当日レコード重複エラー */
	private String msgDblTjtRecErr = null;

	/** 課金開始終了相関エラー */
	private String msgChrgSokanErr = null;

	/** 月次料金計算済エラー */
	private String msgMonPrcCalcErr = null;

	/** サービス契約番号エラー */
	private String msgSvcKeiNoErr = null;

	/** 累積レコード重複エラー */
	private String msgDblRuiRecErr = null;

	/** 業務パラメータGigawordsを取得 */
	private BigDecimal gigaWords = null;
	
	/** 料金計算月 */
	private String prcCalcYm = null;
	
	/** 退避．従量料金情報マップ*/
	private HashMap<String, JBSbatCommonDBInterface> tihJuryoPrcMap = null;
	
	/** 初回課金情報出力制御マップ */
	private HashMap<String, String> chrgCtrlMap = null;
	
	/** テーブルアクセスクラス(ｅｏモバイル明細)*/
	private JBSbatSQLAccess db_AC_T_EOMOBA_DTL = null;
	
	/** エラーカウント */
	private int errCnt = 0;

// OM-2015-0001872 ADD START
	/** インフォメーションカウント */
	private int infoCnt = 0;

	/** インフォメーションフラグ */
	private boolean infoFlg = false;
// OM-2015-0001872 ADD END

//20130709 追加　FJ)OHTO　START
	/** 請求年月 */
	private String wk_SkyuYM 	= null;

	/** 請求年月初日 */
	private String wk_Str 	= null;

	/** 請求年月末日 */
	private String wk_End 	= null;
//20130709 追加　FJ)OHTO　END
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CH_M_PRC_SCHDL_TEIGI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI);
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		db_CH_M_PRC_KMK_CS_CHGE = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_KMK_CS_CHGE);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_AC_T_UQ_TRKM = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_T_UQ_TRKM);
		db_AC_T_CHRG_JSVKEI_CKS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_T_CHRG_JSVKEI_CKS);
		db_AC_M_JURYOPRC = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_M_JURYOPRC);
		db_AC_T_EOMOBA_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_T_EOMOBA_DTL);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		
		// 請求年月蓄積Map初期化
		seikyYmMap = new HashMap<String, String>();

		// 埋め込み文字の初期化
		itemValueMap = new HashMap<String, String>();
		itemValueMap.put("TXT-ACIFE012-INF1.TUSHIN_STAYMD", "ＵＱ課金ログ情報受信.通信開始年月日");
		itemValueMap.put("TXT-ACIFE012-INF1.TUSHIN_STA_TIME", "ＵＱ課金ログ情報受信.通信開始時刻");
		itemValueMap.put("TXT-ACIFE012-INF1.CHRG_STAYMD", "ＵＱ課金ログ情報受信.課金開始年月日");
		itemValueMap.put("TXT-ACIFE012-INF1.CHRG_STA_TIM", "ＵＱ課金ログ情報受信.課金開始時刻");
		itemValueMap.put("TXT-ACIFE012-INF1.CHRG_ENDYMD", "ＵＱ課金ログ情報受信.課金終了年月日");
		itemValueMap.put("TXT-ACIFE012-INF1.CHRG_END_TIM", "ＵＱ課金ログ情報受信.課金終了時刻");
		itemValueMap.put("TXT-ACIFE012-INF1.ACCT_INPUT_OCTETS", "ＵＱ課金ログ情報受信.Ａ−ＩＮＰＵＴ−Ｏｃｔｅｔｓ");
		itemValueMap.put("TXT-ACIFE012-INF1.ACCT_OUTPUT_OCTETS", "ＵＱ課金ログ情報受信.Ａ−Ｏｕｔｐｕｔ−Ｏｃｔｅｔｓ");
		itemValueMap.put("TXT-ACIFE012-INF1.ACCT_INPUT_GGW", "ＵＱ課金ログ情報受信.Ａ−Ｉｎｐｕｔ−Ｇｇｗ");
		itemValueMap.put("TXT-ACIFE012-INF1.ACCT_OUTPUT_GGW", "ＵＱ課金ログ情報受信.Ａ−Ｏｕｔｐｕｔ−Ｇｇｗ");
		itemValueMap.put("TXT-ACIFE012-INF1.CUST_CD", "ＵＱ課金ログ情報受信.お客様コード（ＣＵＩ）");

		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		// ＵＱ課金ログ情報を取得
		uqChrgLogInf = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_UQ_CHRG_LG_IF);
		
		paramUtil.close();

		// エラーメッセージを取得
		msgDblTjtRecErr = getWorkParamVal(JACStrConst.WKPARA_AC_MSG_DBL_TJTRECERR);
		msgChrgSokanErr = getWorkParamVal(JACStrConst.WKPARA_AC_MSG_CHRG_SOKANERR);
		msgMonPrcCalcErr = getWorkParamVal(JACStrConst.WKPARA_AC_MSG_MONPRCCALCERR);
		msgSvcKeiNoErr = getWorkParamVal(JACStrConst.WKPARA_AC_MSG_SVCKEINOERR);
		msgDblRuiRecErr = getWorkParamVal(JACStrConst.WKPARA_AC_MSG_DBL_RUIRECERR);

		// 料金計算月を取得
		prcCalcYm = getSeikyYm();
		
		// gigawordsを取得
		gigaWords = new BigDecimal(getWorkParamVal(JACStrConst.WKPARA_AC_GIGAWORDS));

		// 請求契約番号情報(当日)用リストの初期化
		sikyKeiNoInfMap = new HashMap<String, ArrayList<Object>>();
		
		// 初回課金情報出力制御マップの初期化
		chrgCtrlMap = new HashMap<String, String>();

//20130709 追加　FJ)OHTO　START
		// 請求年月取得
		JACbatSchdlUtil schdUtil = new JACbatSchdlUtil(commonItem);
		try
		{
			// 料金スケジュール定義アクセス部品を使用する。
			this.wk_SkyuYM = schdUtil.getBillDate(super.opeDate, JACStrConst.EVENT_CD_RYOKIN_KEISAN_YMD);
			
			// 月初日、締め日　←　JACbatSchdlUtil.getUseStrEnd(請求年月, イベントコード("01"（利用開始日））, イベントコード（"02"（利用終了日））)
			String[] rtn = schdUtil.getUseStrEnd(this.wk_SkyuYM, JACStrConst.EVENT_CD_USE_STAYMD, JACStrConst.EVENT_CD_USE_ENDYMD);
			this.wk_Str = rtn[0];
			this.wk_End = rtn[1];
		}
		finally
		{
			// クローズ
			schdUtil.close();
		}
//20130709 追加　FJ)OHTO　END
		
		// 従量料金の取得
		makeJuryoPrcInfoMap();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		
		// 出力共通電文を生成
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		// 課金開始年月日
		String chrgStaYmd = inMap.getString(JBSbatACIFE012.CHRG_STAYMD);
		// 課金開始時分秒
		String chrgStaTim = inMap.getString(JBSbatACIFE012.CHRG_STA_TIM);
		// 前回の課金開始時分秒
		String znkiChrgEndTim = KARA_MOJI;
		String znkiCustCd = KARA_MOJI;
		String znkiChrgStaYmd = KARA_MOJI;
		// 課金終了年月日
		String chrgEndYmd = inMap.getString(JBSbatACIFE012.CHRG_ENDYMD);
		
		
		if (znkiInMap != null)
		{
			znkiChrgEndTim = znkiInMap.getString(JBSbatACIFE012.CHRG_END_TIM);
			znkiCustCd = znkiInMap.getString(JBSbatACIFE012.CUST_CD);
			znkiChrgStaYmd = znkiInMap.getString(JBSbatACIFE012.CHRG_STAYMD);
		}
		// お客様コード
		String custCd = inMap.getString(JBSbatACIFE012.CUST_CD);

		// 日時のフィールドでエラー
		// レイアウトチェック
		if (!isSingleCheckACIFE012_INF1(inMap.getMap(), itemValueMap))
		{
			// エラーの場合

			// エラー処理
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0500CE);
		}

		// 課金開始年月日時分秒を取得
		String staDtm = chrgStaYmd + chrgStaTim;
		// 課金終了年月日時分秒を取得
		String endDtm = inMap.getString(JBSbatACIFE012.CHRG_ENDYMD) + inMap.getString(JBSbatACIFE012.CHRG_END_TIM);

		// 不要レコードのスキップ
		BigDecimal acctInputOctets = new BigDecimal(inMap.getString(JBSbatACIFE012.ACCT_INPUT_OCTETS));
		BigDecimal acctOutputOctets = new BigDecimal(inMap.getString(JBSbatACIFE012.ACCT_OUTPUT_OCTETS));
		if ((acctInputOctets.intValue() == 0) && (acctOutputOctets.intValue() == 0))
		{
			// 上り下りの利用バイト数が両方とも0の場合

			// 読み捨て
			return null;
		}

		// 課金終了年月日から請求年月取得
		seikyYm = getCalcYm(inMap.getString(JBSbatACIFE012.CHRG_ENDYMD));

		// レコード重複チェック
		// 前回のレコードの存在チェック
		if (znkiInMap != null)
		{
			// 前回のレコードが存在する場合

			// 前回レコードと比較
			if (znkiCustCd.equals(custCd) && znkiChrgStaYmd.equals(chrgStaYmd) && znkiChrgEndTim.compareTo(chrgStaTim) > 0)
			{
				// 重複レコードの場合

// OM-2015-0001872 ADD START
				// インフォメーションフラグを立てる
				infoFlg = true;
// OM-2015-0001872 ADD END
				// エラーデータの生成
				JBSbatServiceInterfaceMap errData = createErrorData(inMap, msgDblTjtRecErr);
				// 出力共通電文にエラーデータを設定
				outputBean.addOutMapList_2(errData);
				// 出力共通電文を返却
				return outputBean;
			}
		}

		// レコード相関チェック
		// 課金開始年月日時分秒と課金終了年月日時分秒を比較
		if (staDtm.compareTo(endDtm) > 0)
		{
			// 相関エラーの場合

			// エラーデータの生成
			JBSbatServiceInterfaceMap errData = createErrorData(inMap, msgChrgSokanErr);
			// 出力共通電文にエラーデータを設定
			outputBean.addOutMapList_2(errData);
			// 出力共通電文を返却
			return outputBean;
		}

		// 月次料金計算済チェック
		// 料金計算月と課金終了年月日を比較
		if (prcCalcYm.compareTo(chrgEndYmd.substring(0, 6)) >= 0)
		{
			// エラーの場合
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint
													, "[L][execute] 月次料金計算済チェックエラー：料金計算月：" + prcCalcYm + " ≧ 課金終了年月日：" + chrgEndYmd);
			// エラーデータの生成
			JBSbatServiceInterfaceMap errData = createErrorData(inMap, msgMonPrcCalcErr);
			// 出力共通電文にエラーデータを設定
			outputBean.addOutMapList_2(errData);
			// 出力共通電文を返却
			return outputBean;
		}

		// お客様コードでレコードの検索
		executeAC_T_CHRG_JSVKEI_CKS_AC_SELECT_002(new Object[] { custCd, seikyYm });
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint
											, "[S][execute] AC_T_CHRG_JSVKEI_CKS 検索（お客様コード ：" + custCd + ", 請求年月：" + seikyYm + "）");
		// レコードの取り出し
		JBSbatCommonDBInterface record = db_AC_T_CHRG_JSVKEI_CKS.selectNext();
		String svcKeiNo = null;
		// レコードの存在チェック
		if (record != null)
		{
			// レコードが存在する場合

			// サービス契約番号を取得
			svcKeiNo = record.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.SVC_KEI_NO);
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute] データチェック サービス契約番号：" + svcKeiNo);
		
		// サービス契約番号存在チェック
		if (svcKeiNo == null || KARA_MOJI.equals(svcKeiNo.trim()))
		{
			// エラーデータの生成
			JBSbatServiceInterfaceMap errData = createErrorData(inMap, msgSvcKeiNoErr);
			// 出力共通電文にエラーデータを設定
			outputBean.addOutMapList_2(errData);
			// 出力共通電文を返却
			return outputBean;
		}

		// 請求契約番号を取得
		String sikyKeiNo = record.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.SEIKY_KEI_NO);
		// 料金コースコード
		String pcrsCd = record.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.PCRS_CD);
		// 料金サービスコード
		String prcSvcCd = record.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.PRC_SVC_CD);
		// 相対区分
		String aitaiDiv = record.getString(JBSbatAC_T_CHRG_JSVKEI_CKS.AITAI_CD);

		// TG1-2012-0000123 以下のチェック処理を削除
		// サービス契約内訳番号存在チェック
		// 請求契約番号存在チェック
		// 契約状態相関チェック
		
		// 条件に使用する相対番号を取得
		String aitaiNo = null;
		if (JACStrConst.AITAIKBN_NON.equals(aitaiDiv))
		{
			aitaiNo = JACStrConst.AITAI_NO_SP;
		}
		else if (JACStrConst.AITAIKBN_SEIKYU.equals(aitaiDiv))
		{
			aitaiNo = sikyKeiNo;
		}
		else if (JACStrConst.AITAIKBN_SVC.equals(aitaiDiv))
		{
			aitaiNo = svcKeiNo;
		}
		// キー作成
		// 料金コースコード　＋　料金サービスコード　＋　1:課税　＋　相対番号
		String key = makeStr(pcrsCd, prcSvcCd, JACStrConst.KAZEI_HIKAZEI_CD_KAZEI, aitaiNo);
		// MAPキーの存在判定
		if(!tihJuryoPrcMap.containsKey(key))
		{
			// レコードが存在しない場合

			// 業務例外
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] {JBSbatAC_M_JURYOPRC.TABLE_NAME});
		}
		
		JBSbatCommonDBInterface dbMap = tihJuryoPrcMap.get(key);
		// 料金項目コードを取得・課金単位・単位料金を取得
		String prcKmkCd = dbMap.getString(JBSbatAC_M_JURYOPRC.PRC_KMK_CD);
		// 課金単位を取得
		BigDecimal chrgTani = new BigDecimal(dbMap.getString(JBSbatAC_M_JURYOPRC.CHRG_TANI));
		// 単位料金を取得
		BigDecimal taniPrc = new BigDecimal(dbMap.getString(JBSbatAC_M_JURYOPRC.TANI_PRC));
		// 出力料金項目コードを取得
		String outPrcKmkCd = getOutPrcKmkCd(pcrsCd, prcSvcCd, prcKmkCd);

		// 利用バイト数を算出
		BigDecimal acctInputGigawords = new BigDecimal(inMap.getString(JBSbatACIFE012.ACCT_INPUT_GGW));
		BigDecimal acctOutputGigawords = new BigDecimal(inMap.getString(JBSbatACIFE012.ACCT_OUTPUT_GGW));
		BigDecimal inUseByte = (acctInputGigawords.multiply(gigaWords).add(acctInputOctets));
		BigDecimal outUseByte = (acctOutputGigawords.multiply(gigaWords).add(acctOutputOctets));
		BigDecimal useByte = inUseByte.add(outUseByte);

		// 利用パケット数を算出(小数切り上げ)
		BigDecimal usePct = (useByte.divide(chrgTani.multiply(taniPrc), 0, RoundingMode.UP));

		// レコードチェック2
		// 累積レコード重複チェック
		if (isUQTrkmDble(svcKeiNo, staDtm, endDtm))
		{
			// 重複した場合
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute] 累積レコード重複チェックＮＧ お客様コード：" + custCd);
// OM-2015-0001872 ADD START
			// インフォメーションフラグを立てる
			infoFlg = true;
// OM-2015-0001872 ADD END
			// エラーデータの生成
			JBSbatServiceInterfaceMap errData = createErrorData(inMap, msgDblRuiRecErr);
			// 出力共通電文にエラーデータを設定
			outputBean.addOutMapList_2(errData);
			// 出力共通電文を返却
			return outputBean;
		}

		// 初回課金情報作成判定
		if (isCreateFirstChrgInfo(svcKeiNo, super.opeDate, chrgStaYmd))
		{
			// 出力情報重複制御（お客様ID単位に１件の出力とする）
			if(!chrgCtrlMap.containsKey(custCd))
			{
				// 初回課金情報を作成する場合
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute] 初回課金情報作成対象 お客様コード：" + custCd);
				// 初回課金情報を生成
				JBSbatServiceInterfaceMap firstChrgInfData = createFirstChrgInf(svcKeiNo, chrgStaYmd);
				// 出力共通電文に初回課金情報を設定
				outputBean.addOutMapList(firstChrgInfData);
				
				// 初回課金出力制御マップにレコードを追加
				chrgCtrlMap.put(custCd, svcKeiNo);
			}
		}

		// UQ取込テーブル登録・更新処理
		if (isUQTrkmExist(chrgStaYmd, chrgStaTim, custCd))
		{
			// データが存在する場合
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute] UQ取込更新対象 お客様コード：" + custCd);
			// UQ取込更新処理
			updateUQTrkm(inMap, useByte, usePct, svcKeiNo, null, sikyKeiNo, pcrsCd, outPrcKmkCd, seikyYm);

		}
		else
		{
			// データが存在しない場合
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute] UQ取込登録対象 お客様コード：" + custCd);
			// UQ取込登録処理
			insertUQTrkm(inMap, useByte, usePct, svcKeiNo, null, sikyKeiNo, pcrsCd, outPrcKmkCd, seikyYm);
		}
		
		// eoモバイル明細テーブル登録・更新
		// 明細存在確認
		Object[] param1 = new Object[6];
		param1[0] = svcKeiNo;
		param1[1] = pcrsCd;
		param1[2] = prcSvcCd;
		param1[3] = seikyYm;
		param1[4] = staDtm;
		param1[5] = endDtm;
		if (isEMDtlExist(param1))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][createEoMobaDtl] AC_T_EOMOBA_DTL 更新");
			
			// 存在する  →更新
			Object[] set = new Object[2];
			set[0] = useByte.toString();
			set[1] = usePct.toString();

			// 第二引数は存在確認時と同等の為、値の設定はオミット
			executeAC_T_EOMOBA_DTL_PKUPDATE(set, param1);

		}
		else
		{
			// 存在しない→登録
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][createEoMobaDtl] AC_T_EOMOBA_DTL 登録");
			
			Object[] param2 = new Object[26];
			param2[0] = svcKeiNo;
			param2[1] = null; // 初期値NULLを設定する
			param2[2] = pcrsCd;
			param2[3] = prcSvcCd;
			param2[4] = sikyKeiNo;
			param2[5] = seikyYm;
			param2[6] = custCd;
			param2[7] = inMap.getString(JBSbatACIFE012.CHRG_ENDYMD).substring(0, 6);
			param2[8] = staDtm;
			param2[9] = endDtm;
			param2[10] = useByte.toString();
			param2[11] = usePct.toString();
			param2[12] = outPrcKmkCd;
			executeAC_T_EOMOBA_DTL_PKINSERT(param2);
		}
		
		// 前回のレコードに設定
		znkiInMap = inMap;

		// 請求先番号（UQ）に追加
		// キーを作成（重複除外用）
		String tmpKey = makeStr(seikyYm, 
								sikyKeiNo, 
								svcKeiNo);
		
		ArrayList<Object> seikyYmData = new ArrayList<Object>();
		seikyYmData.add(seikyYm);
		seikyYmData.add(sikyKeiNo);
		seikyYmData.add(svcKeiNo);
		seikyYmData.add(JACStrConst.KARA_MOJI);
		seikyYmData.add(JACStrConst.KARA_MOJI);
		
		sikyKeiNoInfMap.put(tmpKey, seikyYmData);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		// 出力共通電文を返却
		return outputBean;

	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		
		// UQ取込の期間切れレコードを削除
		String iznDtm = JCCBatCommon.addMonth(getCalcYm(super.opeDate).concat("01"), -2);
		executeAC_T_UQ_TRKM_AC_DELETE_001(new Object[] {iznDtm});

		// ファイル名を取得
		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);

		// 請求先番号（UQ）ファイル出力
		ArrayList<ArrayList<Object>> sikyKeiNoInfList = new ArrayList<ArrayList<Object>>(sikyKeiNoInfMap.values());
		createsikyKeiNoInfFile(files[1], sikyKeiNoInfList, dataFile.getEncode(), JACBatCommon.chgKaigyo(dataFile.getLine()), dataFileDef.getDelimiter());

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
		
		// エラーメッセージを出力
		if (errCnt != 0)	
		{	
			// 警告終了 「【警告】エラー対象レコード＝（%1%）」
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0340CW, new String[] { Integer.toString(errCnt) });
		}	
		
// OM-2015-0001872 ADD START
		// インフォメーションメッセージを出力
		if (infoCnt != 0)	
		{
			// 情報終了 「【情報】エラー対象レコード＝（%1%）」
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB1000CI, new String[] { Integer.toString(infoCnt) });
		}
// OM-2015-0001872 ADD END
		
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CH_M_PRC_SCHDL_TEIGI.close();
		db_ZM_M_WORK_PARAM_KNRI.close();
		db_CH_M_PRC_KMK_CS_CHGE.close();
		db_KK_T_SVC_KEI.close();
		db_AC_T_UQ_TRKM.close();
		db_AC_T_CHRG_JSVKEI_CKS.close();
		db_AC_M_JURYOPRC.close();
		db_AC_T_EOMOBA_DTL.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 *入力情報（ＵＱ課金ログ情報（ソート））の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-ACIFE012-INF1.TUSHIN_STAYMD			ＵＱ課金ログ情報（ソート）.通信開始年月日
	 *			 TXT-ACIFE012-INF1.TUSHIN_STAYMD			ＵＱ課金ログ情報（ソート）.通信開始年月日
	 *			 TXT-ACIFE012-INF1.TUSHIN_STAYMD			ＵＱ課金ログ情報（ソート）.通信開始年月日
	 *			 TXT-ACIFE012-INF1.TUSHIN_STA_TIME			ＵＱ課金ログ情報（ソート）.通信開始時刻
	 *			 TXT-ACIFE012-INF1.TUSHIN_STA_TIME			ＵＱ課金ログ情報（ソート）.通信開始時刻
	 *			 TXT-ACIFE012-INF1.TUSHIN_STA_TIME			ＵＱ課金ログ情報（ソート）.通信開始時刻
	 *			 TXT-ACIFE012-INF1.CHRG_STAYMD			ＵＱ課金ログ情報（ソート）.課金開始年月日
	 *			 TXT-ACIFE012-INF1.CHRG_STAYMD			ＵＱ課金ログ情報（ソート）.課金開始年月日
	 *			 TXT-ACIFE012-INF1.CHRG_STAYMD			ＵＱ課金ログ情報（ソート）.課金開始年月日
	 *			 TXT-ACIFE012-INF1.CHRG_STA_TIM			ＵＱ課金ログ情報（ソート）.課金開始時刻
	 *			 TXT-ACIFE012-INF1.CHRG_STA_TIM			ＵＱ課金ログ情報（ソート）.課金開始時刻
	 *			 TXT-ACIFE012-INF1.CHRG_STA_TIM			ＵＱ課金ログ情報（ソート）.課金開始時刻
	 *			 TXT-ACIFE012-INF1.CHRG_ENDYMD			ＵＱ課金ログ情報（ソート）.課金終了年月日
	 *			 TXT-ACIFE012-INF1.CHRG_ENDYMD			ＵＱ課金ログ情報（ソート）.課金終了年月日
	 *			 TXT-ACIFE012-INF1.CHRG_ENDYMD			ＵＱ課金ログ情報（ソート）.課金終了年月日
	 *			 TXT-ACIFE012-INF1.CHRG_END_TIM			ＵＱ課金ログ情報（ソート）.課金終了時刻
	 *			 TXT-ACIFE012-INF1.CHRG_END_TIM			ＵＱ課金ログ情報（ソート）.課金終了時刻
	 *			 TXT-ACIFE012-INF1.CHRG_END_TIM			ＵＱ課金ログ情報（ソート）.課金終了時刻
	 *			 TXT-ACIFE012-INF1.ACCT_INPUT_OCTETS			ＵＱ課金ログ情報（ソート）.Ａ−ＩＮＰＵＴ−Ｏｃｔｅｔｓ
	 *			 TXT-ACIFE012-INF1.ACCT_INPUT_OCTETS			ＵＱ課金ログ情報（ソート）.Ａ−ＩＮＰＵＴ−Ｏｃｔｅｔｓ
	 *			 TXT-ACIFE012-INF1.ACCT_INPUT_OCTETS			ＵＱ課金ログ情報（ソート）.Ａ−ＩＮＰＵＴ−Ｏｃｔｅｔｓ
	 *			 TXT-ACIFE012-INF1.ACCT_OUTPUT_OCTETS			ＵＱ課金ログ情報（ソート）.Ａ−Ｏｕｔｐｕｔ−Ｏｃｔｅｔｓ
	 *			 TXT-ACIFE012-INF1.ACCT_OUTPUT_OCTETS			ＵＱ課金ログ情報（ソート）.Ａ−Ｏｕｔｐｕｔ−Ｏｃｔｅｔｓ
	 *			 TXT-ACIFE012-INF1.ACCT_OUTPUT_OCTETS			ＵＱ課金ログ情報（ソート）.Ａ−Ｏｕｔｐｕｔ−Ｏｃｔｅｔｓ
	 *			 TXT-ACIFE012-INF1.ACCT_INPUT_GGW			ＵＱ課金ログ情報（ソート）.Ａ−Ｉｎｐｕｔ−Ｇｇｗ
	 *			 TXT-ACIFE012-INF1.ACCT_INPUT_GGW			ＵＱ課金ログ情報（ソート）.Ａ−Ｉｎｐｕｔ−Ｇｇｗ
	 *			 TXT-ACIFE012-INF1.ACCT_INPUT_GGW			ＵＱ課金ログ情報（ソート）.Ａ−Ｉｎｐｕｔ−Ｇｇｗ
	 *			 TXT-ACIFE012-INF1.ACCT_OUTPUT_GGW			ＵＱ課金ログ情報（ソート）.Ａ−Ｏｕｔｐｕｔ−Ｇｇｗ
	 *			 TXT-ACIFE012-INF1.ACCT_OUTPUT_GGW			ＵＱ課金ログ情報（ソート）.Ａ−Ｏｕｔｐｕｔ−Ｇｇｗ
	 *			 TXT-ACIFE012-INF1.ACCT_OUTPUT_GGW			ＵＱ課金ログ情報（ソート）.Ａ−Ｏｕｔｐｕｔ−Ｇｇｗ
	 *			 TXT-ACIFE012-INF1.CUST_CD			ＵＱ課金ログ情報（ソート）.お客様コード（ＣＵＩ）
	 *			 TXT-ACIFE012-INF1.CUST_CD			ＵＱ課金ログ情報（ソート）.お客様コード（ＣＵＩ）
	 *			 TXT-ACIFE012-INF1.CUST_CD			ＵＱ課金ログ情報（ソート）.お客様コード（ＣＵＩ）
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckACIFE012_INF1(HashMap rsMap, HashMap<String, String> itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// 通信開始年月日項目チェック
		strValue = (String)rsMap.get("TUSHIN_STAYMD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.TUSHIN_STAYMD")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "8"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.TUSHIN_STAYMD")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month_day1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.TUSHIN_STAYMD")});
			return false;
		}

		// 通信開始時刻項目チェック
		strValue = (String)rsMap.get("TUSHIN_STA_TIME");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.TUSHIN_STA_TIME")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "6"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.TUSHIN_STA_TIME")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hour_min_sec1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.TUSHIN_STA_TIME")});
			return false;
		}

		// 課金開始年月日項目チェック
		strValue = (String)rsMap.get("CHRG_STAYMD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CHRG_STAYMD")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "8"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CHRG_STAYMD")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month_day1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CHRG_STAYMD")});
			return false;
		}

		// 課金開始時刻項目チェック
		strValue = (String)rsMap.get("CHRG_STA_TIM");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CHRG_STA_TIM")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "6"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CHRG_STA_TIM")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hour_min_sec1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CHRG_STA_TIM")});
			return false;
		}

		// 課金終了年月日項目チェック
		strValue = (String)rsMap.get("CHRG_ENDYMD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CHRG_ENDYMD")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "8"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CHRG_ENDYMD")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month_day1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CHRG_ENDYMD")});
			return false;
		}

		// 課金終了時刻項目チェック
		strValue = (String)rsMap.get("CHRG_END_TIM");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CHRG_END_TIM")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "6"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CHRG_END_TIM")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hour_min_sec1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CHRG_END_TIM")});
			return false;
		}

		// Ａ−ＩＮＰＵＴ−Ｏｃｔｅｔｓ項目チェック
		strValue = (String)rsMap.get("ACCT_INPUT_OCTETS");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.ACCT_INPUT_OCTETS")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.ACCT_INPUT_OCTETS")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.ACCT_INPUT_OCTETS")});
			return false;
		}

		// Ａ−Ｏｕｔｐｕｔ−Ｏｃｔｅｔｓ項目チェック
		strValue = (String)rsMap.get("ACCT_OUTPUT_OCTETS");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.ACCT_OUTPUT_OCTETS")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.ACCT_OUTPUT_OCTETS")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.ACCT_OUTPUT_OCTETS")});
			return false;
		}

		// Ａ−Ｉｎｐｕｔ−Ｇｇｗ項目チェック
		strValue = (String)rsMap.get("ACCT_INPUT_GGW");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.ACCT_INPUT_GGW")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.ACCT_INPUT_GGW")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.ACCT_INPUT_GGW")});
			return false;
		}

		// Ａ−Ｏｕｔｐｕｔ−Ｇｇｗ項目チェック
		strValue = (String)rsMap.get("ACCT_OUTPUT_GGW");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.ACCT_OUTPUT_GGW")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.ACCT_OUTPUT_GGW")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.ACCT_OUTPUT_GGW")});
			return false;
		}

		// お客様コード（ＣＵＩ）項目チェック
		strValue = (String)rsMap.get("CUST_CD");
		strValue = strValue.trim();
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0450CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CUST_CD")});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "20"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0470CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CUST_CD")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFE012-INF1.CUST_CD")});
			return false;
		}

		return true;
	}

	/**
	 * 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 executeCH_M_PRC_SCHDL_TEIGI_AC_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_SCHDL_TEIGI.selectBySqlDefine(paramList, CH_M_PRC_SCHDL_TEIGI_AC_SELECT_003);
	}

	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	業務パラメータID
	 *		 	業務パラメータ適用開始年月日
	 *		 	業務パラメータ適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_WORK_PARAM_KNRI_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());

		// DBアクセスを実行します
		db_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_AC_SELECT_001);
	}

	/**
	 * SQLKEY(AC_SELECT_002)で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_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_SCHDL_TEIGI.selectBySqlDefine(paramList, CH_M_PRC_SCHDL_TEIGI_AC_SELECT_002);
	}

	/**
	 * SQLKEY(AC_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_AC_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());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());

		// DBアクセスを実行します
		db_CH_M_PRC_KMK_CS_CHGE.selectBySqlDefine(paramList, CH_M_PRC_KMK_CS_CHGE_AC_SELECT_004);
	}

	/**
	 * SQLKEY(AC_SELECT_018)で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_SVC_KEI_AC_SELECT_018(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_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_AC_SELECT_018);
	}

	/**
	 * SQLKEY(AC_SELECT_002)で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_UQ_TRKM_AC_SELECT_002(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());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());

		// DBアクセスを実行します
		db_AC_T_UQ_TRKM.selectBySqlDefine(paramList, AC_T_UQ_TRKM_AC_SELECT_002);
	}

	/**
	 * 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_UQ_TRKM_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_AC_T_UQ_TRKM.selectBySqlDefine(paramList, AC_T_UQ_TRKM_AC_SELECT_003);
	}

	/**
	 * SQLKEY(AC_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	事業者契約ID
	 *		 	請求年月
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_CHRG_JSVKEI_CKS_AC_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_AC_T_CHRG_JSVKEI_CKS.selectBySqlDefine(paramList, AC_T_CHRG_JSVKEI_CKS_AC_SELECT_002);
	}

	/**
	 * SQLKEY(AC_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 executeAC_M_JURYOPRC_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());

		// DBアクセスを実行します
		db_AC_M_JURYOPRC.selectBySqlDefine(paramList, AC_M_JURYOPRC_AC_SELECT_001);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	通信開始年月日				TSUSHIN_STAYMD
	 *		 	通信開始時分秒				TSUSHIN_STA_HMS
	 *		 	課金開始年月日				CHRG_STAYMD
	 *		 	課金開始時分秒				CHRG_STA_HMS
	 *		 	課金終了年月日				CHRG_ENDYMD
	 *		 	課金終了時分秒				CHRG_END_HMS
	 *		 	課金接続時間				CHRG_CONNECT_TIME
	 *		 	ユーザー名				USER_NM
	 *		 	接続ドメイン名				CONNECT_DOMAIN_NM
	 *		 	クライアントＩＰｖ４アドレス				CLT_IPV4AD
	 *		 	クライアントＭＡＣアドレス				CLT_MACAD
	 *		 	ＡＳＮ−ＧＷ識別名				ASNGW_SKBT_NM
	 *		 	セッション開始Ｓｔａｔｕｓ−Ｔｙｐｅ				SESSION_STA_STATUSTYPE
	 *		 	セッション終了Ｓｔａｔｕｓ−Ｔｙｐｅ				SESSION_END_STATUSTYPE
	 *		 	遅延時間				DLY_TIME
	 *		 	上り通信バイト数				NOBORI_TUSHIN_BYTE_CNT
	 *		 	下り通信バイト数				KUDARI_TUSHIN_BYTE_CNT
	 *		 	セッションＩＤ				SESSION_ID
	 *		 	セッション接続時間				SESSION_CONNECT_TIME
	 *		 	セッション切断理由コード				SESSION_CUT_RSN_CD
	 *		 	Ａｃｃｔ−Ｍｕｌｔｉ−Ｓｅｓｓｉｏｎ−ＩＤ				ACCT_MULTI_SESSION_ID
	 *		 	Ａｃｃｔ−Ｉｎｐｕｔ−Ｇｉｇａｗｏｒｄｓ				ACCT_INPUT_GGW
	 *		 	Ａｃｃｔ−Ｏｕｔｐｕｔ−Ｇｉｇａｗｏｒｄｓ				ACCT_OUTPUT_GGW
	 *		 	ＵＱお客様コード				UQ_CUST_CD
	 *		 	Ｆｒａｍｅｄ−ＩＰｖ６−Ｐｒｅｆｉｘ				FRAMED_IPV6_PREFIX
	 *		 	ＧＭＴ				GMT
	 *		 	ＩＰｖ４用ＨＡアドレス				IPV4_HAAD
	 *		 	ＩＰｖ６用ＨＡアドレス				IPV6_HAAD
	 *		 	ＭｏｂｉｌｅＩＰサポート端末識別フラグ				MBL_IP_SPRT_TNMT_SKBT_FLG
	 *		 	ホットラインフロー識別コード				HTLN_FLOW_SKBT_CD
	 *		 	ＵＱ課金種別コード				UQ_CHRG_SBT_CD
	 *		 	パケットデータフローＩＤ				PCT_DATA_FLOW_ID
	 *		 	サービスデータフローＩＤ				SVC_DATA_FLOW_ID
	 *		 	上りＱｏＳ情報識別コード				NOBORI_QOS_INFO_SKBT_CD
	 *		 	上りＭＩＰシグナル通信バイト数				NOBORI_MIP_SGN_TUSHIN_BYTE
	 *		 	下りＭＩＰシグナル通信バイト数				KUDARI_MIP_SGN_TUSHIN_BYTE
	 *		 	ＮＡＰオペレータＩＤ				NAP_OPRT_ID
	 *		 	ＮＳＰオペレータＩＤ				NSP_OPRT_ID
	 *		 	パケット圧縮有無				PCT_ASSHUKU_UM
	 *		 	下りＱｏＳ情報識別コード				KUDARI_QOS_INFO_SKBT_CD
	 *		 	サマータイム表記有無				SMT_HYOKI_UM
	 *		 	利用バイト数				USE_BYTE_CNT
	 *		 	利用パケット数				USE_PCT_CNT
	 *		 	サービス契約番号				SVC_KEI_NO
	 *		 	サービス契約内訳番号				SVC_KEI_UCWK_NO
	 *		 	請求契約番号				SEIKY_KEI_NO
	 *		 	料金コースコード				PCRS_CD
	 *		 	料金項目コード				PRC_KMK_CD
	 *		 	請求年月				SEIKY_YM
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_UQ_TRKM_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("TSUSHIN_STAYMD", setParam[0]);
		setMap.setValue("TSUSHIN_STA_HMS", setParam[1]);
		setMap.setValue("CHRG_STAYMD", setParam[2]);
		setMap.setValue("CHRG_STA_HMS", setParam[3]);
		setMap.setValue("CHRG_ENDYMD", setParam[4]);
		setMap.setValue("CHRG_END_HMS", setParam[5]);
		setMap.setValue("CHRG_CONNECT_TIME", setParam[6]);
		setMap.setValue("USER_NM", setParam[7]);
		setMap.setValue("CONNECT_DOMAIN_NM", setParam[8]);
		setMap.setValue("CLT_IPV4AD", setParam[9]);
		setMap.setValue("CLT_MACAD", setParam[10]);
		setMap.setValue("ASNGW_SKBT_NM", setParam[11]);
		setMap.setValue("SESSION_STA_STATUSTYPE", setParam[12]);
		setMap.setValue("SESSION_END_STATUSTYPE", setParam[13]);
		setMap.setValue("DLY_TIME", setParam[14]);
		setMap.setValue("NOBORI_TUSHIN_BYTE_CNT", setParam[15]);
		setMap.setValue("KUDARI_TUSHIN_BYTE_CNT", setParam[16]);
		setMap.setValue("SESSION_ID", setParam[17]);
		setMap.setValue("SESSION_CONNECT_TIME", setParam[18]);
		setMap.setValue("SESSION_CUT_RSN_CD", setParam[19]);
		setMap.setValue("ACCT_MULTI_SESSION_ID", setParam[20]);
		setMap.setValue("ACCT_INPUT_GGW", setParam[21]);
		setMap.setValue("ACCT_OUTPUT_GGW", setParam[22]);
		setMap.setValue("UQ_CUST_CD", setParam[23]);
		setMap.setValue("FRAMED_IPV6_PREFIX", setParam[24]);
		setMap.setValue("GMT", setParam[25]);
		setMap.setValue("IPV4_HAAD", setParam[26]);
		setMap.setValue("IPV6_HAAD", setParam[27]);
		setMap.setValue("MBL_IP_SPRT_TNMT_SKBT_FLG", setParam[28]);
		setMap.setValue("HTLN_FLOW_SKBT_CD", setParam[29]);
		setMap.setValue("UQ_CHRG_SBT_CD", setParam[30]);
		setMap.setValue("PCT_DATA_FLOW_ID", setParam[31]);
		setMap.setValue("SVC_DATA_FLOW_ID", setParam[32]);
		setMap.setValue("NOBORI_QOS_INFO_SKBT_CD", setParam[33]);
		setMap.setValue("NOBORI_MIP_SGN_TUSHIN_BYTE", setParam[34]);
		setMap.setValue("KUDARI_MIP_SGN_TUSHIN_BYTE", setParam[35]);
		setMap.setValue("NAP_OPRT_ID", setParam[36]);
		setMap.setValue("NSP_OPRT_ID", setParam[37]);
		setMap.setValue("PCT_ASSHUKU_UM", setParam[38]);
		setMap.setValue("KUDARI_QOS_INFO_SKBT_CD", setParam[39]);
		setMap.setValue("SMT_HYOKI_UM", setParam[40]);
		setMap.setValue("USE_BYTE_CNT", setParam[41]);
		setMap.setValue("USE_PCT_CNT", setParam[42]);
		setMap.setValue("SVC_KEI_NO", setParam[43]);
		setMap.setValue("SVC_KEI_UCWK_NO", setParam[44]);
		setMap.setValue("SEIKY_KEI_NO", setParam[45]);
		setMap.setValue("PCRS_CD", setParam[46]);
		setMap.setValue("PRC_KMK_CD", setParam[47]);
		setMap.setValue("SEIKY_YM", setParam[48]);
		setMap.setValue("ADD_DTM", setParam[49]);
		setMap.setValue("ADD_OPEACNT", setParam[50]);
		setMap.setValue("UPD_DTM", setParam[51]);
		setMap.setValue("UPD_OPEACNT", setParam[52]);
		setMap.setValue("DEL_DTM", setParam[53]);
		setMap.setValue("DEL_OPEACNT", setParam[54]);
		setMap.setValue("MK_FLG", setParam[55]);
	
		// DBアクセスを実行します
		db_AC_T_UQ_TRKM.insertByPrimaryKeys(setMap);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	利用バイト数				USE_BYTE_CNT
	 *		 	利用パケット数				USE_PCT_CNT
	 *		 	サービス契約番号				SVC_KEI_NO
	 *		 	サービス契約内訳番号				SVC_KEI_UCWK_NO
	 *		 	請求契約番号				SEIKY_KEI_NO
	 *		 	料金コースコード				PCRS_CD
	 *		 	料金項目コード				PRC_KMK_CD
	 *		 	請求年月				SEIKY_YM
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	UQ_CUST_CD
	 *		 	CHRG_STAYMD
	 *		 	CHRG_STA_HMS
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_UQ_TRKM_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("USE_BYTE_CNT", setParam[0]);
		setMap.setValue("USE_PCT_CNT", setParam[1]);
		setMap.setValue("SVC_KEI_NO", setParam[2]);
		setMap.setValue("SVC_KEI_UCWK_NO", setParam[3]);
		setMap.setValue("SEIKY_KEI_NO", setParam[4]);
		setMap.setValue("PCRS_CD", setParam[5]);
		setMap.setValue("PRC_KMK_CD", setParam[6]);
		setMap.setValue("SEIKY_YM", setParam[7]);
		setMap.setValue("UPD_DTM", setParam[8]);
		setMap.setValue("UPD_OPEACNT", setParam[9]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("UQ_CUST_CD", whereParam[0]);
		whereMap.setValue("CHRG_STAYMD", whereParam[1]);
		whereMap.setValue("CHRG_STA_HMS", whereParam[2]);

		// DBアクセスを実行します
		db_AC_T_UQ_TRKM.updateByPrimaryKeys(whereMap, setMap);
	}

	/**
	 * SQLKEY(AC_DELETE_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 executeAC_T_UQ_TRKM_AC_DELETE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_AC_T_UQ_TRKM.executeBySqlDefine(paramList, AC_T_UQ_TRKM_AC_DELETE_001);
	}
	
	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	サービス契約番号				SVC_KEI_NO
	 *		 	サービス契約内訳番号				SVC_KEI_UCWK_NO
	 *		 	料金コースコード				PCRS_CD
	 *		 	料金サービスコード				PRC_SVC_CD
	 *		 	請求契約番号				SEIKY_KEI_NO
	 *		 	請求年月				SEIKY_YM
	 *		 	事業者用契約ＩＤ				JIGYOSHA_KEI_ID
	 *		 	利用年月				USE_YM
	 *		 	通信開始年月日時分秒				TSUSHIN_STA_DTM
	 *		 	通信終了年月日時分秒				TSUSHIN_END_DTM
	 *		 	利用バイト数				USE_BYTE_CNT
	 *		 	利用パケット数				USE_PCT_CNT
	 *		 	料金項目コード				PRC_KMK_CD
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 *		 	登録運用年月日				ADD_UNYO_YMD
	 *		 	登録処理ＩＤ				ADD_TRN_ID
	 *		 	更新運用年月日				UPD_UNYO_YMD
	 *		 	更新処理ＩＤ				UPD_TRN_ID
	 *		 	削除運用年月日				DEL_UNYO_YMD
	 *		 	削除処理ＩＤ				DEL_TRN_ID
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_EOMOBA_DTL_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SVC_KEI_NO", setParam[0]);
		setMap.setValue("SVC_KEI_UCWK_NO", setParam[1]);
		setMap.setValue("PCRS_CD", setParam[2]);
		setMap.setValue("PRC_SVC_CD", setParam[3]);
		setMap.setValue("SEIKY_KEI_NO", setParam[4]);
		setMap.setValue("SEIKY_YM", setParam[5]);
		setMap.setValue("JIGYOSHA_KEI_ID", setParam[6]);
		setMap.setValue("USE_YM", setParam[7]);
		setMap.setValue("TSUSHIN_STA_DTM", setParam[8]);
		setMap.setValue("TSUSHIN_END_DTM", setParam[9]);
		setMap.setValue("USE_BYTE_CNT", setParam[10]);
		setMap.setValue("USE_PCT_CNT", setParam[11]);
		setMap.setValue("PRC_KMK_CD", setParam[12]);
		setMap.setValue("ADD_DTM", setParam[13]);
		setMap.setValue("ADD_OPEACNT", setParam[14]);
		setMap.setValue("UPD_DTM", setParam[15]);
		setMap.setValue("UPD_OPEACNT", setParam[16]);
		setMap.setValue("DEL_DTM", setParam[17]);
		setMap.setValue("DEL_OPEACNT", setParam[18]);
		setMap.setValue("MK_FLG", setParam[19]);
		setMap.setValue("ADD_UNYO_YMD", setParam[20]);
		setMap.setValue("ADD_TRN_ID", setParam[21]);
		setMap.setValue("UPD_UNYO_YMD", setParam[22]);
		setMap.setValue("UPD_TRN_ID", setParam[23]);
		setMap.setValue("DEL_UNYO_YMD", setParam[24]);
		setMap.setValue("DEL_TRN_ID", setParam[25]);
	
		// DBアクセスを実行します
		db_AC_T_EOMOBA_DTL.insertByPrimaryKeys(setMap);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	利用バイト数				USE_BYTE_CNT
	 *		 	利用パケット数				USE_PCT_CNT
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SVC_KEI_NO
	 *		 	PCRS_CD
	 *		 	PRC_SVC_CD
	 *		 	SEIKY_YM
	 *		 	TSUSHIN_STA_DTM
	 *		 	TSUSHIN_END_DTM
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_T_EOMOBA_DTL_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("USE_BYTE_CNT", setParam[0]);
		setMap.setValue("USE_PCT_CNT", setParam[1]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SVC_KEI_NO", whereParam[0]);
		whereMap.setValue("PCRS_CD", whereParam[1]);
		whereMap.setValue("PRC_SVC_CD", whereParam[2]);
		whereMap.setValue("SEIKY_YM", whereParam[3]);
		whereMap.setValue("TSUSHIN_STA_DTM", whereParam[4]);
		whereMap.setValue("TSUSHIN_END_DTM", whereParam[5]);

		// DBアクセスを実行します
		db_AC_T_EOMOBA_DTL.updateByPrimaryKeys(whereMap, setMap);
	}
	
	/**
	 * SQLKEY(AC_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 executeAC_T_EOMOBA_DTL_AC_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());
		paramList.setValue(param[5].toString());

		// DBアクセスを実行します
		db_AC_T_EOMOBA_DTL.selectBySqlDefine(paramList, AC_T_EOMOBA_DTL_AC_SELECT_004);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 従量料金情報検索（従量料金の取得）<br>
	 * 検索結果でマップを作成する。 <br>
	 * @throws Exception
	 */
	private void makeJuryoPrcInfoMap() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeJuryoPrcInfoMap]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(super.systemCode);	// システムコード
//20130709 追加　FJ)OHTO　START
		paramList.setValue(this.wk_End);							// 請求年月末日
		paramList.setValue(this.wk_End);							// 請求年月末日

		//paramList.setValue(super.opeDate);		// 従量料金適用開始年月日
		//paramList.setValue(super.opeDate);		// 従量料金適用終了年月日
//20130709 追加　FJ)OHTO　END

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getSeikyKeiInfo][paramList=" + paramList.getList().toString() + "]");
		
		// SQL実行
		executeAC_M_JURYOPRC_AC_SELECT_001(paramList.getList().toArray());
		
		// 取得結果取得
		JBSbatCommonDBInterface dbMap = db_AC_M_JURYOPRC.selectNext();
		tihJuryoPrcMap = new HashMap<String, JBSbatCommonDBInterface>();
		if(dbMap == null)
		{
			// システムパラメータ管理テーブルから取得できない場合はエラーとする
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE,
					new String[] { JBSbatAC_M_JURYOPRC.TABLE_NAME });
		}
		while(dbMap != null)
		{
			// キー作成
			// 料金コースコード＋料金サービスコード＋課税非課税コード＋相対番号
			String key = makeStr(dbMap.getString(JBSbatAC_M_JURYOPRC.PCRS_CD), 
					dbMap.getString(JBSbatAC_M_JURYOPRC.PRC_SVC_CD), 
					dbMap.getString(JBSbatAC_M_JURYOPRC.KAZEI_HIKAZEI_CD), 
					dbMap.getString(JBSbatAC_M_JURYOPRC.AITAI_NO));
			// キー・取得した情報をマップに
			tihJuryoPrcMap.put(key, dbMap);

			// 次レコード取得
			dbMap = db_AC_M_JURYOPRC.selectNext(); 
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeJuryoPrcInfoMap]");
		return;
	}
	
	/**
	 * 文字を連結します
	 * @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();
	}
	
	/**
	 * ファイル出力
	 * 
	 * @param file ファイル名
	 * @param arrayList 出力データを格納した配列
	 * @param encode エンコード
	 * @param line 改行コード
	 * @param div 区切文字
	 * @throws Exception
	 */
	private void createsikyKeiNoInfFile(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);
	}

	/**
	 * エラーデータを生成
	 * 
	 * @param inMap 入力電文
	 * @param sErr エラー文字列
	 * @return エラーデータ
	 * @throws Exception 
	 */
	private JBSbatServiceInterfaceMap createErrorData(JBSbatServiceInterfaceMap inMap, String sErr) throws Exception
	{
		// エラーデータのインスタンスを生成
		JBSbatServiceInterfaceMap dataMap = new JBSbatServiceInterfaceMap();
		// 値を設定
		dataMap.setMap(inMap.getMap());
		dataMap.setString(JBSbatACIFM023.ERR, sErr);
		dataMap.setString(JBSbatACIFM023.CUST_CD, inMap.getString(JBSbatACIFE012.CUST_CD).trim());
		dataMap.setOutFlg(true);
		
// OM-2015-0001872 MOD START
//		// エラーカウント
//		errCnt++;
		if (infoFlg)
		{
			// インフォメーションカウント
			infoCnt++;
			// インフォメーションフラグを初期化
			infoFlg = false;
		}
		else
		{
			// エラーカウント
			errCnt++;
		}
// OM-2015-0001872 MOD END
		
		// エラーデータを返却
		return dataMap;
	}

	/**
	 * 初回課金情報を生成
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @param firstUseYmd 初回利用発生年月日
	 * @return 初回課金情報
	 * @throws Exception 
	 */
	private JBSbatServiceInterfaceMap createFirstChrgInf(String svcKeiNo, String firstUseYmd) throws Exception
	{
		// 初回課金情報のインスタンスを生成
		JBSbatServiceInterfaceMap dataMap = new JBSbatServiceInterfaceMap();
		// 値を設定
		dataMap.setString(JBSbatKKIFI030.SVC_KEI_NO, svcKeiNo);
		dataMap.setString(JBSbatKKIFI030.FIRST_TUSHIN_HSI_YMD, firstUseYmd);
		dataMap.setOutFlg(true);
		// 初回課金情報を返却
		return dataMap;
	}

	/**
	 * UQ取込重複チェック
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @param staDtm 課金開始年月日時分秒
	 * @param endDtm 課金終了年月日時分秒
	 * @return trueなら重複あり
	 * @throws Exception
	 */
	private boolean isUQTrkmDble(String svcKeiNo, String staDtm, String endDtm) throws Exception
	{
		// SQL実行
		executeAC_T_UQ_TRKM_AC_SELECT_002(new Object[] {svcKeiNo, endDtm, endDtm, staDtm, staDtm, staDtm, endDtm});

		//レコードの取り出し
		JBSbatCommonDBInterface record = db_AC_T_UQ_TRKM.selectNext();

		// 存在チェック
		return record != null;
	}

	/**
	 * 初回課金情報作成判定
	 * 
	 * @param svcKeiNo サービス契約番号
	 * @param rsvAplyYmd 予約適用年月日
	 * @param staDtm 初回パケット発生年月日
	 * @return trueなら初回
	 * @throws Exception
	 */
	private boolean isCreateFirstChrgInfo(String svcKeiNo, String rsvAplyYmd, String staDtm) throws Exception
	{
		// SQL実行
		executeKK_T_SVC_KEI_AC_SELECT_018(new Object[] {svcKeiNo, rsvAplyYmd, staDtm});

		//レコードの取り出し
		JBSbatCommonDBInterface record = db_KK_T_SVC_KEI.selectNext();

		// 存在チェック
		return record != null;
	}

	/**
	 * UQ取込データ存在判定
	 * 
	 * @param chrgStaYmd 課金開始年月日
	 * @param chrgStaTim 課金開始時分秒
	 * @param custCd お客様コード
	 * @return trueなら重複あり
	 * @throws Exception
	 */
	private boolean isUQTrkmExist(String chrgStaYmd, String chrgStaTim, String custCd) throws Exception
	{
		// SQL実行
		executeAC_T_UQ_TRKM_AC_SELECT_003(new Object[] {chrgStaYmd, chrgStaTim, custCd});

		//レコードの取り出し
		JBSbatCommonDBInterface record = db_AC_T_UQ_TRKM.selectNext();

		// 存在チェック
		return record != null;
	}

	/**
	 * eoモバイル明細テーブル存在判定
	 *    @param  param1  明細存在確認配列
	 *            [0]      サービス契約番号
	 *            [1]      料金コースコード
	 *            [2]      料金サービスコード
	 *            [3]      請求年月
	 *            [4]      課金開始年月日時分秒
	 *            [5]      課金終了年月日時分秒
	 * @return  trueなら重複あり
	 * @throws  Exception
	 */
	private boolean isEMDtlExist(Object[] param1) throws Exception
	{

		// SQL実行
		executeAC_T_EOMOBA_DTL_AC_SELECT_004(param1);

		//レコードの取り出し
		JBSbatCommonDBInterface record = db_AC_T_EOMOBA_DTL.selectNext();

		// 存在チェック
		return record != null;
	}
	
	/**
	 * 業務パラメータ値を取得
	 * 
	 * @param paramId パラメータID
	 * @return 業務パラメータ
	 * @throws Exception
	 */
	private String getWorkParamVal(String paramId) throws Exception
	{
		// SQL実行
		executeZM_M_WORK_PARAM_KNRI_AC_SELECT_001(new Object[] {paramId, super.opeDate, super.opeDate});

		// レコードの取り出し
		JBSbatCommonDBInterface record = db_ZM_M_WORK_PARAM_KNRI.selectNext();

		String val = null;
		// レコードの存在チェック
		if (record != null)
		{
			// レコードが存在する場合

			// 業務パラメータ値を取得
			val = record.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE);
		}
		else
		{
			// レコードが存在しない場合

			// 業務例外
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] {JBSbatZM_M_WORK_PARAM_KNRI.TABLE_NAME});
		}
		// 業務パラメータ値を返却
		return val;
	}

	/**
	 * 請求年月を取得
	 * 
	 * @param baseDate 取得基準日
	 * @return 料金計算月
	 * @throws Exception
	 */
	private String getCalcYm(String baseDate) throws Exception
	{

		// 蓄積確認
		String seikyYM = seikyYmMap.get(baseDate);
		if (seikyYM != null)
		{

			// 蓄積済である場合、SQLを発行せずMapに格納された値を返却
			return seikyYM;
		}

		// SQL実行
		executeCH_M_PRC_SCHDL_TEIGI_AC_SELECT_002(new Object[] {baseDate, baseDate});

		//レコードの取り出し
		JBSbatCommonDBInterface record = db_CH_M_PRC_SCHDL_TEIGI.selectNext();

		// 料金計算月の取得
		String calcYm = record.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.SEIKY_YM);
		// 料金計算月の存在判定
		if (calcYm == null)
		{
			// レコードが存在しない場合

			// 業務例外
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] {JBSbatCH_M_PRC_SCHDL_TEIGI.TABLE_NAME});
		}

		// Mapに取得結果を蓄積
		seikyYmMap.put(baseDate, calcYm);

		// 料金計算月を返却
		return calcYm;
	}
	
	/**
	 * 請求年月取得
	 * 
	 * @return 請求年月
	 * @throws Exception スローされる例外
	 */
	private String getSeikyYm() throws Exception
	{
		// 料金スケジュール定義
		executeCH_M_PRC_SCHDL_TEIGI_AC_SELECT_003(new Object[] { JACStrConst.EVENT_CD_PRC_CALC_DAY, super.opeDate });
		JBSbatCommonDBInterface record = db_CH_M_PRC_SCHDL_TEIGI.selectNext();
		if (record.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.SEIKY_YM) == null)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] { JBSbatCH_M_PRC_SCHDL_TEIGI.TABLE_NAME});
		}

		return record.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.SEIKY_YM);
	}

	/**
	 * UQ取込登録処理
	 * 
	 * @param inMap ＵＱ課金ログ情報
	 * @param useByte 利用バイト数
	 * @param usePct 利用パケット数
	 * @param svcKeiNo サービス契約番号
	 * @param svcKeiUwNo サービス契約内訳番号
	 * @param seikyKeiNo 請求契約番号
	 * @param pcrsCd 料金コースコード
	 * @param prcKmkCd 料金項目コード
	 * @param seikyYM 請求年月
	 * @throws Exception
	 */
	private void insertUQTrkm(JBSbatServiceInterfaceMap inMap
							, BigDecimal useByte
							, BigDecimal usePct
							, String svcKeiNo
							, String svcKeiUwNo
							, String seikyKeiNo
							, String pcrsCd
							, String prcKmkCd
							, String seikyYM) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][insertUQTrkm]");
		
		// 値を格納する配列を生成
		Object[] out = new Object[56];
		// 値を設定
		out[0] = inMap.getString(JBSbatACIFE012.TUSHIN_STAYMD);
		out[1] = inMap.getString(JBSbatACIFE012.TUSHIN_STA_TIME);
		out[2] = inMap.getString(JBSbatACIFE012.CHRG_STAYMD);
		out[3] = inMap.getString(JBSbatACIFE012.CHRG_STA_TIM);
		out[4] = inMap.getString(JBSbatACIFE012.CHRG_ENDYMD);
		out[5] = inMap.getString(JBSbatACIFE012.CHRG_END_TIM);
		out[6] = inMap.getString(JBSbatACIFE012.CHRG_CONNECT_TIM);
		out[7] = inMap.getString(JBSbatACIFE012.USER_NM);
		out[8] = inMap.getString(JBSbatACIFE012.DOMAIN_NM);
		out[9] = inMap.getString(JBSbatACIFE012.FRAMED_IP_AD);
		out[10] = inMap.getString(JBSbatACIFE012.CALLING_STAYION_ID);
		out[11] = inMap.getString(JBSbatACIFE012.ASNGW_SKBT_NM);
		out[12] = inMap.getString(JBSbatACIFE012.STA_STATUS);
		out[13] = inMap.getString(JBSbatACIFE012.END_STATUS);
		out[14] = inMap.getString(JBSbatACIFE012.ACCT_DELAY_TIM);
		out[15] = inMap.getString(JBSbatACIFE012.ACCT_INPUT_OCTETS);
		out[16] = inMap.getString(JBSbatACIFE012.ACCT_OUTPUT_OCTETS);
		out[17] = inMap.getString(JBSbatACIFE012.ACCT_SESSION_ID);
		out[18] = inMap.getString(JBSbatACIFE012.ACCT_SESSION_TIM);
		out[19] = inMap.getString(JBSbatACIFE012.CUT_RSN);
		out[20] = inMap.getString(JBSbatACIFE012.ACCT_MULTI_SESSION_ID);
		out[21] = inMap.getString(JBSbatACIFE012.ACCT_INPUT_GGW);
		out[22] = inMap.getString(JBSbatACIFE012.ACCT_OUTPUT_GGW);
		out[23] = inMap.getString(JBSbatACIFE012.CUST_CD);
		out[24] = inMap.getString(JBSbatACIFE012.FRAMED_IPV6_PREFIX);
		out[25] = inMap.getString(JBSbatACIFE012.GMT);
		out[26] = inMap.getString(JBSbatACIFE012.HA_IPV4_AD);
		out[27] = inMap.getString(JBSbatACIFE012.HA_IPV6_AD);
		out[28] = inMap.getString(JBSbatACIFE012.IP_TECHNOLOGY);
		out[29] = inMap.getString(JBSbatACIFE012.HOTLINE_INDICATOR);
		out[30] = inMap.getString(JBSbatACIFE012.PREPAID_INDICATOR);
		out[31] = inMap.getString(JBSbatACIFE012.PACKET_DATE_FLOW_ID);
		out[32] = inMap.getString(JBSbatACIFE012.SVC_DATE_FLOW_ID);
		out[33] = inMap.getString(JBSbatACIFE012.UPLINK_GRANTED_QOS);
		out[34] = inMap.getString(JBSbatACIFE012.CON_OCTETS_IN);
		out[35] = inMap.getString(JBSbatACIFE012.CON_OCTETS_OUT);
		out[36] = inMap.getString(JBSbatACIFE012.NAP_ID);
		out[37] = inMap.getString(JBSbatACIFE012.NSP_ID);
		out[38] = inMap.getString(JBSbatACIFE012.COUNT_TYPE);
		out[39] = inMap.getString(JBSbatACIFE012.DOMWNLINK_GRANTED_QOS);
		out[40] = inMap.getString(JBSbatACIFE012.DST);
		out[41] = useByte.toString();
		out[42] = usePct.toString();
		out[43] = svcKeiNo;
		out[44] = svcKeiUwNo;
		out[45] = seikyKeiNo;
		out[46] = pcrsCd;
		// out[*] = prcSvcCd;
		out[47] = prcKmkCd;
		out[48] = seikyYM;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][insertUQTrkm] 登録パラメータ：" + arrayToString(out));
		// 登録処理
		executeAC_T_UQ_TRKM_PKINSERT(out);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][insertUQTrkm]");
	}

	/**
	 * UQ取込更新処理
	 * 
	 * @param inMap ＵＱ課金ログ情報
	 * @param useByte 利用バイト数
	 * @param usePct 利用パケット数
	 * @param svcKeiNo サービス契約番号
	 * @param svcKeiUwNo サービス契約内訳番号
	 * @param seikyKeiNo 請求契約番号
	 * @param pcrsCd 料金コースコード
	 * @param prcKmkCd 料金項目コード
	 * @param seikyYM 請求年月
	 * @throws Exception
	 */
	private void updateUQTrkm(
					JBSbatServiceInterfaceMap inMap, 
					BigDecimal useByte
					, BigDecimal usePct
					, String svcKeiNo
					, String svcKeiUwNo
					, String seikyKeiNo
					, String pcrsCd
					, String prcKmkCd
					, String seikyYM) throws Exception
	{
		// 設定値と条件値を格納する配列を生成
		Object[] setParam = new Object[10];
		Object[] whereParam = new Object[3];
		// 設定値を設定
		setParam[0] = useByte.intValue();
		setParam[1] = usePct.intValue();
		setParam[2] = svcKeiNo;
		setParam[3] = svcKeiUwNo;
		setParam[4] = seikyKeiNo;
		setParam[5] = pcrsCd;
		setParam[6] = prcKmkCd;
		setParam[7] = seikyYM;
		// 条件値を設定
		whereParam[0] = inMap.getString(JBSbatACIFE012.CUST_CD);
		whereParam[1] = inMap.getString(JBSbatACIFE012.CHRG_STAYMD);
		whereParam[2] = inMap.getString(JBSbatACIFE012.CHRG_STA_TIM);
		
		
		// whereParam[*] = prcSvcCd;
		// UQ取込更新処理
		executeAC_T_UQ_TRKM_PKUPDATE(setParam, whereParam);
	}

	/**
	 * 料金項目コードより、出力料金項目コードを取得
	 * @param pcrsCd 料金コースコード
	 * @param prcSvcCd 料金サービスコード
	 * @param prcKmkCd 料金項目コード
	 * 
	 * @return 出力料金項目コード
	 * @throws Exception 例外
	 */
	private String getOutPrcKmkCd(String pcrsCd, String prcSvcCd, String prcKmkCd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getOutPrcKmkCd]");
		
		// 業務機能識別コードを生成
		String workKinoSkbtCd = uqChrgLogInf + seikyYm.substring(4, 6);

		// 検索パラメータ生成
		Object[] obParam = new Object[] {JACStrConst.SYS_CD_AC
										, workKinoSkbtCd, JACStrConst.CHSHT_CHG_CD_2, pcrsCd, prcSvcCd, prcKmkCd, super.opeDate, super.opeDate};
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getOutPrcKmkCd] CH_M_PRC_KMK_CS_CHGE 検索パラメータ：" + arrayToString(obParam));
		// SQL実行
		executeCH_M_PRC_KMK_CS_CHGE_AC_SELECT_004(obParam);

		//レコードの取り出し
		JBSbatCommonDBInterface record = db_CH_M_PRC_KMK_CS_CHGE.selectNext();

		// レコードの存在チェック
		if (record != null)
		{
			// 存在する場合
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getOutPrcKmkCd]");
			// 出力料金項目コードを返却
			return record.getString(JBSbatCH_M_PRC_KMK_CS_CHGE.OUT_PRC_KMK_CD);

		}
		else
		{
			// 存在しない場合
			
			// 業務例外
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] {JBSbatCH_M_PRC_KMK_CS_CHGE.TABLE_NAME});
		}
	}
	
	/**
	 * 配列をカンマ区切り文字列に編集します。
	 * 
	 * @param obArray 対象配列
	 * @return カンマ区切り文字列
	 */
	private String arrayToString(Object[] obArray)
	{
		
		StringBuffer bufString = new StringBuffer();
		
		if (obArray == null || obArray.length == 0)
		{
			return bufString.toString();
		}
		
		for(int i = 0; i < obArray.length; i++)
		{
			bufString.append(",");
			bufString.append(obArray[i]);
		}
		bufString.delete(0, 1);
		
		return bufString.toString();
	}
}
