/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACMVNOPrcInfoInputChk
*	ソースファイル名	：JBSbatACMVNOPrcInfoInputChk.java
*	作成者				：富士通　
*	作成日				：2013年12月09日
*＜機能概要＞
*　MVNO料金情報入力チェック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v8.00.00	2013/12/09   富士通		新規作成 【ANK-1584-00-00】新規作成
*	v29.00.00	2017/03/15   富士通		【OM-2017-0000154】MVNO取込メモリエラー
*	v56.00.00	2022/01/13   富士通		【OM-2022-0000077】EOL起因性能障害
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;

import eo.business.common.JACBatCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatInterface;
import eo.business.util.file.JBSbatACIFM255;
import eo.business.util.file.JBSbatACIFM256;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACMVNOPrcInfoInputChk extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** ファイル定義 */
	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 = "2";

	/** レコード種別値の位置 */
	private static final int SBT_POS = 0;

	/** レコード種別値のサイズ */
	private static final int SBT_SIZE = 1;

	/** フリー項目情報格納用配列 */
	private String[] freeItemArray = null;

// OM-2022-0000077 20220113 星野 ADD START
	File fOutFile = null;
	FileWriter writer;
// OM-2022-0000077 20220113 星野 ADD END
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		
		// フリー項目情報を取得
		freeItemArray = super.freeItem.split(JACStrConst.FREE_DIV);

		// ファイルリードオブジェクト
		JBSbatInputFileUtil inFileObj = new JBSbatInputFileUtil(freeItemArray[0]);
		inFileObj.setEncode(JACStrConst.ENCODE_MS932);
		inFileObj.createReader();

		// 行文字列
		String sLine = null;
		// レコード種別
		String recSbt = null;
		//---------v29.00.00 【OM-2017-0000154】 ADD START---------//
		// 定義ファイル名取得
		String defFileName = freeItemArray[4];
		// 出力ファイル名
		String ouFileName = freeItemArray[1];
		// 出力ファイル削除
		this.deleteFile(ouFileName);
		//出力ファイルパス
		String outFileDefPath = JBSbatAplConst.getAplConstValue(PARAM_OTD) + defFileName;
		//出力ファイル
		JBSbatOutputFileUtil dataFile = new JBSbatOutputFileUtil(ouFileName);
		//定義ファイル
		JBSbatDefFileUtil dataFileDef = new JBSbatDefFileUtil(outFileDefPath, dataFile);
		dataFileDef.getDelimiter();
		//encode形式
		String encode = dataFile.getEncode();
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(encode.toUpperCase()))
		{
			// encodeの形式がSHIFT-JISの場合、MS932に変換
			encode = JACStrConst.ENCODE_MS932;
		}
		// 改行コード
		String kaigyouCd = dataFile.getLine();
		// ファイルカウント数
		int fileCount = 0;
		// 前回レコード種別
		String beforeRecSbt = null;
		//---------v29.00.00 【OM-2017-0000154】 ADD END-----------//

		// 種別毎のレコード数
		int headerRecCnt = 0;
		int dataRecCnt = 0;
		int trailerRecCnt = 0;
		//---------v29.00.00 【OM-2017-0000154】 ADD START---------//
		int trailerCkCnt = 0;
		ArrayList<ArrayList<String>> outData = new ArrayList<ArrayList<String>>();
		JBSbatDefFileUtil dataDefFile = new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue(PARAM_IND) + freeItemArray[4], inFileObj);	// データ
		JBSbatDefFileUtil trailerDefFile = new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue(PARAM_IND) + freeItemArray[5], inFileObj);	// トレール
		JBSbatServiceInterfaceMap retInMap = null;

// OM-2022-0000077 20220113 星野 ADD START
		fOutFile = new File(ouFileName);
		if (fOutFile.isFile()){
			fOutFile.delete();
		}
		writer = new FileWriter(fOutFile,true);
