/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACEOHKoInfInputChk
*	ソースファイル名	：JBSbatACEOHKoInfInputChk.java
*	作成者				：富士通　
*	作成日				：2011年07月28日
*＜機能概要＞
*　ｅｏ光電話呼情報入力チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/28   富士通		新規作成
*	v3.00.00	2012/08/29   FJ）岡田	【TG1-2012-0000137・138】金額の属性チェック変更
*	v3.01.00	2012/11/02   FJ）今井	【TG1-2012-0000273】0件でJava heap spaceエラー対応
*	v4.00.00	2012/11/05   FJ）浜口	eo光電話通話明細スキーマ変更対応 電話番号項目属性チェック変更
*	v4.01.00	2012/11/15   FJ）浜口	【TG1-2012-0000270】属性:半角英数字2でかつNOTNULL制約対象でない項目に属性チェック前トリムを追加
*	v4.02.00	2012/12/25   FJ）加島	【TG1-2012-0000330】0ABJ番号変換処理修正
*	v4.03.00	2012/12/27   FJ）早崎	【TG1-2012-0000204】0ABJ番号変換処理において通話開始日基準で契約チェックを行うように修正
*	v4.04.00	2012/12/28   FJ）高田	【ST4-2012-0000159】処理の改善（件数分インスタンスをしている）
*	v4.04.01	2013/02/25   FJ）狭間	【ST4-2013-0000116】速度改善の為、基盤Ｔ改修分を組み込み
*	v5.00.00	2013/03/04   FJ）浜口	【ANK-1419-00-00】050アプリ案件 050アプリ分はスキップする
*	v5.00.01	2013/03/18   FJ）狭間	【内部管理番号-0000851】0ABJ番号変換ファイルが先に読み終わった時にアベンドする不具合修正
*	v5.00.02	2013/03/26   FJ) 小柴	【内部管理番号-0000613】ファイル出力オブジェクト生成時のエンコード設定ずれ防止対応
*	v5.00.03	2013/04/05   FJ) 小柴	【IKK-2013-0000783】文字化け対策のため、エンコード形式の変更
*	v5.00.04	2013/05/03   FJ) 狭間	【xxx-2013-0000xxx】0ABJ番号の変換が正しく行われない不具合修正
*	v5.00.05	2013/07/11   FJ) 狭間	【IT1-2013-0001363】（水平展開）lineToObjectの第三引数適正化
*	v5.00.06	2013/07/16   FJ) 前田	【IT1-2013-0001420】警告メッセージを出力するように修正
*	v5.01.00	2013/09/21   FJ) 狭間	【OM-2013-0002470】PASTEL連携関連対応
*	v6.00.00	2013/11/29   FJ) 狭間	【OM-2013-0002470】PASTEL連携関連対応データファイル（050アプリ利用呼情報）の項目不具合修正
*	v6.01.00	2013/11/30   FJ) 後藤	【OM-2013-0004588】050-0ABJ変換スキーマ参照条件不正対応
*	v7.00.00	2014/03/09   FJ) 後藤	【OM-2014-0000824】050-0ABJ変換工事完了報告遅延の考慮
*********************************************************************/
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.JACbatSchdlUtil;
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.file.JBSbatACIFM083;
import eo.business.util.file.JBSbatACIFM199;
import eo.business.util.file.JBSbatACIFM263;
import eo.business.util.table.JBSbatKK_T_SVKEIUW_EOH_TEL;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JPCUtilCommon;
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;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACEOHKoInfInputChk 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[] 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 = "現種別；";
	
	/** データ保持用マップ */
	private ArrayList<JBSbatServiceInterfaceMap> dbMapList = new ArrayList<JBSbatServiceInterfaceMap>();
	/**■■■■■■■■■■■■■■■■足立原  2013/02/06追加■■■■■■■■■■■■■■*/	
	/** OABJ番号チェックデータファイルオブジェクト < 2013/02/06 追記 */
	private JBSbatInputFileUtil oabjInFileObj = null;
	
	/** ■マッチング用■前回マッチングレコード一時記録用 < 2013/02/06 追記 */
	private JBSbatServiceInterfaceMap preRecord = new JBSbatServiceInterfaceMap();
	
	/** ■マッチング用■前回マッチング課金電話番号 < 2013/02/06 追記 */
	private String preKakinsTelno = null;
	
	/** 業務パラメータ(050アプリサービス区分)*/
	private String aplSvcKbn = null;
	
	/** 050アプリ分データ件数*/
	private Integer aplSize = 0;

	/** 0ABJ番号チェックデータファイルEOFフラグ */
	private boolean eofFlg = false;
	
	/**
	/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/	

	/** 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);

		// フリー項目情報を取得
		fleeItemArray = super.freeItem.split(JACStrConst.FREE_DIV);
		// 前回分レコードの通番を取得
		znkiSeq = getZnkiSeq(fleeItemArray[0], fleeItemArray[2], fleeItemArray[6]);

		/**■■■■■■■■■■■■■■■足立原 追加■■■■■■■■■■■■■■■■■*/	
		// 0ABJ番号チェック用データの取得　<　2013/02/06 追記
		oabjInFileObj = new JBSbatInputFileUtil(fleeItemArray[0] + fleeItemArray[11]);
		oabjInFileObj.setEncode(JACStrConst.ENCODE_MS932);
		oabjInFileObj.createReader();
		eofFlg = false;
		/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/	

		zeroAbjNoListDef = new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue(PARAM_IND) + fleeItemArray[12], oabjInFileObj);

		// 業務パラメータ取得
		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
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		// 出力データ格納用リストを初期化
		// データファイルの生成
		String outNmlFilePath = fleeItemArray[0] + fleeItemArray[3];
		String outNmlFileDefPath = JBSbatAplConst.getAplConstValue(PARAM_OTD) + fleeItemArray[9];
		JBSbatOutputFileUtil nmlFile = new JBSbatOutputFileUtil(outNmlFilePath);
		JBSbatDefFileUtil nmlFileDef = new JBSbatDefFileUtil(outNmlFileDefPath, nmlFile);
		
		// encodeの形式がSHIFT-JISの場合、MS932に変換
		String encode = nmlFile.getEncode();
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(encode.toUpperCase()))
		{
			encode = JACStrConst.ENCODE_MS932;
		}
		
		JBSbatBusinessFileUtil nmlFileUtil = JCCBatCommon.createBusinessFileUtil(outNmlFilePath
																				, encode
																				, JACBatCommon.chgKaigyo(nmlFile.getLine())
																				, nmlFileDef.getDelimiter());
		int nmlCnt = 0;
		// データファイル（050アプリ利用呼情報）の生成
		String outNml050FilePath = fleeItemArray[0] + fleeItemArray[13];
		String outNml050FileDefPath = JBSbatAplConst.getAplConstValue(PARAM_OTD) + fleeItemArray[14];
		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[4];
		String outErrFileDefPath = JBSbatAplConst.getAplConstValue(PARAM_OTD) + fleeItemArray[10];
		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;
		
		// 再取込対象出力ファイルの生成
		String outReTrkmTgFilePath = fleeItemArray[0] + fleeItemArray[15];
		String outReTrkmTgFileDefPath = JBSbatAplConst.getAplConstValue(PARAM_OTD) + fleeItemArray[17];
		JBSbatOutputFileUtil reTrkmTgFile = new JBSbatOutputFileUtil(outReTrkmTgFilePath);
		JBSbatDefFileUtil reTrkmTgFileDef = new JBSbatDefFileUtil(outReTrkmTgFileDefPath, reTrkmTgFile);
		
		// encodeの形式がSHIFT-JISの場合、MS932に変換
		String encode4 = reTrkmTgFile.getEncode();
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(encode4.toUpperCase()))
		{
			encode4 = JACStrConst.ENCODE_MS932;
		}
		
		JBSbatBusinessFileUtil reTrkmTgFileUtil = JCCBatCommon.createBusinessFileUtil(outReTrkmTgFilePath
																				, encode4
																				, JACBatCommon.chgKaigyo(reTrkmTgFile.getLine())
																				, reTrkmTgFileDef.getDelimiter());
		int reTrkmTgCnt = 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[6], inFileObj);

			JBSbatDefFileUtil detailDefFile =
				new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue(PARAM_IND) + fleeItemArray[7], inFileObj);

			JBSbatDefFileUtil trailerDefFile =
				new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue(PARAM_IND) + fleeItemArray[8], 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[6]);

					// 単項目チェック
					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[7]);

					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][050番号" + retInMap.getMap().toString() + "]");
