/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKWaoOrdRegRsltListCrt
*	ソースファイル名	：JBSbatKKWaoOrdRegRsltListCrt.java
*	作成者				：富士通　
*	作成日				：2025年04月02日
*＜機能概要＞
* WAO注文登録結果リスト作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v75.00.00	2025/04/02  GDC)ml.alcantara	【ANK-4640-00-00】typeN：追加要件対応

*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKKBatCommon;
import eo.common.constant.JKKStrConst;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatDateUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKWaoOrdRegRsltListCrt extends JBSbatBusinessService
{
	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";
	
	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	
	/** 結果ファイルオブジェクト*/
	private JBSbatBusinessFileUtil rsltFileObj = null;
	
	/** 結果ファイル名*/
	private String rsltFileName = null;
	
	/** 結果ファイルフルパス */
	private String rsltFileFullPath = null;
	
	/** WAO注文登録結果データファイル取込結果 */
	JBSbatServiceInterfaceMap recordMap = null;
	
	/** WAO注文連携結果リストのレコード件数*/
	private int rsltFileCount = 0;
	
	/** システム日付*/
	private String sysDateTime = null;
	
	/** ファイルコード */
	private static final String FILE_CD = "0000";
	
	/** 処理管理番号：WAO注文連携結果リスト */
	private static final String KKLST13501_TRN_KANRI_NO = "000000000290";
	
	/** SHELLパラメータ区切り文字(コロン) */
	private static final String S_PARAM_DELIM = ";";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// フリー項目を取得する
		String[] freeItems = freeItem.split(S_PARAM_DELIM);
		
		// システム日付設定
		sysDateTime = JCCBatCommon.getSysDateTimeStamp();
		
		// WAO注文連携結果リストのファイル名を編集
		rsltFileName = "WAO注文連携結果リスト_" + sysDateTime + ".csv";
		
		// WAO注文連携結果リストのフルパス
		rsltFileFullPath = freeItems[1] + "/" + rsltFileName;
		
		// WAO注文連携結果リストのオブジェクトを生成する
		rsltFileObj = JKKBatCommon.createBusinessFileUtil(rsltFileFullPath,
		JKKStrConst.ENCODE_SJIS, JKKStrConst.LINE_SEPARATOR, JKKStrConst.COMMA);
		
		// 結果リストのレコード件数
		rsltFileCount = 0;
		
		// WAO注文登録結果データファイル（KKIFM979.csv）取得
		InputStreamReader isWaoOrderAddTrg = new InputStreamReader(new FileInputStream(freeItems[0]), JKKStrConst.ENCODE_SJIS);
		
		// WAO注文登録結果データファイル件数分を繰返す
		BufferedReader brWaoOrderAddTrgt = null;
		brWaoOrderAddTrgt = new BufferedReader(isWaoOrderAddTrg);
		
		while (brWaoOrderAddTrgt.ready())
		{
			// ファイルから１レコード取得し情報を配列に格納
			String[] data = brWaoOrderAddTrgt.readLine().split(JKKStrConst.COMMA);
			
			// WAO注文連携結果リストファイルを出力する
			if (data.length > 1)
			{
				createKklst13501(data);
			}
		}
		// ファイルクローズ
		if (rsltFileObj != null)
		{
			rsltFileObj.close();
		}
		
		// ファイル削除年月日
		String delYmd = JBSbatDateUtil.adjustMonth(commonItem.getOpeDate(), 1);	// バッチ運用日+１か月
		// 結果ファイル登録処理
		JKKBatCommon.createFile(commonItem,								// バッチ共通パラメータ電文
								KKLST13501_TRN_KANRI_NO,				// 処理管理番号
								new Long(rsltFileCount),				// データ件数
								FILE_CD,								// ファイルコード
								freeItems[1],							// ファイルディレクトリ
								rsltFileName,							// ファイル名
								delYmd,									// ファイル削除年月日
								db_ZM_T_DL_FILE_KANRI,					// テーブルアクセスクラス
								false);									// 圧縮実行フラグ
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_T_DL_FILE_KANRI.close();
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * WAO注文連携結果リストファイルを出力する。<br>
	 * @param rsMap 入力データ（DB）を格納されたHashMap
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private void createKklst13501(String[] list) throws Exception
	{
		// WAO注文連携結果リストファイルのデータ部
		ArrayList<String> kklst13501Data = new ArrayList<String>();
		// お客様ID
		kklst13501Data.add(cutDq((String)list[0]));
		// 異動種類
		kklst13501Data.add(cutDq((String)list[1]));
		// ID
		kklst13501Data.add(cutDq((String)list[2]));
		// 結果コード
		kklst13501Data.add(cutDq((String)list[3]));
		// 失敗対象パラメータID
		kklst13501Data.add(cutDq((String)list[4]));
		// 失敗理由
		kklst13501Data.add(cutDq((String)list[5]));
		// API連携日時
		kklst13501Data.add(cutDq((String)list[6]));
		
		JKKBatCommon.printDoubleQuoteBusinessFileUtil(rsltFileObj, kklst13501Data);
		
		// 出力件数カウントアップ
		rsltFileCount++;
	}
	
	/**
	 * ダブルクォートを削除
	 * 
	 * @param str
	 * @return
	 */
	private String cutDq(String str)
	{
		String ret = str;
		if (str.startsWith("\"") && str.endsWith("\""))
		{
			ret = str.substring(1, str.length() - 1);
		}
		return ret;
	}
}
