/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom  					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHKjtDelTgKeyMake
*	ソースファイル名	：JBSbatCHKjtDelTgKeyMake.java
*	作成者				：富士通　
*	作成日				：2013年11月25日
*＜機能概要＞
*　期日到来削除対象キー作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v6.00.00	2013/11/25  FJ)伊藤		新規作成
*	v35.00.00	2017/11/16  FJ)貝本		【ANK-3192-00-00】LaLaCallの通話明細情報の取得タイミング変更
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.util.file.JBSbatCHIFM212;
import eo.business.util.table.JBSbatAC_T_CN050AP_TWDL_JT;
import eo.business.util.table.JBSbatAC_T_CN050AP_TWGK_JT;
import eo.business.util.table.JBSbatAC_T_CN050AP_TWRCKTC;
import eo.business.util.table.JBSbatAC_T_CN050AP_TW_DTL;
import eo.business.util.table.JBSbatAC_T_CN050AP_TW_GK;
import eo.business.util.table.JBSbatAC_T_EOH_TEL_TW_DTL;
import eo.business.util.table.JBSbatAC_T_EOH_TEL_TW_GK;
import eo.business.util.table.JBSbatAC_T_EOMOBA_DTL;
import eo.business.util.table.JBSbatAC_T_EOMOBA_GOKEI;
import eo.business.util.table.JBSbatAC_T_EONET_TW_DTL;
import eo.business.util.table.JBSbatAC_T_EONET_TW_GK;
import eo.business.util.table.JBSbatAC_T_FTTH_TSHN_DTL_T;
import eo.business.util.table.JBSbatAC_T_FTTH_TSHN_GK_T;
import eo.business.util.table.JBSbatAC_T_FTTH_TUSHIN_DTL;
import eo.business.util.table.JBSbatAC_T_FTTH_TUSHIN_GK;
import eo.business.util.table.JBSbatCH_T_JGSHAKSSN;
import eo.business.util.table.JBSbatCH_T_JGSHAKSSN_KEI;
import eo.business.util.table.JBSbatCH_T_KAIK_IDO;
import eo.business.util.table.JBSbatCH_T_RECEIPT;
import eo.common.constant.JACStrConst;
import eo.common.util.JPCDateUtil;
import eo.framework.file.JBSbatDefFileUtil;
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 JBSbatCHKjtDelTgKeyMake extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** パラメータ取得部品 */
	private JACbatParamUtil paramUtil = null;
	
	/** 固定値：パーティション削除[なし]("0") */
	private final String PARTITION_NONE = "0";
	
	/** 固定値：パーティション削除[あり]("1") */
	private final String PARTITION_USE = "1";
	
	/** 固定値：条件項目年月日フラグオフ("0") */
	private final String YMD_FLG_OFF= "0";
	
	/** 固定値：条件項目年月日フラグオン("1") */
	private final String YMD_FLG_ON = "1";
	
	/** ファイル番号 */
	private BigDecimal fileNo;
	
	/** 出力ファイル名 */
	private String outFileName = JACStrConst.KARA_MOJI;
	
	/** 出力ファイル拡張子 */
	private String outFileExt = JACStrConst.KARA_MOJI;
	
	/** 出力ファイル定義 */
	private String outDefFile = JACStrConst.KARA_MOJI;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		//フリーパラメータ取得
		String[] freeItems = super.freeItem.split(JACStrConst.SEMI_COLON);
		
		//出力ファイル名取得
		outFileName = freeItems[0];
		
		//出力ファイル拡張子取得
		outFileExt = freeItems[1];
		
		//出力ファイル定義取得
		outDefFile = freeItems[2];
		
		//ファイル番号初期化
		fileNo = BigDecimal.ONE;
		
		//バッチ共通パラメータを取得
		paramUtil = new JACbatParamUtil(commonItem);

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		//eoモバイル明細 CHIFM212001.csv
		outputFile(outputRecord(JBSbatAC_T_EOMOBA_DTL.TABLE_NAME,		JBSbatAC_T_EOMOBA_DTL.SEIKY_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0351,	PARTITION_NONE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		
		//eoモバイル合計 CHIFM212002.csv
		outputFile(outputRecord(JBSbatAC_T_EOMOBA_GOKEI.TABLE_NAME,		JBSbatAC_T_EOMOBA_GOKEI.SEIKY_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0371,	PARTITION_NONE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		
		//eo光電話通話明細 CHIFM212003.csv
		outputFile(outputRecord(JBSbatAC_T_EOH_TEL_TW_DTL.TABLE_NAME,	JBSbatAC_T_EOH_TEL_TW_DTL.SEIKY_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0391,	PARTITION_USE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		
		//eo光電話通話合計 CHIFM212004.csv
		outputFile(outputRecord(JBSbatAC_T_EOH_TEL_TW_GK.TABLE_NAME,	JBSbatAC_T_EOH_TEL_TW_GK.SEIKY_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0401,	PARTITION_USE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		
		//eo-netフォン通話明細 CHIFM212005.csv
		outputFile(outputRecord(JBSbatAC_T_EONET_TW_DTL.TABLE_NAME,		JBSbatAC_T_EONET_TW_DTL.SEIKY_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0421,	PARTITION_NONE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		
		//eo-netフォン通話合計 CHIFM212006.csv
		outputFile(outputRecord(JBSbatAC_T_EONET_TW_GK.TABLE_NAME,		JBSbatAC_T_EONET_TW_GK.SEIKY_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0431,	PARTITION_NONE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		
		//FTTH通信明細 CHIFM212007.csv
		outputFile(outputRecord(JBSbatAC_T_FTTH_TUSHIN_DTL.TABLE_NAME,	JBSbatAC_T_FTTH_TUSHIN_DTL.SEIKY_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0591,	PARTITION_USE,
								YMD_FLG_OFF,							JBSbatAC_T_FTTH_TSHN_DTL_T.TABLE_NAME));
		
		//FTTH通信合計 CHIFM212008.csv
		outputFile(outputRecord(JBSbatAC_T_FTTH_TUSHIN_GK.TABLE_NAME,	JBSbatAC_T_FTTH_TUSHIN_GK.SEIKY_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0601,	PARTITION_USE,
								YMD_FLG_OFF,							JBSbatAC_T_FTTH_TSHN_GK_T.TABLE_NAME));
		
		//コンテンツ050アプリ通話明細 CHIFM212009.csv
		outputFile(outputRecord(JBSbatAC_T_CN050AP_TW_DTL.TABLE_NAME,	JBSbatAC_T_CN050AP_TW_DTL.CHRG_TRGT_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0621,	PARTITION_NONE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		
		//コンテンツ050アプリ通話合計 CHIFM212010.csv
		outputFile(outputRecord(JBSbatAC_T_CN050AP_TW_GK.TABLE_NAME,	JBSbatAC_T_CN050AP_TW_GK.CHRG_TRGT_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0631,	PARTITION_NONE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		
		//コンテンツ050アプリ通話料超過通知 CHIFM212011.csv
		outputFile(outputRecord(JBSbatAC_T_CN050AP_TWRCKTC.TABLE_NAME,	JBSbatAC_T_CN050AP_TWRCKTC.TUWA_USE_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0641,	PARTITION_NONE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		
		//事業者間精算 CHIFM212012.csv
		outputFile(outputRecord(JBSbatCH_T_JGSHAKSSN.TABLE_NAME,		JBSbatCH_T_JGSHAKSSN.SSN_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_CH0271,	PARTITION_NONE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		
		//事業者間精算契約 CHIFM212013.csv
		outputFile(outputRecord(JBSbatCH_T_JGSHAKSSN_KEI.TABLE_NAME,	JBSbatCH_T_JGSHAKSSN_KEI.JGSHAK_KEI_DSLYMD,
								JACStrConst.WKPARA_CH_SAVE_PRD_CH0281,	PARTITION_NONE,
								YMD_FLG_ON,								JACStrConst.KARA_MOJI));
		
		//領収 CHIFM212014.csv
		outputFile(outputRecord(JBSbatCH_T_RECEIPT.TABLE_NAME,			JBSbatCH_T_RECEIPT.RECEIPT_YMD,
								JACStrConst.WKPARA_CH_SAVE_PRD_CH0311,	PARTITION_NONE,
								YMD_FLG_ON,								JACStrConst.KARA_MOJI));
		
		//会計異動 CHIFM212015.csv
		outputFile(outputRecord(JBSbatCH_T_KAIK_IDO.TABLE_NAME,			JBSbatCH_T_KAIK_IDO.KAIK_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_CH0381,	PARTITION_NONE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		
		// XXX:2013/11/27時点の削除対象テーブル
		// 追加があったら、この下に追加してください
		
		//v35.00.00 ADD START
		//コンテンツ050アプリ通話明細(上限通知) CHIFM212016.csv
		outputFile(outputRecord(JBSbatAC_T_CN050AP_TWDL_JT.TABLE_NAME,	JBSbatAC_T_CN050AP_TWDL_JT.CHRG_TRGT_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0691,	PARTITION_NONE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		
		//コンテンツ050アプリ通話合計(上限通知) CHIFM212017.csv
		outputFile(outputRecord(JBSbatAC_T_CN050AP_TWGK_JT.TABLE_NAME,	JBSbatAC_T_CN050AP_TWGK_JT.CHRG_TRGT_YM,
								JACStrConst.WKPARA_CH_SAVE_PRD_AC0701,	PARTITION_NONE,
								YMD_FLG_OFF,							JACStrConst.KARA_MOJI));
		//v35.00.00 ADD END
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		//パラメータ取得部品のクローズ
		paramUtil.close();
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 出力レコードマップを作成します。
	 * @param targetTableName 対象テーブル名
	 * @param targetKmk 対象項目名
	 * @param workParamId 対象業務パラメータID
	 * @param partitionTarget パーティション分割対象
	 * @param targetkmkYmdFlg 対象項目年月日フラグ
	 * @param bkTableName バックアップテーブル名
	 * @return 作成マップ
	 * @throws スローされる例外
	 */
	private JBSbatServiceInterfaceMap outputRecord(String targetTableName, String targetKmk, String workParamId,
			String partitionTarget, String targetkmkYmdFlg, String bkTableName) throws Exception
	{
		JBSbatServiceInterfaceMap outRecMap = new JBSbatServiceInterfaceMap();
		
		//削除対象テーブル名
		outRecMap.setString(JBSbatCHIFM212.DEL_TABLE_NAME, targetTableName);
		
		//削除条件項目
		outRecMap.setString(JBSbatCHIFM212.DEL_JOKEN_KMK, targetKmk);
		
		//削除対象年月
		outRecMap.setString(JBSbatCHIFM212.DEL_TRGT_YM, getJudgeDate(workParamId));
		
		//パーティション分割判定フラグ
		outRecMap.setString(JBSbatCHIFM212.PARTITION_BNKT_TG, partitionTarget);
		
		//条件項目年月日フラグ
		outRecMap.setString(JBSbatCHIFM212.JOKEN_KMK_YMD_FLG, targetkmkYmdFlg);
		
		//バックアップテーブル名
		outRecMap.setString(JBSbatCHIFM212.BK_TABLE_NAME, bkTableName);
		
		return outRecMap;
	}
	
	/**
	 * 条件判定日時を設定
	 * @param commonItem バッチ共通パラメータ電文
	 * @throws Exception スローされる例外
	 */
	private String getJudgeDate(String workParamId) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setJudgeDate]");
		
		//何ヶ月戻るかを設定する変数
		int revValue = 0;
		
		//設定された業務パラメータを取得
		revValue = -1 * Integer.parseInt(paramUtil.getGyoumuParameter(workParamId));
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setJudgeDate][revValue=" + revValue + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setJudgeDate][opeDate=" + super.opeDate + "]");
		
		//走行日（バッチ運用日）から業務パラメータ分の月を戻し、年月までにトリミングして取得。
		String judgeYm = JPCDateUtil.addMonth(super.opeDate, revValue).substring(0, 6);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setJudgeDate][judgeYm=" + judgeYm + "]");
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setJudgeDate]");
		
		return judgeYm;
	}
	
	/**
	 * ファイル出力
	 * <BR>
	 * @param outDir 出力ディレクトリ
	 * @param outFileName 出力ファイル名
	 * @param outDefFile 定義ファイル名
	 * @param arrayList 出力データを格納した配列
	 * @throws Exception スローされる例外
	 */
	private void outputFile(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 出力ファイルオブジェクトを生成する
		JBSbatOutputFileUtil fileObj = new JBSbatOutputFileUtil(outFileName.concat(JCCBatCommon.fillZero(String.valueOf(fileNo), 3, false)).concat(outFileExt));
		fileNo = fileNo.add(BigDecimal.ONE);
		
		// 出力定義ファイル名を取得する
		String outFileDefName = JBSbatAplConst.getAplConstValue("OTD") + outDefFile;
		
		// 出力定義ファイルオブジェクトを生成する
		JBSbatDefFileUtil defFileUtil = new JBSbatDefFileUtil(outFileDefName, fileObj);
		
		// Writerオブジェクトを生成する。
		fileObj.createWriter();
		
		fileObj.print(inMap, defFileUtil);
		
		fileObj.close();
	}
}