/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKDslDataFileSksi
*	ソースファイル名	：JBSbatKKDslDataFileSksi.java
*	作成者				：富士通　
*	作成日				：2011年10月05日
*＜機能概要＞
*　解約データファイル作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/10/05   富士通		新規作成
*	v5.00.01	2013/04/16   FJ)六車	【ST6-2013-0000003】フィルタリングサーバへのファイル出力の削除対応
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatCommon;
import eo.business.util.file.JBSbatKKIFE009;
import eo.business.util.file.JBSbatKKIFE010;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* サービス契約から解約済またはキャンセル済のデータを抽出する。<BR>
* 運用日付をファイル名に反映させるため、出力ファイル名を手組する。<BR>
* <BR>
* 例）xxxx_yyyymmdd.csv → xxxx_20110909.csv<br>
*<BR>
* @author 富士通
*/
public class JBSbatKKDslDataFileSksi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * レコード改行コード
	 */
	private static final String LFC  = "LF";

	/**
	 * トレーラーレコード文字コード
	 */
	private static final String SJIS  = "Shift-JIS";

	/**
	 * 解約データファイル（ＳＦ）の手動書き込みファイルの宣言
	 */
	private JBSbatOutputFileUtil outFileObj1 = null;

	/**
	 * 解約データファイル（フィルタリングサーバ）の手動書き込みファイルの宣言
	 */

	private JBSbatOutputFileUtil outFileObj2 = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// ▽▽▽書き込みファイル手動セット▽▽▽

		// フリーアイテムで渡されたファイル名を取得します
		String[] writeFileName = super.freeItem.split(";");
		
		// バッチ運用日付の取得
		String useDate = super.opeDate;
		String fuyoChr = "-";

		// 運用日付がnullや空文字、8桁でない場合ではこれ以前でシステムが落ちるため
		// 条件文は実装しない。
//		if(useDate == null && "".equals(useDate) && useDate.length() >= 8){
			useDate = useDate.substring(0, 4) + fuyoChr + useDate.substring(4, 6) + fuyoChr + useDate.substring(6, 8);
//		}

		if(writeFileName.length == 1)
		{
			if(writeFileName[0].trim().length() != 0)
			{

				// 出力ファイル名の日付（yyyy-mm-dd）をバッチ運用日付に置換
				String writeFileName1 = writeFileName[0].replace("yyyy-mm-dd", useDate);
//				String writeFileName2 = writeFileName[1].replace("yyyy-mm-dd", useDate);

				// 出力ファイルを書き込みモードで開く
				outFileObj1 = new JBSbatOutputFileUtil(writeFileName1);
				outFileObj1.setEncode(SJIS);
				outFileObj1.setLine(LFC);
				outFileObj1.createWriter();

//				outFileObj2 = new JBSbatOutputFileUtil(writeFileName2);
//				outFileObj2.setEncode(SJIS);
//				outFileObj2.setLine(LFC);
//				outFileObj2.createWriter();
			}
			else
			{
				throw new JBSbatBusinessException("EKKB0170CE",
						new String[]{"出力ファイル名が不正です(ファイル名1:" + writeFileName[0] + ")" });
			}
		}
		else
		{
			throw new JBSbatBusinessException("EKKB0170CE",
					new String[] { "フリーパラメータ数が不正です。(1ファイル必要です)"});
		}

		// △△△書き込みファイル手動セット△△△

		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		super.logPrint.printDebugLog("execute start");
		
		// 解約データファイル（ＳＦ）入出力インターフェースオブジェクトの生成
		JBSbatServiceInterfaceMap outMapEdit009 = new JBSbatServiceInterfaceMap();

		// 解約データファイル（フィルタリングサーバ）入出力インターフェースオブジェクトの生成
//		JBSbatServiceInterfaceMap outMapEdit010 = new JBSbatServiceInterfaceMap();

		// 出力ファイルレコードの編集（解約データファイル（ＳＦ））
		editKKIFE009Data(inMap, outMapEdit009);
		
		// 出力ファイルレコードの編集（解約データファイル（フィルタリングサーバ））
//		editKKIFE010Data(inMap, outMapEdit010);

		// 解約データファイル（ＳＦ）の手動出力
		setKKIFE009Data(outMapEdit009);

		// 解約データファイル（フィルタリングサーバ）の手動出力
//		setKKIFE010Data(outMapEdit010);

		super.logPrint.printDebugLog("execute end");

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/

		// ▽▽▽書き込みファイルを閉じる▽▽▽

		// 書き込みファイルを閉じる
		outFileObj1.close();
//		outFileObj2.close();

		// △△△書き込みファイルを閉じる△△△
/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 解約データファイル（ＳＦ）の編集処理を行います。
	 * @param  inMap  入力情報
	 * @param  outMap 出力情報
	 * @throws Exception
	 */
	private void editKKIFE009Data(JBSbatServiceInterfaceMap inMap, JBSbatServiceInterfaceMap outMap) throws Exception
	{

		// サービス契約番号をお客様ＩＤにセット
		String svcKeiNo = inMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
		outMap.setString(JBSbatKKIFE009.CUST_ID, svcKeiNo);

		// バッチ運用日付の取得
		String useDate = super.opeDate;
		String svcDslYmd = useDate.substring(2, 8);
		outMap.setString(JBSbatKKIFE009.DSL_YMD, svcDslYmd);

		// ダブルクォーテーションを付加
		JKKBatCommon.setDblquoteOutputDateZengoChr(outMap);
	}

	/**
	 * 解約データファイル（フィルタリングサーバ）の編集処理を行います。
	 * @param  inMap  入力情報
	 * @param  outMap 出力情報
	 * @throws Exception
	 */
	private void editKKIFE010Data(JBSbatServiceInterfaceMap inMap, JBSbatServiceInterfaceMap outMap) throws Exception
	{

		// サービス契約番号をお客様ＩＤにセット
		String svcKeiNo = inMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO);
		outMap.setString(JBSbatKKIFE009.CUST_ID, svcKeiNo);

		// バッチ運用日付の取得
		String useDate = super.opeDate;
		String svcDslYmd = useDate.substring(2, 8);
		outMap.setString(JBSbatKKIFE010.DSL_YMD, svcDslYmd);

		// ダブルクォーテーションを付加
		JKKBatCommon.setDblquoteOutputDateZengoChr(outMap);
	}

	/**
	 * 解約データファイル（ＳＦ）の手動出力。
	 * @param  inMap  解約データファイル（ＳＦ）
	 * @throws Exception
	 */
	private void setKKIFE009Data(JBSbatServiceInterfaceMap inMap) throws Exception
	{

		// お客様ＩＤ
		String svcKeiNo = inMap.getString(JBSbatKKIFE009.CUST_ID);

		// 解約日
		String svcDslYmd = inMap.getString(JBSbatKKIFE009.DSL_YMD);
		
		String outDataString = svcKeiNo + "," + svcDslYmd;
		
		outFileObj1.write(outDataString);

	}

	/**
	 * 解約データファイル（フィルタリングサーバ）の手動出力。
	 * @param  inMap  解約データファイル（フィルタリングサーバ）
	 * @throws Exception
	 */
	private void setKKIFE010Data(JBSbatServiceInterfaceMap inMap) throws Exception
	{

		// お客様ＩＤ
		String svcKeiNo = inMap.getString(JBSbatKKIFE010.CUST_ID);

		// 解約日
		String svcDslYmd = inMap.getString(JBSbatKKIFE010.DSL_YMD);
		
		String outDataString = svcKeiNo + "," + svcDslYmd;
		
		outFileObj2.write(outDataString);

	}

}