// OM-2022-0000077 20220113 星野 ADD END
		// ファイル一行ずつ読み込み
		try
		{
			while (true)
			{
				sLine = inFileObj.readLine();
				if (JACBatCommon.isNull(sLine))
				{
					// 空ファイルの場合
					if (fileCount == 0){
						this.zeroByteOutFile(ouFileName, encode);
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0570CE);
					}
					// ヘッダーのみのファイルの場合
					if (fileCount == 1 ){
						this.zeroByteOutFile(ouFileName, encode);
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0930CE,
								new String[] { String.valueOf(recSbt) });
					}
					// EOFとみなし、終了
					break;
				}
				// 外部との受け渡し以外はクォートなしとする
				sLine = sLine.replaceAll("\"", "");
				// 種別コードを取得する
				recSbt = sLine.substring(SBT_POS, SBT_POS + SBT_SIZE);
				// 1回目
				if (fileCount == 0)
				{
					if (HEADER_REC_SBT.equals(recSbt)){
						headerRecCnt++;
						
					}else {
						this.deleteFile(ouFileName);
						this.zeroByteOutFile(ouFileName, encode);
						// 1件目のレコードの「レコード区分」が0(ヘッダーレコード）でない
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0570CE);
					}
					
				}
				// 2回目
				else if (fileCount == 1)
				{
					// 今回種別コードが"1"（データレコード）あるいは"2"（トレーラレコード）以外の場合
					if (!(DATA_REC_SBT.equals(recSbt) || TRAILER_REC_SBT.equals(recSbt))){
						this.deleteFile(ouFileName);
						this.zeroByteOutFile(ouFileName, encode);
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0920CE,
								new String[] { 	String.valueOf(beforeRecSbt), String.valueOf(recSbt) });
					}
				}
				// 3回目以上
				else if (fileCount >= 2)
				{
					// 今回種別コードが"1"（データレコード）あるいは"2"（トレーラレコード）以外の場合
					if (!(DATA_REC_SBT.equals(recSbt) || TRAILER_REC_SBT.equals(recSbt))){
						this.deleteFile(ouFileName);
						this.zeroByteOutFile(ouFileName, encode);
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0920CE,
								new String[] { 	String.valueOf(beforeRecSbt), String.valueOf(recSbt)});
					}
					
					// 今回種別コードが"1"（データレコード）かつ前回種別コードが"2"（トレーラレコード）の場合
					if (DATA_REC_SBT.equals(recSbt) && TRAILER_REC_SBT.equals(beforeRecSbt)){
						this.deleteFile(ouFileName);
						this.zeroByteOutFile(ouFileName, encode);
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0920CE,
								new String[] { 	String.valueOf(beforeRecSbt), String.valueOf(recSbt)});
					}
					
					// 今回種別コードが"2"（トレーラレコード）かつ前回種別コードが"1"（データレコード）以外の場合
					if(TRAILER_REC_SBT.equals(recSbt) && !DATA_REC_SBT.equals(beforeRecSbt))
					{
						this.deleteFile(ouFileName);
						this.zeroByteOutFile(ouFileName, encode);
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0920CE,
								new String[] { 	String.valueOf(beforeRecSbt), String.valueOf(recSbt)});
					}
				}
				// データレコード情報を取得
				if (DATA_REC_SBT.equals(recSbt))
				{
					dataRecCnt++;
					retInMap = dataDefFile.lineToObject(sLine, inFileObj, 0);
					outData.add(createData(retInMap));
					outputFile(ouFileName, outData, dataRecCnt, encode, kaigyouCd);
					outData = new ArrayList<ArrayList<String>>();
				}
				// トレーラレコード情報を取得
				if (TRAILER_REC_SBT.equals(recSbt))
				{
					trailerCkCnt++;
					// トレーラレコードとして再取得
					retInMap = trailerDefFile.lineToObject(sLine, inFileObj, 0);
					trailerRecCnt = Integer.parseInt(retInMap.getString(JBSbatACIFM256.DATA_REC_CNT));
					if(dataRecCnt != trailerRecCnt)
					{
						this.deleteFile(ouFileName);
						this.zeroByteOutFile(ouFileName, encode);
						// トレーラレコードの件数と、今回読込んだレコードの件数が同一でない
						throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0690NE, 
								new String[] { 	String.valueOf(dataRecCnt), String.valueOf(trailerRecCnt) });
					}
				}
				// 前回種別の取得
				beforeRecSbt = recSbt;
				// レコード件数の取得
				fileCount++;
			}
			// トレーラレコードが存在しない
			if (headerRecCnt== 1 && dataRecCnt >=1 && trailerCkCnt == 0){
				this.deleteFile(ouFileName);
				this.zeroByteOutFile(ouFileName, encode);
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0930CE,
						new String[] { String.valueOf(recSbt) });
			}
			// データレコードが無いパターン
			if (headerRecCnt== 1 && dataRecCnt ==0 && trailerCkCnt == 1){
				this.deleteFile(ouFileName);
				this.zeroByteOutFile(ouFileName, encode);
			}
		}
		finally 
		{
				inFileObj.close();
// OM-2022-0000077 20220113 星野 ADD START
				writer.close();
// OM-2022-0000077 20220113 星野 ADD END
		}
		//---------v29.00.00 【OM-2017-0000154】 ADD END-----------//
		//---------v29.00.00 【OM-2017-0000154】 DELETE START------//