//					// 050アプリの呼情報はスキップする
//					if(retInMap.getString(JBSbatACIFM076.PCALL_SVC_DIV).equals(this.aplSvcKbn))
//					{
//						assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]050アプリの呼情報の為、スキップ");
//
//						// 050アプリ分データ件数カウントアップ
//						this.aplSize++;
//
//						// 次のレコードの処理へ
//						continue;
//					}

					// 単項目チェック
					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);
					
					// マップ検索用キー
					String searchKey = retInMap.getString(JBSbatACIFM076.KAKINS_TELNO).trim();
					// 0ABJ番号変換処理
					// ｅｏ光電話利用呼情報データファイル（データ）．サービス区分＝'4'(eo光電話プラス(050))の場合
					if(retInMap.getString(JBSbatACIFM076.PCALL_SVC_DIV).equals(JACStrConst.TUWA_SVC_SKBT_CD_050))
					{
						// オプションサービス契約＜電話＞より、0ABJ番号を検索する
						this.get0AbjChgList(searchKey);
						// 検索結果がある場合
						if(null != dbMapList)
						{
							this.select0AbjNoMap(retInMap, dbMapList);
						}
					}
					
					// 未来日呼チェック
					if (!checkFutureData(staYmd, staHms, sysWkTime, recCnt))
					{
						// エラーデータ出力
						errFileUtil.print(createErrData(retInMap, JACStrConst.WKPARA_AC_MSG_FUTURE_DAYERR, msgFutureDayErr));
						errCnt += 1;
						// 次のレコードの処理へ
						continue;
					}
					
					// ｅｏ光電話利用呼情報データファイル（データ）．サービス区分＝'4'(eo光電話プラス(050))
					// かつ　0ABJ置換できなかった場合、翌日再取込対象とする 
					if(retInMap.getString(JBSbatACIFM076.PCALL_SVC_DIV).equals(JACStrConst.TUWA_SVC_SKBT_CD_050)
							&& this.ckanBf050No.equals(JACStrConst.KARA_MOJI))
					{
						reTrkmTgFileUtil.print(sLine + super.opeDate);
						reTrkmTgCnt += 1;
					}
					else
					{
						// 050アプリの呼情報の場合
						if(retInMap.getString(JBSbatACIFM076.PCALL_SVC_DIV).equals(this.aplSvcKbn))
						{
							// データ出力
							nml050FileUtil.print(createData050(retInMap));
							this.aplSize += 1;
						}
						else
						{
							// データ出力
							nmlFileUtil.print(createData(retInMap));
							nmlCnt += 1;
						}
					}
				}
				
				// トレーラレコードの処理
				if (TRAILER_REC_SBT.equals(recSbt))
				{
					// トレーラレコードとして再取得
					retInMap = getRecMap(trailerDefFile, inFileObj, sLine, fleeItemArray[8]);
					
					// 単項目チェック
					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 = nmlCnt + errCnt + this.aplSize + reTrkmTgCnt;
			if (trailerRecCnt != dataCnt)
			{
				// エラー処理
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0620CE, 
								new String[] {String.valueOf(seq), String.valueOf(dataCnt), String.valueOf(trailerRecCnt)});
			}
		}
		finally
		{
			// ファイルをクローズ
			inFileObj.close();
		}
		
		// フリー項目に再取込ファイルの指定がある場合
		if(!fleeItemArray[16].equals(JACStrConst.KARA_MOJI))
		{
			// 再取込処理
			JBSbatInputFileUtil inFileObjReTrkm = null;
			oabjInFileObj.createReader();
			eofFlg = false;
			preRecord = new JBSbatServiceInterfaceMap();
			JACbatSchdlUtil schdlUtil = new JACbatSchdlUtil(commonItem);

			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[再取込]");
			try
			{
				String sLineReTrkm = null;
				JBSbatServiceInterfaceMap retInMapReTrkm = null;
				
				// ファイル読み込み
				inFileObjReTrkm = new JBSbatInputFileUtil(fleeItemArray[0] + fleeItemArray[16]);
				
				inFileObjReTrkm.setEncode(JACStrConst.ENCODE_MS932);
				inFileObjReTrkm.createReader();
				
				// 入力ファイルのレコード件数分繰り返す
				while(true)
				{
					// 置換前050番号初期化
					this.ckanBf050No = JACStrConst.KARA_MOJI;
					// 行文字列を取得
					sLineReTrkm = inFileObjReTrkm.readLine();
					// レコード存在判定
					if (sLineReTrkm == null)
					{
						// ループを抜ける
						break;
					}
					
					JBSbatDefFileUtil detailDefFileReTrkm =
						new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue(PARAM_IND) + fleeItemArray[17], inFileObjReTrkm);
					retInMapReTrkm = getRecMap(detailDefFileReTrkm, inFileObjReTrkm, sLineReTrkm, fleeItemArray[17]);
					
					// マップ検索用キー
					String searchKey = retInMapReTrkm.getString(JBSbatACIFM263.KAKINS_TELNO).trim();
					// 0ABJ番号変換処理
					// オプションサービス契約＜電話＞より、0ABJ番号を検索する
					this.get0AbjChgList(searchKey);
					// 検索結果がある場合
					if(null != dbMapList)
					{
						this.select0AbjNoMap(retInMapReTrkm, dbMapList);
					}
					
					// 0ABJ置換できなかった場合、翌日再取込対象とする 
					if(this.ckanBf050No.equals(JACStrConst.KARA_MOJI))
					{
						String fstChkDate = retInMapReTrkm.getString(JBSbatACIFM263.FIRST_CHECK_OPEDATE);
						
						// 初回チェック運用日の翌月末日
						String jdgDate[] = schdlUtil.getUseStrEnd(JPCUtilCommon.addMonth(fstChkDate, 1).substring(0, 6), 
																	JACStrConst.EVENT_CD_USE_STAYMD, JACStrConst.EVENT_CD_USE_ENDYMD);
						
						// 初回チェック運用日の翌月末日　＞　バッチ運用日　の場合
						if(jdgDate[1].compareTo(super.opeDate) > 0)
						{
							// 再取込ファイルへ出力
							reTrkmTgFileUtil.print(sLineReTrkm);
						}
						else
						{
							// データ出力
							nmlFileUtil.print(createData(retInMapReTrkm));
						}
					}
					else
					{
						// データ出力
						nmlFileUtil.print(createData(retInMapReTrkm));
					}
				}
			}
			finally
			{
				inFileObjReTrkm.close();
				schdlUtil.close();
			}
		}
		
		// エラーメッセージ出力
		if (errCnt != 0)	
		{	
			// 警告終了 「【警告】エラー対象レコード＝（%1%）」
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0340CW, new String[] { Integer.toString(errCnt) });
		}	

		// 再取込ファイルのクローズ
		JCCBatCommon.closeBusinessFileUtil(reTrkmTgFileUtil);
		// データファイルのクローズ
		JCCBatCommon.closeBusinessFileUtil(nmlFileUtil);
		// データファイルのクローズ
		JCCBatCommon.closeBusinessFileUtil(nml050FileUtil);
		// エラーファイルのクローズ
		JCCBatCommon.closeBusinessFileUtil(errFileUtil);

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		/**■■■■■■■■■■■■■■■■足立原  追加■■■■■■■■■■■■■■*/	
		//OABJチェック用データファイルオブジェクトのクローズ	<2013/02/06 追記
		oabjInFileObj.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である場合、エラーを発生しました。
	 */
	private boolean isSingleCheckACIFM075(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-ACIFE002-.REC_SBT")});
			return false;
		}
		
		// ファイル通番項目チェック
		strValue = (String)rsMap.get("FILE_SEQ");
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EACB0460CE", new String[]{
															(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である場合、エラーを発生しました。
	 */
	private boolean isSingleCheckACIFM076(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-ACIFE002-.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-.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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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[]{
															(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である場合、エラーを発生しました。
	 */
	private boolean isSingleCheckACIFM077(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-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[]{
															(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);
	}

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * ｅｏ光電話利用履歴情報データを生成する
	 * 
	 * @param inMap 入力データ
	 * @return 出力データ
	 * @throws Exception 
	 * 
	 */
	private ArrayList<String> createData(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());
		data.add(this.ckanBf050No.trim());
		// データを返却
		return data;
	}

	/**
	 * 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;
	}

	/**
	 * 0ABJマップを検索します。
	 * 
	 * @param inMap 入力（ｅｏ光電話利用履歴情報）
	 * @param chgMapList 変換用マップリスト
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void select0AbjNoMap(JBSbatServiceInterfaceMap inMap, ArrayList<JBSbatServiceInterfaceMap> chgMapList) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][select0AbjNoMap]");
		
		// 通話開始日がサービス期間内か判定し、期間外の場合
		if(!this.jdgSvcPrd(JBSbatACIFM083.PCALL_STAYMD, inMap, chgMapList))
		{
			// 通話開始日がサービス期間内か判定し、期間外の場合
			if(!this.jdgSvcPrd(JBSbatACIFM083.PCALL_STAYMD, inMap, chgMapList))
			{
				// 通話開始日の前日以前で直近の契約が存在しない場合
				if(!this.jdgSvcChokkin(inMap, chgMapList, true))
				{
					// 通話開始日の翌日以降で直近の契約が存在しない場合
					this.jdgSvcChokkin(inMap, chgMapList, false);
				}
			}
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][select0AbjNoMap]");
	}
	
	/**
	 * 対象年月日がサービス期間内かどうかを判定します。
	 * 
	 * @param trgKey 対象（通話開始日または通話終了日）取得用キー
	 * @param inMap 対象情報マップ
	 * @param chgMapList 変換用マップリスト
	 * @return boolean 処理結果（false:対象外、true:対象データ）
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean jdgSvcPrd(String trgKey, JBSbatServiceInterfaceMap inMap, ArrayList<JBSbatServiceInterfaceMap> chgMapList) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][jdgSvcPrd]");
		
		// 対象年月日
		String trgYmd = inMap.getString(trgKey);
		
		// 処理結果
		boolean rslt = false;
		
		// 変換対象リストインデックス
		int index = -1;
		
		// リストサイズ
		int size = chgMapList.size();
		// オプションサービス契約＿サービス開始日
		String chgSvcStaYmd = JACStrConst.KARA_MOJI;
		// オプションサービス契約＿サービス終了日
		String chgSvcEndYmd = JACStrConst.KARA_MOJI;
		// サービス契約内訳＿サービス開始日
		String chgUcwkSvcStaYmd = JACStrConst.KARA_MOJI;
		// サービス契約内訳＿サービス終了日
		String chgUcwkSvcEndYmd = JACStrConst.KARA_MOJI;
		// 通話終了日
		String pcallEndymd = inMap.getString(JBSbatACIFM083.PCALL_ENDYMD);
		
		// 変換対象マップ
		JBSbatServiceInterfaceMap chgMap = null;
		
		for(int i = 0; i < size; i++)
		{
			// 変換対象マップ
			chgMap = chgMapList.get(i);
			// オプションサービス契約＿サービス開始日
			chgSvcStaYmd = chgMap.getString(JBSbatACIFM199.OP_SVC_KEI_SVC_STAYMD);
			// オプションサービス契約＿サービス終了日
			chgSvcEndYmd = chgMap.getString(JBSbatACIFM199.OP_SVC_KEI_SVC_ENDYMD);
			// サービス契約内訳＿サービス開始日
			chgUcwkSvcStaYmd = chgMap.getString(JBSbatACIFM199.SVC_KEI_UCWK_SVC_STAYMD);
			// サービス契約内訳＿サービス終了日
			chgUcwkSvcEndYmd = chgMap.getString(JBSbatACIFM199.SVC_KEI_UCWK_SVC_ENDYMD);
			
			// オプションサービス契約＿サービス開始日　または　オプションサービス契約＿サービス終了日がnullの場合
			if(null == chgSvcStaYmd || null == chgSvcEndYmd || null == chgUcwkSvcStaYmd)
			{
				continue;
			}
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][オプションサービス契約＿サービス開始日 = " + chgSvcStaYmd + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][オプションサービス契約＿サービス終了日 = " + chgSvcEndYmd + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][サービス契約内訳＿サービス開始日       = " + chgUcwkSvcStaYmd + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][サービス契約内訳＿サービス終了日       = " + chgUcwkSvcEndYmd + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][通話終了日     = " + pcallEndymd + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][対象年月日     = " + trgYmd + "]");
			

			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][JBSbatStringUtil.rangeCheck(chgSvcEndYmd, chgSvcStaYmd, trgYmd = " + JBSbatStringUtil.rangeCheck(chgSvcEndYmd, chgSvcStaYmd, trgYmd, "3") + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][chgUcwkSvcStaYmd.compareTo(pcallEndymd) <= 0 = " + chgUcwkSvcStaYmd.compareTo(pcallEndymd) + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][ pcallEndymd.compareTo(chgUcwkSvcEndYmd) >= 0 = " + pcallEndymd.compareTo(chgUcwkSvcEndYmd) + "]");
			
			
			// オプションサービス契約＿サービス開始日≦対象年月日≦オプションサービス契約＿サービス終了日
			// かつ　サービス契約内訳．サービス開始日　≦　通話終了日
			// かつ　通話終了日　≦　サービス契約内訳．サービス終了日の場合
			if(JBSbatStringUtil.rangeCheck(chgSvcEndYmd, chgSvcStaYmd, trgYmd, "3")
					&& chgUcwkSvcStaYmd.compareTo(pcallEndymd) <= 0
					&& pcallEndymd.compareTo(chgUcwkSvcEndYmd) <= 0)
			{
				// 変換対象リストインデックス　更新
				index = i;
				
				// 処理結果あり
				rslt = true;
				
				break;
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][index = " + index + "]");
		// 変換対象が存在している場合
		if(index >= 0)
		{
			chgMap = chgMapList.get(index);
			// 電話番号
			String telno = chgMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.TELNO);
			// 電話番号に値が設定されている場合
			if(null != telno)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][050番号⇒0ABJ番号置換対象あり]");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][050番号" + inMap.getString(JBSbatACIFM083.KAKINS_TELNO) + "]");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][050番号" + chgMap.getString(JBSbatACIFM199.N_050_OP_TELNO) + "]");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][0ABJ番号" + telno + "]");
				// 課金電話番号退避
				this.ckanBf050No = inMap.getString(JBSbatACIFM083.KAKINS_TELNO);
				// 対象情報マップ　更新
				inMap.setString(JBSbatACIFM083.KAKINS_TELNO, telno);
			}
			// 上記以外の場合
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][050番号⇒0ABJ番号置換対象なし]");
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][jdgSvcPrd]");
		return rslt;
	}

	/**
	 * 対象年月日の直近の契約を検索します。
	 * 
	 * @param inMap 対象情報マップ
	 * @param chgMapList 変換用マップリスト
	 * @param flg （true:前日以前を対象、false:翌日以降を対象）
	 * @return boolean 処理結果（false:対象外、true:対象データ）
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean jdgSvcChokkin(JBSbatServiceInterfaceMap inMap, ArrayList<JBSbatServiceInterfaceMap> chgMapList, boolean flg) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][jdgSvcChokkin]");
		// 処理結果
		boolean rslt = false;
		
		// 変換対象リストインデックス
		int index = -1;
		
		// リストサイズ
		int size = chgMapList.size();
		// オプションサービス契約＿サービス開始日
		String chgSvcStaYmd = JACStrConst.KARA_MOJI;
		// 前回オプションサービス契約＿サービス開始日
		String bfSvcStaYmd = JACStrConst.KARA_MOJI;
		// サービス契約内訳＿サービス開始日
		String chgUcwkSvcStaYmd = JACStrConst.KARA_MOJI;
		// サービス契約内訳＿サービス終了日
		String chgUcwkSvcEndYmd = JACStrConst.KARA_MOJI;
		// 変換対象マップ
		JBSbatServiceInterfaceMap chgMap = null;
		
		// 通話開始日
		String pcallStaymd = inMap.getString(JBSbatACIFM083.PCALL_STAYMD);
		// 通話終了日
		String pcallEndymd = inMap.getString(JBSbatACIFM083.PCALL_ENDYMD);
		// 通話開始日の30日前ないし後の年月日
		String pcallStaymd30 = JACStrConst.KARA_MOJI;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][オプションサービス契約＿サービス開始日 = " + chgSvcStaYmd + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][通話開始日     = " + pcallStaymd + "]");
		
		// 前日以前を対象の場合
		if(flg)
		{
			// 30日前
			pcallStaymd30 = JPCUtilCommon.addDay(pcallStaymd, -30);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][通話開始30日前 = " + pcallStaymd30 + "]");
			for(int i = 0; i < size; i++)
			{
				// 変換対象マップ
				chgMap = chgMapList.get(i);
				// オプションサービス契約＿サービス開始日
				chgSvcStaYmd = chgMap.getString(JBSbatACIFM199.OP_SVC_KEI_SVC_STAYMD);
				// サービス契約内訳＿サービス開始日
				chgUcwkSvcStaYmd = chgMap.getString(JBSbatACIFM199.SVC_KEI_UCWK_SVC_STAYMD);
				// サービス契約内訳＿サービス終了日
				chgUcwkSvcEndYmd = chgMap.getString(JBSbatACIFM199.SVC_KEI_UCWK_SVC_ENDYMD);
				
				// オプションサービス契約＿サービス開始日がnullの場合
				if(null == chgSvcStaYmd || null == chgUcwkSvcStaYmd)
				{
					continue;
				}
				// オプションサービス契約＿サービス開始日≧通話開始日の30日前　かつ　オプションサービス契約＿サービス開始日＜通話開始日
				if(chgSvcStaYmd.compareTo(pcallStaymd30) >= 0 && chgSvcStaYmd.compareTo(pcallStaymd) < 0)
				{
					// 前回オプションサービス契約＿サービス開始日　＜　オプションサービス契約＿サービス開始日
					// かつ　サービス契約内訳．サービス開始日　≦　通話終了日
					// かつ　通話終了日　≦　サービス契約内訳．サービス終了日の場合
					if(bfSvcStaYmd.compareTo(chgSvcStaYmd) < 0
							&& chgUcwkSvcStaYmd.compareTo(pcallEndymd) <= 0
							&& pcallEndymd.compareTo(chgUcwkSvcEndYmd) <= 0)
					{
						// 変換対象リストインデックス更新
						index = i;
						// 処理結果あり
						rslt = true;
						// 前回オプションサービス契約＿サービス開始日更新
						bfSvcStaYmd = chgSvcStaYmd;
					}
				}
			}
		}
		// 翌日以降を対象の場合
		else
		{
			// 初期値に最大値設定
			bfSvcStaYmd = "99999999";
			// 30日後
			pcallStaymd30 = JPCUtilCommon.addDay(pcallStaymd, 30);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcPrd][通話開始30日後 = " + pcallStaymd30 + "]");
			for(int i = 0; i < size; i++)
			{
				// 変換対象マップ
				chgMap = chgMapList.get(i);
				// オプションサービス契約＿サービス開始日
				chgSvcStaYmd = chgMap.getString(JBSbatACIFM199.OP_SVC_KEI_SVC_STAYMD);
				// サービス契約内訳＿サービス開始日
				chgUcwkSvcStaYmd = chgMap.getString(JBSbatACIFM199.SVC_KEI_UCWK_SVC_STAYMD);
				// サービス契約内訳＿サービス終了日
				chgUcwkSvcEndYmd = chgMap.getString(JBSbatACIFM199.SVC_KEI_UCWK_SVC_ENDYMD);
				
				// オプションサービス契約＿サービス開始日がnullの場合
				if(null == chgSvcStaYmd || null == chgUcwkSvcStaYmd)
				{
					continue;
				}
				// オプションサービス契約＿サービス開始日≦通話開始日の30日後　かつ　オプションサービス契約＿サービス開始日＞通話開始日
				if(chgSvcStaYmd.compareTo(pcallStaymd30) <= 0 && chgSvcStaYmd.compareTo(pcallStaymd) > 0)
				{
					// 前回オプションサービス契約＿サービス開始日　＞　オプションサービス契約＿サービス開始日
					// かつ　サービス契約内訳．サービス開始日　≦　通話終了日
					// かつ　通話終了日　≦　サービス契約内訳．サービス終了日の場合
					if(bfSvcStaYmd.compareTo(chgSvcStaYmd) > 0
							&& chgUcwkSvcStaYmd.compareTo(pcallEndymd) <= 0
							&& pcallEndymd.compareTo(chgUcwkSvcEndYmd) <= 0)
					{
						// 変換対象リストインデックス更新
						index = i;
						// 処理結果あり
						rslt = true;
						// 前回オプションサービス契約＿サービス開始日更新
						bfSvcStaYmd = chgSvcStaYmd;
					}
				}
			}
		}
		// 変換対象が存在している場合
		if(index >= 0)
		{
			chgMap = chgMapList.get(index);
			// 電話番号
			String telno = chgMap.getString(JBSbatKK_T_SVKEIUW_EOH_TEL.TELNO);
			// 電話番号に値が設定されている場合
			if(null != telno)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcChokkin][050番号⇒0ABJ番号置換対象あり]");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcChokkin][050番号" + inMap.getString(JBSbatACIFM083.KAKINS_TELNO) + "]");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcChokkin][0ABJ番号" + telno + "]");
				// 課金電話番号退避
				this.ckanBf050No = inMap.getString(JBSbatACIFM083.KAKINS_TELNO);
				// 対象情報マップ　更新
				inMap.setString(JBSbatACIFM083.KAKINS_TELNO, telno);
			}
			// 上記以外の場合
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][jdgSvcChokkin][050番号⇒0ABJ番号置換対象なし]");
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][jdgSvcChokkin]");
		return rslt;
	}
	
	/**
	 * ｅｏ光電話入力エラーデータを生成する
	 * 
	 * @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);
	}
	/**■■■■■■■■■■■■■■足立原 2013/02/06追加■■■■■■■■■■■■■■■*/

	/**
	 * ファイルからレコードを取得
	 * 
	 * @param inFileObj 入力ファイルオブジェクト
	 * @param sLine 行文字列
	 * @param fileDefObj ファイル定義名
	 * @return レコードマップ
	 * @throws Exception スローされる例外
	 */
	private JBSbatServiceInterfaceMap getRecMap(JBSbatInputFileUtil inFileObj
												, String sLine
												, JBSbatDefFileUtil fileDefObj) throws Exception
	{
		return fileDefObj.lineToObject(sLine, inFileObj, 0);
	}

	/**
	 * OABJ番号変換処理対象抽出の為、OABJ番号の検索を行う。
	 * 課金電話番号でマッチングを実行し、マッチング成立時は
	 * "サービス開始日時","サービス終了日時","電話番号(OABJ番号)"を検索結果リスト(dbMapList)に格納する
	 * @param kakinsTelno 課金電話番号(matching key)
	 * @throws Exception スローされる例外
	 * 
	 */
	private void doMatching(String kakinsTelno) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][doMatching]");
		//新しい課金電話番号で検索する為、検索結果リストの初期化する
		dbMapList.clear();
		//次回処理時の課金電話番号との重複性をチェックする為、今回処理の課金電話番号を前回課金電話番号として記憶
		preKakinsTelno = kakinsTelno;
		if(eofFlg)
		{
			//0ABJ番号変換ファイルがEOFなら終了
			return;
		}
		
		//ファイルから次のレコードを読込む前に、前回マッチングレコードが存在しないか確認する
		if(!preRecord.getMap().isEmpty())
		{
			//前回マッチングレコードとマッチング
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint
													, "[L][doMatching]kakinsTelno=" + kakinsTelno + ":N_050_OP_TELNO=" + preRecord.getString(JBSbatACIFM199.N_050_OP_TELNO));
			
			if(kakinsTelno.compareTo(preRecord.getString(JBSbatACIFM199.N_050_OP_TELNO)) == 0)
			{
				//マッチング成立　-> データをリストに格納
				dbMapList.add(preRecord);
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][doMatching]マッチング成立　-> データをリストに格納");
			}
			else if(kakinsTelno.compareTo(preRecord.getString(JBSbatACIFM199.N_050_OP_TELNO)) < 0)
			{
				//マッチング不成立 (kakinsTelno < preRecord.getString(kakinsTelno)) -> これ以降マッチするレコードはないのでループを抜ける
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][doMatching]マッチング不成立-> これ以降マッチするレコードはないのでループを抜ける");
				return;
				
			}
			else
			{
				//マッチング不成立 (kakinsTelno > preRecord.getString(kakinsTelno)) -> 次のレコードを読み込みマッチング処理を継続
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][doMatching]マッチング不成立-> 次のレコードを読み込みマッチング処理を継続");
			}
		}
		
			//繰返しマッチング処理
		while(true)
		{
			//ファイルレコードを取得
			String lineData = oabjInFileObj.readLine();
			if(lineData == null)
			{
				eofFlg = true;
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][doMatching]eof");
				return;
			}
			
			preRecord = getRecMap(oabjInFileObj, lineData, zeroAbjNoListDef);
			
			//レコードの存在確認
			if(preRecord.getString(JBSbatACIFM199.N_050_OP_TELNO) == null)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][doMatching]レコード未存在");
				return;
			}
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint
													, "[L][doMatching]kakinsTelno=" + kakinsTelno + ":N_050_OP_TELNO=" + preRecord.getString(JBSbatACIFM199.N_050_OP_TELNO));
			
			if(kakinsTelno.compareTo(preRecord.getString(JBSbatACIFM199.N_050_OP_TELNO)) == 0)
			{
				//マッチング成立　-> データをリストに格納後、次のレコードを読み込みマッチング処理を継続
				dbMapList.add(preRecord);
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][doMatching]マッチング成立　-> データをリストに格納");
			}
			else if(kakinsTelno.compareTo(preRecord.getString(JBSbatACIFM199.N_050_OP_TELNO)) < 0)
			{
				//マッチング不成立 (kakinsTelno < preRecord.getString(kakinsTelno)) -> これ以降マッチするレコードはないのでループを抜ける
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][doMatching]マッチング不成立-> これ以降マッチするレコードはないのでループを抜ける");
				return;
				
			}
			else
			{
				//マッチング不成立 (kakinsTelno > preRecord.getString(kakinsTelno)) -> 次のレコードを読み込みマッチング処理を継続
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][doMatching]マッチング不成立-> 次のレコードを読み込みマッチング処理を継続");
			}
		}
	}
	/**■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■*/
	
	/**■■■■■■■■■■■■■■■足立原  修正■■■■■■■■■■■■■■■■■■■*/
	
	/**
	 * 0ABJ変換用データを検索します。
	 * 
	 * @param kakinsTelno 課金電話番号
	 * @return ArrayList<JBSbatCommonDBInterface> 検索結果のリスト
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	
	private void get0AbjChgList(String kakinsTelno) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][get0AbjChgList]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// 課金電話番号
		paramList.setValue(kakinsTelno);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][get0AbjChgList][paramList=" + paramList.getList().toString() + "]");
		
		//前回チェック時の課金電話番号と重複チェックし、重複しない場合はマッチング処理を行う
		if(kakinsTelno.equals(preKakinsTelno))
		{
		super.logPrint.printDebugLog("前回課金電話番号と重複 -> 処理は特に行わない");
			//前回の検索結果(dbMapList)を流用するので何もしない
		}
		else
		{
			//重複しない場合、マッチング処理を行う
			doMatching(kakinsTelno);
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][get0AbjChgList]検索結果あり");
	}
	/** ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ */
	
	
	/**
	 * 未来日チェックを行う
	 * @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});
		}
	}
	
}
