/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHKhriSeikyReqInfoMail
*	ソースファイル名	：JBSbatCHKhriSeikyReqInfoMail.java
*	作成者				：富士通　
*	作成日				：2023年05月29日
*＜機能概要＞
*　口座振替請求依頼情報メール本文作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2023/05/29   富士通		新規作成
*	v67.00.00	2023/05/29   FJ）孫		ANK-4415-00-00_口振請求及びWeb申込システム移行 STEP1
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.common.constant.JACStrConst;
import eo.common.util.JCHCommonFormatUtil;
import eo.common.util.JPCUtilCommon;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHKhriSeikyReqInfoMail extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		String[] fileNameAry = null;
		String freeNames = super.freeItem;
		if(freeNames != null && !"".equals(freeNames))
		{
			fileNameAry = freeNames.split(JACStrConst.FREE_DIV);
		}
		// 中間ファイル(CHIFM420002)読み込み
		ArrayList<String> resultList = readFile(fileNameAry[0]);
		
		// メール本文ファイルを作成し、送信内容を出力
		JBSbatOutputFileUtil cntFile = new JBSbatOutputFileUtil(fileNameAry[1]);
		cntFile.setEncode(JACStrConst.ENCODE_SJIS);
		cntFile.setLine(JACStrConst.LINE_CRLF);
		cntFile.createWriter();
		cntFile.write(setMail(resultList));
		cntFile.close();
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * ファイル読み込み処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で読込ファイルディレクトリ(フルパス)を設定します。<br>
	 *
	 * 2.引数を元にファイル読込を行い、行をListへ格納します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param strFileDir    出力ディレクトリ(フルパス)。
	 * @return resultList   返却用List
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private static ArrayList<String> readFile(String strFileDir) throws Exception
	{
		ArrayList<String> resultList = new ArrayList<String>();
		File file = new File(strFileDir);
		if(!file.exists())
		{
			return resultList;
		}
		// 外部出力ファイルパス
		JBSbatInputFileUtil inFile = new JBSbatInputFileUtil(strFileDir);
		inFile.setEncode(JACStrConst.ENCODE_SJIS); // 文字コード
		inFile.setLine(JACStrConst.LINE_CRLF); // 改行コード
		inFile.createReader();
		try
		{
			while (true) 
			{
				String line = inFile.readLine();
				if (line == null)
				{
					inFile.close();
					break;
				}
				resultList.add(line);
			}
			return resultList;
		} 
		catch (IOException e)
		{
			throw e;
		} 
		finally
		{
			inFile.close();
		}
	}
	
	/**
	 * メール本文を設定する。
	 * 
	 * 【設定内容例】
	 * 【1月27日　口座振替依頼分】
	 * 連携件数　750,000件
	 * 口座振替請求額　100,000,000円
	 * @param resultList 入力情報
	 * @return mailData メール本文
	 */
	private String setMail(ArrayList<String> resultList)
	{
		//引落日の月
		String eventMon = "";
		//引落日の日
		String eventDay = "";
		//合計件数
		String gokeiCnt = "";
		//合計金額
		String gokeiAmnt = "";
		for(int i = 0; i < resultList.size(); i++)
		{
			String data = resultList.get(i);
			String dataDiv = data.substring(0,1);
			if(JACStrConst.DATA_KUBUN_HEADER.equals(dataDiv))
			{
				//引落日の月取得
				eventMon = JCHCommonFormatUtil.toZeroSuppress(data.substring(54,56));
				//引落日の日取得
				eventDay = JCHCommonFormatUtil.toZeroSuppress(data.substring(56,58));
			}
			else if(JACStrConst.DATA_KUBUN_TRAILER.equals(dataDiv))
			{
				//合計件数取得
				gokeiCnt = JPCUtilCommon.formatNumber(JCHCommonFormatUtil.toZeroSuppress(data.substring(1,7)));
				//合計金額取得
				gokeiAmnt = JPCUtilCommon.formatNumber(JCHCommonFormatUtil.toZeroSuppress(data.substring(7,19)));
			}
		}
		//メール本文
		StringBuilder mailData = new StringBuilder();
		// 送信日の情報を設定
		mailData.append("0," + eventMon + "月" + eventDay+ "日\r\n");
		mailData.append("1,【" + eventMon + "月" + eventDay+ "日　口座振替依頼分】\r\n");
		// 2行分、改行を設定
		mailData.append("1,\r\n");
		mailData.append("1,連携件数　"+ gokeiCnt + "件" + "\r\n");
		mailData.append("1,口座振替請求額　"+ gokeiAmnt + "円");
		return mailData.toString();
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
