/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKCasInfoResend
*	ソースファイル名	：JBSbatKKCasInfoResend.java
*	作成者				：富士通　
*	作成日				：2025年05月27日
*＜機能概要＞
* CASカードが鍵開け済みかつCSコースへのコース変更が未確定のユーザー情報を抽出し、スカパーに再鍵開けの連携を行う。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v75.00.00			2025/05/27	GDC)v.auditor		【ANK-4673-00-00】テレビ新コース（スカパー用）導入対応　2025年6月フォロー案件

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

import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.table.JBSbatKK_M_PCRS;
import eo.business.util.table.JBSbatKK_T_CASCD_KNRI;
import eo.common.constant.JKKStrConst;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
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 JBSbatKKCasInfoResend extends JBSbatBusinessService
{
	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";
	/** テーブル(CASカード管理)*/
	private static final String D_TBL_NAME_KK_T_CASCD_KNRI = "KK_T_CASCD_KNRI";
	
	/** SQL定義キー(KK_SELECT_002)*/
	private static final String KK_T_CASCD_KNRI_KK_SELECT_006 = "KK_SELECT_006";

	/** テーブルアクセスクラス(CASカード管理 KK_SELECT_006)*/
	private JBSbatSQLAccess db_KK_T_CASCD_KNRI_SEL_006 = null;
	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	
	/** ファイルコード */
	private static final String FILE_CD = "0000";
	/** 処理管理番号：スカパー画面操作用ダウンロードリスト */
	private static final String TRN_KANRI_NO = "000000000283";
	/** スカパー画面操作用ダウンロードリストファイル名編集用 */
	private static final String FILE_NM = "スカパー画面操作用ダウンロードリスト_yyyymmddhhmmss.csv";
	/** ファイル名で利用するタイムスタンプのフォーマット */
	private static final String FILE_TIMESTAMP_FORMAT = "yyyymmddhhmmss";
	/** 結果ファイルオブジェクト*/
	private JBSbatBusinessFileUtil rsltFileObj = null;
	/** スカパー画面操作用ダウンロードリストのレコード件数*/
	private int rsltFileCount = 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);
		db_KK_T_CASCD_KNRI_SEL_006 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_CASCD_KNRI);
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// フリー項目を取得する
		String[] freeItems = freeItem.split(JKKBatConst.S_PARAM_DELIM);
		
		// システム日時を取得する
		String sysDateTime = JKKBatCommon.getSysDateTime();
		
		// スカパー画面操作用ダウンロードリストのファイル名を編集
		String rsltFileName = FILE_NM.replaceAll(FILE_TIMESTAMP_FORMAT, sysDateTime);
		
		// スカパー画面操作用ダウンロードリストのフルパス
		String rsltFileFullPath = freeItems[0] + rsltFileName;
		
		// スカパー画面操作用ダウンロードリストのオブジェクトを生成する
		rsltFileObj = JKKBatCommon.createBusinessFileUtil(rsltFileFullPath,
				JKKBatConst.SJIS, JKKStrConst.LINE_SEPARATOR, JKKBatConst.S_SEP_CAM);
		
		// 結果リストのレコード件数
		rsltFileCount = 0;
		
		//運用日より30日前
		String batOpeDate = JBSbatDateUtil.adjustDate(super.opeDate, -30);
		
		String[] selectParam = new String[]{
				batOpeDate, super.opeDate, batOpeDate
		};
		JBSbatCommonDBInterface resultMap = executeKK_T_CASCD_KNRI_KK_SELECT_006(selectParam);
		
		// スカパー画面操作用ダウンロードリストワークファイルの件数分繰り返す
		while (resultMap != null)
		{
			// スカパー画面操作用ダウンロードリストファイルを出力する
			createOutFile(resultMap);
			
			resultMap = db_KK_T_CASCD_KNRI_SEL_006.selectNext();
		}
		
		// スカパー画面操作用ダウンロードリストファイルを閉じる
		JKKBatCommon.closeBusinessFileUtil(rsltFileObj);
		
		// 結果ファイル登録処理
		JKKBatCommon.createFile(commonItem,										// バッチ共通パラメータ電文
								TRN_KANRI_NO,									// 処理管理番号
								new Long(rsltFileCount),						// データ件数
								FILE_CD,										// ファイルコード
								freeItems[0],									// ファイルディレクトリ
								rsltFileName,									// ファイル名
								JBSbatDateUtil.adjustMonth(super.opeDate, 3), 	// ファイル削除年月日(日中バッチ運用日＋3ヶ月)
								db_ZM_T_DL_FILE_KANRI,							// テーブルアクセスクラス
								false);											// 圧縮実行フラグ
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_T_DL_FILE_KANRI.close();
		db_KK_T_CASCD_KNRI_SEL_006.close();
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * SQLKEY(KK_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	オプションサービス契約番号
	 *			オンライン日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKK_T_CASCD_KNRI_KK_SELECT_006(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		
		// DBアクセスを実行します
		db_KK_T_CASCD_KNRI_SEL_006.selectBySqlDefine(paramList, KK_T_CASCD_KNRI_KK_SELECT_006);
		
		return db_KK_T_CASCD_KNRI_SEL_006.selectNext();
	}
	
	/**
	 * スカパー画面操作用ダウンロードリストファイルを出力する。<br>
	 * @param rsMap
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	@SuppressWarnings("unchecked")
	private void createOutFile(JBSbatCommonDBInterface rsMap) throws Exception
	{
		int lineNo = rsltFileCount + 1;
		// スカパー画面操作用ダウンロードリストファイルのデータ部
		ArrayList<String> outFile = new ArrayList<String>();
		// 行番号
		outFile.add(String.valueOf(lineNo));
		// 申込年月日時分秒
		outFile.add(rsMap.getString(JBSbatKK_T_CASCD_KNRI.UPD_DTM));
		// CAS番号
		outFile.add(rsMap.getString(JBSbatKK_T_CASCD_KNRI.CASCD_NO));
		// 処理区分:再鍵開け
		outFile.add("07");
		// スカパー連携日
		outFile.add(rsMap.getString(JBSbatKK_T_CASCD_KNRI.ADD_UNYO_YMD));
		// 商品コード
		outFile.add(rsMap.getString(JBSbatKK_M_PCRS.SPTV_GDS_CD));
		// 商品名称
		outFile.add(rsMap.getString(JBSbatKK_M_PCRS.SPTV_GDS_NM));
		// CATV顧客番号
		outFile.add(rsMap.getString(JBSbatKK_T_CASCD_KNRI.CATV_CUST_NO));
		// サービス契約番号
		outFile.add(rsMap.getString(JBSbatKK_T_CASCD_KNRI.SVC_KEI_NO));
		// オプションサービス契約番号
		outFile.add("");
		// 結果コード
		outFile.add("");
		// エラーメッセージ
		outFile.add("");
		// 処理完了日時
		outFile.add("");
		
		JKKBatCommon.printDoubleQuoteBusinessFileUtil(rsltFileObj, outFile);
		
		// 出力件数カウントアップ
		rsltFileCount++;
	}
}
