/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACCn050ApKoInfInputChk
*	ソースファイル名	：JBSbatACCn050ApKoInfInputChk.java
*	作成者				：富士通　
*	作成日				：2017年11月02日
*＜機能概要＞
*　コンテンツ利用呼情報入力チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v35.00.00	2017/11/02   FJ）清原	【ANK-3192-00-00】LaLaCallの通話明細情報の取得タイミング変更 新規作成
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JACBatCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatACIFM075;
import eo.business.util.file.JBSbatACIFM076;
import eo.business.util.file.JBSbatACIFM077;
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.JBSbatInputFileUtil;
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 JBSbatACCn050ApKoInfInputChk 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 static final String PARAM_IND = "IND";
	
	/** ファイル定義 */
	private static final String PARAM_OTD = "OTD";
	
	/** ヘッダーレコード種別 */
	private static final String HEADER_REC_SBT = "0";

	/** データレコード種別 */
	private static final String DATA_REC_SBT = "1";

	/** トレーラレコード種別 */
	private static final String TRAILER_REC_SBT = "8";
	
	/** エンドレコード種別 */
	private static final String END_REC_SBT = "9";

	/** 埋め込み文字列を格納する配列 */
	private HashMap<String, String>itemValueMap = null;

	/** 未来日呼エラー */
	private String msgFutureDayErr = null;
	
	/** サービス区分エラー */
	private String msgSvcKbnErr = null;

	/** フリー項目情報格納用配列 */
	private String[] fleeItemArray = null;

	/** 前回通番 */
	private Integer znkiSeq = null;
	
	/** 通番 */
	private int seq = 0;
	
	/** レコード種別 */
	private String recSbt = null;
	
	/** 前回レコード種別 */
	private String znkiRecSbt = null;

	/** トレーラ部レコード件数 */
	private int trailerRecCnt = 0;
	
	/** システム時分秒（オンライン運用日＋システム時間） */
	private String sysWkTime = null;
	
	/** 置換前050番号 */
	private String ckanBf050No = JACStrConst.KARA_MOJI;
	
	/** 前種別 */
	private static final String BF_SBT = "前種別；";
	
	/** 現種別 */
	private static final String NOW_SBT = "現種別；";
	
	/** 業務パラメータ(050アプリサービス区分)*/
	private String aplSvcKbn = null;
	
	/** 050アプリ分データ件数*/
	private Integer aplSize = 0;

	/** 0ABJ番号変換ファイル項目定義 */
	JBSbatDefFileUtil   zeroAbjNoListDef;

	/**
	 * 初期処理
	 * @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);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		// 埋め込み文字の初期化
		itemValueMap = new HashMap<String, String>();
		itemValueMap.put("TXT-ACIFE002-.REC_SBT", "ｅｏ光電話利用呼情報データファイル.レコード種別");
		itemValueMap.put("TXT-ACIFM075-.FILE_SEQ", "ｅｏ光電話利用呼情報データファイル（ヘッダ）.ファイル通番");
		itemValueMap.put("TXT-ACIFM076-.KAKINS_TELNO", "ｅｏ光電話利用呼情報データファイル（データ）.課金電話番号");
		itemValueMap.put("TXT-ACIFM076-.HASHIN_TELNO", "ｅｏ光電話利用呼情報データファイル（データ）.発信元電話番号");
		itemValueMap.put("TXT-ACIFM076-.INCOMING_TELNO", "ｅｏ光電話利用呼情報データファイル（データ）.着信先電話番号");
		itemValueMap.put("TXT-ACIFM076-.PCALL_STAYMD", "ｅｏ光電話利用呼情報データファイル（データ）.通話開始日");
		itemValueMap.put("TXT-ACIFM076-.PCALL_STA_HMS", "ｅｏ光電話利用呼情報データファイル（データ）.通話開始時刻");
		itemValueMap.put("TXT-ACIFM076-.PCALL_ENDYMD", "ｅｏ光電話利用呼情報データファイル（データ）.通話終了日");
		itemValueMap.put("TXT-ACIFM076-.PCALL_END_HMS", "ｅｏ光電話利用呼情報データファイル（データ）.通話終了時刻");
		itemValueMap.put("TXT-ACIFM076-.PCALL_SEC_CNT", "ｅｏ光電話利用呼情報データファイル（データ）.通話秒数");
		itemValueMap.put("TXT-ACIFM076-.PCALL_DOSU", "ｅｏ光電話利用呼情報データファイル（データ）.通話度数");
		itemValueMap.put("TXT-ACIFM076-.PCALL_TANKA", "ｅｏ光電話利用呼情報データファイル（データ）.通話単価");
		itemValueMap.put("TXT-ACIFM076-.PCALL_PRC", "ｅｏ光電話利用呼情報データファイル（データ）.通話料金");
		itemValueMap.put("TXT-ACIFM076-.PCALL_SBT", "ｅｏ光電話利用呼情報データファイル（データ）.通話種別");
		itemValueMap.put("TXT-ACIFM076-.PCALL_SVC_DIV", "ｅｏ光電話利用呼情報データファイル（データ）.サービス区分");
		itemValueMap.put("TXT-ACIFM076-.CUT_RSN_DIV_SIP", "ｅｏ光電話利用呼情報データファイル（データ）.切断理由−ＳＩＰ");
		itemValueMap.put("TXT-ACIFM076-.CUT_RSN_DIV_ISUP", "ｅｏ光電話利用呼情報データファイル（データ）.切断理由−ＩＳＵＰ");
		itemValueMap.put("TXT-ACIFM076-.CUT_RSN_DIV", "ｅｏ光電話利用呼情報データファイル（データ）.切断理由区分");
		itemValueMap.put("TXT-ACIFM076-.CUT_DTAIL_INFO_DKMK_IDX_NO", "ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−大項目番号");
		itemValueMap.put("TXT-ACIFM076-.CUT_DTAIL_INFO_CKMK_IDX_NO", "ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−中項目番号");
		itemValueMap.put("TXT-ACIFM076-.CUT_DTAIL_INFO_HTCK_SBT_CD", "ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−発着種別");
		itemValueMap.put("TXT-ACIFM076-.CHRG_DSP_CD", "ｅｏ光電話利用呼情報データファイル（データ）.課金表示");
		itemValueMap.put("TXT-ACIFM076-.EMG_KO_FLG", "ｅｏ光電話利用呼情報データファイル（データ）.緊急通報呼フラグ");
		itemValueMap.put("TXT-ACIFM076-.CHG_SIGNAL_RCV_CNT", "ｅｏ光電話利用呼情報データファイル（データ）.ＣＨＧ信号受信回数");
		itemValueMap.put("TXT-ACIFM076-.TENSO_JI_HASHIN_TELNO", "ｅｏ光電話利用呼情報データファイル（データ）.転送時発信元番号");
		itemValueMap.put("TXT-ACIFM076-.COUNTRY_NM", "ｅｏ光電話利用呼情報データファイル（データ）.国名");
		itemValueMap.put("TXT-ACIFM077-.DATA_REC_CNT", "ｅｏ光電話利用呼情報データファイル（トレーラ）.データレコード件数");
		
		// システム時間の取得
		String sysdate = JCCBatCommon.getSysDateTimeStamp();
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial]super.onlineOpeDate[オンライン運用日]：" + super.onlineOpeDate);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial]JCCBatCommon.getSysDateTimeStamp()[システム日時]：" + sysdate);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial]freeItem：" + super.freeItem);
		sysWkTime = super.onlineOpeDate.concat(sysdate.substring(8, 15));

		// 未来日呼エラーを取得
		msgFutureDayErr = getWorkParamVal(JACStrConst.WKPARA_AC_MSG_FUTURE_DAYERR, super.opeDate);
		
		// サービス区分エラーを取得
		msgSvcKbnErr = getWorkParamVal(JACStrConst.WKPARA_AC_MSG_SVC_DIV_ERR, super.opeDate);

		// フリー項目情報を取得
		fleeItemArray = super.freeItem.split(JACStrConst.FREE_DIV);
		// 前回分レコードの通番を取得
		znkiSeq = getZnkiSeq(fleeItemArray[0], fleeItemArray[2], fleeItemArray[5]);

		// 業務パラメータ取得
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		// 050アプリサービス区分
		this.aplSvcKbn = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_AC_050_APP_SVC_CD);
		
		paramUtil.close();
		
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		// 出力データ格納用リストを初期化
		// データファイル（050アプリ利用呼情報）の生成
		String outNml050FilePath = fleeItemArray[0] + fleeItemArray[9];
		String outNml050FileDefPath = JBSbatAplConst.getAplConstValue(PARAM_OTD) + fleeItemArray[10];
		JBSbatOutputFileUtil nml050File = new JBSbatOutputFileUtil(outNml050FilePath);
		JBSbatDefFileUtil nml050FileDef = new JBSbatDefFileUtil(outNml050FileDefPath, nml050File);
		
		// encodeの形式がSHIFT-JISの場合、MS932に変換
		String encode3 = nml050File.getEncode();
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(encode3.toUpperCase()))
		{
			encode3 = JACStrConst.ENCODE_MS932;
		}
		
		JBSbatBusinessFileUtil nml050FileUtil = JCCBatCommon.createBusinessFileUtil(outNml050FilePath
																				, encode3
																				, JACBatCommon.chgKaigyo(nml050File.getLine())
																				, nml050FileDef.getDelimiter());
		
		// エラーファイルの生成
		String outErrFilePath = fleeItemArray[0] + fleeItemArray[3];
		String outErrFileDefPath = JBSbatAplConst.getAplConstValue(PARAM_OTD) + fleeItemArray[8];
		JBSbatOutputFileUtil errFile = new JBSbatOutputFileUtil(outErrFilePath);
		JBSbatDefFileUtil errFileDef = new JBSbatDefFileUtil(outErrFileDefPath, errFile);
		
		// encodeの形式がSHIFT-JISの場合、MS932に変換
		String encode2 = errFile.getEncode();
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(encode2.toUpperCase()))
		{
			encode2 = JACStrConst.ENCODE_MS932;
		}
		
		JBSbatBusinessFileUtil errFileUtil = JCCBatCommon.createBusinessFileUtil(outErrFilePath
																				, encode2
																				, JACBatCommon.chgKaigyo(errFile.getLine())
																				, errFileDef.getDelimiter());
		int errCnt = 0;
		
		JBSbatInputFileUtil inFileObj = null;
		try
		{
			// ファイル読み込み
			inFileObj = new JBSbatInputFileUtil(fleeItemArray[0] + fleeItemArray[1]);

			// レコード件数
			int recCnt = 1;
			// 行文字列
			String sLine = null;

			JBSbatServiceInterfaceMap retInMap = null;

			JBSbatDefFileUtil headerDefFile =
				new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue(PARAM_IND) + fleeItemArray[5], inFileObj);

			JBSbatDefFileUtil detailDefFile =
				new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue(PARAM_IND) + fleeItemArray[6], inFileObj);

			JBSbatDefFileUtil trailerDefFile =
				new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue(PARAM_IND) + fleeItemArray[7], inFileObj);

			inFileObj.setEncode(JACStrConst.ENCODE_MS932);
			inFileObj.createReader();
			
			// 入力ファイルのレコード件数分繰り返す
			while(true)
			{
				// 置換前050番号初期化
				this.ckanBf050No = JACStrConst.KARA_MOJI;
				// 行文字列を取得
				sLine = inFileObj.readLine();
				// レコード存在判定
				if (sLine == null)
				{
					// ループを抜ける
					break;
				}
				// ヘッダーレコードの処理
				if (recCnt == 1)
				{
					// ヘッダレコードとして再取得
					JBSbatServiceInterfaceMap headerRetInMap = getRecMap(headerDefFile, inFileObj, sLine, fleeItemArray[5]);

					// 単項目チェック
					if (!isSingleCheckACIFM075(headerRetInMap.getMap(), itemValueMap))
					{
						// エラーの場合

						// エラー処理
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0500CE);
					}
					
					// 前回分通番の存在判定
					if (znkiSeq != null)
					{
						// 通番の取得
						seq = Integer.parseInt(headerRetInMap.getString(JBSbatACIFM075.FILE_SEQ));

						// 重複ファイルチェック
						if (!(seq == 0 && znkiSeq == 9999) && seq != (znkiSeq.intValue() + 1))
						{
							// エラー処理
							throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0700CE, new String[] {String.valueOf(znkiSeq.intValue()), String.valueOf(seq)});
						}
					}
				}
				
				// レコードシーケンスチェック
				// レコード種別を取得
				recSbt = sLine.substring(0, 1);
				// 1件目のレコード判定
				if (recCnt == 1)
				{
					// ヘッダのレコードチェック
					if (!HEADER_REC_SBT.equals(recSbt))
					{
						// エラー処理
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0570CE);
					}
				}
				// 2件目のレコード判定
				else if(recCnt == 2)
				{
					// データ・トレーラのレコードチェック
					if (!(DATA_REC_SBT.equals(recSbt) || TRAILER_REC_SBT.equals(recSbt)))
					{
						// エラー処理
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0580CE, new String[] {String.valueOf(seq), znkiRecSbt, recSbt});
					}
				}
				// 3件目以降のレコード判定
				else if(recCnt >= 3)
				{
					// データ・トレーラ・エンドのレコードチェック
					if (!(DATA_REC_SBT.equals(recSbt) || TRAILER_REC_SBT.equals(recSbt) || END_REC_SBT.equals(recSbt)))
					{
						// エラー処理
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0590CE
														, new String[] {String.valueOf(recCnt)
														, String.valueOf(seq)
														, BF_SBT.concat(znkiRecSbt).concat(JACStrConst.FULL_SPACE_1).concat(NOW_SBT).concat(recSbt) });
					}
				}
				// トレーラの次がエンドのレコードかをチェック
				if(END_REC_SBT.equals(recSbt) && !TRAILER_REC_SBT.equals(znkiRecSbt))
				
				{
					// エラー処理
					throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0600CE, new String[] {String.valueOf(seq), znkiRecSbt, recSbt});
				}
				// データレコードの処理
				if (DATA_REC_SBT.equals(recSbt))
				{

					// データレコードとして再取得
					retInMap = getRecMap(detailDefFile, inFileObj, sLine, fleeItemArray[6]);

					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][050番号" + retInMap.getMap().toString() + "]");

					// 単項目チェック
					if (!isSingleCheckACIFM076(retInMap.getMap(), itemValueMap))
					{
						// エラーの場合

						// エラー処理
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0500CE);
					}
					
					// 通話開始
					String staYmd = retInMap.getString(JBSbatACIFM076.PCALL_STAYMD);
					String staHms = retInMap.getString(JBSbatACIFM076.PCALL_STA_HMS);
					
					// 未来日呼チェック
					if (!checkFutureData(staYmd, staHms, sysWkTime, recCnt))
					{
						// エラーデータ出力
						errFileUtil.print(createErrData(retInMap, JACStrConst.WKPARA_AC_MSG_FUTURE_DAYERR, msgFutureDayErr));
						errCnt += 1;
						// 次のレコードの処理へ
						continue;
					}
					
					// 050アプリの呼情報の場合
					if(retInMap.getString(JBSbatACIFM076.PCALL_SVC_DIV).equals(this.aplSvcKbn))
					{
						// データ出力
						nml050FileUtil.print(createData050(retInMap));
						this.aplSize += 1;
					}
					else
					{
						errFileUtil.print(createErrData(retInMap, JACStrConst.WKPARA_AC_MSG_SVC_DIV_ERR, msgSvcKbnErr));
						
						// エラーデータ出力
						errCnt += 1;
						// 次のレコードの処理へ
						continue;
					}
				}
				
				// トレーラレコードの処理
				if (TRAILER_REC_SBT.equals(recSbt))
				{
					// トレーラレコードとして再取得
					retInMap = getRecMap(trailerDefFile, inFileObj, sLine, fleeItemArray[7]);
					
					// 単項目チェック
					if (!isSingleCheckACIFM077(retInMap.getMap(), itemValueMap))
					{
						// エラーの場合
						// エラー処理
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0500CE);
					}
					
					// 件数を取得
					trailerRecCnt = Integer.parseInt(retInMap.getString(JBSbatACIFM077.DATA_REC_CNT));
				}
				
				// 前回レコード種別の設定
				znkiRecSbt = recSbt;
				// レコード件数のカウント
				recCnt++;
			}
			
			// 最終レコードチェック
			if (!END_REC_SBT.equals(recSbt))
			{
				// エラー処理
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0610CE, new String[] {String.valueOf(seq), recSbt});
			}
			
			// 件数チェック
			int dataCnt = errCnt + this.aplSize;
			if (trailerRecCnt != dataCnt)
			{
				// エラー処理
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0620CE, 
								new String[] {String.valueOf(seq), String.valueOf(dataCnt), String.valueOf(trailerRecCnt)});
			}
		}
		finally
		{
			// ファイルをクローズ
			inFileObj.close();
		}
		
		// エラーメッセージ出力
		if (errCnt != 0)	
		{	
			// 警告終了 「【警告】エラー対象レコード＝（%1%）」
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0340CW, new String[] { Integer.toString(errCnt) });
		}	

		// データファイルのクローズ
		JCCBatCommon.closeBusinessFileUtil(nml050FileUtil);
		// エラーファイルのクローズ
		JCCBatCommon.closeBusinessFileUtil(errFileUtil);

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @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-ACIFM075-.FILE_SEQ			ｅｏ光電話利用呼情報データファイル（ヘッダ）.ファイル通番
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	@SuppressWarnings("unchecked")
	private boolean isSingleCheckACIFM075(HashMap rsMap, HashMap<String, String> itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// レコード種別項目チェック
		strValue = (String)rsMap.get("REC_SBT");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFE002-.REC_SBT")});
			return false;
		}
		
		// ファイル通番項目チェック
		strValue = (String)rsMap.get("FILE_SEQ");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFM075-.FILE_SEQ")});
			return false;
		}

		return true;
	}

	/**
	 *入力情報（ｅｏ光電話利用呼情報データファイル（データ））の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-ACIFM076-.KAKINS_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.課金電話番号
	 *			 TXT-ACIFM076-.HASHIN_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.発信元電話番号
	 *			 TXT-ACIFM076-.INCOMING_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.着信先電話番号
	 *			 TXT-ACIFM076-.PCALL_STAYMD			ｅｏ光電話利用呼情報データファイル（データ）.通話開始日
	 *			 TXT-ACIFM076-.PCALL_STA_HMS			ｅｏ光電話利用呼情報データファイル（データ）.通話開始時刻
	 *			 TXT-ACIFM076-.PCALL_ENDYMD			ｅｏ光電話利用呼情報データファイル（データ）.通話終了日
	 *			 TXT-ACIFM076-.PCALL_END_HMS			ｅｏ光電話利用呼情報データファイル（データ）.通話終了時刻
	 *			 TXT-ACIFM076-.PCALL_SEC_CNT			ｅｏ光電話利用呼情報データファイル（データ）.通話秒数
	 *			 TXT-ACIFM076-.PCALL_DOSU			ｅｏ光電話利用呼情報データファイル（データ）.通話度数
	 *			 TXT-ACIFM076-.PCALL_TANKA			ｅｏ光電話利用呼情報データファイル（データ）.通話単価
	 *			 TXT-ACIFM076-.PCALL_PRC			ｅｏ光電話利用呼情報データファイル（データ）.通話料金
	 *			 TXT-ACIFM076-.PCALL_SBT			ｅｏ光電話利用呼情報データファイル（データ）.通話種別
	 *			 TXT-ACIFM076-.PCALL_SVC_DIV			ｅｏ光電話利用呼情報データファイル（データ）.サービス区分
	 *			 TXT-ACIFM076-.CUT_RSN_DIV_SIP			ｅｏ光電話利用呼情報データファイル（データ）.切断理由−ＳＩＰ
	 *			 TXT-ACIFM076-.CUT_RSN_DIV_ISUP			ｅｏ光電話利用呼情報データファイル（データ）.切断理由−ＩＳＵＰ
	 *			 TXT-ACIFM076-.CUT_RSN_DIV			ｅｏ光電話利用呼情報データファイル（データ）.切断理由区分
	 *			 TXT-ACIFM076-.CUT_DTAIL_INFO_DKMK_IDX_NO			ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−大項目番号
	 *			 TXT-ACIFM076-.CUT_DTAIL_INFO_CKMK_IDX_NO			ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−中項目番号
	 *			 TXT-ACIFM076-.CUT_DTAIL_INFO_HTCK_SBT_CD			ｅｏ光電話利用呼情報データファイル（データ）.切断詳細情報−発着種別
	 *			 TXT-ACIFM076-.CHRG_DSP_CD			ｅｏ光電話利用呼情報データファイル（データ）.課金表示
	 *			 TXT-ACIFM076-.EMG_KO_FLG			ｅｏ光電話利用呼情報データファイル（データ）.緊急通報呼フラグ
	 *			 TXT-ACIFM076-.CHG_SIGNAL_RCV_CNT			ｅｏ光電話利用呼情報データファイル（データ）.ＣＨＧ信号受信回数
	 *			 TXT-ACIFM076-.TENSO_JI_HASHIN_TELNO			ｅｏ光電話利用呼情報データファイル（データ）.転送時発信元番号
	 *			 TXT-ACIFM076-.COUNTRY_NM			ｅｏ光電話利用呼情報データファイル（データ）.国名
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	@SuppressWarnings("unchecked")
	private boolean isSingleCheckACIFM076(HashMap rsMap, HashMap<String, String> itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// レコード種別項目チェック
		strValue = (String)rsMap.get("REC_SBT");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFE002-.REC_SBT")});
			return false;
		}
		
		// 課金電話番号項目チェック
		strValue = (String)rsMap.get("KAKINS_TELNO");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFM076-.KAKINS_TELNO")});
			return false;
		}

		// 発信元電話番号項目チェック
		strValue = (String)rsMap.get("HASHIN_TELNO");
		if (strValue != null) 
		{
			// 属性チェック前に空白削除を行う
			strValue = strValue.trim();
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFM076-.HASHIN_TELNO")});
			return false;
		}

		// 着信先電話番号項目チェック
		strValue = (String)rsMap.get("INCOMING_TELNO");
		if (strValue != null)
		{
			// 属性チェック前に空白削除を行う
			strValue = strValue.trim();
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.PCALL_SEC_CNT")});
			return false;
		}

		// 通話度数項目チェック
		strValue = (String)rsMap.get("PCALL_DOSU");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFM076-.PCALL_DOSU")});
			return false;
		}

		// 通話単価項目チェック
		strValue = (String)rsMap.get("PCALL_TANKA");
		if (strValue != null)
		{
			// 属性チェック前に空白削除を行う
			strValue = strValue.trim();
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji6"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFM076-.PCALL_TANKA")});
			return false;
		}

		// 通話料金項目チェック
		strValue = (String)rsMap.get("PCALL_PRC");
		if (strValue != null)
		{
			// 属性チェック前に空白削除を行う
			strValue = strValue.trim();
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji6"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFM076-.PCALL_PRC")});
			return false;
		}

		// 通話種別項目チェック
		strValue = (String)rsMap.get("PCALL_SBT");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFM076-.PCALL_SBT")});
			return false;
		}

		// サービス区分項目チェック
		strValue = (String)rsMap.get("PCALL_SVC_DIV");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.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[]{
															itemvalueMap.get("TXT-ACIFM076-.CHG_SIGNAL_RCV_CNT")});
			return false;
		}

		// 転送時発信元番号項目チェック
		strValue = (String)rsMap.get("TENSO_JI_HASHIN_TELNO");
		if (strValue != null)
		{
			// 属性チェック前に空白削除を行う
			strValue = strValue.trim();
		}		
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFM076-.TENSO_JI_HASHIN_TELNO")});
			return false;
		}

		// 国名項目チェック
		strValue = ((String)rsMap.get("COUNTRY_NM")).trim();
		if (strValue != null)
		{ 
			// 属性チェック前に空白削除を行う
			strValue = strValue.trim();
		}		
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFM076-.COUNTRY_NM")});
			return false;
		}

		return true;
	}

	/**
	 *入力情報（ｅｏ光電話利用呼情報データファイル（トレーラ））の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-ACIFM077-.DATA_REC_CNT			ｅｏ光電話利用呼情報データファイル（トレーラ）.データレコード件数
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	@SuppressWarnings("unchecked")
	private boolean isSingleCheckACIFM077(HashMap rsMap, HashMap<String, String> itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// レコード種別項目チェック
		strValue = (String)rsMap.get("REC_SBT");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFE002-.REC_SBT")});
			return false;
		}
		
		// データレコード件数項目チェック
		strValue = (String)rsMap.get("DATA_REC_CNT");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															itemvalueMap.get("TXT-ACIFM077-.DATA_REC_CNT")});
			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);
	}

	/**
	 * 050アプリ利用履歴情報データを生成する
	 * 
	 * @param inMap 入力データ
	 * @return 出力データ
	 * @throws Exception 
	 * 
	 */
	private ArrayList<String> createData050(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// データのインスタンスを生成
		ArrayList<String> data = new ArrayList<String>();
		
		// 値を設定
		data.add(inMap.getString(JBSbatACIFM076.KAKINS_TELNO).trim());
		data.add(inMap.getString(JBSbatACIFM076.HASHIN_TELNO).trim());
		data.add(inMap.getString(JBSbatACIFM076.INCOMING_TELNO));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_STAYMD));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_STA_HMS));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_ENDYMD));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_END_HMS));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_SEC_CNT));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_DOSU));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_TANKA));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_PRC));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_SBT));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_SVC_DIV));
		data.add(inMap.getString(JBSbatACIFM076.CUT_RSN_DIV_SIP));
		data.add(inMap.getString(JBSbatACIFM076.CUT_RSN_DIV_ISUP));
		data.add(inMap.getString(JBSbatACIFM076.CUT_RSN_DIV));
		data.add(inMap.getString(JBSbatACIFM076.CUT_DTAIL_INFO_DKMK_IDX_NO));
		data.add(inMap.getString(JBSbatACIFM076.CUT_DTAIL_INFO_CKMK_IDX_NO));
		data.add(inMap.getString(JBSbatACIFM076.CUT_DTAIL_INFO_HTCK_SBT_CD));
		data.add(inMap.getString(JBSbatACIFM076.CHRG_DSP_CD));
		data.add(inMap.getString(JBSbatACIFM076.EMG_KO_FLG));
		data.add(inMap.getString(JBSbatACIFM076.CHG_SIGNAL_RCV_CNT));
		data.add(inMap.getString(JBSbatACIFM076.TENSO_JI_HASHIN_TELNO));
		data.add(inMap.getString(JBSbatACIFM076.COUNTRY_NM).trim());
		// データを返却
		return data;
	}

	/**
	 * ｅｏ光電話入力エラーデータを生成する
	 * 
	 * @param inMap 入力データ
	 * @param errCd エラーコード
	 * @param errMsg エラーメッセージ
	 * @return 出力データ
	 * @throws Exception 
	 * 
	 */
	private ArrayList<String> createErrData(JBSbatServiceInterfaceMap inMap, String errCd, String errMsg) throws Exception
	{
		// データのインスタンスを生成
		ArrayList<String> data = new ArrayList<String>();
		// 値を設定
		data.add(inMap.getString(JBSbatACIFM076.KAKINS_TELNO).trim());
		data.add(inMap.getString(JBSbatACIFM076.HASHIN_TELNO).trim());
		data.add(inMap.getString(JBSbatACIFM076.INCOMING_TELNO));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_STAYMD));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_STA_HMS));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_ENDYMD));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_END_HMS));
		data.add(addDecimalPoint(inMap.getString(JBSbatACIFM076.PCALL_SEC_CNT), JACStrConst.PCALL_SEC_CNT_DEC_LENGTH));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_DOSU));
		data.add(addDecimalPoint(inMap.getString(JBSbatACIFM076.PCALL_TANKA), JACStrConst.PCALL_TANKA_DEC_LENGTH));
		data.add(addDecimalPoint(inMap.getString(JBSbatACIFM076.PCALL_PRC), JACStrConst.PCALL_PRC_DEC_LENGTH));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_SBT));
		data.add(inMap.getString(JBSbatACIFM076.PCALL_SVC_DIV));
		data.add(inMap.getString(JBSbatACIFM076.CUT_RSN_DIV_SIP));
		data.add(inMap.getString(JBSbatACIFM076.CUT_RSN_DIV_ISUP));
		data.add(inMap.getString(JBSbatACIFM076.CUT_RSN_DIV));
		data.add(inMap.getString(JBSbatACIFM076.CUT_DTAIL_INFO_DKMK_IDX_NO));
		data.add(inMap.getString(JBSbatACIFM076.CUT_DTAIL_INFO_CKMK_IDX_NO));
		data.add(inMap.getString(JBSbatACIFM076.CUT_DTAIL_INFO_HTCK_SBT_CD));
		data.add(inMap.getString(JBSbatACIFM076.CHRG_DSP_CD));
		data.add(inMap.getString(JBSbatACIFM076.EMG_KO_FLG));
		data.add(inMap.getString(JBSbatACIFM076.CHG_SIGNAL_RCV_CNT));
		data.add(inMap.getString(JBSbatACIFM076.TENSO_JI_HASHIN_TELNO));
		data.add(inMap.getString(JBSbatACIFM076.COUNTRY_NM).trim());
		data.add(this.ckanBf050No.trim());
		data.add(errCd);
		data.add(errMsg);
		// データを返却
		return data;
	}

	/**
	 * 前回分の通番を取得
	 * 
	 * @param fileDir ディレクトリ
	 * @param fileName ファイル名
	 * @param fileDef ファイル定義
	 * @return 前回通番
	 * @throws Exception スローされる例外
	 */
	private Integer getZnkiSeq(String fileDir, String fileName, String fileDef) throws Exception
	{
		// ファイル読み込み
		String filePath = fileDir + fileName;
		if (filePath != null)
		{
			JBSbatInputFileUtil inFileObj = new JBSbatInputFileUtil(fileDir + fileName);
			inFileObj.setEncode(JACStrConst.ENCODE_MS932);
			inFileObj.createReader();
			JBSbatServiceInterfaceMap retInMap = getRecMap(inFileObj, inFileObj.readLine(), fileDef);
			inFileObj.close();
			// 前回通番を返却
			return new Integer(retInMap.getString(JBSbatACIFM075.FILE_SEQ));
		}
		else
		{
			return null;
		}
	}
	
	/**
	 * ファイルからレコードを取得
	 * 
	 * @param inFileObj 入力ファイルオブジェクト
	 * @param sLine 行文字列
	 * @param fileDef ファイル定義名
	 * @return レコードマップ
	 * @throws Exception スローされる例外
	 */
	private JBSbatServiceInterfaceMap getRecMap(JBSbatInputFileUtil inFileObj, String sLine, String fileDef) throws Exception
	{
		String enc = inFileObj.getEncode();
		// encodeの形式がSHIFT-JISの場合、MS932に変換
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(enc.toUpperCase()))
		{
			enc = JACStrConst.ENCODE_MS932;
		}
		JBSbatDefFileUtil defUtil = new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue(PARAM_IND) + fileDef, inFileObj);
		inFileObj.setEncode(enc);
		
		return defUtil.lineToObject(sLine, inFileObj, 0);
	}

	/**
	 * ファイルからレコードを取得
	 * 
	 * @param defFileUtil
	 * @param inFileObj 入力ファイルオブジェクト
	 * @param sLine 行文字列
	 * @param fileDef ファイル定義名
	 * @return レコードマップ
	 * @throws Exception スローされる例外
	 */
	private JBSbatServiceInterfaceMap getRecMap(JBSbatDefFileUtil defFileUtil
												, JBSbatInputFileUtil inFileObj
												, String sLine, String fileDef) throws Exception
	{
		return defFileUtil.lineToObject(sLine, inFileObj, 0);
	}

	/**
	 * 未来日チェックを行う
	 * @param staYmd 開始年月日
	 * @param staHms 開始時分秒
	 * @param sysYmdhms システム時分秒
	 * @param row 行数
	 * @return	true:正常、false:エラー
	 * @throws Exception
	 */
	private boolean checkFutureData(String staYmd, String staHms, String sysYmdhms, int row) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][checkFutureData]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint
												, "[L][checkFutureData]sysYmdhms[システム年月日時分秒]" + sysYmdhms + ", staYmd + staHms[通話開始年月日時分秒]" + staYmd + staHms);
		
		// オンライン運用日＋システム時間　＜　通話開始年月日＋時刻 の場合
		if (Long.parseLong(sysYmdhms) < Long.parseLong(staYmd + staHms))
		{
			// ログ出力
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0630NW, new String[]{String.valueOf(row)});
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkFutureData]エラー");
			
			return false;
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][checkFutureData]正常");

		return true;
	}

	/**
	 * 文字列の右から 指定された桁数の位置に小数点を付与する
	 * @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();
	}

	/**
	 * 業務パラメータ値を取得
	 * 
	 * @param paramId パラメータID
	 * @param batYmd バッチ運用日付
	 * @return 業務パラメータ
	 * @throws Exception スローされる例外
	 */
	private String getWorkParamVal(String paramId, String batYmd) throws Exception
	{
		// SQL実行
		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});
		}
	}
	
}
