/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKCsOpChKagiOpClCreFile
*	ソースファイル名	：JBSbatKKCsOpChKagiOpClCreFile.java
*	作成者				：富士通　
*	作成日				：2025年01月06日
*＜機能概要＞
*　スカパーオプションチャンネル鍵開け閉め登録ファイル作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*   v74.00.00   2025/01/06  GDC)ml.alcantara          【ANK-4592-00-00】テレビ新コース（スカパー用）導入対応
*********************************************************************/
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.file.JBSbatKKLST13407;
import eo.business.util.table.JBSbatKK_T_CASCD_KNRI;
import eo.business.util.table.JBSbatKK_T_CSNT_OPSVKEI;
import eo.common.constant.JKKStrConst;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* スカパーオプションチャンネル鍵開け閉め登録ファイル作成 <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKCsOpChKagiOpClCreFile 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";
	/** テーブル(CASカード管理履歴)*/
	private static final String D_TBL_NAME_KK_T_CASCD_KNRI_RK = "KK_T_CASCD_KNRI_RK";
	/** テーブル(CAS番号対象オプションサービス契約)*/
	private static final String D_TBL_NAME_KK_T_CSNT_OPSVKEI = "KK_T_CSNT_OPSVKEI";
	/** テーブル(CAS番号対象オプションサービス契約履歴)*/
	private static final String D_TBL_NAME_KK_T_CSNT_OPSVKEI_RK = "KK_T_CSNT_OPSVKEI_RK";
	
	/** SQL定義キー(KK_SELECT_002)*/
	private static final String KK_T_CASCD_KNRI_KK_SELECT_002 = "KK_SELECT_002";
	/** SQL定義キー(KK_SELECT_003)*/
	private static final String KK_T_CASCD_KNRI_KK_SELECT_003 = "KK_SELECT_003";
	/** SQL定義キー(KK_UPDATE_001)*/
	private static final String KK_T_CASCD_KNRI_KK_UPDATE_001 = "KK_UPDATE_001";
	/** SQL定義キー(KK_UPDATE_001)*/
	private static final String KK_T_CSNT_OPSVKEI_KK_UPDATE_001 = "KK_UPDATE_001";
	/** SQL定義キー(KK_UPDATE_005)*/
	private static final String KK_T_CSNT_OPSVKEI_KK_UPDATE_005 = "KK_UPDATE_005";
	/** SQL定義キー(KK_INSERT_001)*/
	private static final String KK_T_CASCD_KNRI_RK_KK_INSERT_001 = "KK_INSERT_001";
	/** SQL定義キー(KK_INSERT_001)*/
	private static final String KK_T_CSNT_OPSVKEI_RK_KK_INSERT_001 = "KK_INSERT_001";
	
	/** テーブルアクセスクラス(CASカード管理 KK_SELECT_002)*/
	private JBSbatSQLAccess db_KK_T_CASCD_KNRI_SEL_002 = null;
	/** テーブルアクセスクラス(CASカード管理 KK_SELECT_003)*/
	private JBSbatSQLAccess db_KK_T_CASCD_KNRI_SEL_003 = null;
	/** テーブルアクセスクラス(CASカード管理 KK_UPDATE_001)*/
	private JBSbatSQLAccess db_KK_T_CASCD_KNRI_UPD_001 = null;
	/** テーブルアクセスクラス(CASカード管理履歴)*/
	private JBSbatSQLAccess db_KK_T_CASCD_KNRI_RK = null;
	/** テーブルアクセスクラス(CASカード管理 ＰＫ　検索)*/
	private JBSbatSQLAccess db_KK_T_CASCD_KNRI_SEL_PK = null;
	/** テーブルアクセスクラス(CAS番号対象オプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_CSNT_OPSVKEI = null;
	/** テーブルアクセスクラス(CAS番号対象オプションサービス契約履歴)*/
	private JBSbatSQLAccess db_KK_T_CSNT_OPSVKEI_RK = null;
	/** テーブルアクセスクラス(CAS番号対象オプションサービス契約 ＰＫ　検索)*/
	private JBSbatSQLAccess db_KK_T_CSNT_OPSVKEI_SEL_PK = null;
	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	
	/** ファイルコード */
	private static final String FILE_CD = "0000";
	/** 処理管理番号：スカパー画面操作用ダウンロードリスト */
	private static final String KKLST13407_TRN_KANRI_NO = "000000000283";
	/** スカパー画面操作用ダウンロードリストファイル名編集用 */
	private static final String KKLST13407_FILE_NM = "スカパー画面操作用ダウンロードリスト_yyyymmddhhmmss.csv";
	/** ファイル名で利用するタイムスタンプのフォーマット */
	private static final String FILE_TIMESTAMP_FORMAT = "yyyymmddhhmmss";
	/** スカパー画面操作用ダウンロードリストファイルオブジェクト */
	private JBSbatBusinessFileUtil kklst13407FileObj = null;
	/** スカパー画面操作用ダウンロードリストファイル件数 */
	private int kklst13407Cnt = 0;
	
	/** スカパー連携ステータス 鍵開け依頼中 */
	private static final String SPTV_RNK_STAT_020 = "020";
	/** スカパー連携ステータス 契約変更中鍵開け依頼中 */
	private static final String SPTV_RNK_STAT_021 = "021";
	/** スカパー連携ステータス 鍵閉め依頼中 */
	private static final String SPTV_RNK_STAT_120 = "120";
	
	/**
	 * 初期処理
	 * @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_002 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_CASCD_KNRI);
		db_KK_T_CASCD_KNRI_SEL_003 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_CASCD_KNRI);
		db_KK_T_CASCD_KNRI_UPD_001 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_CASCD_KNRI);
		db_KK_T_CASCD_KNRI_RK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_CASCD_KNRI_RK);
		db_KK_T_CASCD_KNRI_SEL_PK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_CASCD_KNRI);
		db_KK_T_CSNT_OPSVKEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_CSNT_OPSVKEI);
		db_KK_T_CSNT_OPSVKEI_RK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_CSNT_OPSVKEI_RK);
		db_KK_T_CSNT_OPSVKEI_SEL_PK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_CSNT_OPSVKEI);
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// フリー項目を取得する
		String[] freeItems = freeItem.split(JKKBatConst.S_PARAM_DELIM);
		
		// システム日時を取得する
		String sysDateTime = JKKBatCommon.getSysDateTime();
		
		// ファイル名
		String kklst13407FileName = KKLST13407_FILE_NM.replaceAll(FILE_TIMESTAMP_FORMAT, sysDateTime);
		
		// スカパー画面操作用ダウンロードリストファイルパス
		String kklst13407FilePath = freeItems[0] + kklst13407FileName;
		
		// スカパー画面操作用ダウンロードリストファイルオブジェクトを生成する
		kklst13407FileObj = JKKBatCommon.createBusinessFileUtil(kklst13407FilePath,
				JKKBatConst.SJIS, JKKStrConst.LINE_SEPARATOR, JKKBatConst.S_SEP_CAM);
		
		// スカパー画面操作用ダウンロードリストファイルレコード件数
		kklst13407Cnt = 0;
		
		String[] selectParam = new String[]{
				super.opeDate, super.opeDate, super.opeDate, super.opeDate, super.opeDate, super.opeDate,
				super.opeDate, super.opeDate, super.opeDate, super.opeDate, super.opeDate, super.opeDate,
				super.opeDate, super.opeDate, super.opeDate, super.opeDate, super.opeDate, super.opeDate
				};
		JBSbatCommonDBInterface resultMap = executeKK_T_CASCD_KNRI_KK_SELECT_002(selectParam);
		
		// スカパー画面操作用ダウンロードリストワークファイルの件数分繰り返す
		while (resultMap != null)
		{
			// スキーマの更新
			updateDb(resultMap);
			
			resultMap = db_KK_T_CASCD_KNRI_SEL_002.selectNext();
		}
		
		// スカパー画面操作用ダウンロードリストファイルを閉じる
		JKKBatCommon.closeBusinessFileUtil(kklst13407FileObj);
		
		// 電子ファイル管理／ダウンロードファイル管理の登録
		JKKBatCommon.createFile(commonItem,										// バッチ共通パラメータ電文
								KKLST13407_TRN_KANRI_NO,						// 処理管理番号
								Long.valueOf(kklst13407Cnt),					// データ件数
								FILE_CD,										// ファイルコード
								freeItems[0],									// ファイルディレクトリ
								kklst13407FileName,								// ファイル名
								JBSbatDateUtil.adjustMonth(super.opeDate, 1), 	// ファイル削除年月日（日中バッチ運用日 + 1ヶ月）
								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_002.close();
		db_KK_T_CASCD_KNRI_SEL_003.close();
		db_KK_T_CASCD_KNRI_UPD_001.close();
		db_KK_T_CSNT_OPSVKEI.close();
		db_KK_T_CASCD_KNRI_RK.close();
		db_KK_T_CASCD_KNRI_SEL_PK.close();
		db_KK_T_CSNT_OPSVKEI_RK.close();
		db_KK_T_CSNT_OPSVKEI_SEL_PK.close();
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * SQLKEY(KK_SELECT_002)で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_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		for(int i = 0; i < param.length; i++)
		{
			paramList.setValue(param[i].toString());
		}
		
		// DBアクセスを実行します
		db_KK_T_CASCD_KNRI_SEL_002.selectBySqlDefine(paramList, KK_T_CASCD_KNRI_KK_SELECT_002);
		
		return db_KK_T_CASCD_KNRI_SEL_002.selectNext();
	}
	
	/**
	 * SQLKEY(KK_SELECT_003)で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_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
//		paramList.setValue(param[1].toString());
		
		// DBアクセスを実行します
		db_KK_T_CASCD_KNRI_SEL_003.selectBySqlDefine(paramList, KK_T_CASCD_KNRI_KK_SELECT_003);
		
		return db_KK_T_CASCD_KNRI_SEL_003.selectNext();
	}
	
	/**
	 * SQLKEY(KK_UPDATE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			スカパー連携ステータス
	 *			鍵開け年月日
	 *			鍵閉め年月日
	 *			コース変更鍵開け年月日
	 *			CASカード番号
	 *			オンライン日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_CASCD_KNRI_KK_UPDATE_001(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_KK_T_CASCD_KNRI_UPD_001.executeBySqlDefine(paramList, KK_T_CASCD_KNRI_KK_UPDATE_001);
	}
	
	/**
	 * SQLKEY(KK_UPDATE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			スカパー連携ステータス
	 *			鍵開け年月日
	 *			オプションサービス契約番号
	 *			オンライン日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_CSNT_OPSVKEI_KK_UPDATE_001(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_CSNT_OPSVKEI.executeBySqlDefine(paramList, KK_T_CSNT_OPSVKEI_KK_UPDATE_001);
	}
	
	/**
	 * SQLKEY(KK_UPDATE_005)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			スカパー連携ステータス
	 *			鍵閉め年月日
	 *			オプションサービス契約番号
	 *			オンライン日付
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_CSNT_OPSVKEI_KK_UPDATE_005(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_CSNT_OPSVKEI.executeBySqlDefine(paramList, KK_T_CSNT_OPSVKEI_KK_UPDATE_005);
	}
	
	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	オプションサービス契約番号	
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKK_T_CSNT_OPSVKEI_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("OP_SVC_KEI_NO", whereParam[0]);
		
		// DBアクセスを実行します
		return db_KK_T_CSNT_OPSVKEI_SEL_PK.selectByPrimaryKeys(whereMap);
	}
	
	/**
	 * 指定されたバインド変数を元に、CAS番号対象オプションサービス契約履歴をテーブル登録します
	 * 
	 * @param param バイント変数の値配列
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_CSNT_OPSVKEI_RK_KK_INSERT_001(Object[] param) throws Exception
	{
		// バイント変数のリストの生成
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		for(int i = 0; i < param.length; i++)
		{
			paramList.setValue(param[i].toString());
		}
		
		//SQL実行
		db_KK_T_CSNT_OPSVKEI_RK.executeBySqlDefine(paramList, KK_T_CSNT_OPSVKEI_RK_KK_INSERT_001);
	}
	
	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	CASカード番号
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKK_T_CASCD_KNRI_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("CASCD_NO", whereParam[0]);
		
		// DBアクセスを実行します
		return db_KK_T_CASCD_KNRI_SEL_PK.selectByPrimaryKeys(whereMap);
	}
	
	/**
	 * 指定されたバインド変数を元に、CASカード管理履歴をテーブル登録します
	 * 
	 * @param param バイント変数の値配列
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_CASCD_KNRI_RK_KK_INSERT_001(Object[] param) throws Exception
	{
		// バイント変数のリストの生成
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		for(int i = 0; i < param.length; i++)
		{
			paramList.setValue(param[i].toString());
		}
		
		//SQL実行
		db_KK_T_CASCD_KNRI_RK.executeBySqlDefine(paramList, KK_T_CASCD_KNRI_RK_KK_INSERT_001);
	}
	
	/**
	 * CAS番号対象オプションサービス契約履歴を登録します。
	 * <br>
	 * @param outMap サービス契約回線内訳検索結果
	 * @throws Exception 
	 */
	private void addCsntOpsvkeiRk(JBSbatCommonDBInterface outMap) throws Exception
	{
		// 登録用データ格納
		Object[] param_add = new Object[21];
		// システム日付を取得
		String sysdate = JBSbatDateUtil.getSystemDateTimeStamp();
		// オプションサービス契約番号
		param_add[0] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.OP_SVC_KEI_NO));
		// 履歴登録年月日時分秒
		param_add[1] = sysdate;
		// CASカード番号
		param_add[2] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.CASCD_NO));
		// スカパー連携ステータス
		param_add[3] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.SPTV_RNK_STAT));
		// 鍵開け年月日
		param_add[4] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.KEYOPN_YMD));
		// 鍵閉め年月日
		param_add[5] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.KEYCLS_YMD));
		// CAS番号対象適用年月日
		param_add[6] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.CAS_NO_TG_APLY_YMD));
		// 鍵閉め理由コード
		param_add[7] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.KEYCLS_RSN_CD));
		// 登録年月日時分秒
		param_add[8] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.UPD_DTM));
		// 登録オペレータアカウント
		param_add[9] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.UPD_OPEACNT));
		// 更新年月日時分秒
		param_add[10] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.UPD_DTM));
		// 更新オペレータアカウント
		param_add[11] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.UPD_OPEACNT));
		// 削除年月日時分秒
		param_add[12] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.DEL_DTM));
		// 削除オペレータアカウント
		param_add[13] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.DEL_OPEACNT));
		// 無効フラグ
		param_add[14] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.MK_FLG));
		// 登録運用年月日
		param_add[15] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.UPD_UNYO_YMD));
		// 登録処理ID
		param_add[16] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.UPD_TRN_ID));
		// 更新運用年月日
		param_add[17] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.UPD_UNYO_YMD));
		// 更新処理ID
		param_add[18] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.UPD_TRN_ID));
		// 削除運用年月日
		param_add[19] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.DEL_UNYO_YMD));
		// 削除処理ID
		param_add[20] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CSNT_OPSVKEI.DEL_TRN_ID));
		// CAS番号対象オプションサービス契約履歴の登録を実行する
		executeKK_T_CSNT_OPSVKEI_RK_KK_INSERT_001(param_add);
	}
	
	/**
	 * CASカード管理履歴を登録します。
	 * <br>
	 * @param outMap サービス契約回線内訳検索結果
	 * @throws Exception 
	 */
	private void addCascdKnriRk(JBSbatCommonDBInterface outMap) throws Exception
	{
		// 登録用データ格納
		Object[] param_add = new Object[26];
		// システム日付を取得
		String sysdate = JBSbatDateUtil.getSystemDateTimeStamp();
		// CASカード番号
		param_add[0] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.CASCD_NO));
		// 履歴登録年月日時分秒
		param_add[1] = sysdate;
		// 枠番号
		param_add[2] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.FRAME_NO));
		// スカパー連携ステータス
		param_add[3] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.SPTV_RNK_STAT));
		// サービス契約番号
		param_add[4] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.SVC_KEI_NO));
		// CATV顧客番号
		param_add[5] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.CATV_CUST_NO));
		// CAS番号登録年月日
		param_add[6] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.CAS_NO_ADD_YMD));
		// CAS番号削除年月日
		param_add[7] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.CAS_NO_DEL_YMD));
		// 鍵開け年月日
		param_add[8] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.KEYOPN_YMD));
		// コース変更鍵開け年月日
		param_add[9] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.CSCH_KEYOPN_YMD));
		// 鍵閉め年月日
		param_add[10] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.KEYCLS_YMD));
		// CAS番号適用年月日
		param_add[11] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.CAS_NO_APLY_YMD));
		// 鍵閉め理由コード
		param_add[12] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.KEYCLS_RSN_CD));
		// 登録年月日時分秒
		param_add[13] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.UPD_DTM));
		// 登録オペレータアカウント
		param_add[14] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.UPD_OPEACNT));
		// 更新年月日時分秒
		param_add[15] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.UPD_DTM));
		// 更新オペレータアカウント
		param_add[16] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.UPD_OPEACNT));
		// 削除年月日時分秒
		param_add[17] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.DEL_DTM));
		// 削除オペレータアカウント
		param_add[18] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.DEL_OPEACNT));
		// 無効フラグ
		param_add[19] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.MK_FLG));
		// 登録運用年月日
		param_add[20] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.UPD_UNYO_YMD));
		// 登録処理ID
		param_add[21] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.UPD_TRN_ID));
		// 更新運用年月日
		param_add[22] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.UPD_UNYO_YMD));
		// 更新処理ID
		param_add[23] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.UPD_TRN_ID));
		// 削除運用年月日
		param_add[24] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.DEL_UNYO_YMD));
		// 削除処理ID
		param_add[25] = JBSbatStringUtil.Rtrim(outMap.getString(JBSbatKK_T_CASCD_KNRI.DEL_TRN_ID));
		// CASカード管理履歴の登録を実行する
		executeKK_T_CASCD_KNRI_RK_KK_INSERT_001(param_add);
	}
	
	/**
	 * スキーマの更新<br>
	 * @param rsMap 入力データ（DB）を格納されたJBSbatCommonDBInterface
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	@SuppressWarnings("unchecked")
	private void updateDb(JBSbatCommonDBInterface rsMap) throws Exception
	{
		String trnDiv = rsMap.getString(JBSbatKKLST13407.TRN_DIV);
		String coopDay = getNullToStr3(rsMap.getString(JBSbatKKLST13407.COOP_DAY));
		String opSvcKeiNo = rsMap.getString(JBSbatKKLST13407.OP_SVC_KEI_NO);
		String cascdNo = rsMap.getString(JBSbatKKLST13407.CASCD_NO);
		String dbKeyopnYmd = "";
		String dbKeyclsYmd  = "";
		String dbCschKeyopnYmd = "";
		
		// @オプション申込
		if("01".equals(trnDiv))
		{
			if(null != opSvcKeiNo)
			{
				// (7)CAS番号対象オプションサービス契約(更新)
				executeKK_T_CSNT_OPSVKEI_KK_UPDATE_001(new String[]{ SPTV_RNK_STAT_020, coopDay, opSvcKeiNo });
				// (9)CAS番号対象オプションサービス契約履歴(登録)
				JBSbatCommonDBInterface dbInfoCsntPk = executeKK_T_CSNT_OPSVKEI_PKSELECT(new String[]{ opSvcKeiNo });
				if(null != dbInfoCsntPk)
				{
					// CAS番号対象オプションサービス契約履歴を登録します。
					this.addCsntOpsvkeiRk(dbInfoCsntPk);
					// スカパー画面操作用ダウンロードリストファイルを出力する
					createKklst13407(rsMap, coopDay);
				}
			}
		}
		// Aオプション解約
		else if("02".equals(trnDiv))
		{
			if(null != opSvcKeiNo)
			{
				// (8)CAS番号対象オプションサービス契約(更新)
				executeKK_T_CSNT_OPSVKEI_KK_UPDATE_005(new String[]{ SPTV_RNK_STAT_120, coopDay, opSvcKeiNo });
				// (10)CAS番号対象オプションサービス契約履歴(登録)
				JBSbatCommonDBInterface dbInfoCsntPk = executeKK_T_CSNT_OPSVKEI_PKSELECT(new String[]{ opSvcKeiNo });
				if(null != dbInfoCsntPk)
				{
					// CAS番号対象オプションサービス契約履歴を登録します。
					this.addCsntOpsvkeiRk(dbInfoCsntPk);
					// スカパー画面操作用ダウンロードリストファイルを出力する
					createKklst13407(rsMap, coopDay);
				}
			}
		}
		// BＣＳ間コース変更
		else if("03".equals(trnDiv))
		{
			// ((3)CASカード管理(更新)
			JBSbatCommonDBInterface dbInfoCascd = executeKK_T_CASCD_KNRI_KK_SELECT_003(new String[]{ cascdNo });
			if(null != dbInfoCascd)
			{
				dbKeyopnYmd = getNullToStr(dbInfoCascd.getString(JBSbatKK_T_CASCD_KNRI.KEYOPN_YMD));
				dbKeyclsYmd  = getNullToStr(dbInfoCascd.getString(JBSbatKK_T_CASCD_KNRI.KEYCLS_YMD));
				executeKK_T_CASCD_KNRI_KK_UPDATE_001(new String[]{ SPTV_RNK_STAT_021, dbKeyopnYmd, dbKeyclsYmd, coopDay, cascdNo });
				// (6)CASカード管理履歴(登録)
				JBSbatCommonDBInterface dbInfoCascdPk = executeKK_T_CASCD_KNRI_PKSELECT(new String[]{ cascdNo });
				if(null != dbInfoCascdPk)
				{
					// CASカード管理履歴を登録します。
					this.addCascdKnriRk(dbInfoCascdPk);
					// スカパー画面操作用ダウンロードリストファイルを出力する
					createKklst13407(rsMap, coopDay);
				}
			}
		}
		// CCASカード鍵開け
		else if("05".equals(trnDiv))
		{
			// (1)CASカード管理(更新)
			JBSbatCommonDBInterface dbInfoCascd = executeKK_T_CASCD_KNRI_KK_SELECT_003(new String[]{ cascdNo });
			if(null != dbInfoCascd)
			{
				dbKeyclsYmd  = getNullToStr(dbInfoCascd.getString(JBSbatKK_T_CASCD_KNRI.KEYCLS_YMD));
				dbCschKeyopnYmd = getNullToStr(dbInfoCascd.getString(JBSbatKK_T_CASCD_KNRI.CSCH_KEYOPN_YMD));
				executeKK_T_CASCD_KNRI_KK_UPDATE_001(new String[]{ SPTV_RNK_STAT_020, coopDay, dbKeyclsYmd, dbCschKeyopnYmd, cascdNo });
				// (4)CASカード管理履歴(登録)
				JBSbatCommonDBInterface dbInfoCascdPk = executeKK_T_CASCD_KNRI_PKSELECT(new String[]{ cascdNo });
				if(null != dbInfoCascdPk)
				{
					// CASカード管理履歴を登録します。
					this.addCascdKnriRk(dbInfoCascdPk);
					// スカパー画面操作用ダウンロードリストファイルを出力する
					createKklst13407(rsMap, coopDay);
				}
			}
		}
		// DCASカード鍵閉め
		else if("06".equals(trnDiv))
		{
			// (2)CASカード管理(更新)
			JBSbatCommonDBInterface dbInfoCascd = executeKK_T_CASCD_KNRI_KK_SELECT_003(new String[]{ cascdNo });
			if(null != dbInfoCascd)
			{
				dbKeyopnYmd = getNullToStr(dbInfoCascd.getString(JBSbatKK_T_CASCD_KNRI.KEYOPN_YMD));
				dbCschKeyopnYmd = getNullToStr(dbInfoCascd.getString(JBSbatKK_T_CASCD_KNRI.CSCH_KEYOPN_YMD));
					executeKK_T_CASCD_KNRI_KK_UPDATE_001(new String[]{ SPTV_RNK_STAT_120, dbKeyopnYmd, getNullToStr2(coopDay), dbCschKeyopnYmd, cascdNo });
				// (5)CASカード管理履歴(登録)
				JBSbatCommonDBInterface dbInfoCascdPk = executeKK_T_CASCD_KNRI_PKSELECT(new String[]{ cascdNo });
				if(null != dbInfoCascdPk)
				{
					// CASカード管理履歴を登録します。
					this.addCascdKnriRk(dbInfoCascdPk);
					// スカパー画面操作用ダウンロードリストファイルを出力する
					createKklst13407(rsMap, coopDay);
				}
			}
		}
	}
	
	/**
	 * スカパー画面操作用ダウンロードリストファイルを出力する。<br>
	 * @param rsMap 入力データ（DB）を格納されたJBSbatCommonDBInterface
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	@SuppressWarnings("unchecked")
	private void createKklst13407(JBSbatCommonDBInterface rsMap, String coopDay) throws Exception
	{
		int lineNo = kklst13407Cnt + 1;
		// スカパー画面操作用ダウンロードリストファイルのデータ部
		ArrayList<String> kklst13407Data = new ArrayList<String>();
		// 行番号
		kklst13407Data.add(String.valueOf(lineNo));
		// 申込年月日時分秒
		kklst13407Data.add(rsMap.getString(JBSbatKKLST13407.UPD_DTM));
		// CAS番号
		kklst13407Data.add(rsMap.getString(JBSbatKKLST13407.CASCD_NO));
		// 処理区分
		kklst13407Data.add(rsMap.getString(JBSbatKKLST13407.TRN_DIV));
		// スカパー連携日
		kklst13407Data.add(coopDay);
		// 商品コード
		kklst13407Data.add(rsMap.getString(JBSbatKKLST13407.SPTV_GDS_CD));
		// 商品名称
		kklst13407Data.add(rsMap.getString(JBSbatKKLST13407.SPTV_GDS_NM));
		// CATV顧客番号
		kklst13407Data.add(rsMap.getString(JBSbatKKLST13407.CATV_CUST_NO));
		// サービス契約番号
		kklst13407Data.add(rsMap.getString(JBSbatKKLST13407.SVC_KEI_NO));
		// オプションサービス契約番号
		kklst13407Data.add(rsMap.getString(JBSbatKKLST13407.OP_SVC_KEI_NO));
		// 結果コード
		kklst13407Data.add("");
		// エラーメッセージ
		kklst13407Data.add("");
		// 処理完了日時
		kklst13407Data.add("");
		
		JKKBatCommon.printDoubleQuoteBusinessFileUtil(kklst13407FileObj, kklst13407Data);
		
		// スカパー画面操作用ダウンロードリストファイル件数カウント
		kklst13407Cnt++;
	}
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		if(str == null || "".equals(str.trim()))
		{
			return "";
		}
		return str;
	}
	
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr2(String str)
	{
		if(str == null || "".equals(str.trim()))
		{
			return super.opeDate;
		}
		return str;
	}
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr3(String str)
	{
		if(str == null || "".equals(str.trim()))
		{
			return "";
		} else {
			return super.opeDate;
		}
	}
}
