/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACEMUseFixKoInfoTrkm
*	ソースファイル名	：JBSbatACEMUseFixKoInfoTrkm.java
*	作成者				：富士通　
*	作成日				：2012年08月24日
*＜機能概要＞
*　ＥＭ利用確定呼情報取込部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/08/24  FJ）東海林	【ANK-0143-00-00】新規作成
*	v4.00.01	2013/04/05  FJ) 小柴	【IKK-2013-0000783】文字化け対策のため、エンコード形式の変更
*********************************************************************/
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 eo.business.common.JACBatCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.util.file.JBSbatACIFM027;
import eo.business.util.file.JBSbatACIFM028;
import eo.business.util.file.JBSbatACIFM029;
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.JBSbatAC_T_EOMOBA_DTL;
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.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACEMUseFixKoInfoTrkm extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(業務パラメータ管理)*/
	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_SCHDL_TEIGI = "CH_M_PRC_SCHDL_TEIGI";

	/** テーブル(ＥＭ法人契約)*/
	private static final String D_TBL_NAME_CH_T_EM_HOJIN_KEI = "CH_T_EM_HOJIN_KEI";

	/** テーブル(課金対象従量サービス契約蓄積)*/
	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_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_EOMOBA_DTL = "AC_T_EOMOBA_DTL";

	/** 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_003)*/
	private static final String CH_T_EM_HOJIN_KEI_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_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_006)*/
	private static final String AC_T_EOMOBA_DTL_AC_SELECT_006 = "AC_SELECT_006";

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;

	/** テーブルアクセスクラス(料金スケジュール定義)*/
	private JBSbatSQLAccess db_CH_M_PRC_SCHDL_TEIGI = null;

	/** テーブルアクセスクラス(ＥＭ法人契約)*/
	private JBSbatSQLAccess db_CH_T_EM_HOJIN_KEI = null;

	/** テーブルアクセスクラス(課金対象従量サービス契約蓄積)*/
	private JBSbatSQLAccess db_AC_T_CHRG_JSVKEI_CKS = null;

	/** テーブルアクセスクラス(従量料金)*/
	private JBSbatSQLAccess db_AC_M_JURYOPRC = null;

	/** テーブルアクセスクラス(料金項目抽出変換)*/
	private JBSbatSQLAccess db_CH_M_PRC_KMK_CS_CHGE = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(ｅｏモバイル明細)*/
	private JBSbatSQLAccess db_AC_T_EOMOBA_DTL = null;

	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 空文字 */
	private static final String KARA_MOJI = "";

	/** 出力ファイル定義 */
	private static final String PRM_OTD = "OTD";

	/** EM利用呼情報(法人分データ部)格納用リスト */
	private ArrayList<ArrayList<Object>> outInfDataList = null;

	/** EM利用呼情報(法人分トレーラ部)格納用リスト */
	private ArrayList<Object> outInfTrailer = null;

	/** 集計対象請求年月 */
	HashMap<String, ArrayList<Object>> outSeikyYm = null;
	
	/** トレーラ部レコードタイプ */
	private String trailerRecType = null;

	/** トレーラ部予備 */
	private String trailerYobi = null;

	/** EM利用呼情報 */
	private String emUseKoInf = null;

	/** バッチ運用年月日 */
	private String opeYmd = null;

	/** サービス請求契約番号エラー */
	private String msgSvcKeiNoErr = null;
	
	/** 退避．従量料金情報マップ*/
	private HashMap<String, JBSbatCommonDBInterface> tihJuryoPrcMap = null;
	
	/** 請求収納業務共通クラス */
	private JCHbatSeikyKaknoBusinessUtil seikyKaknoBusinessUtil = null;
	
	/** 固定値：桁数(利用バイト数) */
	private static final int USE_BYTE_CNT_LENGTH = 19;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		db_CH_M_PRC_SCHDL_TEIGI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_M_PRC_SCHDL_TEIGI);
		db_CH_T_EM_HOJIN_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_EM_HOJIN_KEI);
		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_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_EOMOBA_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_T_EOMOBA_DTL);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		
		// バッチ運用日付を取得
		opeYmd = super.opeDate;
		
		// エラーメッセージを取得
		msgSvcKeiNoErr = getWorkParamVal(JACStrConst.WKPARA_AC_MSG_SVCKEINOERR, opeYmd);
		
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		// ＥＭ利用呼情報を取得
		emUseKoInf = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_AC_WKS_EM_USR_KO_INF);
		
		paramUtil.close();
		
		// EM利用呼情報(法人分データ部)格納用リストの初期化
		outInfDataList = new ArrayList<ArrayList<Object>>();
		// EM利用呼情報(法人分トレーラ部)格納用リストの初期化
		outInfTrailer = new ArrayList<Object>();
		// 集計対象請求年月格納用リストの初期化
		outSeikyYm = new HashMap<String, ArrayList<Object>>();
		// 従量料金の取得
		makeJuryoPrcInfoMap();
		
		this.seikyKaknoBusinessUtil = new JCHbatSeikyKaknoBusinessUtil(commonItem);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param mastMap　入力電文
	 * @param tranMap　入力電文
	 * @param outputInItem  入力情報
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		
		// フラグの設定(各レコード1回ずつ処理するため)
		setMastProcFlg(true);
		setTranProcFlg(true);

		// トレーラ部のレコード存在チェック
		if (tranMap != null)
		{
			// 存在する場合

			// トレーラ部から情報取得
			trailerRecType = tranMap.getString(JBSbatACIFM028.REC_TYPE);
			trailerYobi = tranMap.getString(JBSbatACIFM028.YOBI);
		}
		
		// データ部のレコードが存在しない場合、次のレコード処理へ
		if (mastMap == null)
		{
			return outputInItem;
		}

		// 出力共通電文を生成
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		// EM契約者コードを取得
		String emKshCd = mastMap.getString(JBSbatACIFM027.EM_KEISHA_CD);
		// 利用バイト数を取得
		BigDecimal useByteCnt = new BigDecimal(mastMap.getString(JBSbatACIFM027.USE_BYTE_CNT));
		// 通信利用日を取得
		String tsushinUseYmd = mastMap.getString(JBSbatACIFM027.TSUSHIN_USE_DAY);

		// 法人判定
		if (isHojin(emKshCd))
		{
			// 法人分の場合
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute] 法人データ（EM契約者コード：" + emKshCd + "）");

			// ＥＭ利用呼情報(法人分データ部)の生成
			ArrayList<Object> hjinEMUseKoInfData = new ArrayList<Object>();
			// ＥＭ利用呼情報(法人分データ部)に値を設定
			hjinEMUseKoInfData.add(mastMap.getString(JBSbatACIFM027.REC_TYPE));
			hjinEMUseKoInfData.add(mastMap.getString(JBSbatACIFM027.SIJGSHA_KANRI_CD));
			hjinEMUseKoInfData.add(mastMap.getString(JBSbatACIFM027.MSISDN));
			hjinEMUseKoInfData.add(mastMap.getString(JBSbatACIFM027.EM_KEISHA_CD));
			hjinEMUseKoInfData.add(mastMap.getString(JBSbatACIFM027.TSUSHIN_USE_DAY));
			hjinEMUseKoInfData.add(seikyKaknoBusinessUtil.fillString(JCHbatSeikyKaknoBusinessUtil.FillType.Zero
					, mastMap.getString(JBSbatACIFM027.USE_BYTE_CNT), USE_BYTE_CNT_LENGTH, false));
			hjinEMUseKoInfData.add(mastMap.getString(JBSbatACIFM027.YOBI));
			// ＥＭ利用呼情報(法人分データ部)格納用リストにＥＭ利用呼情報(法人分データ部)を追加
			outInfDataList.add(hjinEMUseKoInfData);
			// nullを返却
			return outputInItem;
		}

		// 法人データ判断で法人と判断されなかったデータに対し、以下のデータチェックを行う
		
		// 検索条件取得（通信利用日を元に請求年月を取得する）
		String seikyYm = getSeikyYm(tsushinUseYmd);

		// ＥＭ契約者コードでレコードの検索
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute] AC_T_CHRG_JSVKEI_CKS 検索（EM契約者コード, ：" + emKshCd + ", 請求年月："+ seikyYm + "）");
		executeAC_T_CHRG_JSVKEI_CKS_AC_SELECT_002(new Object[] {emKshCd, 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(mastMap, 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);

		// 条件に使用する相対番号を取得
		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);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute] 従量料金検索キー：" + Key);
		
		// 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(emUseKoInf, pcrsCd, prcSvcCd, prcKmkCd, seikyYm, opeYmd);
		// 利用パケット数を算出
		BigDecimal usePctCnt = (useByteCnt.divide(chrgTani.multiply(taniPrc), 0, RoundingMode.UP));

		// 初回課金情報作成判定
		if (isCreateFirstChrgInfo(svcKeiNo, opeYmd, tsushinUseYmd)) 
		{
			// 初回課金情報を作成する場合
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute] 初回課金情報作成対象");
			// 初回課金情報を生成
			JBSbatServiceInterfaceMap firstChrgInfData = createFirstChrgInf(svcKeiNo, tsushinUseYmd);
			// 出力共通電文に初回課金情報を設定
			outputBean.addOutMapList(firstChrgInfData);
		}
		
		// eoモバイル明細テーブル登録・更新判定処理
		Object[] emParam = new Object[] {svcKeiNo, pcrsCd, prcSvcCd, seikyYm, tsushinUseYmd};
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute] AC_T_EOMOBA_DTL 検索パラメータ：" + arrayToString(emParam));
		executeAC_T_EOMOBA_DTL_AC_SELECT_006(emParam);

		//レコードの取り出し
		record = db_AC_T_EOMOBA_DTL.selectNext();
		// レコードの存在確認
		if (record == null) 
		{
			// データが存在しない場合
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute] eoモバイル明細 登録対象");
			// eoモバイル明細の登録処理
			insertEoMobaDtl(mastMap, useByteCnt, usePctCnt, svcKeiNo, null, pcrsCd, outPrcKmkCd, sikyKeiNo, seikyYm, outPrcKmkCd, prcSvcCd);
		}
		else
		{
			// データが存在する場合
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute] eoモバイル明細 更新対象");
			// eoモバイル明細の更新処理
			updateEoMobaDtl(useByteCnt, usePctCnt, record);
		}
		// 集計対象請求年月に追加
		ArrayList<Object> seikyYmData = new ArrayList<Object>();
		seikyYmData.add(seikyYm);
		outSeikyYm.put(seikyYm, seikyYmData);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		// 出力共通電文を返却
		return outputBean;

	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		
		// ファイル名を取得
		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);

		// ファイル出力(データ部)
		createFile(files[1], outInfDataList, dataFile.getEncode(), JACBatCommon.chgKaigyo(dataFile.getLine()), dataFileDef.getDelimiter());

		// ファイル定義情報(トレーラ部)を取得
		JBSbatOutputFileUtil trailerFile = new JBSbatOutputFileUtil(files[3]);
		String trailerFileDefName = JBSbatAplConst.getAplConstValue(PRM_OTD) + files[2];
		JBSbatDefFileUtil trailerFileDef = new JBSbatDefFileUtil(trailerFileDefName, trailerFile);

		// ファイル出力(トレーラ部)
		ArrayList<ArrayList<Object>> outInfTrailerList = new ArrayList<ArrayList<Object>>();
		outInfTrailer.add(trailerRecType);
		outInfTrailer.add(outInfDataList.size());
		outInfTrailer.add(trailerYobi);
		outInfTrailerList.add(outInfTrailer);
		createFile(files[3], outInfTrailerList, trailerFile.getEncode(), JACBatCommon.chgKaigyo(trailerFile.getLine()), trailerFileDef.getDelimiter());

		// 集計対象請求年月を取得
		JBSbatOutputFileUtil seikyYmFile = new JBSbatOutputFileUtil(files[5]);
		String seikyYmFileDefName = JBSbatAplConst.getAplConstValue(PRM_OTD) + files[4];
		JBSbatDefFileUtil seikyYmFileDef = new JBSbatDefFileUtil(seikyYmFileDefName, seikyYmFile);

		// ファイル出力(集計対象請求年月)
		ArrayList<ArrayList<Object>> outSeikyYmList = new ArrayList<ArrayList<Object>>(outSeikyYm.values());
		createFile(files[5], outSeikyYmList, seikyYmFile.getEncode(), JACBatCommon.chgKaigyo(seikyYmFile.getLine()), seikyYmFileDef.getDelimiter());

		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		db_CH_M_PRC_SCHDL_TEIGI.close();
		db_CH_T_EM_HOJIN_KEI.close();
		db_AC_T_CHRG_JSVKEI_CKS.close();
		db_AC_M_JURYOPRC.close();
		db_CH_M_PRC_KMK_CS_CHGE.close();
		db_KK_T_SVC_KEI.close();
		db_AC_T_EOMOBA_DTL.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		this.seikyKaknoBusinessUtil.close();
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * @return mastProcFlg を戻します。
	 */
	public boolean isMastProcFlg()
	{
		return mastProcFlg;
	}

	/**
	 * @return matchProcFlg を戻します。
	 */
	public boolean isMatchProcFlg()
	{
		return matchProcFlg;
	}

	/**
	 * @return tranProcFlg を戻します。
	 */
	public boolean isTranProcFlg()
	{
		return tranProcFlg;
	}

	/**
	 * @param mast_ProcFlg 設定する mastProcFlg。
	 */
	public void setMastProcFlg(boolean mast_ProcFlg)
	{
		this.mastProcFlg = mast_ProcFlg;
	}

	/**
	 * @param match_ProcFlg 設定する matchProcFlg。
	 */
	public void setMatchProcFlg(boolean match_ProcFlg)
	{
		this.matchProcFlg = match_ProcFlg;
	}

	/**
	 * @param tran_ProcFlg 設定する tranProcFlg。
	 */
	public void setTranProcFlg(boolean tran_ProcFlg)
	{
		this.tranProcFlg = tran_ProcFlg;
	}

	/**
	 * SQLKEY(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_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	EM契約者コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_EM_HOJIN_KEI_AC_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CH_T_EM_HOJIN_KEI.selectBySqlDefine(paramList, CH_T_EM_HOJIN_KEI_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);
	}

	/**
	 * 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_006)で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_006(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_AC_T_EOMOBA_DTL.selectBySqlDefine(paramList, AC_T_EOMOBA_DTL_AC_SELECT_006);
	}

	/**
	 * 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
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		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]);
		setMap.setValue("UPD_DTM", setParam[2]);
		setMap.setValue("UPD_OPEACNT", setParam[3]);
		setMap.setValue("DEL_DTM", setParam[4]);
		setMap.setValue("DEL_OPEACNT", setParam[5]);
	
		// 条件のマップを作成します
		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);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 従量料金情報検索（従量料金の取得）<br>
	 * 検索結果でマップを作成する。 <br>
	 * @throws Exception
	 */
	private void makeJuryoPrcInfoMap() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeJuryoPrcInfoMap]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(super.systemCode);	// システムコード
		paramList.setValue(super.opeDate);		// 従量料金適用開始年月日
		paramList.setValue(super.opeDate);		// 従量料金適用終了年月日

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeJuryoPrcInfoMap][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] 従量料金取得件数：" + tihJuryoPrcMap.size());
		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 createFile(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 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;
	}

	/**
	 * エラーデータを生成
	 * 
	 * @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(JBSbatACIFM029.ERR_NAIYO, sErr);
		dataMap.setOutFlg(true);
		// エラーデータを返却
		return dataMap;
	}

	/**
	 * EM契約者コードの法人判定処理
	 * 
	 * @param emKshCd EM契約者コード
	 * @return trueなら法人分
	 * @throws Exception
	 */
	private boolean isHojin(String emKshCd) throws Exception
	{
		// executeCH_T_EM_HOJIN_KEI_AC_SELECT_003の呼び出し
		executeCH_T_EM_HOJIN_KEI_AC_SELECT_003(new Object[] {emKshCd});

		//レコードの取り出し
		JBSbatCommonDBInterface record = db_CH_T_EM_HOJIN_KEI.selectNext();

		// 存在チェック
		return record != null;
	}

	/**
	 * 料金項目コードより、出力料金項目コードを取得
	 * 
	 * @param koInf ＥＭ利用呼情報
	 * @param pcrsCd 料金コースコード
	 * @param prcSvcCd 料金サービスコード
	 * @param prcKmkCd 料金項目コード
	 * @param sikyYm 請求年月
	 * @param batYmd バッチ運用年月日
	 * @return 出力料金項目コード
	 * @throws Exception 例外
	 */
	private String getOutPrcKmkCd(String koInf, String pcrsCd, String prcSvcCd, String prcKmkCd, String sikyYm, String batYmd) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getOutPrcKmkCd]");
		
		// 業務機能識別コードを生成
		String workKinoSkbtCd = koInf + sikyYm.substring(4, 6);

		// 検索へ渡す引数配列の生成
		Object[] obParam = new Object[] {JACStrConst.SYS_CD_AC, workKinoSkbtCd, JACStrConst.CHSHT_CHG_CD_2, pcrsCd, prcSvcCd, prcKmkCd, batYmd, batYmd};
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getOutPrcKmkCd] CH_M_PRC_KMK_CS_CHGE 検索パラメータ：" + arrayToString(obParam));
		
		// executeCH_M_PRC_KMK_CS_CHGE_AC_SELECT_004の呼び出し
		executeCH_M_PRC_KMK_CS_CHGE_AC_SELECT_004(obParam);

		//レコードの取り出し
		JBSbatCommonDBInterface record = db_CH_M_PRC_KMK_CS_CHGE.selectNext();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getOutPrcKmkCd]");
		
		// レコードの存在チェック
		if (record != null)
		{
			// 存在する場合
			
			// 出力料金項目コードを返却
			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 svcKeiNo サービス契約番号
	 * @param batYmd バッチ運用年月日
	 * @param useYmd 通信利用年月日
	 * @return trueなら初回課金情報
	 * @throws Exception
	 */
	private boolean isCreateFirstChrgInfo(String svcKeiNo, String batYmd, String useYmd) throws Exception
	{
		// executeKK_T_SVC_KEI_AC_SELECT_018の呼び出し
		executeKK_T_SVC_KEI_AC_SELECT_018(new Object[] {svcKeiNo, batYmd, useYmd});

		//レコードの取り出し
		JBSbatCommonDBInterface record = db_KK_T_SVC_KEI.selectNext();

		// 存在チェック
		return record != null;
	}
	
	/**
	 * eoモバイル明細登録処理
	 * 
	 * @param inMap ＥＭ利用呼情報(データ部)
	 * @param useByte 利用バイト数
	 * @param usePct 利用パケット数
	 * @param svcKeiNo サービス契約番号
	 * @param svcKeiUwNo サービス契約内訳番号
	 * @param pcrsCd 料金コースコード
	 * @param prcKmkCd 料金項目コード
	 * @param sikyKeiNo 請求契約番号
	 * @param sikyYm 請求年月
	 * @param outPrcKmkCd 出力料金項目コード
	 * @param prcSvcCd 料金サービスコード
	 * @throws Exception
	 */
	private void insertEoMobaDtl(JBSbatServiceInterfaceMap inMap, BigDecimal useByte, BigDecimal usePct, String svcKeiNo, String svcKeiUwNo, 
			String pcrsCd, String prcKmkCd, String sikyKeiNo, String sikyYm, String outPrcKmkCd, String prcSvcCd) throws Exception 
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][insertEoMobaDtl]");
		
		// 設定値を格納する配列を生成
		Object[] setParam = new Object[26];
		// 設定値を設定
		setParam[0] = svcKeiNo;
		setParam[1] = svcKeiUwNo;
		setParam[2] = pcrsCd;
		setParam[3] = prcSvcCd;
		setParam[4] = sikyKeiNo;
		setParam[5] = sikyYm;
		setParam[6] = inMap.getString(JBSbatACIFM027.EM_KEISHA_CD);
		setParam[7] = inMap.getString(JBSbatACIFM027.TSUSHIN_USE_DAY).substring(0, 6);
		setParam[8] = inMap.getString(JBSbatACIFM027.TSUSHIN_USE_DAY);
		setParam[9] = inMap.getString(JBSbatACIFM027.TSUSHIN_USE_DAY);
		setParam[10] = useByte;
		setParam[11] = usePct;
		setParam[12] = outPrcKmkCd;

		// eoモバイル明細登録処理
		executeAC_T_EOMOBA_DTL_PKINSERT(setParam);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][insertEoMobaDtl]");
	}
	

	/**
	 * eoモバイル明細更新処理
	 * 
	 * @param useByte 利用バイト数
	 * @param usePct 利用パケット数
	 * @param dbMap 一意照会で検索したeoモバイル明細のＰＫデータ
	 * @throws Exception
	 */
	private void updateEoMobaDtl(BigDecimal useByte, BigDecimal usePct, JBSbatCommonDBInterface dbMap) throws Exception 
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][updateEoMobaDtl]");
		
		// 設定値と条件値を格納する配列を生成
		Object[] setParam = new Object[6];
		Object[] whereParam = new Object[7];
		// 設定値を設定
		setParam[0] = useByte;	// 利用バイト数
		setParam[1] = usePct;	// 利用パケット数
		// 条件値を設定
		whereParam[0] = dbMap.getString(JBSbatAC_T_EOMOBA_DTL.SVC_KEI_NO);		// 請求契約番号
		whereParam[1] = dbMap.getString(JBSbatAC_T_EOMOBA_DTL.PCRS_CD);			// 料金コースコード
		whereParam[2] = dbMap.getString(JBSbatAC_T_EOMOBA_DTL.PRC_SVC_CD);		// 料金サービスコード
		whereParam[3] = dbMap.getString(JBSbatAC_T_EOMOBA_DTL.SEIKY_YM);		// 請求年月
		whereParam[4] = dbMap.getString(JBSbatAC_T_EOMOBA_DTL.TSUSHIN_STA_DTM);	// 通信開始年月日時分秒
		whereParam[5] = dbMap.getString(JBSbatAC_T_EOMOBA_DTL.TSUSHIN_END_DTM);	// 通信終了年月日時分秒
		// eoモバイル明細更新処理
		executeAC_T_EOMOBA_DTL_PKUPDATE(setParam, whereParam);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][updateEoMobaDtl]");
	}

	/**
	 * 請求年月を取得
	 * 
	 * @param tsushinUseYmd 通信利用日
	 * @return 請求年月
	 * @throws Exception
	 */
	private String getSeikyYm(String tsushinUseYmd) throws Exception 
	{
		// executeCH_M_PRC_SCHDL_TEIGI_AC_SELECT_002の呼び出し
		executeCH_M_PRC_SCHDL_TEIGI_AC_SELECT_002(new Object[] {tsushinUseYmd, tsushinUseYmd});
		JBSbatCommonDBInterface record = db_CH_M_PRC_SCHDL_TEIGI.selectNext();

		// レコードの存在チェック
		if (record != null)
		{
			// レコードが存在する場合

			// 値を取得
			return record.getString(JBSbatCH_M_PRC_SCHDL_TEIGI.SEIKY_YM);
		}
		else
		{
			// レコードが存在しない場合
			
			// 業務例外
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0440CE, new String[] {JBSbatCH_M_PRC_SCHDL_TEIGI.TABLE_NAME});
		}
	}

	/**
	 * 業務パラメータ値を取得
	 * 
	 * @param paramId 業務パラメータID
	 * @param batYmd バッチ運用年月日
	 * @return 業務パラメータ
	 * @throws Exception
	 */
	private String getWorkParamVal(String paramId, String batYmd) throws Exception 
	{
		// executeZM_M_WORK_PARAM_KNRI_AC_SELECT_001の呼び出し
		executeZM_M_WORK_PARAM_KNRI_AC_SELECT_001(new Object[] {paramId, batYmd, batYmd});

		// レコードの取り出し
		JBSbatCommonDBInterface record = db_ZM_M_WORK_PARAM_KNRI.selectNext();

		// レコードの存在チェック
		if (record != null)
		{
			// レコードが存在する場合

			// 業務パラメータ値を取得
			return 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});
		}
	}
	
	/**
	 * 配列をカンマ区切り文字列に編集します。
	 * 
	 * @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();
	}
}