//		// ファイルリードオブジェクトをリストに格納
//		ArrayList<String> fileList = getFileList(inFileObj);
//		
//		// 種別毎のレコード数
//		int headerRecCnt = 0;
//		int dataRecCnt = 0;
//		int trailerRecCnt = 0;
//		for(int i = 0; i < fileList.size(); i++)
//		{
//			recSbt = fileList.get(i).substring(SBT_POS, SBT_POS + SBT_SIZE);
//			if(HEADER_REC_SBT.equals(recSbt))
//			{
//				headerRecCnt++;
//			}
//			else
//			{
//				if(DATA_REC_SBT.equals(recSbt))
//				{
//					dataRecCnt++;
//				}
//				else
//				{
//					if(TRAILER_REC_SBT.equals(recSbt))
//					{
//						trailerRecCnt++;
//					}
//				}
//			}
//		}
//		int recCnt = 0;
			
//		// １件目チェック
//		sLine = fileList.get(recCnt++);
//		String preKbn = sLine.substring(SBT_POS, SBT_POS + SBT_SIZE);
//		if(!HEADER_REC_SBT.equals(sLine.substring(SBT_POS, SBT_POS + SBT_SIZE)))
//		{
//			// 1件目のレコードの「レコード区分」が0(ヘッダーレコード）でない
//			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0570CE);
//		}
//
//		// シーケンスチェック
//		sLine = fileList.get(recCnt++);
//		String nowKbn = sLine.substring(SBT_POS, SBT_POS + SBT_SIZE);
//		if(HEADER_REC_SBT.equals(preKbn) && fileList.size() != recCnt && !DATA_REC_SBT.equals(nowKbn))
//		{
//			// 2件目以降（ヘッダーレコードの次）かつ最終レコードでないレコードの
//			// 「レコード区分」が1（データレコード）でない
//			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0920CE,
//					new String[] { 	String.valueOf(preKbn), String.valueOf(nowKbn) });
//		}
//
//		// 最終レコードチェック
//		sLine = fileList.get(fileList.size() - 1);
//		nowKbn = sLine.substring(SBT_POS, SBT_POS + SBT_SIZE);
//		if(!TRAILER_REC_SBT.equals(nowKbn))
//		{
//			// 最終レコードが2（トレーラレコード）でない
//			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0930CE,
//					new String[] { String.valueOf(nowKbn) });
//		}
//
//		// 件数チェック
//		// トレーラレコードとして再取得
//		JBSbatServiceInterfaceMap retInMap = null;
//		JBSbatDefFileUtil trailerDefFile = new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue(PARAM_IND) + freeItemArray[5], inFileObj);	// トレール
//		sLine = fileList.get(headerRecCnt + dataRecCnt);
//		retInMap = trailerDefFile.lineToObject(sLine, inFileObj, 0);
//		trailerRecCnt = Integer.parseInt(retInMap.getString(JBSbatACIFM256.DATA_REC_CNT));
//		if(dataRecCnt != trailerRecCnt)
//		{
//			// トレーラレコードの件数と、今回読込んだレコードの件数が同一でない
//			throw new JBSbatBusinessException(JPCBatchMessageConstant.EACB0690NE, 
//					new String[] { 	String.valueOf(dataRecCnt), String.valueOf(trailerRecCnt) });
//		}
//		
//		// MVNO料金情報（入力チェック済み）データファイルの出力
//		ArrayList<ArrayList<String>> outData = new ArrayList<ArrayList<String>>();
//		JBSbatDefFileUtil dataDefFile = new JBSbatDefFileUtil(JBSbatAplConst.getAplConstValue(PARAM_IND) + freeItemArray[4], inFileObj);	// データ
//		for(int m = headerRecCnt; m < (headerRecCnt + dataRecCnt); m++) {
//			sLine = fileList.get(m);
//			retInMap = dataDefFile.lineToObject(sLine, inFileObj, 0);
//			outData.add(createData(retInMap));
//		}
//		outputFile(freeItemArray[1], freeItemArray[4], outData);
		//---------v29.00.00 【OM-2017-0000154】 DELETE END--------//
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/


	/**
	 * ファイルリードオブジェクトをリストに格納
	 * 
	 * @param inFileObj ファイルリードオブジェクト
	 * @return ArrayList 行データのリスト
	 * @exception Ｉ/O例外
	 */
	private ArrayList<String> getFileList(JBSbatInputFileUtil inFileObj) throws IOException
	{
		try
		{
			String sLine = null;
			ArrayList<String> list = new ArrayList<String>();

			while (true)
			{
				sLine = inFileObj.readLine();

				if (sLine == null)
				{
					break;
				}
				// 外部との受け渡し以外はクォートなしとする
				list.add(sLine.replaceAll("\"", ""));
			}
			return list;
		} 
		finally 
		{
			inFileObj.close();
		}
	}
	
	/**
	 * MVNO料金情報（入力チェック済み）データファイルを生成する
	 * 
	 * @param inMap 入力データ
	 * @return 出力データ
	 * @throws Exception 
	 * 
	 */
	private ArrayList<String> createData(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		ArrayList<String> data = new ArrayList<String>();

		// レコード区分
		data.add(inMap.getString(JBSbatACIFM255.REC_DIV));
		// 処理識別コード
		data.add(inMap.getString(JBSbatACIFM255.TRAN_SKBT_CD));
		// サービス契約番号
		data.add(inMap.getString(JBSbatACIFM255.SVC_KEI_NO));
		// 携帯電話番号
		data.add(inMap.getString(JBSbatACIFM255.CELLPHONE_NO));
		// 料金グループコード
		data.add(inMap.getString(JBSbatACIFM255.PRC_GRP_CD));
		// 料金コースコード
		data.add(inMap.getString(JBSbatACIFM255.PCRS_CD));
		// 料金サービスコード
		data.add(inMap.getString(JBSbatACIFM255.PRC_SVC_CD));
		// 料金項目コード
		data.add(inMap.getString(JBSbatACIFM255.PRC_KMK_CD));
		// 請求時期指定
		data.add(inMap.getString(JBSbatACIFM255.SEIKY_JIKI_SHITEI));
		// 請求年月
		data.add(inMap.getString(JBSbatACIFM255.SEIKY_YM));
		// 請求金額
		data.add(inMap.getString(JBSbatACIFM255.SEIKY_AMNT));

		return data;
	}
	//---------v29.00.00 【OM-2017-0000154】 DELETE START------//
