/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACDnpUseChegIfNoAri
*	ソースファイル名	：JBSbatACDnpUseChegIfNoAri.java
*	作成者				：富士通　
*	作成日				：2011年07月08日
*＜機能概要＞
*　電報利用課金情報取得（番ポあり）部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/08   富士通		新規作成
*	v3.00		2012/08/01   FJ）冨井	【ST1-2012-0000190】番ポ識別設定値変更
*	v4.00		2013/02/01   FJ) 早崎	【ST3-2013-0000317】対応
*	V4.01		2013/03/28   FJ) 早崎	【OT-2013-0000578】対応
*	v4.02		2013/04/05   FJ) 小柴	【IKK-2013-0000783】文字化け対策のため、エンコード形式の変更
*	v4.03		2013/04/16   FJ) 小柴	【ST6-2013-0000030】ディレイド処理依頼テーブルから値を取得できなかった場合に、エラーではなく処理を終了するように修正
*	v5.00		2013/10/04   FJ) 北端	【OM-2013-0002763】番ポ識別の文言を修正
*	v5.01		2013/10/12   FJ) 北端	【OM-2013-0002763】共通部のディレイド処理の変更に対応
*	v5.02		2013/10/13   FJ) 前田	【OM-2013-0002763】システムエラー時にステータスを更新するように修正
*	v6.00		2014/01/16   FJ) 垣内	【OM-2014-0000198】業務エラー時の電子ファイル管理情報更新内容修正
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.ObjectInputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import eo.business.common.JACBatCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatShoriIraiUtil;
import eo.business.util.file.JBSbatACIFM035;
import eo.business.util.table.JBSbatCC_T_EFILE_KANRI;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCCFileUtil;
import eo.common.util.JPCUtilCommon;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.file.JBSbatMessageFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatCheckUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACDnpUseChegIfNoAri extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";
	
	/** テーブル(電子ファイル管理)*/
	private static final String D_TBL_NAME_CC_T_EFILE_KANRI = "CC_T_EFILE_KANRI";

	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String ZM_M_WORK_PARAM_KNRI_AC_SELECT_001 = "AC_SELECT_001";
	
	/** SQL定義キー(AC_SELECT_001)*/
	private static final String CC_T_EFILE_KANRI_AC_SELECT_001 = "AC_SELECT_001";
	
	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;
	
	/** テーブルアクセスクラス(電子ファイル管理)*/
	private JBSbatSQLAccess db_CC_T_EFILE_KANRI = null;

	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 番ポ識別コード(番ポあり) */
	private static final String BMP_SKBT_CD = "番ポ対象分";
	
	/** 番ポあり関連情報 */
	private HashMap<String, Object> bmpAriWorkMap = null;
	
	/** 出力ファイルディレクトリ */
	private String outFileDir = "";
	
	/** 電報利用課金情報(番ポあり)一時ファイル */
	private String bmpAriTmpFile = "";
	
	/** 電報利用課金情報エラーリスト */
	private String errListFile = "";
	
	/** 電報利用課金情報（データ部） */
	private String dmpDataFile = "";
	
	/** 電子ファイル管理情報 */
	private String eFile = "";
	
	/** 単項目チェック用名称Map */
	private HashMap<String, String> itemValueMap = null;
	
	/** メッセージ一覧 */
	private HashMap messageMap = null;
	
	/** 単項目チェックエラーメッセージ */
	private String itemErrMessage = "";
	
	/** ディレイド処理依頼番号 */
	private String shoriIraiNo = "";
	
	/** エラー判定フラグ */
	private boolean errFlg = false;

	/** ダウンロード管理登録制御フラグが"1"（登録）*/
	private static final String DLTOUROKU = "1";

	/** ダウンロード管理登録制御フラグ*/
	private String dlKnrFlg = null;
	
	/** 電報利用課金情報エラーリストヘッダ出力フラグ*/
	private boolean errListHedOutFlg = false;
	
	/** 処理管理番号*/
	private String trnKanriNo = null;
	
	/** シーケンス接頭辞（ファイル番号） */
	private static final String SEQ_PREFIX_SEQ_FILE_NOO = "";
	
	/** シーケンス桁数（ファイル番号） */
	private static final int SEQ_LEN_SEQ_FILE_NO = 12;

	/** データ件数*/
	private int dataCount = 0;

	/** 桁数（空白_日付） */
	private static final String OUT_KML_LEN_MD = "        ";

	/** 桁数（空白_個人・法人有無） */
	private static final String OUT_KML_LEN_KO_HO_UM = "  ";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		db_CC_T_EFILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_T_EFILE_KANRI);
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		/** (1) 業務パラメータ管理テーブル情報取得 */
		// (a) 業務パラメータ管理より番ポあり関連情報を取得
		List<Object> searchList = new ArrayList<Object>();
		searchList.add(JACStrConst.WKPARA_AC_BNPARI_HDR_RCNT);
		searchList.add(JACStrConst.WKPARA_AC_BNPARI_FTR_RCNT);
		searchList.add(JACStrConst.WKPARA_AC_BNPARI_JDG_KMK);
		
		// 業務パラメータ管理から番ポあり関連情報を取得
		bmpAriWorkMap = new HashMap<String, Object>();
		for (int i = 0; i < searchList.size(); i++)
		{
			executeZM_M_WORK_PARAM_KNRI_AC_SELECT_001(new Object[] {searchList.get(i), super.opeDate, super.opeDate});
			JBSbatCommonDBInterface workRecord = db_ZM_M_WORK_PARAM_KNRI.selectNext();
			if (workRecord != null)
			{
				bmpAriWorkMap.put((String)searchList.get(i), workRecord.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 });
				
			}
		}
		
		/** (2) Free項目取得 */
		// (a) 入出力情報をFree項目より取得
		String[] freeItem = this.freeItem.split(JACStrConst.FREE_DIV);
		outFileDir = freeItem[0];
		bmpAriTmpFile = outFileDir + freeItem[1];
		errListFile = outFileDir + freeItem[2];
		dmpDataFile = outFileDir + freeItem[3];
		eFile = outFileDir + freeItem[4];
		this.dlKnrFlg = freeItem[5];
		this.trnKanriNo = freeItem[6];
		
		// 単項目チェック用に保持
		itemValueMap = new HashMap<String, String>();
		this.itemValueMap.put("TXT-ACIFM035.NO", "ＮＯ");
		this.itemValueMap.put("TXT-ACIFM035.RCV_YMD", "受信日");
		this.itemValueMap.put("TXT-ACIFM035.SIKY_SK_TELNO", "請求電話番号");
		this.itemValueMap.put("TXT-ACIFM035.DEMPO_PRC_SAGAKU", "電報料金／差額");
		this.itemValueMap.put("TXT-ACIFM035.STAX_SAGAKU", "消費税／差額");
		this.itemValueMap.put("TXT-ACIFM035.UZEI_DEMPO_PRC", "税込み電報料金");
		this.itemValueMap.put("TXT-ACIFM035.UK_MD", "受付月日");
		this.itemValueMap.put("TXT-ACIFM035.UK_HM", "受付時刻");
		
		// メッセージ一覧の取得
		String msListFile = JBSbatAplConst.getAplConstValue("MSG").toString();
		JBSbatMessageFileUtil messageFile = new JBSbatMessageFileUtil(msListFile);
		messageMap = messageFile.messageMap;
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// 変数宣言
		HashMap<String, Object> fileMap = new HashMap<String, Object>();
		ArrayList<String> bmpAriList = new ArrayList<String>();
		ArrayList<String> bmpErrList = new ArrayList<String>();
		ArrayList<ArrayList<String>> dmpDataList = new ArrayList<ArrayList<String>>();
		boolean judgeFlg = false;
		
		try
		{
			try {
				fileMap = fileMapInput(outFileDir + JBSbatACDnpUseChegDispatcher.BMP_ARI_MAP);
			} catch (Exception e) {
				// ディレイド処理依頼情報が存在しない
				return null;
			}
			
			// ディレイド処理依頼番号
			shoriIraiNo = (String)fileMap.get("DLYD_TRN_REQ_NO");
			
			/** (3) 一時ファイルの取得 */
			// (a) (2)で出力したファイルを取得
			try {
				bmpAriList = this.temporaryFileInput();
			} catch (FileNotFoundException fne) {
				// ファイルが存在しない
				return null;
			}
			
			/** (4) ファイル判断 */
			// (a) (3)で取得したファイルの1行目を取得し、ファイルの種類を判断
			// カンマ区切り単位にリストへ格納
			ArrayList<String> editList = this.splitRecord(bmpAriList.get(0));
			
			// 番ポあり判断項目の取得
			String bmpAriJudgeItem = (String)bmpAriWorkMap.get(JACStrConst.WKPARA_AC_BNPARI_JDG_KMK);
			
			// 番ポあり判断項目との比較
			for (int i = 0; i < editList.size(); i++)
			{
				// 配列の1件を取得
				String workItem = editList.get(i);
				
				// 番ポあり判断項目と一致した場合
				if (bmpAriJudgeItem.equals(workItem))
				{
					judgeFlg = true;
					break;
					
				}
			}

			// 上記処理で番ポありと判断した場合
			if (judgeFlg)
			{
				/** (5) 単項目チェック */
				// (a) (3)で取得したファイル情報からデータ部のみを抽出
				int headerCnt = Integer.parseInt((String)bmpAriWorkMap.get(JACStrConst.WKPARA_AC_BNPARI_HDR_RCNT));
				int footerCnt = Integer.parseInt((String)bmpAriWorkMap.get(JACStrConst.WKPARA_AC_BNPARI_FTR_RCNT));
				
				for (int i = 0; i < bmpAriList.size(); i++)
				{
					// データ部の抽出実施
					if (i >= headerCnt && i < bmpAriList.size() - footerCnt)
					{
						// 保持したリストをカンマ区切りに生成
						String listLine = bmpAriList.get(i);
						// カンマ区切りの編集
						ArrayList<String> editLines = splitRecord(listLine);
						
						// ファイル出力情報の設定
						HashMap<String, Object> itemMap = setItemCheck(editLines);
						
						// (b) 上記処理で取得したデータ部に対して単項目チェックを実施
						if(isSingleCheckACIFM035(itemMap, itemValueMap))
						{
							/** (6) 電報利用課金情報(番ポあり)データ部ファイル作成 */
							ArrayList<String> dmpData = createDmpData(editLines);
							dmpDataList.add(dmpData);
							
						}
						else
						{
							if(!errListHedOutFlg)
							{
								// 電報利用課金情報エラーリストヘッダ部分の作成
								String errHeader = dempoErrHeader();
								bmpErrList.add(errHeader);
								
								// 電報利用課金情報エラーリストヘッダ出力フラグ ← true
								this.errListHedOutFlg = true;
							}
							
							String errRecord = this.dempoAriErrMapping(editLines);
							bmpErrList.add(errRecord);
							errFlg = true;
							
						}
					}
				}
				
				// 電報利用課金情報（データ部）の作成
				createFile(dmpDataFile, dmpDataList, JACStrConst.ENCODE_SJIS, JACBatCommon.chgKaigyo("CR+LF"), JACStrConst.COMMA);
				
				/** (7) 電子ファイル管理情報ファイル作成 */
				createEFile(fileMap);
				
				// 単項目チェックでエラーとなった場合
				if (errFlg)
				{
					/** (8) 電報利用課金情報エラーリストファイル作成 */
					createErrFile(errListFile, bmpErrList, JACStrConst.ENCODE_SJIS, JACBatCommon.chgKaigyo("CR+LF"), JACStrConst.COMMA);
				}
			}
		}
		catch (Exception e)
		{
			// ロールバック実行
			this.commonItem.getConnection().rollback();
			
			// ディレイド処理依頼への更新
			JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JACStrConst.DLYD_TRN_RSLT_CD_SYS_ERR , null);
			
			// コミット実行
			this.commonItem.getConnection().commit();
		
			throw e;
			
		}		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		
		/** (9) ファイル削除 */
		// 一時ファイル削除
		File temporaryFile = new File(bmpAriTmpFile);
		// 一時ファイルが存在する場合
		if (temporaryFile.exists())
		{
			// ファイル削除実施
			temporaryFile.delete();
			
		}
		
		// 主処理で単項目エラーが発生した場合
		if (errFlg)
		{
			/** (10) エラー処理 */
			// (a) ディレイド処理結果更新
			HashMap<String, String> retMap = JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JACStrConst.DLYD_TRN_RSLT_CD_WORK_ERR, errListFile);
			
			// 電子ファイル管理番号を取得
			String eFileKanriNo = retMap.get("EFILE_KAMRI_NO");
			// ダウンロード管理制御フラグが"1"(登録)の場合、ダウンロード管理テーブルに登録する
			if(DLTOUROKU.equals(dlKnrFlg) && eFileKanriNo != null)
			{
				// ダウンロードファイル管理スキーマ登録
				insZmTDlFileKanri(eFileKanriNo);
			}
			
			// コミット実行
			this.commonItem.getConnection().commit();

			// エラーメッセージ出力
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0500CE);
			
		}

		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		db_CC_T_EFILE_KANRI.close();
		db_ZM_T_DL_FILE_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	業務パラメータID
	 *		 	業務パラメータ適用開始年月日
	 *		 	業務パラメータ適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_WORK_PARAM_KNRI_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_AC_SELECT_001);
	}
	
	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	電子ファイル管理番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCC_T_EFILE_KANRI_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CC_T_EFILE_KANRI.selectBySqlDefine(paramList, CC_T_EFILE_KANRI_AC_SELECT_001);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	ファイル番号				FILE_NO
	 *		 	処理管理番号				TRN_KANRI_NO
	 *		 	電子ファイル管理番号				EFILE_KANRI_NO
	 *		 	ファイル名				FILE_NM
	 *		 	ファイルサイズ				FILE_SIZE
	 *		 	データ件数				DATA_CNT
	 *		 	ファイル登録年月日時分秒				FILE_ADD_DTM
	 *		 	ファイル削除年月日				FILE_DEL_YMD
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("FILE_NO", setParam[0]);
		setMap.setValue("TRN_KANRI_NO", setParam[1]);
		setMap.setValue("EFILE_KANRI_NO", setParam[2]);
		setMap.setValue("FILE_NM", setParam[3]);
		setMap.setValue("FILE_SIZE", setParam[4]);
		setMap.setValue("DATA_CNT", setParam[5]);
		setMap.setValue("FILE_ADD_DTM", setParam[6]);
		setMap.setValue("FILE_DEL_YMD", setParam[7]);
		setMap.setValue("ADD_DTM", setParam[8]);
		setMap.setValue("ADD_OPEACNT", setParam[9]);
		setMap.setValue("UPD_DTM", setParam[10]);
		setMap.setValue("UPD_OPEACNT", setParam[11]);
		setMap.setValue("DEL_DTM", setParam[12]);
		setMap.setValue("DEL_OPEACNT", setParam[13]);
		setMap.setValue("MK_FLG", setParam[14]);
	
		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.insertByPrimaryKeys(setMap);
	}

	/**
	 *入力情報（電報利用課金情報（番ポあり））の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-ACIFM035.NO				電報利用課金情報（番ポあり）.ＮＯ
	 *			 TXT-ACIFM035.RCV_YMD			電報利用課金情報（番ポあり）.受信日
	 *			 TXT-ACIFM035.SIKY_SK_TELNO		電報利用課金情報（番ポあり）.請求電話番号
	 *			 TXT-ACIFM035.DEMPO_PRC_SAGAKU	電報利用課金情報（番ポあり）.電報料金／差額
	 *			 TXT-ACIFM035.STAX_SAGAKU		電報利用課金情報（番ポあり）.消費税／差額
	 *			 TXT-ACIFM035.UZEI_DEMPO_PRC	電報利用課金情報（番ポあり）.税込み電報料金
	 *			 TXT-ACIFM035.UK_MD				電報利用課金情報（番ポあり）.受付月日
	 *			 TXT-ACIFM035.UK_HM				電報利用課金情報（番ポあり）.受付時刻
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckACIFM035(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目エラーメッセージの初期化
		itemErrMessage = "";
		// 単項目チェックを行います
		String strValue = null;

		// ＮＯ項目チェック
		strValue = (String)rsMap.get("NO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0450CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.NO")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0450CE).toString().replace("%1%", (String)itemvalueMap.get("TXT-ACIFM035.NO"));
			
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0460CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.NO")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0460CE).toString().replace("%1%", (String)itemvalueMap.get("TXT-ACIFM035.NO"));
			
			return false;
		}

		// 受信日項目チェック
		strValue = (String)rsMap.get("RCV_YMD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0450CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.RCV_YMD")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0450CE).toString().replace("%1%", (String)itemvalueMap.get("TXT-ACIFM035.RCV_YMD"));
			
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month_day1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0460CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.RCV_YMD")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0460CE).toString().replace("%1%", (String)itemvalueMap.get("TXT-ACIFM035.RCV_YMD"));
			
			return false;
		}

		// 請求電話番号項目チェック
		strValue = (String)rsMap.get("SIKY_SK_TELNO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0450CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.SIKY_SK_TELNO")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0450CE).toString().replace("%1%",
																									(String)itemvalueMap.get("TXT-ACIFM035.SIKY_SK_TELNO"));
			
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakusuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0460CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.SIKY_SK_TELNO")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0460CE).toString().replace("%1%",
																									(String)itemvalueMap.get("TXT-ACIFM035.SIKY_SK_TELNO"));
			
			return false;
		}

		// 電報料金／差額項目チェック
		strValue = (String)rsMap.get("DEMPO_PRC_SAGAKU");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0450CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.DEMPO_PRC_SAGAKU")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0450CE).toString().replace("%1%",
																									(String)itemvalueMap.get("TXT-ACIFM035.DEMPO_PRC_SAGAKU"));
			
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0460CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.DEMPO_PRC_SAGAKU")});
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0460CE).toString().replace("%1%",
																									(String)itemvalueMap.get("TXT-ACIFM035.DEMPO_PRC_SAGAKU"));
			
			return false;
		}

		// 消費税／差額項目チェック
		strValue = (String)rsMap.get("STAX_SAGAKU");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0450CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.STAX_SAGAKU")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0450CE).toString().replace("%1%",
																									(String)itemvalueMap.get("TXT-ACIFM035.STAX_SAGAKU"));
			
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0460CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.STAX_SAGAKU")});

			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0460CE).toString().replace("%1%",
																									(String)itemvalueMap.get("TXT-ACIFM035.STAX_SAGAKU"));
			
			return false;
		}

		// 税込み電報料金項目チェック
		strValue = (String)rsMap.get("UZEI_DEMPO_PRC");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0450CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.UZEI_DEMPO_PRC")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0450CE).toString().replace("%1%",
																									(String)itemvalueMap.get("TXT-ACIFM035.UZEI_DEMPO_PRC"));
			
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0460CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.UZEI_DEMPO_PRC")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0460CE).toString().replace("%1%",
																									(String)itemvalueMap.get("TXT-ACIFM035.UZEI_DEMPO_PRC"));
			
			return false;
		}

		// 受付月日項目チェック
		strValue = (String)rsMap.get("UK_MD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0450CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.UK_MD")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0450CE).toString().replace("%1%",
																									(String)itemvalueMap.get("TXT-ACIFM035.UK_MD"));
			
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"month_day1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0460CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.UK_MD")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0460CE).toString().replace("%1%",
																									(String)itemvalueMap.get("TXT-ACIFM035.UK_MD"));
			
			return false;
		}

		// 受付時刻項目チェック
		strValue = (String)rsMap.get("UK_HM");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0450CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.UK_HM")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0450CE).toString().replace("%1%",
																									(String)itemvalueMap.get("TXT-ACIFM035.UK_HM"));
			
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hour_min1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EACB0460CE, new String[]{
															(String)itemvalueMap.get("TXT-ACIFM035.UK_HM")});
			
			// メッセージ内容
			itemErrMessage = messageMap.get(JPCBatchMessageConstant.EACB0460CE).toString().replace("%1%",
																									(String)itemvalueMap.get("TXT-ACIFM035.UK_HM"));
			
			return false;
		}

		return true;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 一時ファイルの読み込みを行います。<br>
	 * <p>
	 * 一時ファイルとして保存したファイルの内容を
	 * 読み込む。<br>
	 * <p>
	 * @return ファイル内容
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private ArrayList<String> temporaryFileInput() throws Exception
	{
		JBSbatInputFileUtil inFileUtil = null;
		ArrayList<String> temporaryList = new ArrayList<String>();
		
		inFileUtil = new JBSbatInputFileUtil(bmpAriTmpFile);
		inFileUtil.setEncode(JACStrConst.ENCODE_MS932);
		inFileUtil.createReader();
		while (inFileUtil.ready())
		{
			// ファイルの1レコードをリストに保持する
			temporaryList.add(inFileUtil.readLine());
			
		}
		
		// 一時ファイルを閉じる
		if (inFileUtil != null)
		{
			inFileUtil.close();
			
		}
		
		return temporaryList;
	}
	
	/**
	 *入力情報(電報利用課金情報(番ポあり))から抽出したデータ行(１行分)を<br>
	 *分割し、リストに格納する。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定されているレコードに対して最初にレコード全体をカンマ分割し、分割した個々の文字列に「"」が存在する場合
	 * 　必要な連結やエスケープ処理を行い、個々のフィールドを確定する。<br>
	 * <p>
	 * 2.処理方法は以下のとおり<br>
	 * <p>
	 *   2-1.レコード全体をStringクラスのsplitメソッドを使ってカンマで分割し、分割した個々の文字列データの先頭から「"」を探す。
	 *   　　見つからなければその文字列は１フィールドとして確定する。
	 *       
	 *   2-2.「"」が見つかったら次の「"」を探す。次の「"」の直後に「"」があればエスケープされた「"」として処理し、
	 *   　　そうでなければフィールドの終わりとみなす。
	 *   
	 *   2-3.フィールで後ろの「"」が見つからなかった場合、フィールドに含まれるカンマでsplitメソッドが分割したものと見なして
	 *   　　フィールドの後ろに(splitメソッドが削除した)カンマと次のフィールドを連結する。
	 *   
	 *   2-4.フィールドの開始と終了の「"」は削除する。
	 * </pre>
	 * <p>
	 * @param lineRecord レコード(１行分)
	 * @return editList 「"」を取り除いたレコード
	 */
	private ArrayList<String> splitRecord(String lineRecord)
	{
		// 変数宣言
		String column = "";										// フィールド
		StringBuffer sb = new StringBuffer(1024);				// 編集用
		int startPos = 0;										// 開始位置
		int endPos = 0;											// 終了位置
		int columnlen = 0;										// フィールドの長さ
		ArrayList<String> editList = new ArrayList<String>();	// 編集結果リスト
		
		// 設定された引数を分割
		String[] columns = lineRecord.split(",",-1);
		// 最大文字数の取得
		int maxlen = columns.length;
		
		// 文字列編集
		for (int i = 0; i < maxlen; i++)
		{
			// フラグの初期化
			boolean flg = false;
			
			// １フィールドを取得
			column = columns[i];
			
			// 「"」を取得
			endPos = column.indexOf("\"");
			// フィールドに「"」が含まれていない場合
			if (endPos < 0)
			{
				// 取得したフィールドをそのまま設定
				editList.add(column);
				
			}
			else
			{
				// フィールドの長さを取得
				columnlen = column.length();
				
				// 終了位置が0の場合
				if (endPos == 0 && !flg)
				{
					// 開始位置を設定
					startPos = 1;
					sb.setLength(0);
				}
				
				// 「"」の位置確認
				while (startPos < columnlen)
				{
					// 「"」の終了位置を取得
					endPos = column.indexOf("\"", startPos);
					// 終了位置が0以上の場合
					if (endPos >= 0)
					{
						// 終了位置が開始位置より大きい場合
						if (startPos <= endPos)
						{
							// 編集用変数に「"」を除いた値を設定
							sb.append(column.substring(startPos, endPos));
							// 開始位置を加算
							startPos = ++endPos;
							
						}
					}
					else
					{
						// 編集用変数に1文字を設定
						sb.append(column.substring(startPos));
						// インデックスが「最大文字数 - 1」より小さい場合
						if (i < maxlen - 1)
						{
							// 「,」を挿入
							sb.append(",");
							// 開始位置の初期化
							startPos = 0;
							
							flg = true;
							// 処理を抜ける
							break;
							
						}
					}
				}
				
				// 編集した文字列をリストに格納
				if (!flg)
				{
					editList.add(sb.toString());	
				}
			}
		}
		
		// 編集結果を返す
		return editList;
	}
	
	/**
	 * 単項目チェック用にマッピングを行います。<br>
	 * <p>
	 * 電報利用課金情報(番ポあり)の内容を単項目チェック用にマッピングする<br>
	 * <p>
	 * @param editLines 一時ファイルの内容(1レコード分)
	 * @return ファイル内容
	 */
	private HashMap<String, Object> setItemCheck(ArrayList<String> editLines)
	{
		HashMap<String, Object> bmpAriMap = new HashMap<String, Object>();
		
		// 電報利用課金情報(番ポあり)の内容を設定
		// NO
		bmpAriMap.put(JBSbatACIFM035.NO, editLines.get(0));
		// 受信日
		bmpAriMap.put(JBSbatACIFM035.RCV_YMD, editLines.get(1));
		// 請求電話番号
		bmpAriMap.put(JBSbatACIFM035.SIKY_SK_TELNO, editLines.get(2));
		// 電報料金／差額
		bmpAriMap.put(JBSbatACIFM035.DEMPO_PRC_SAGAKU, editLines.get(3));
		// 消費税／差額
		bmpAriMap.put(JBSbatACIFM035.STAX_SAGAKU, editLines.get(5));
		// 税込み電報料金
		bmpAriMap.put(JBSbatACIFM035.UZEI_DEMPO_PRC, editLines.get(7));
		// 受付月日
		bmpAriMap.put(JBSbatACIFM035.UK_MD, editLines.get(9));
		// 受付時刻
		bmpAriMap.put(JBSbatACIFM035.UK_HM, editLines.get(10));
		
		// ファイルの設定内容を返す
		return bmpAriMap;

	}
	
	/**
	 * 電報利用課金情報エラーリストヘッダ部分のファイル出力を行います。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String dempoErrHeader() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][dempoErrHeader]");
		
		// ヘッダ部分の項目を設定する
		// ヘッダー部の作成
		StringBuffer errHeader = new StringBuffer();
		errHeader.append("請求契約番号");
		errHeader.append(",");
		errHeader.append("サービス契約番号");
		errHeader.append(",");
		errHeader.append("ＮＯ");
		errHeader.append(",");
		errHeader.append("請求電話番号");
		errHeader.append(",");
		errHeader.append("本体料金");
		errHeader.append(",");
		errHeader.append("請求金額");
		errHeader.append(",");
		errHeader.append("受付年月日");
		errHeader.append(",");
		errHeader.append("サービス開始日");
		errHeader.append(",");
		errHeader.append("サービス終了日");
		errHeader.append(",");
		errHeader.append("法人・個人有無");
		errHeader.append(",");
		errHeader.append("番ポ識別");
		errHeader.append(",");
		errHeader.append("エラー内容");
	
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][dempoErrHeader]");

		// ファイルの設定内容を返す
		return errHeader.toString();
	}

	
	/**
	 * 電報利用課金情報エラーリスト(番ポあり)のマッピングを行います。<br>
	 * <p>
	 * 電報利用課金情報エラーリスト(番ポあり)の出力内容を設定する。<br>
	 * <p>
	 * @param editLines 一時ファイルの内容(1レコード分)
	 * @return ファイル内容
	 */
	private String dempoAriErrMapping(ArrayList<String> editLines)
	{
		StringBuffer errRecord = new StringBuffer(97);
		
		// 電報利用課金情報エラーリスト(番ポあり)の内容を設定
		// 空白 ⇒ 電報利用課金情報エラーリスト.請求契約番号
		errRecord.append(JACStrConst.SEIKY_KEI_NO_SP);
		errRecord.append(",");
		// 空白 ⇒ 電報利用課金情報エラーリスト.サービス契約番号
		errRecord.append(JACStrConst.SVC_KEI_NO_SP);
		errRecord.append(",");
		// 電報利用課金情報(番ポあり).NO ⇒ 電報利用課金情報エラーリスト.NO
		errRecord.append(editLines.get(0));
		errRecord.append(",");
		// 電報利用課金情報(番ポあり).請求電話番号 ⇒ 電報利用課金情報エラーリスト.請求電話番号
		errRecord.append(editLines.get(2));
		errRecord.append(",");
		// 電報利用課金情報(番ポあり).電報料金／差額 ⇒ 電報利用課金情報エラーリスト.本体料金
		errRecord.append(editLines.get(3));
		errRecord.append(",");
		// 電報利用課金情報(番ポあり).税込み電報料金 ⇒ 電報利用課金情報エラーリスト.請求金額
		errRecord.append(editLines.get(7));
		errRecord.append(",");
		// 電報利用課金情報(番ポあり).受付月日 ⇒ 電報利用課金情報エラーリスト.受付年月日
		errRecord.append(editLines.get(9));
		errRecord.append(",");
		// 空白 ⇒ 電報利用課金情報エラーリスト.サービス開始日
		errRecord.append(OUT_KML_LEN_MD);
		errRecord.append(",");
		// 空白 ⇒ 電報利用課金情報エラーリスト.サービス終了日
		errRecord.append(OUT_KML_LEN_MD);
		errRecord.append(",");
		// 空白 ⇒ 電報利用課金情報エラーリスト.法人・個人有無
		errRecord.append(OUT_KML_LEN_KO_HO_UM);
		errRecord.append(",");
		// 「番ポ対象分」固定 ⇒ 電報利用課金情報エラーリスト.番ポ識別
		errRecord.append(BMP_SKBT_CD);
		errRecord.append(",");
		// 単項目チェックエラー内容 ⇒ 電報利用課金情報エラーリスト.エラー内容
		errRecord.append(itemErrMessage);
		
		dataCount++;
		
		// ファイルの設定内容を返す
		return errRecord.toString();

	}
	
	/**
	 * 電報利用課金情報（データ部）のデータを作成する
	 * 
	 * @param editLines 電報利用課金情報
	 * @return 電報利用課金情報
	 */
	private ArrayList<String> createDmpData(ArrayList<String> editLines)
	{
		ArrayList<String> dmpData = new ArrayList<String>();
		
		BigDecimal tempPrc = BigDecimal.ZERO;
		
		// 電報利用課金情報(番ポあり)の内容を設定
		// 電報利用課金情報(データ部).番ポ識別コード
		dmpData.add(BMP_SKBT_CD);
		// 電報利用課金情報(データ部).NO
		dmpData.add(String.valueOf(Integer.valueOf(editLines.get(0))));
		// 電報利用課金情報(データ部).受信日
		dmpData.add(editLines.get(1));
		// 電報利用課金情報(データ部).請求電話番号
		dmpData.add(editLines.get(2));
		// 電報利用課金情報(データ部).電報料金／差額
		tempPrc = new BigDecimal(editLines.get(3));
		dmpData.add(String.valueOf(tempPrc));
		// 電報利用課金情報(データ部).電報料金／差額符号
		dmpData.add(editLines.get(4));
		// 電報利用課金情報(データ部).消費税／差額
		tempPrc = new BigDecimal(editLines.get(5));
		dmpData.add(String.valueOf(tempPrc));
		// 電報利用課金情報(データ部).消費税／差額符号
		dmpData.add(editLines.get(6));
		// 電報利用課金情報(データ部).税込み電報料金
		tempPrc = new BigDecimal(editLines.get(7));
		dmpData.add(String.valueOf(tempPrc));
		// 電報利用課金情報(データ部).税込み電報料金符号
		dmpData.add(editLines.get(8));
		// 電報利用課金情報(データ部).受付月日
		dmpData.add(editLines.get(9));
		// 電報利用課金情報(データ部).受付時刻
		dmpData.add(editLines.get(10));
		// 電報利用課金情報(データ部).呼種別情報
		dmpData.add(editLines.get(11));
		// 電報利用課金情報(データ部).電報宛地
		dmpData.add(editLines.get(12));
		// 電報利用課金情報(データ部).文字数／頁数
		dmpData.add(String.valueOf(Integer.valueOf(editLines.get(13))));
		// 電報利用課金情報(データ部).加減算F(電報)
		dmpData.add(editLines.get(14));
		// 電報利用課金情報(データ部).加減算F(税)
		dmpData.add(editLines.get(15));
		// 電報利用課金情報(データ部).加減事由
		dmpData.add(editLines.get(16));
		// 電報利用課金情報(データ部).頁F
		dmpData.add(editLines.get(17));
		// 電報利用課金情報(データ部).配達月日
		dmpData.add(editLines.get(18));
		// 電報利用課金情報(データ部).問合せ番号
		dmpData.add(editLines.get(19));
		// 電報利用課金情報(データ部).他事業者移行年月日
		dmpData.add(editLines.get(20));
		return dmpData;
	}
	
	/**
	 * 電子ファイル管理情報を出力する
	 * 
	 * @param fileMap 電子ファイル管理情報
	 * @throws Exception 
	 */
	private void createEFile(HashMap<String, Object> fileMap) throws Exception
	{
		ArrayList<ArrayList<String>> eFileList = new ArrayList<ArrayList<String>>();
		ArrayList<String> eFileData = new ArrayList<String>();
		// 電子ファイル管理情報(番ポあり)の内容を設定
		// 電子ファイル管理情報.ディレイド処理依頼番号
		eFileData.add((String) fileMap.get("DLYD_TRN_REQ_NO"));
		
		// 単項目エラーの場合、ディレイド処理依頼ステータスを処理エラーにする
		if(errFlg)
		{
			// 電子ファイル管理情報.ディレイド処理依頼ステータス
			eFileData.add(JACStrConst.DLYD_TRN_STAT_TRN_ERR);
		}
		else
		{
			// 電子ファイル管理情報.ディレイド処理依頼ステータス
			eFileData.add((String) fileMap.get("DLYD_TRN_REQ_STAT"));
		}
		
		// 電子ファイル管理情報.入力電子ファイル管理番号
		eFileData.add((String) fileMap.get("INPUT_EFILE_KANRI_NO"));
		// 電子ファイル管理情報.入力電子世代登録年月日時分秒
		eFileData.add((String) fileMap.get("INPUT_EFILE_GENE_ADD_DTM"));
		// 電子ファイル管理情報.依頼ジョブID
		eFileData.add((String) fileMap.get("REQ_JOB_ID"));
		// 電子ファイル管理情報.システムコード
		eFileData.add((String) fileMap.get("SYS_CD"));
		// 電子ファイル管理情報.ディレイド処理依頼種別コード
		eFileData.add((String) fileMap.get("DLYD_TRN_REQ_SBT_CD"));
		// 電子ファイル管理情報.ディレイド処理結果コード
		eFileData.add((String) fileMap.get("DLYD_TRN_RSLT_CD"));
		// 電子ファイル管理情報.エラー電子ファイル管理番号
		eFileData.add((String) fileMap.get("ERR_EFILE_KANRI_NO"));
		// 電子ファイル管理情報.エラー電子世代登録年月日時分秒
		eFileData.add((String) fileMap.get("ERR_EFILE_GENE_ADD_DTM"));
		eFileList.add(eFileData);
		createFile(eFile, eFileList, JACStrConst.ENCODE_SJIS, JACBatCommon.chgKaigyo("CR+LF"), JACStrConst.COMMA);
	}
	
	/**
	 * ファイル出力
	 * 
	 * @param file ファイル名
	 * @param arrayList 出力データを格納した配列
	 * @param encode 文字コード
	 * @param line 改行コード
	 * @param div 区切文字
	 * @throws Exception
	 */
	private void createFile(String file, ArrayList<ArrayList<String>> arrayList, String encode, String line, String div) throws Exception 
	{
		// encodeの形式がSHIFT-JISの場合、MS932に変換
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(encode.toUpperCase()))
		{
			encode = JACStrConst.ENCODE_MS932;
		}
		
		// ファイルの生成
		JBSbatBusinessFileUtil fileUtil = JCCBatCommon.createBusinessFileUtil(file, encode, line, div);
		Iterator<ArrayList<String>> it = arrayList.iterator();
		// データ数分繰り返し
		while(it.hasNext())
		{
			// データを取得
			ArrayList<String> data = it.next();
			// ファイルに書き込み
			JCCBatCommon.printBusinessFileUtil(fileUtil, data);
		}
		// ファイルを閉じる
		JCCBatCommon.closeBusinessFileUtil(fileUtil);
	}
	
	/**
	 * エラーファイル出力
	 * 
	 * @param file ファイル名
	 * @param arrayList 出力データを格納した配列
	 * @param encode 文字コード
	 * @param line 改行コード
	 * @param div 区切文字
	 * @throws Exception
	 */
	private void createErrFile(String file, ArrayList<String> arrayList, String encode, String line, String div) throws Exception 
	{
		// encodeの形式がSHIFT-JISの場合、MS932に変換
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(encode.toUpperCase()))
		{
			encode = JACStrConst.ENCODE_MS932;
		}
		// ファイルの生成
		JBSbatBusinessFileUtil fileUtil = JCCBatCommon.createBusinessFileUtil(file, encode, line, div);
		Iterator<String> it = arrayList.iterator();
		// データ数分繰り返し
		while(it.hasNext())
		{
			// データを取得
			String data = it.next();
			// ファイルに書き込み
			JCCBatCommon.printBusinessFileUtil(fileUtil, data);
		}
		// ファイルを閉じる
		JCCBatCommon.closeBusinessFileUtil(fileUtil);
	}

	
	/**
	 * ダウンロードファイル管理スキーマに登録します。
	 * 
	 * @param eFileInfo 電子ファイル管理情報
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void insZmTDlFileKanri(String eFileKanriNo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][insZmTDlFileKanri]");

		// 電子ファイル管理の情報を取得
		JBSbatCommonDBInterface eFileInfo = this.selectCcTEfileKanri(eFileKanriNo);
		
		// 設定値
		JBSbatCommonDBInterface param = new JBSbatCommonDBInterface();
		//  1.ファイル番号
		param.setValue(JCCBatCommon.getFormatedNextSeq(super.commonItem, JACStrConst.SEQ_FILE_NO, SEQ_PREFIX_SEQ_FILE_NOO, SEQ_LEN_SEQ_FILE_NO));
		//  2.処理管理番号
		param.setValue(this.trnKanriNo);
		//  3.電子ファイル管理番号
		param.setValue(eFileKanriNo);
		//  4.ファイル名
		String[] fileName = this.errListFile.split(JACStrConst.SLASH, -1);
		param.setValue(fileName[fileName.length - 1]);
		//  5.ファイルサイズ
		param.setValue(JCCFileUtil.getFileSize(this.errListFile));
		//  6.データ件数
		param.setValue(this.dataCount);
		//  7.ファイル登録年月日時分秒
		param.setValue(eFileInfo.getString(JBSbatCC_T_EFILE_KANRI.ADD_DTM));
		//  8.ファイル削除年月日
		param.setValue(eFileInfo.getString(JBSbatCC_T_EFILE_KANRI.FILE_DEL_YMD));
		//  9.登録年月日時分秒
		param.setValue(null);
		// 10.登録オペレータアカウント
		param.setValue(null);
		// 11.更新年月日時分秒
		param.setValue(null);
		// 12.更新オペレータアカウント
		param.setValue(null);
		// 13.削除年月日時分秒
		param.setValue(null);
		// 14.削除オペレータアカウント
		param.setValue(null);
		// 15.無効フラグ
		param.setValue(null);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][insZmTDlFileKanri][param = " + param.getList().toString() + "]");

		// SQL実行
		executeZM_T_DL_FILE_KANRI_PKINSERT(param.getList().toArray());

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][insZmTDlFileKanri]");
	}
	
	/**
	 * 電子ファイル管理スキーマより、電子ファイル管理の情報を取得します。
	 * 
	 * @param eFileNO 		電子ファイル管理番号
	 * @return dbMap		電子ファイル管理の情報
	 * @throws Exception 　業務サービス内で発生した例外全般
	 */
	private JBSbatCommonDBInterface selectCcTEfileKanri(String eFileKanriNo) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectCcTEfileKanri]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(eFileKanriNo);				// 電子ファイル管理番号
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectCcTEfileKanri][paramList=" + paramList.getList().toString() + "]");

		// SQL実行
		executeCC_T_EFILE_KANRI_AC_SELECT_001(paramList.getList().toArray());
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_CC_T_EFILE_KANRI.selectNext();
		
		if (dbMap == null)
		{
			// DB未存在エラー
			String[] msgParam = new String[]
			{ JBSbatCC_T_EFILE_KANRI.TABLE_NAME, JPCUtilCommon.convMapToString(paramList.getMap()) };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0260CH, msgParam);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectCcTEfileKanri][dbMap=" + dbMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectCcTEfileKanri]");
		return dbMap;
	}

	/**
	 * ディレイド処理情報の読み込みを行います。<br>
	 * <p>
	 * ファイルからディレイド処理情報を保持するMapを復元します。<br>
	 * <p>
	 * @param fileMap ファイル名
	 * @return HashMap デシリアライズしたオブジェクト
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private HashMap<String, Object> fileMapInput(String fileName) throws Exception {
		FileInputStream fis = new FileInputStream(fileName);
		ObjectInputStream ois = new ObjectInputStream(fis);
		HashMap<String, Object> fileMap = (HashMap<String, Object>)ois.readObject();
		if (fis != null) {
			fis.close();
		}
		if (ois != null) {
			ois.close();
		}
		return fileMap;
	}
}
