/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKBundleInfoFileSksi
*	ソースファイル名	：JBSbatKKBundleInfoFileSksi.java
*	作成者				：富士通　
*	作成日				：2011年10月18日
*＜機能概要＞
*　バンドル情報ファイル作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/10/18	FJ)神吉		新規作成
*	v2.01.00	2012/01/12  FJ)神吉		【IT2-2012-0000048】障害対応
*	v3.00.00	2012/10/01  FJ)藤本		【IT1-2012-0001051】障害対応
*********************************************************************/
package eo.business.service;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFE049001;
import eo.business.util.table.JBSbatKK_T_KCN_RNK_KEI_INF;
import eo.common.constant.JPCBatchMessageConstant;
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;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKBundleInfoFileSksi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** 
	 ** バンドル情報ファイル送信フラグファイル名 
	 */
	private static final String FILE_NAME = "バンドル情報ファイル送信フラグ";
	
	/** 
	 ** エラーメッセージ(置換え文字列：%2%) 
	 */
	private static final String MASSEAGE = "ファイル出力エラー";
	
	/** 
	 ** ダブルクォーテーション 
	 */
	private static final String MOJI_D = "\"";
	
	/** 
	 ** ファイル出力エラーID
	 */
	private static final String ERR_ID_EKKB0250CE = "EKKB0250CE";
	
	/** 
	 *  該当データカウント
	 */
	private int count = 0;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");
		
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// 入出力インターフェースオブジェクトを生成（バンドル情報ファイル送信データファイル用）
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
		
		String svcKeiNo              = "";		// サービス契約番号
		String kcnNo                 = "";		// ＫＣＮ番号
		String svcStaymd             = "";		// サービス開始年月日
		String svcChrgStaymd         = "";		// サービス課金開始年月日
		String svcEndymd             = "";		// サービス終了年月日
		String kcnKeiCd              = "";		// ＫＣＮ契約コード
		String kcnKeiStatCd          = "";		// ＫＣＮ契約状態コード 
		String shosaZumiFlg          = "";		// 照査済フラグ
		String shosaYmd              = "";		// 照査年月日
		String svcCancelYmd          = "";		// サービスキャンセル年月日
		String svcDslYmd             = "";		// サービス解約年月日
		String packKindCd            = "";		// パック種類コード
		String packTstaymd           = "";		// パック適用開始年月日
		String packTendymd           = "";		// パック適用終了年月日
		String packTstym             = "";		// パック適用年月

		// サービス契約番号
		svcKeiNo = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.SVC_KEI_NO));
		
		// ＫＣＮ番号
		kcnNo = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.KCN_NO));
		if("".equals(kcnNo))
		{
			kcnNo = "          ";
		}
		
		// サービス開始年月日
		svcStaymd = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.SVC_STAYMD));
		
		// サービス課金開始年月日
		svcChrgStaymd = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.SVC_CHRG_STAYMD));
		
		// サービス終了年月日
		svcEndymd = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.SVC_ENDYMD));
		
		// ＫＣＮ契約コード
		kcnKeiCd = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.KCN_KEI_CD));
		
		// ＫＣＮ契約状態コード 
		kcnKeiStatCd = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.KCN_KEI_STAT_CD));
		
		// 照査済フラグ
		shosaZumiFlg = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.SHOSA_ZUMI_FLG));
		
		// 照査年月日
		shosaYmd = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.SHOSA_YMD));
		
		// サービスキャンセル年月日
		svcCancelYmd = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.SVC_CANCEL_YMD));
		
		// サービス解約年月日
		svcDslYmd = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.SVC_DSL_YMD));
		
		// パック種類コード
		packKindCd = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.PACK_KIND_CD));
		
		// パック適用開始年月日
		packTstaymd = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.PACK_TSTAYMD));
		
		// パック適用終了年月日
		packTendymd = JBSbatStringUtil.trim(inMap.getString(JBSbatKK_T_KCN_RNK_KEI_INF.PACK_TENDYMD));
		
		// パック適用開始年月日が「null」でなく、8桁以上有る場合
		if(packTstaymd != null && packTstaymd.length() >= 8)
		{
			// パック適用年月
			packTstym = packTstaymd.substring(0, 6);
		}
		
		//項目を設定
		outmap.setString(JBSbatKKIFE049001.SVC_KEI_NO, svcKeiNo);					// サービス契約番号
		outmap.setString(JBSbatKKIFE049001.CUST_CD, kcnNo);							// ＫＣＮ番号
		outmap.setString(JBSbatKKIFE049001.SVC_STAYMD, svcStaymd);					// サービス開始年月日
		outmap.setString(JBSbatKKIFE049001.SVC_CHRG_STAYMD, svcChrgStaymd);			// サービス課金開始年月日
		
		// サービス終了年月日がHV：20991231の場合
		if ("20991231".equals(svcEndymd))
		{
			outmap.setString(JBSbatKKIFE049001.SVC_ENDYMD, "99991201");					// サービス終了年月日
		}
		else
		{
			outmap.setString(JBSbatKKIFE049001.SVC_ENDYMD, svcEndymd);					// サービス終了年月日
		}
		
		outmap.setString(JBSbatKKIFE049001.KCN_KEI_CD, kcnKeiCd);					// ＫＣＮ契約コード
		outmap.setString(JBSbatKKIFE049001.KCN_KEI_STAT_CD, kcnKeiStatCd);			// ＫＣＮ契約状態コード 
		outmap.setString(JBSbatKKIFE049001.SHOSA_ZUMI_FLG, shosaZumiFlg);			// 照査済フラグ
		outmap.setString(JBSbatKKIFE049001.SHOSA_YMD, shosaYmd);					// 照査年月日
		outmap.setString(JBSbatKKIFE049001.SVC_CANCEL_YMD, svcCancelYmd);			// サービスキャンセル年月日
		outmap.setString(JBSbatKKIFE049001.SVC_DSL_YMD, svcDslYmd);					// サービス解約年月日
		outmap.setString(JBSbatKKIFE049001.PACK_KIND_CD, packKindCd);				// パック種類コード
		outmap.setString(JBSbatKKIFE049001.PACK_TSTAYMD, packTstaymd);				// パック適用開始年月日
		outmap.setString(JBSbatKKIFE049001.PACK_TENDYMD, packTendymd);				// パック適用終了年月日
		outmap.setString(JBSbatKKIFE049001.PACK_TSTAYM, packTstym);					// パック適用年月
		
		super.logPrint.printDebugLog("サービス契約番号：" +  svcKeiNo);
		super.logPrint.printDebugLog("ＫＣＮ番号：" +  kcnNo);
		super.logPrint.printDebugLog("サービス開始年月日：" +  svcStaymd);
		super.logPrint.printDebugLog("サービス課金開始年月日：" +  svcChrgStaymd);
		super.logPrint.printDebugLog("サービス終了年月日：" +  svcEndymd);
		super.logPrint.printDebugLog("ＫＣＮ契約コード：" +  kcnKeiCd);
		super.logPrint.printDebugLog("ＫＣＮ契約状態コード ：" +  kcnKeiStatCd);
		super.logPrint.printDebugLog("照査済フラグ：" +  shosaZumiFlg);
		super.logPrint.printDebugLog("照査年月日：" +  shosaYmd);
		super.logPrint.printDebugLog("サービスキャンセル年月日：" +  svcCancelYmd);
		super.logPrint.printDebugLog("サービス解約年月日：" +  svcDslYmd);
		super.logPrint.printDebugLog("パック種類コード：" +  packKindCd);
		super.logPrint.printDebugLog("パック適用開始年月日：" +  packTstaymd);
		super.logPrint.printDebugLog("パック適用終了年月日：" +  packTendymd);
		super.logPrint.printDebugLog("パック適用年月：" +  packTstym);
		
		// 該当レコードカウントアップ
		count++;
		
		//出力フラグを設定
		outmap.setOutFlg(true);
		
		//出力共通電文にバンドル情報送信データファイルを設定
		outputBean.addOutMapList(outmap);
		
		super.logPrint.printDebugLog("execute_END");
		
		//出力共通電文を返却
		return outputBean;
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		// 該当レコードがない場合
		if(count == 0)
		{
			// 連携契約情報テーブルに該当レコードがない内容のログ出力
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, 
					new String[]{"連携契約情報テーブルに該当データが存在しません。該当レコード件数：" + count});
		}

		// バンドル情報ファイル送信件数ファイルオブジェクト取得
		JBSbatOutputFileUtil obj = super.commonItem.getOutPutFile2();
		
		// 該当レコード件数を設定
		String countStr = String.valueOf(count);
		
		// 該当レコード件数をダブルクォーテーションで囲み設定
		obj.write(MOJI_D + countStr + MOJI_D);
		
		// バンドル情報ファイル送信フラグファイル出力
		executeOutputFlgFile();

	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * バンドル情報ファイル送信フラグファイルを出力します。<br>
	 * <p>
	 * @throws JBSbatBusinessException 
	 * @throws IOException 業務サービス内で発生した例外全般。
	 */	
	private void executeOutputFlgFile() throws IOException, JBSbatBusinessException
	{
		// 一時ファイル読込み処理
		BufferedWriter wr = null;
		try
		{
			// パラメータで渡されたバンドル情報ファイル送信フラグファイルを出力する。
			wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(super.commonItem.getFreeItem()), JKKBatConst.SJIS));
		}
		catch(IOException e)
		{
			// バンドル情報ファイル送信フラグファイル出力エラー
			throw new JBSbatBusinessException(ERR_ID_EKKB0250CE, new String[]{FILE_NAME, MASSEAGE});
		}
		finally
		{
			if (wr != null)
			{
				wr.close();
			}
		}
	}
}
