/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			： eo顧客基幹システム
*	モジュール名		： JBSbatCHTokusokuCallListUpload
*	ソースファイル名	： JBSbatCHTokusokuCallListUpload.java
*	作成者			： GDC)ミコ
*	作成日			： 2020年04月03日
*＜機能概要＞
*督促架電リスト登録
*＜修正履歴＞
*
*バージョン	修正日		 修正者		修正内容
*v49.00.00  2020/04/03  GDC)`ミコ 【ANK-3673-00-00】 督促架電リスト
*********************************************************************/
package eo.business.service;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCbatDenshiFileUtil;
import eo.common.constant.JACStrConst;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;

/**
* (クラスの機能概要) <p>
*<BR>
* @author ミコ
*/
public class JBSbatCHTokusokuCallListUpload extends JBSbatBusinessService {
	
	/** SQL定義キー(ダウンロードファイル管理　INSERT_002) */
	private static final String ZM_T_DL_FILE_KANRI_KK_INSERT_002 = "KK_INSERT_002";
	
	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";
	
	/** DBアクセスクラス(ダウンロードファイル管理) */
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	
	/** ファイルコード */
	private static final String FILE_CD = "0000";
	
	/**  督促架電リスト処理管理番号 */
	private static final String TRAN_KANRI_NO = "000000000226";
	
	/** 入力ファイル名１ */
	private static final String CHLST084011 = "CHLST084011";

	/** 入力ファイル名２ */
	private static final String CHLST084012 = "CHLST084012";
	
	/** 督促架電リストST10ファイル名 */
	private static final String ST10 = "督促架電リスト_ST10";

	/** 督促架電リストST10ファイル名 */	
	private static final String ST15 = "督促架電リスト_ST15";

	/** FREEパラメータ ARR */
	private String[] freeItemArray = null;
	
	/** 請求年月 */
	private String seikyuuNengetsu = null;
	
	/** ファイル名１ */
	private String fileNm1 = null;
	
	/** ファイル名２ */
	private String fileNm2 = null;
	
	/** レコード件数１ */
	private int recCnt1 = 0;
	
	/** レコード件数２ */
	private int recCnt2 = 0;
	
	/**
	 * 初期処理
	 * @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);
		
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception {
		
		JBSbatOutputItem outputBean = null;
		
		// 1.ファイル名取得
		freeItemArray = super.freeItem.split(JACStrConst.FREE_DIV);
		
		// FREEパラメータから請求年月、ファイル名2つ、それぞれのレコード件数を取得する。
		seikyuuNengetsu = freeItemArray[0];
		fileNm1  = freeItemArray[1];
		fileNm2  = freeItemArray[2];
		recCnt1  = Integer.parseInt(freeItemArray[3]);
		recCnt2  = Integer.parseInt(freeItemArray[4]);
		
		//運用日付の1か月後、YYYYMMDD形式
		DateFormat format = new SimpleDateFormat("yyyyMM");
		Calendar cal = Calendar.getInstance();
		Date date = format.parse(seikyuuNengetsu);
		cal.setTime(date);
		cal.add(Calendar.MONTH, 1);
		String fileDelYmd = format.format(cal.getTime());
		
		//2.DB登録 2ファイル分繰り返す。
		//ファイル1
		addEfileKanriDlFileKanri(recCnt1, FILE_CD, fileDelYmd+"01", fileNm1);
		
		//ファイル2
		addEfileKanriDlFileKanri(recCnt2, FILE_CD, fileDelYmd+"01", fileNm2);
		
		return outputBean;
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception {
		
		// DBアクセスクラスをクローズします
		db_ZM_T_DL_FILE_KANRI.close();
		
	}
	/**
	 * 電子ファイル管理・ダウンロードファイル管理へ登録します。
	 * <br>
	 * @param dataCnt データ件数
	 * @param fileCd ファイルコード
	 * @param fileDelYmd ファイル削除年月日
	 * @param outputFilePath ダウンロードファイル名
	 * @throws Exception 例外が発生した場合
	 */
	private void addEfileKanriDlFileKanri(int dataCnt, String fileCd,
			String fileDelYmd, String outputFilePath) throws Exception
	{
		//2-1. 電子ファイル管理部品の登録関数 を 呼び出して 電子ファイル管理用テーブル(CC_T_EFILE_KANRI) を 登録する。
		String[] ret = JCCbatDenshiFileUtil.createDenshiFile(this.commonItem, fileCd, outputFilePath, fileDelYmd);
		
		String dlFileNm = "";
		
		//ファイル名の場合
		if(outputFilePath.endsWith(String.format("%s.csv", CHLST084011)))
			dlFileNm = String.format("%s_%s.csv", ST10,seikyuuNengetsu.substring(0,6));
		else if(outputFilePath.endsWith(String.format("%s.csv", CHLST084012)))
			dlFileNm = String.format("%s_%s.csv", ST15,seikyuuNengetsu.substring(0,6));
		
		// ダウンロードファイル管理登録
		String[] paramIns = {
				TRAN_KANRI_NO											// 処理管理番号
				, dlFileNm												// ダウンロードファイル名
				, String.valueOf(dataCnt)								// データ件数
				, ret[0]												// 電子ファイル管理番号
				, ret[1]												// 世代登録年月日時分秒
		};
		
		//2-2.ダウンロードファイル管理(ZM_T_DL_FILE_KANRI_KK_INSERT_002) を呼び出して、ダウンロードファイル管理テーブル(ZM_T_DL_FILE_KANRI) を登録する。
		executeZM_T_DL_FILE_KANRI_KK_INSERT_002(paramIns);
	}
	/**
	 * SQLKEY(KK_INSERT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			TRN_KANRI_NO
	 *			FILE_NM
	 *			DATA_CNT
	 *			EFILE_KANRI_NO
	 *			GENE_ADD_DTM
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_KK_INSERT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		
		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.executeBySqlDefine(paramList, ZM_T_DL_FILE_KANRI_KK_INSERT_002);
	}
	
}
