/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACEOHKoInfInpChkZui
*	ソースファイル名	：JBSbatACEOHKoInfInpChkZui.java
*	作成者				：富士通　
*	作成日				：2011年07月29日
*＜機能概要＞
*　ｅｏ光電話呼情報入力チェック（随時）部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/29   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatACIFM076;
import eo.business.util.file.JBSbatACIFM079;
import eo.business.util.file.JBSbatACIFM083;
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.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatCheckUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACEOHKoInfInpChkZui extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String ZM_M_WORK_PARAM_KNRI_AC_SELECT_001 = "AC_SELECT_001";

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 単項目チェック項目マップ */
	private HashMap<String, String> singleChkKmkMap = null;

	/** [業務パラメータ]エラー内容 */
	private HashMap<String, String> wkParamErrMsg = null;

	/** システム時間 */
	private String sysWkTime = "";

	/**
	 * 初期処理
	 * @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);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		// 業務パラメータより入力チェックエラーメッセージを取得する
		getWorkParam();

		// システム時間(HHmmssS)の取得
		sysWkTime = JCCBatCommon.getSysDateTimeStamp().substring(8, 15);

		// 単項目チェック用Map生成
		singleChkKmkMap = new HashMap<String, String>();
		singleChkKmkMap.put("TXT-ACIFM076-INF1.REC_SBT", "ｅｏ光電話利用呼情報データファイル（データ）.レコード種別");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.KAKINS_TELNO", "ｅｏ光電話利用呼情報データファイル（データ）.課金電話番号");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.HASHIN_TELNO", "ｅｏ光電話利用呼情報データファイル（データ）.発信元電話番号");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.INCOMING_TELNO", "ｅｏ光電話利用呼情報データファイル（データ）.着信先電話番号");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.PCALL_STAYMD", "ｅｏ光電話利用呼情報データファイル（データ）.通話開始日");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.PCALL_STA_HMS", "ｅｏ光電話利用呼情報データファイル（データ）.通話開始時刻");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.PCALL_ENDYMD", "ｅｏ光電話利用呼情報データファイル（データ）.通話終了日");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.PCALL_END_HMS", "ｅｏ光電話利用呼情報データファイル（データ）.通話終了時刻");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.PCALL_SEC_CNT", "ｅｏ光電話利用呼情報データファイル（データ）.通話秒数");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.PCALL_DOSU", "ｅｏ光電話利用呼情報データファイル（データ）.通話度数");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.PCALL_TANKA", "ｅｏ光電話利用呼情報データファイル（データ）.通話単価");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.PCALL_PRC", "ｅｏ光電話利用呼情報データファイル（データ）.通話料金");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.PCALL_SBT", "ｅｏ光電話利用呼情報データファイル（データ）.通話種別");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.PCALL_SVC_DIV", "ｅｏ光電話利用呼情報データファイル（データ）.サービス区分");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.CUT_RSN_DIV_SIP", "ｅｏ光電話利用呼情報データファイル（データ）.切断理由−ＳＩＰ");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.CUT_RSN_DIV_ISUP", "ｅｏ光電話利用呼情報データファイル（データ）.切断理由−ＩＳＵＰ");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.CUT_RSN_DIV", "ｅｏ光電話利用呼情報データファイル（データ）.切断理由区分");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.CUT_DTAIL_INFO_DKMK_IDX_NO", "ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−大項目番号");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.CUT_DTAIL_INFO_CKMK_IDX_NO", "ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−中項目番号");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.CUT_DTAIL_INFO_HTCK_SBT_CD", "ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−発着種別");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.CHRG_DSP_CD", "ｅｏ光電話利用呼情報データファイル（データ）.課金表示");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.EMG_KO_FLG", "ｅｏ光電話利用呼情報データファイル（データ）.緊急通報呼フラグ");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.CHG_SIGNAL_RCV_CNT", "ｅｏ光電話利用呼情報データファイル（データ）.ＣＨＧ信号受信回数");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.TENSO_JI_HASHIN_TELNO", "ｅｏ光電話利用呼情報データファイル（データ）.転送時発信元番号");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.COUNTRY_NM", "ｅｏ光電話利用呼情報データファイル（データ）.国名");
		singleChkKmkMap.put("TXT-ACIFM076-INF1.YOBI", "ｅｏ光電話利用呼情報データファイル（データ）.予備");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 出力共通電文オブジェクト生成
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// 単項目チェック(レイアウトチェック)
		if (!isSingleCheckACIFM076_INF1(inMap.getMap(), singleChkKmkMap))
		{
			// エラーの場合は業務ログ出力、エラーファイル出力
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0640CW, new String[]{});

			// エラー
			outputBean.addOutMapList_2(setErrDataFileMap(inMap, JACStrConst.WKPARA_AC_MSG_SNGL_CHKERR));
		}
		else
		{
			// 通話開始日
			String callStaYmd = inMap.getString(JBSbatACIFM083.PCALL_STAYMD);
			
			// 通話開始時刻
			String callStaHms = inMap.getString(JBSbatACIFM083.PCALL_STA_HMS);
			
			// 入力チェック
			if (checkInputData(callStaYmd, callStaHms))
			{
				// 正常
				outputBean.addOutMapList(setNormalDataFileMap(inMap));
			}
			else
			{
				// エラー
				outputBean.addOutMapList_2(setErrDataFileMap(inMap, JACStrConst.WKPARA_AC_MSG_FUTURE_DAYERR));
			}
		}

		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 *入力情報（ｅｏ光電話利用呼情報データファイル（データ））の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-ACIFM076-INF1.REC_SBT			ｅｏ光電話利用呼情報データファイル（データ）.レコード種別
	 *			 TXT-ACIFM076-INF1.REC_SBT			ｅｏ光電話利用呼情報データファイル（データ）.レコード種別
	 *			 TXT-ACIFM076-INF1.KAKINS_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.課金電話番号
	 *			 TXT-ACIFM076-INF1.KAKINS_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.課金電話番号
	 *			 TXT-ACIFM076-INF1.KAKINS_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.課金電話番号
	 *			 TXT-ACIFM076-INF1.HASHIN_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.発信元電話番号
	 *			 TXT-ACIFM076-INF1.HASHIN_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.発信元電話番号
	 *			 TXT-ACIFM076-INF1.INCOMING_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.着信先電話番号
	 *			 TXT-ACIFM076-INF1.INCOMING_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.着信先電話番号
	 *			 TXT-ACIFM076-INF1.PCALL_STAYMD			ｅｏ光電話利用呼情報データファイル（データ）.通話開始日
	 *			 TXT-ACIFM076-INF1.PCALL_STAYMD			ｅｏ光電話利用呼情報データファイル（データ）.通話開始日
	 *			 TXT-ACIFM076-INF1.PCALL_STAYMD			ｅｏ光電話利用呼情報データファイル（データ）.通話開始日
	 *			 TXT-ACIFM076-INF1.PCALL_STA_HMS			ｅｏ光電話利用呼情報データファイル（データ）.通話開始時刻
	 *			 TXT-ACIFM076-INF1.PCALL_STA_HMS			ｅｏ光電話利用呼情報データファイル（データ）.通話開始時刻
	 *			 TXT-ACIFM076-INF1.PCALL_STA_HMS			ｅｏ光電話利用呼情報データファイル（データ）.通話開始時刻
	 *			 TXT-ACIFM076-INF1.PCALL_ENDYMD			ｅｏ光電話利用呼情報データファイル（データ）.通話終了日
	 *			 TXT-ACIFM076-INF1.PCALL_ENDYMD			ｅｏ光電話利用呼情報データファイル（データ）.通話終了日
	 *			 TXT-ACIFM076-INF1.PCALL_END_HMS			ｅｏ光電話利用呼情報データファイル（データ）.通話終了時刻
	 *			 TXT-ACIFM076-INF1.PCALL_END_HMS			ｅｏ光電話利用呼情報データファイル（データ）.通話終了時刻
	 *			 TXT-ACIFM076-INF1.PCALL_SEC_CNT			ｅｏ光電話利用呼情報データファイル（データ）.通話秒数
	 *			 TXT-ACIFM076-INF1.PCALL_SEC_CNT			ｅｏ光電話利用呼情報データファイル（データ）.通話秒数
	 *			 TXT-ACIFM076-INF1.PCALL_DOSU			ｅｏ光電話利用呼情報データファイル（データ）.通話度数
	 *			 TXT-ACIFM076-INF1.PCALL_DOSU			ｅｏ光電話利用呼情報データファイル（データ）.通話度数
	 *			 TXT-ACIFM076-INF1.PCALL_TANKA			ｅｏ光電話利用呼情報データファイル（データ）.通話単価
	 *			 TXT-ACIFM076-INF1.PCALL_TANKA			ｅｏ光電話利用呼情報データファイル（データ）.通話単価
	 *			 TXT-ACIFM076-INF1.PCALL_PRC			ｅｏ光電話利用呼情報データファイル（データ）.通話料金
	 *			 TXT-ACIFM076-INF1.PCALL_PRC			ｅｏ光電話利用呼情報データファイル（データ）.通話料金
	 *			 TXT-ACIFM076-INF1.PCALL_SBT			ｅｏ光電話利用呼情報データファイル（データ）.通話種別
	 *			 TXT-ACIFM076-INF1.PCALL_SBT			ｅｏ光電話利用呼情報データファイル（データ）.通話種別
	 *			 TXT-ACIFM076-INF1.PCALL_SVC_DIV			ｅｏ光電話利用呼情報データファイル（データ）.サービス区分
	 *			 TXT-ACIFM076-INF1.PCALL_SVC_DIV			ｅｏ光電話利用呼情報データファイル（データ）.サービス区分
	 *			 TXT-ACIFM076-INF1.CUT_RSN_DIV_SIP			ｅｏ光電話利用呼情報データファイル（データ）.切断理由−ＳＩＰ
	 *			 TXT-ACIFM076-INF1.CUT_RSN_DIV_SIP			ｅｏ光電話利用呼情報データファイル（データ）.切断理由−ＳＩＰ
	 *			 TXT-ACIFM076-INF1.CUT_RSN_DIV_ISUP			ｅｏ光電話利用呼情報データファイル（データ）.切断理由−ＩＳＵＰ
	 *			 TXT-ACIFM076-INF1.CUT_RSN_DIV_ISUP			ｅｏ光電話利用呼情報データファイル（データ）.切断理由−ＩＳＵＰ
	 *			 TXT-ACIFM076-INF1.CUT_RSN_DIV			ｅｏ光電話利用呼情報データファイル（データ）.切断理由区分
	 *			 TXT-ACIFM076-INF1.CUT_RSN_DIV			ｅｏ光電話利用呼情報データファイル（データ）.切断理由区分
	 *			 TXT-ACIFM076-INF1.CUT_DTAIL_INFO_DKMK_IDX_NO			ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−大項目番号
	 *			 TXT-ACIFM076-INF1.CUT_DTAIL_INFO_DKMK_IDX_NO			ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−大項目番号
	 *			 TXT-ACIFM076-INF1.CUT_DTAIL_INFO_CKMK_IDX_NO			ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−中項目番号
	 *			 TXT-ACIFM076-INF1.CUT_DTAIL_INFO_CKMK_IDX_NO			ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−中項目番号
	 *			 TXT-ACIFM076-INF1.CUT_DTAIL_INFO_HTCK_SBT_CD			ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−発着種別
	 *			 TXT-ACIFM076-INF1.CUT_DTAIL_INFO_HTCK_SBT_CD			ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−発着種別
	 *			 TXT-ACIFM076-INF1.CHRG_DSP_CD			ｅｏ光電話利用呼情報データファイル（データ）.課金表示
	 *			 TXT-ACIFM076-INF1.CHRG_DSP_CD			ｅｏ光電話利用呼情報データファイル（データ）.課金表示
	 *			 TXT-ACIFM076-INF1.EMG_KO_FLG			ｅｏ光電話利用呼情報データファイル（データ）.緊急通報呼フラグ
	 *			 TXT-ACIFM076-INF1.EMG_KO_FLG			ｅｏ光電話利用呼情報データファイル（データ）.緊急通報呼フラグ
	 *			 TXT-ACIFM076-INF1.CHG_SIGNAL_RCV_CNT			ｅｏ光電話利用呼情報データファイル（データ）.ＣＨＧ信号受信回数
	 *			 TXT-ACIFM076-INF1.CHG_SIGNAL_RCV_CNT			ｅｏ光電話利用呼情報データファイル（データ）.ＣＨＧ信号受信回数
	 *			 TXT-ACIFM076-INF1.TENSO_JI_HASHIN_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.転送時発信元番号
	 *			 TXT-ACIFM076-INF1.TENSO_JI_HASHIN_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.転送時発信元番号
	 *			 TXT-ACIFM076-INF1.COUNTRY_NM			ｅｏ光電話利用呼情報データファイル（データ）.国名
	 *			 TXT-ACIFM076-INF1.COUNTRY_NM			ｅｏ光電話利用呼情報データファイル（データ）.国名
	 *			 TXT-ACIFM076-INF1.YOBI			ｅｏ光電話利用呼情報データファイル（データ）.予備
	 *			 TXT-ACIFM076-INF1.YOBI			ｅｏ光電話利用呼情報データファイル（データ）.予備
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckACIFM076_INF1(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// レコード種別項目チェック
		strValue = (String)rsMap.get("REC_SBT");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.REC_SBT")});
			return false;
		}

		// 課金電話番号項目チェック
		strValue = (String)rsMap.get("KAKINS_TELNO");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.KAKINS_TELNO")});
			return false;
		}

		// 発信元電話番号項目チェック
		strValue = (String)rsMap.get("HASHIN_TELNO");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.HASHIN_TELNO")});
			return false;
		}

		// 着信先電話番号項目チェック
		strValue = (String)rsMap.get("INCOMING_TELNO");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.INCOMING_TELNO")});
			return false;
		}

		// 通話開始日項目チェック
		strValue = (String)rsMap.get("PCALL_STAYMD");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month_day1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.PCALL_STAYMD")});
			return false;
		}

		// 通話開始時刻項目チェック
		strValue = (String)rsMap.get("PCALL_STA_HMS");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hour_min_sec3"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.PCALL_STA_HMS")});
			return false;
		}

		// 通話終了日項目チェック
		strValue = (String)rsMap.get("PCALL_ENDYMD");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month_day1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.PCALL_ENDYMD")});
			return false;
		}

		// 通話終了時刻項目チェック
		strValue = (String)rsMap.get("PCALL_END_HMS");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hour_min_sec3"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.PCALL_END_HMS")});
			return false;
		}

		// 通話秒数項目チェック
		strValue = (String)rsMap.get("PCALL_SEC_CNT");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.PCALL_SEC_CNT")});
			return false;
		}

		// 通話度数項目チェック
		strValue = (String)rsMap.get("PCALL_DOSU");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.PCALL_DOSU")});
			return false;
		}

		// 通話単価項目チェック
		strValue = (String)rsMap.get("PCALL_TANKA");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.PCALL_TANKA")});
			return false;
		}

		// 通話料金項目チェック
		strValue = (String)rsMap.get("PCALL_PRC");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.PCALL_PRC")});
			return false;
		}

		// 通話種別項目チェック
		strValue = (String)rsMap.get("PCALL_SBT");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.PCALL_SBT")});
			return false;
		}

		// サービス区分項目チェック
		strValue = (String)rsMap.get("PCALL_SVC_DIV");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.PCALL_SVC_DIV")});
			return false;
		}

		// 切断理由−ＳＩＰ項目チェック
		strValue = (String)rsMap.get("CUT_RSN_DIV_SIP");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.CUT_RSN_DIV_SIP")});
			return false;
		}

		// 切断理由−ＩＳＵＰ項目チェック
		strValue = (String)rsMap.get("CUT_RSN_DIV_ISUP");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.CUT_RSN_DIV_ISUP")});
			return false;
		}

		// 切断理由区分項目チェック
		strValue = (String)rsMap.get("CUT_RSN_DIV");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.CUT_RSN_DIV")});
			return false;
		}

		// 切断詳細情報−大項目番号項目チェック
		strValue = (String)rsMap.get("CUT_DTAIL_INFO_DKMK_IDX_NO");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.CUT_DTAIL_INFO_DKMK_IDX_NO")});
			return false;
		}

		// 切断詳細情報−中項目番号項目チェック
		strValue = (String)rsMap.get("CUT_DTAIL_INFO_CKMK_IDX_NO");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.CUT_DTAIL_INFO_CKMK_IDX_NO")});
			return false;
		}

		// 切断詳細情報−発着種別項目チェック
		strValue = (String)rsMap.get("CUT_DTAIL_INFO_HTCK_SBT_CD");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.CUT_DTAIL_INFO_HTCK_SBT_CD")});
			return false;
		}

		// 課金表示項目チェック
		strValue = (String)rsMap.get("CHRG_DSP_CD");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.CHRG_DSP_CD")});
			return false;
		}

		// 緊急通報呼フラグ項目チェック
		strValue = (String)rsMap.get("EMG_KO_FLG");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.EMG_KO_FLG")});
			return false;
		}

		// ＣＨＧ信号受信回数項目チェック
		strValue = (String)rsMap.get("CHG_SIGNAL_RCV_CNT");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.CHG_SIGNAL_RCV_CNT")});
			return false;
		}

		// 転送時発信元番号項目チェック
		strValue = (String)rsMap.get("TENSO_JI_HASHIN_TELNO");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji3"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.TENSO_JI_HASHIN_TELNO")});
			return false;
		}

		// 国名項目チェック
		strValue = (String)rsMap.get("COUNTRY_NM");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji3"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.COUNTRY_NM")});
			return false;
		}

		// 予備項目チェック
		strValue = (String)rsMap.get("YOBI");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji3"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(String)itemvalueMap.get("TXT-ACIFM076-INF1.YOBI")});
			return false;
		}

		return true;
	}

	/**
	 * 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);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 業務パラメータの取得
	 * @throws Exception
	 */
	private void getWorkParam() throws Exception
	{
		wkParamErrMsg = new HashMap<String, String>();
		
		ArrayList<String> paramIDList = new ArrayList<String>();
		paramIDList.add(JACStrConst.WKPARA_AC_MSG_SNGL_CHKERR);
		paramIDList.add(JACStrConst.WKPARA_AC_MSG_FUTURE_DAYERR);

		for (String paramID : paramIDList)
		{
			// 業務パラメータより入力チェックエラーメッセージを取得する
			executeZM_M_WORK_PARAM_KNRI_AC_SELECT_001(new Object[] {paramID, super.opeDate, super.opeDate});
			JBSbatCommonDBInterface record = db_ZM_M_WORK_PARAM_KNRI.selectNext();
			if (record != null)
			{
				wkParamErrMsg.put(paramID, 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 callStaYmd
	 * @param callStaHms
	 * @return	true:正常、false:エラー
	 * @throws Exception
	 */
	private boolean checkInputData(String callStaYmd, String callStaHms) throws Exception
	{
		if (Long.parseLong(super.opeDate + sysWkTime) < Long.parseLong(callStaYmd + callStaHms))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0630NW, new String[]{});
			return false;
		}

		return true;
	}

	/**
	 * 正常ファイルの出力項目を設定する
	 * @param inMap		入力電文
	 * @return	JBSbatServiceInterfaceMap	出力電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setNormalDataFileMap(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		JBSbatServiceInterfaceMap retMap = new JBSbatServiceInterfaceMap();

		// 課金電話番号
		retMap.setString(JBSbatACIFM083.KAKINS_TELNO, inMap.getString(JBSbatACIFM076.KAKINS_TELNO).trim());

		// 発信元電話番号
		retMap.setString(JBSbatACIFM083.HASHIN_TELNO, inMap.getString(JBSbatACIFM076.HASHIN_TELNO).trim());

		// 着信先電話番号
		retMap.setString(JBSbatACIFM083.INCOMING_TELNO, inMap.getString(JBSbatACIFM076.INCOMING_TELNO).trim());

		// 通話開始日
		retMap.set(JBSbatACIFM083.PCALL_STAYMD, inMap.get(JBSbatACIFM076.PCALL_STAYMD));

		// 通話開始時刻
		retMap.set(JBSbatACIFM083.PCALL_STA_HMS, inMap.get(JBSbatACIFM076.PCALL_STA_HMS));

		// 通話終了日
		retMap.set(JBSbatACIFM083.PCALL_ENDYMD, inMap.get(JBSbatACIFM076.PCALL_ENDYMD));

		// 通話終了時刻
		retMap.set(JBSbatACIFM083.PCALL_END_HMS, inMap.get(JBSbatACIFM076.PCALL_END_HMS));

		// 通話秒数
		retMap.setDouble(JBSbatACIFM083.PCALL_SEC_CNT, inMap.getString(JBSbatACIFM076.PCALL_SEC_CNT));

		// 通話度数
		retMap.setLong(JBSbatACIFM083.PCALL_DOSU, inMap.get(JBSbatACIFM076.PCALL_DOSU));

		// 通話単価.
		retMap.setDouble(JBSbatACIFM083.PCALL_TANKA, inMap.getString(JBSbatACIFM076.PCALL_TANKA));

		// 通話料金
		retMap.setDouble(JBSbatACIFM083.PCALL_PRC, inMap.getString(JBSbatACIFM076.PCALL_PRC));

		// 通話種別
		retMap.set(JBSbatACIFM083.PCALL_SBT, inMap.get(JBSbatACIFM076.PCALL_SBT));

		// 通話サービス識別コード
		retMap.set(JBSbatACIFM083.TUWA_SVC_SKBT_CD, inMap.get(JBSbatACIFM076.PCALL_SVC_DIV));

		// 切断理由−ＳＩＰ
		retMap.set(JBSbatACIFM083.CUT_RSN_DIV_SIP, inMap.get(JBSbatACIFM076.CUT_RSN_DIV_SIP));

		// 切断理由−ＩＳＵＰ
		retMap.set(JBSbatACIFM083.CUT_RSN_DIV_ISUP, inMap.get(JBSbatACIFM076.CUT_RSN_DIV_ISUP));

		// 切断理由区分
		retMap.set(JBSbatACIFM083.CUT_RSN_DIV, inMap.get(JBSbatACIFM076.CUT_RSN_DIV));

		// 切断詳細情報−大項目
		retMap.set(JBSbatACIFM083.CUT_DTAIL_INFO_DKMK_IDX_NO, inMap.get(JBSbatACIFM076.CUT_DTAIL_INFO_DKMK_IDX_NO));

		// 切断詳細情報−中項目お
		retMap.set(JBSbatACIFM083.CUT_DTAIL_INFO_CKMK_IDX_NO, inMap.get(JBSbatACIFM076.CUT_DTAIL_INFO_CKMK_IDX_NO));

		// 切断詳細情報−発着種別
		retMap.set(JBSbatACIFM083.CUT_DTAIL_INFO_HTCK_SBT_CD, inMap.get(JBSbatACIFM076.CUT_DTAIL_INFO_HTCK_SBT_CD));

		// 課金表示
		retMap.set(JBSbatACIFM083.CHRG_DSP_CD, inMap.get(JBSbatACIFM076.CHRG_DSP_CD));

		// 緊急通報呼フラグ
		retMap.set(JBSbatACIFM083.EMG_KO_FLG, inMap.get(JBSbatACIFM076.EMG_KO_FLG));

		// ＣＨＧ信号受信回数
		retMap.setLong(JBSbatACIFM083.CHG_SIGNAL_RCV_CNT, inMap.get(JBSbatACIFM076.CHG_SIGNAL_RCV_CNT));

		// 転送時発信元番号
		retMap.setString(JBSbatACIFM083.TENSO_JI_HASHIN_TELNO, inMap.getString(JBSbatACIFM076.TENSO_JI_HASHIN_TELNO).trim());

		// 国名
		retMap.setString(JBSbatACIFM083.COUNTRY_NM, inMap.getString(JBSbatACIFM076.COUNTRY_NM).trim());

		retMap.setOutFlg(true);
		
		return retMap;
	}

	/**
	 * エラーファイルの出力項目を設定する
	 * @param inMap		入力電文
	 * @param errMsg	エラーコード
	 * @return	JBSbatServiceInterfaceMap	出力電文
	 * @throws Exception
	 */
	private JBSbatServiceInterfaceMap setErrDataFileMap(JBSbatServiceInterfaceMap inMap, String errMsg) throws Exception
	{
		JBSbatServiceInterfaceMap retMap = new JBSbatServiceInterfaceMap();

		// 課金電話番号
		retMap.setString(JBSbatACIFM079.KAKINS_TELNO, inMap.getString(JBSbatACIFM076.KAKINS_TELNO).trim());

		// 発信元電話番号
		retMap.setString(JBSbatACIFM079.HASHIN_TELNO, inMap.getString(JBSbatACIFM076.HASHIN_TELNO).trim());

		// 着信先電話番号
		retMap.setString(JBSbatACIFM079.INCOMING_TELNO, inMap.getString(JBSbatACIFM076.INCOMING_TELNO).trim());

		// 通話開始日
		retMap.set(JBSbatACIFM079.PCALL_STAYMD, inMap.get(JBSbatACIFM076.PCALL_STAYMD));

		// 通話開始時刻
		retMap.set(JBSbatACIFM079.PCALL_STA_HMS, inMap.get(JBSbatACIFM076.PCALL_STA_HMS));

		// 通話終了日
		retMap.set(JBSbatACIFM079.PCALL_ENDYMD, inMap.get(JBSbatACIFM076.PCALL_ENDYMD));

		// 通話終了時刻
		retMap.set(JBSbatACIFM079.PCALL_END_HMS, inMap.get(JBSbatACIFM076.PCALL_END_HMS));

		// 通話秒数
		retMap.setDouble(JBSbatACIFM079.PCALL_SEC_CNT, 
				addDecimalPoint(inMap.getString(JBSbatACIFM076.PCALL_SEC_CNT), JACStrConst.PCALL_SEC_CNT_DEC_LENGTH));

		// 通話度数
		retMap.setLong(JBSbatACIFM079.PCALL_DOSU, inMap.get(JBSbatACIFM076.PCALL_DOSU));

		// 通話単価
		retMap.setDouble(JBSbatACIFM079.PCALL_TANKA, 
				addDecimalPoint(inMap.getString(JBSbatACIFM076.PCALL_TANKA), JACStrConst.PCALL_TANKA_DEC_LENGTH));

		// 通話料金
		retMap.setDouble(JBSbatACIFM079.PCALL_PRC, 
				addDecimalPoint(inMap.getString(JBSbatACIFM076.PCALL_PRC), JACStrConst.PCALL_PRC_DEC_LENGTH));

		// 通話種別
		retMap.set(JBSbatACIFM079.PCALL_SBT, inMap.get(JBSbatACIFM076.PCALL_SBT));

		// 通話サービス識別コード
		retMap.set(JBSbatACIFM079.TUWA_SVC_SKBT_CD, inMap.get(JBSbatACIFM076.PCALL_SVC_DIV));

		// 切断理由−ＳＩＰ
		retMap.set(JBSbatACIFM079.CUT_RSN_DIV_SIP, inMap.get(JBSbatACIFM076.CUT_RSN_DIV_SIP));

		// 切断理由−ＩＳＵＰ
		retMap.set(JBSbatACIFM079.CUT_RSN_DIV_ISUP, inMap.get(JBSbatACIFM076.CUT_RSN_DIV_ISUP));

		// 切断理由区分
		retMap.set(JBSbatACIFM079.CUT_RSN_DIV, inMap.get(JBSbatACIFM076.CUT_RSN_DIV));

		// 切断詳細情報−大項目
		retMap.set(JBSbatACIFM079.CUT_DTAIL_INFO_DKMK_IDX_NO, inMap.get(JBSbatACIFM076.CUT_DTAIL_INFO_DKMK_IDX_NO));

		// 切断詳細情報−中項目お
		retMap.set(JBSbatACIFM079.CUT_DTAIL_INFO_CKMK_IDX_NO, inMap.get(JBSbatACIFM076.CUT_DTAIL_INFO_CKMK_IDX_NO));

		// 切断詳細情報−発着種別
		retMap.set(JBSbatACIFM079.CUT_DTAIL_INFO_HTCK_SBT_CD, inMap.get(JBSbatACIFM076.CUT_DTAIL_INFO_HTCK_SBT_CD));

		// 課金表示
		retMap.set(JBSbatACIFM079.CHRG_DSP_CD, inMap.get(JBSbatACIFM076.CHRG_DSP_CD));

		// 緊急通報呼フラグ
		retMap.set(JBSbatACIFM079.EMG_KO_FLG, inMap.get(JBSbatACIFM076.EMG_KO_FLG));

		// ＣＨＧ信号受信回数
		retMap.setLong(JBSbatACIFM079.CHG_SIGNAL_RCV_CNT, inMap.get(JBSbatACIFM076.CHG_SIGNAL_RCV_CNT));

		// 転送時発信元番号
		retMap.setString(JBSbatACIFM079.TENSO_JI_HASHIN_TELNO, inMap.getString(JBSbatACIFM076.TENSO_JI_HASHIN_TELNO).trim());

		// 国名
		retMap.setString(JBSbatACIFM079.COUNTRY_NM, inMap.getString(JBSbatACIFM076.COUNTRY_NM).trim());

		// エラーコード
		retMap.set(JBSbatACIFM079.ERR_CD, errMsg);

		// エラー内容
		retMap.set(JBSbatACIFM079.ERR_NAIYO, wkParamErrMsg.get(errMsg));

		retMap.setOutFlg(true);
		retMap.setInputErrorFlg(true);
		return retMap;
	}
	
	/**
	 * 文字列の右から 指定された桁数の位置に小数点を付与する
	 * @param baseNumValue	付与元文字列
	 * @param decNum	小数点以下桁数
	 * @return	double	小数点付与後文字列
	 * @throws Exception
	 */
	private String addDecimalPoint(String baseNumValue, int decNum) throws Exception
	{
		StringBuffer numValue = new StringBuffer(baseNumValue);

		// 指定位置に小数点を付与して返却
		return numValue.insert(baseNumValue.length() - decNum, JACStrConst.DECIMAL_POINT).toString();
	}
}