//	/**
//	 * ファイル出力
//	 * 
//	 * @param outFileName 出力ファイル名
//	 * @param defFileName 定義ファイル名
//	 * @param arrayList 出力データを格納した配列
//	 * @throws Exception スローされる例外
//	 */
//	private void outputFile(String outFileName, String defFileName, ArrayList<ArrayList<String>> arrayList) throws Exception
//	{
//		String outFileDefPath = JBSbatAplConst.getAplConstValue(PARAM_OTD) + defFileName;
//		JBSbatOutputFileUtil dataFile = new JBSbatOutputFileUtil(outFileName);
//		JBSbatDefFileUtil dataFileDef = new JBSbatDefFileUtil(outFileDefPath, dataFile);
//
//		String encode = dataFile.getEncode();
//		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(encode.toUpperCase()))
//		{
//			// encodeの形式がSHIFT-JISの場合、MS932に変換
//			encode = JACStrConst.ENCODE_MS932;
//		}
//
//		JBSbatBusinessFileUtil fileUtil = JCCBatCommon.createBusinessFileUtil(outFileName, encode, JACBatCommon.chgKaigyo(dataFile.getLine()),
//						dataFileDef.getDelimiter());
//		Iterator<ArrayList<String>> it = arrayList.iterator();
//
//		while (it.hasNext())
//		{
//			ArrayList<String> data = it.next();
//			JCCBatCommon.printBusinessFileUtil(fileUtil, data);
//		}
//
//		JCCBatCommon.closeBusinessFileUtil(fileUtil);
//	}
	//---------v29.00.00 【OM-2017-0000154】 DELETE END--------//
	//---------v29.00.00 【OM-2017-0000154】 ADD START---------//
	/**
	 * ファイル出力
	 * 
	 * @param outFileName 出力ファイル名
	 * @param arrayList 出力データを格納した配列
	 * @param dataRecCnt データ件数
	 * @param encode 文字コード
	 * @param dataFile データファイル
	 * @throws Exception スローされる例外
	 */
	private void outputFile(String outFileName, ArrayList<ArrayList<String>> arrayList, int dataRecCnt, String encode ,String kaigyouCd ) throws Exception
	{
// OM-2022-0000077 20220113 星野 DEL START
//		File fOutFile = new File(outFileName);
//		if (dataRecCnt == 1 && fOutFile.isFile()){
//			fOutFile.delete();
//		}
//		FileWriter writer = new FileWriter(fOutFile,true);
// OM-2022-0000077 20220113 星野 DEL END
		try
		{
			Iterator<ArrayList<String>> it = arrayList.iterator();

			while (it.hasNext())
			{
				ArrayList<String> data = it.next();
				Object dataList;
				Iterator itdata = data.iterator();
				StringBuffer buf = new StringBuffer();
				while(itdata.hasNext()) {
					dataList = (Object)itdata.next();
					if(dataList != null){
						buf.append(dataList.toString());
					}
					if(itdata.hasNext()) {
						buf.append(",");
					}
				}
				writer.write(JBSbatInterface.charConverter(buf.toString(), encode));
				writer.write(JACBatCommon.chgKaigyo(kaigyouCd));
			}		
		} 
		catch (IOException e)
		{
			throw e;
		}
		finally
		{
// OM-2022-0000077 20220113 星野 DEL START
//			writer.close();
// OM-2022-0000077 20220113 星野 DEL END
		}
	}
	
	/**
	 * ファイル削除処理
	 * @param outFileName 出力ファイル名
	 * @throws Exception スローされる例外
	 */
	private void deleteFile(String outFileName) throws Exception
	{
		// ファイル削除
		File deleteOutFile = new File(outFileName);
		if (deleteOutFile.isFile()){
			deleteOutFile.delete();
		}
	}
	/**
	 * 0Byteファイル作成
	 * @param outFileName 出力ファイル名
	 * @throws Exception スローされる例外
	 */
	private void zeroByteOutFile(String outFileName, String encode) throws Exception
	{
		// 0byteファイル作成
		File zeroByteFile = new File(outFileName);
		FileWriter writer = new FileWriter(zeroByteFile);
		writer.write(JBSbatInterface.charConverter("", encode));
	}
	//---------v29.00.00 【OM-2017-0000154】 ADD END-----------//
}
