/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKTvOpWatchJskSaksei
*	ソースファイル名	：JBSbatKKTvOpWatchJskSaksei.java
*	作成者				：富士通　
*	作成日				：2013年01月08日
*＜機能概要＞
*　テレビオプション視聴実績作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2013/01/08  FJ)中作 	【ST4-2012-0000136】障害対応 新規作成
*	v4.01.00	2013/01/28  FJ)団		【ST4-2013-0000094】障害対応
*	v4.02.00	2013/03/19  FJ)柳		【IT1-2013-0000498】障害対応
*	v4.03.00	2013/03/29  FJ)松浦		【ST4-2013-0000337】性能改善
*********************************************************************/
package eo.business.service;

import java.io.IOException;
import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatConst;
import eo.business.util.table.JBSbatDK_T_BAT_TKKIKI_WK;
import eo.business.util.table.JBSbatKK_T_KKTK_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_OP_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_TV_OP_WATCH_JSK;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.log.JBSbatLogUtil;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKTvOpWatchJskSaksei extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(システムパラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_SYS_PARAM_KNRI = "ZM_M_SYS_PARAM_KNRI";

	/** テーブル(テレビオプション視聴実績)*/
	private static final String D_TBL_NAME_KK_T_TV_OP_WATCH_JSK = "KK_T_TV_OP_WATCH_JSK";

	/** テーブル(オプションサービス契約)*/
	private static final String D_TBL_NAME_KK_T_OP_SVC_KEI = "KK_T_OP_SVC_KEI";

	/** テーブル(機器提供サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";

	/** テーブル(バッチ用宅内機器ワーク)*/
	private static final String D_TBL_NAME_DK_T_BAT_TKKIKI_WK = "DK_T_BAT_TKKIKI_WK";

	/** SQL定義キー(KK_DELETE_001)*/
	private static final String KK_T_TV_OP_WATCH_JSK_KK_DELETE_001 = "KK_DELETE_001";

	/** テーブルアクセスクラス(システムパラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_SYS_PARAM_KNRI = null;

	/** テーブルアクセスクラス(テレビオプション視聴実績)*/
	private JBSbatSQLAccess db_KK_T_TV_OP_WATCH_JSK = null;

	/** テーブルアクセスクラス(オプションサービス契約)*/
	private JBSbatSQLAccess db_KK_T_OP_SVC_KEI = null;

	/** テーブルアクセスクラス(機器提供サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;

	/** テーブルアクセスクラス(バッチ用宅内機器ワーク)*/
	private JBSbatSQLAccess db_DK_T_BAT_TKKIKI_WK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** システムパラメータ分類コード*/
	private static final String SYS_PARAM_BUNRUI_CD = "CD99992";
	
	/** システムパラメータID*/
	private static final String SYS_PARAM_ID = "BDATE";
	
	/** サービス契約番号*/
	private static final String ZERO_SVC_KEI_NO = "0000000000";
	
	/** ＳＹＳＩＤ*/
	private static final String ZERO_SYSID = "0000000000";
	
	/** サービス契約内訳番号*/
	private static final String ZERO_SVC_KEI_UCWK_NO = "000000000000";
	
	/**
	 * FREE項目数
	 */
	private static final int FREE_ITEM = 8;
	
	/**
	 * 削除対象リスト
	 */
	private ArrayList<JBSbatCommonDBInterface> dltInfoList = null;

	/**
	 * 登録対象リスト
	 */
	private ArrayList<JBSbatCommonDBInterface> insInfoList = null;
	
	/**
	 * バッチ運用日エラーフラグ
	 */
	private boolean isBdateErr = false;
	
	/**
	 * パラメタ年月エラーフラグ
	 */
	private boolean isParamErr = false;
	
	/**
	 * パラメタ年月日
	 */
	private String paramYmd = "";
	
	/**
	 * 集計年月
	 */
	private String shukYm = "";
	
	/**
	 * 集計開始年月日
	 */
	private String shukSttYmd = "";
	
	/**
	 * 集計終了年月日
	 */
	private String shukEndYmd = "";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_SYS_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_SYS_PARAM_KNRI);
		db_KK_T_TV_OP_WATCH_JSK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_TV_OP_WATCH_JSK);
		db_KK_T_OP_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_OP_SVC_KEI);
		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
		db_DK_T_BAT_TKKIKI_WK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_T_BAT_TKKIKI_WK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// フリー項目値の取得をします。
		String[] free_item = commonItem.getFreeItem().split(JKKBatConst.S_PARAM_DELIM);
		
		// パラメータ数チェックをします。
		if(FREE_ITEM != free_item.length)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0130CE, new String[]{"FREE"});
		}
		
		// １．削除対象リスト
		JBSbatInputFileUtil tmpReader = new JBSbatInputFileUtil(free_item[0]);
		tmpReader.setEncode(JKKBatConst.SJIS);						// 文字コード
		tmpReader.setLine(JKKStrConst.LINE_LF);			// 改行コード
		tmpReader.createReader();
		
		try
		{
			ArrayList<JBSbatCommonDBInterface> tmpList = new ArrayList<JBSbatCommonDBInterface>();
			dltInfoList = new ArrayList<JBSbatCommonDBInterface>();
			String line = null;
			JBSbatCommonDBInterface outMap = null;
			while((line = tmpReader.readLine()) != null)
			{
				String[] dataList = line.split(JKKBatConst.S_SEP_CAM);
				outMap = getDltInfoLineList(dataList);
				if(null != outMap)
				{
					tmpList.add(outMap);
				}
			}
			dltInfoList = tmpList;
		}
		catch (IOException e)
		{
			throw new JBSbatBusinessException("EKKB0020CE", new String[]{free_item[4]});
		}
		finally
		{
			tmpReader.close();
		}
		
		// ２．登録対象リスト
		tmpReader = new JBSbatInputFileUtil(free_item[1]);
		tmpReader.setEncode(JKKBatConst.SJIS);						// 文字コード
		tmpReader.setLine(JKKStrConst.LINE_LF);			// 改行コード
		tmpReader.createReader();
		
		try
		{
			ArrayList<JBSbatCommonDBInterface> tmpList = new ArrayList<JBSbatCommonDBInterface>();
			insInfoList = new ArrayList<JBSbatCommonDBInterface>();
			String line = null;
			JBSbatCommonDBInterface outMap = null;
			while((line = tmpReader.readLine()) != null)
			{
				String[] dataList = line.split(JKKBatConst.S_SEP_CAM);
				outMap = getInsInfoLineList(dataList);
				if(null != outMap)
				{
					tmpList.add(outMap);
				}
			}
			insInfoList = tmpList;
		}
		catch (IOException e)
		{
			throw new JBSbatBusinessException("EKKB0020CE", new String[]{free_item[5]});
		}
		finally
		{
			tmpReader.close();
		}

		// ３．バッチ運用日エラーフラグ
		//     "0"：正常　"1"：異常
		if("0".equals(free_item[2]))
		{
			isBdateErr = false;
		}
		else
		{
			isBdateErr = true;
		}
		
		// ４．パラメータ年月エラーフラグ
		//     "0"：正常　"1"異常
		if("0".equals(free_item[3]))
		{
			isParamErr = false;
		}
		else
		{
			isParamErr = true;
		}
		
		// ５．パラメータ年月日
		paramYmd = free_item[4];
		
		// ６．集計年月
		shukYm = free_item[5];
		
		// ７．集計開始年月日
		shukSttYmd = free_item[6];
		
		// ８．集計終了年月日
		shukEndYmd = free_item[7];
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		super.logPrint.printDebugLog("execute_START");
		
		// バッチ運用日取得エラー
		if(isBdateErr)
		{
			//システムパラメータ管理にBDATEが存在しない
			throw new JBSbatBusinessException(
					JPCBatchMessageConstant.EKKB0150JE, new String[]{"システムパラメータ管理TBL(SYS_PARAM_BUNRUI_CD、SYS_PARAM_ID:" + SYS_PARAM_BUNRUI_CD + "、" + SYS_PARAM_ID + ")"});
			
		}
		
		// パラメータ年月不正エラー
		if(isParamErr)
		{
			//throw new JBSbatBusinessException("パラメタの値が不正です。{パラメタ:" + param + "}");
			super.logPrint.printBusinessErrorLog("ECKB0030CE", new String[]{"パラメタ", paramYmd});
			throw new JBSbatBusinessError("ECKB0030CE：パラメタ");
		}
		
		// テレビオプション視聴実績削除
		deleteTvOpWatchJsk();
		
		super.logPrint.printDebugLog("ＴＶオプション視聴実績登録対象件数--->" + insInfoList.size() + "件");
		
		// オプションサービス契約
		JBSbatCommonDBInterface dbInfo = null;
		// 機器製造番号
		String kikiSeizoNo = "";
		// STBID
		String stbId = "";
		
		// テレビオプション視聴実績登録
		for(int i = 0; i < insInfoList.size(); i++)
		{
			dbInfo = insInfoList.get(i);
			
			// テレビ契約状態コードの編集
			String tvKeiStatCd = editTvKeiStatCd(dbInfo, shukSttYmd, shukEndYmd);
			super.logPrint.printDebugLog("テレビ契約状態コード-->" + tvKeiStatCd);
			
			// 機器製造番号
			kikiSeizoNo = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SEIZO_NO));
			
			// STBID
			stbId = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatDK_T_BAT_TKKIKI_WK.STB_ID));
			
			// テレビオプション視聴実績登録
			createTvOpWatchJsk(shukYm, dbInfo, tvKeiStatCd, kikiSeizoNo, stbId);
			
		}
		
		super.logPrint.printDebugLog("execute_END");
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_SYS_PARAM_KNRI.close();
		db_KK_T_TV_OP_WATCH_JSK.close();
		db_KK_T_OP_SVC_KEI.close();
		db_KK_T_KKTK_SVC_KEI.close();
		db_DK_T_BAT_TKKIKI_WK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(KK_DELETE_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_TV_OP_WATCH_JSK_KK_DELETE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_TV_OP_WATCH_JSK.executeBySqlDefine(paramList, KK_T_TV_OP_WATCH_JSK_KK_DELETE_001);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	集計年月				SHUK_YM
	 *		 	オプションサービスコード				OP_SVC_CD
	 *		 	サービス契約番号				SVC_KEI_NO
	 *		 	サービス契約内訳番号				SVC_KEI_UCWK_NO
	 *		 	ＴＶ契約状態コード				TV_KEI_STAT_CD
	 *		 	機器製造番号				KIKI_SEIZO_NO
	 *		 	ＳＴＢＩＤ				STB_ID
	 *		 	ＳＹＳＩＤ				SYSID
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 *		 	登録運用年月日				ADD_UNYO_YMD
	 *		 	登録処理ＩＤ				ADD_TRN_ID
	 *		 	更新運用年月日				UPD_UNYO_YMD
	 *		 	更新処理ＩＤ				UPD_TRN_ID
	 *		 	削除運用年月日				DEL_UNYO_YMD
	 *		 	削除処理ＩＤ				DEL_TRN_ID
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_TV_OP_WATCH_JSK_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SHUK_YM", setParam[0]);
		setMap.setValue("OP_SVC_CD", setParam[1]);
		setMap.setValue("SVC_KEI_NO", setParam[2]);
		setMap.setValue("SVC_KEI_UCWK_NO", setParam[3]);
		setMap.setValue("TV_KEI_STAT_CD", setParam[4]);
		setMap.setValue("KIKI_SEIZO_NO", setParam[5]);
		setMap.setValue("STB_ID", setParam[6]);
		setMap.setValue("SYSID", setParam[7]);
		setMap.setValue("ADD_DTM", setParam[8]);
		setMap.setValue("ADD_OPEACNT", setParam[9]);
		setMap.setValue("UPD_DTM", setParam[10]);
		setMap.setValue("UPD_OPEACNT", setParam[11]);
		setMap.setValue("DEL_DTM", setParam[12]);
		setMap.setValue("DEL_OPEACNT", setParam[13]);
		setMap.setValue("MK_FLG", setParam[14]);
		setMap.setValue("ADD_UNYO_YMD", setParam[15]);
		setMap.setValue("ADD_TRN_ID", setParam[16]);
		setMap.setValue("UPD_UNYO_YMD", setParam[17]);
		setMap.setValue("UPD_TRN_ID", setParam[18]);
		setMap.setValue("DEL_UNYO_YMD", setParam[19]);
		setMap.setValue("DEL_TRN_ID", setParam[20]);
	
		// DBアクセスを実行します
		db_KK_T_TV_OP_WATCH_JSK.insertByPrimaryKeys(setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 削除対象リスト１レコード取得。<br>
	 * （csvファイルからの読み込み）<br>
	 * <p>
	 * @param dataList CSVファイルの１レコード分データ
	 * @return outmap １レコード格納List。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */	
	private JBSbatCommonDBInterface getDltInfoLineList(String[] dataList) throws Exception
	{
		
		JBSbatCommonDBInterface outmap = new JBSbatCommonDBInterface();
		String shukYm = "";	// 集計年月

		
		// 集計年月
		shukYm = JBSbatStringUtil.trim(dataList[0].substring(1, dataList[0].length()-1));

		outmap.setValue(JBSbatKK_T_TV_OP_WATCH_JSK.SHUK_YM, shukYm);
		
		// ログレベルがデバッグモードの場合
		if (super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG)){
			super.logPrint.printDebugLog("★getDltInfoLineList(csv)★");
			super.logPrint.printDebugLog("集計年月：" + shukYm);
		}

		return outmap;
	}

	/**
	 * 登録情報リスト１レコード取得。<br>
	 * （csvファイルからの読み込み）<br>
	 * <p>
	 * @param dataList CSVファイルの１レコード分データ
	 * @return outmap １レコード格納List。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */	
	private JBSbatCommonDBInterface getInsInfoLineList(String[] dataList) throws Exception
	{
		
		JBSbatCommonDBInterface outmap = new JBSbatCommonDBInterface();
		String opSvcCd = "";			// オプションサービスコード
		String oyaKeiSkbtCd = "";		// 親契約識別コード
		String svcKeiNo = "";			// サービス契約番号
		String svcKeiUcwkNo = "";		// サービス契約内訳番号
		String sysId = ""; 				// SYSID
		String svcPauseYmd = ""; 		// サービス休止年月日
		String svcPauseRlsYmd = ""; 	// サービス休止解除年月日
		String svcChrgEndYmd = ""; 		// サービス課金終了日
		String kikiSeizoNo = ""; 		// 機器製造番号
		String stbId = ""; 				// STBID
		
		// オプションサービスコード
		opSvcCd = JBSbatStringUtil.trim(dataList[0].substring(1, dataList[0].length()-1));
		// 親契約識別コード
		oyaKeiSkbtCd = JBSbatStringUtil.trim(dataList[1].substring(1, dataList[1].length()-1));
		// サービス契約番号
		svcKeiNo = JBSbatStringUtil.trim(dataList[2].substring(1, dataList[2].length()-1));
		// サービス契約内訳番号
		svcKeiUcwkNo = JBSbatStringUtil.trim(dataList[3].substring(1, dataList[3].length()-1));
		// SYSID
		sysId = JBSbatStringUtil.trim(dataList[4].substring(1, dataList[4].length()-1));
		// サービス休止年月日
		svcPauseYmd = JBSbatStringUtil.trim(dataList[5].substring(1, dataList[5].length()-1));
		// サービス休止解除年月日
		svcPauseRlsYmd = JBSbatStringUtil.trim(dataList[6].substring(1, dataList[6].length()-1));
		// サービス課金終了日
		svcChrgEndYmd = JBSbatStringUtil.trim(dataList[7].substring(1, dataList[7].length()-1));
		// 機器製造番号
		kikiSeizoNo = JBSbatStringUtil.trim(dataList[8].substring(1, dataList[8].length()-1));
		// STBID
		stbId = JBSbatStringUtil.trim(dataList[9].substring(1, dataList[9].length()-1));
		
		outmap.setValue(JBSbatKK_T_OP_SVC_KEI.OP_SVC_CD, opSvcCd);
		outmap.setValue(JBSbatKK_T_OP_SVC_KEI.OYA_KEI_SKBT_CD, oyaKeiSkbtCd);
		outmap.setValue(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_NO, svcKeiNo);
		outmap.setValue(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_UCWK_NO, svcKeiUcwkNo);
		outmap.setValue(JBSbatKK_T_OP_SVC_KEI.SYSID, sysId);
		outmap.setValue(JBSbatKK_T_OP_SVC_KEI.SVC_PAUSE_YMD, svcPauseYmd);
		outmap.setValue(JBSbatKK_T_OP_SVC_KEI.SVC_PAUSE_RLS_YMD, svcPauseRlsYmd);
		outmap.setValue(JBSbatKK_T_OP_SVC_KEI.SVC_CHRG_ENDYMD, svcChrgEndYmd);
		if("03".equals(oyaKeiSkbtCd))
		{
			outmap.setValue(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SEIZO_NO, kikiSeizoNo);
			outmap.setValue(JBSbatDK_T_BAT_TKKIKI_WK.STB_ID, stbId);
		}
		else
		{
			outmap.setValue(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SEIZO_NO, "");
			outmap.setValue(JBSbatDK_T_BAT_TKKIKI_WK.STB_ID, "");
		}
		
		// ログレベルがデバッグモードの場合
		if (super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG)){
			super.logPrint.printDebugLog("★getInsInfoLineList(csv)★");
			super.logPrint.printDebugLog("オプションサービスコード：" + opSvcCd);
			super.logPrint.printDebugLog("親契約識別コード        ：" + oyaKeiSkbtCd);
			super.logPrint.printDebugLog("サービス契約番号        ：" + svcKeiNo);
			super.logPrint.printDebugLog("サービス契約内訳番号    ：" + svcKeiUcwkNo);
			super.logPrint.printDebugLog("SYSID                   ：" + sysId);
			super.logPrint.printDebugLog("サービス休止年月日      ：" + svcPauseYmd);
			super.logPrint.printDebugLog("サービス休止解除年月日  ：" + svcPauseRlsYmd);
			super.logPrint.printDebugLog("サービス課金終了日      ：" + svcChrgEndYmd);
			super.logPrint.printDebugLog("機器製造番号            ：" + kikiSeizoNo);
			super.logPrint.printDebugLog("STBID                   ：" + stbId);
		}

		return outmap;
	}

	/**
	 * テレビオプション視聴実績の登録を行います。<br>
	 * @param sktgm 集計対象年月
	 * @param dbInfo オプションサービス契約
	 * @param tvKeiStatCd TV契約状態コード
	 * @param kikiSeizoNo 機器製造番号
	 * @param stbId STBID
	 * @throws Exception 
	 * 
	 */
	private void createTvOpWatchJsk(String sktgm, JBSbatCommonDBInterface dbInfo, String tvKeiStatCd, String kikiSeizoNo, String stbId) throws Exception
	{
		// システム日付を取得
		String sysDate = JBSbatDateUtil.getSystemDateTimeStamp();
		
		// 新規登録データ格納
		Object[] setParam = new Object[21];
		
		// 集計年月
		setParam[0] = sktgm;
		
		// オプションサービスコード
		setParam[1] = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_OP_SVC_KEI.OP_SVC_CD));
		
		// サービス契約番号
		String svcKeiNo = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_NO));
		
		// サービス契約番号=""
		if("".equals(svcKeiNo))
		{
			// "0000000000"
			svcKeiNo = ZERO_SVC_KEI_NO;
		}
		
		// サービス契約番号
		setParam[2] = svcKeiNo;
		
		// 親契約識別コード
		String oyaKeiSkbtCd = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_OP_SVC_KEI.OYA_KEI_SKBT_CD));
		
		// サービス契約内訳コード
		String svsKeiUcwkNo = "";
		
		// 親契約識別コード="01:サービス契約"
		if("01".equals(oyaKeiSkbtCd))
		{
			// "000000000000"
			svsKeiUcwkNo = ZERO_SVC_KEI_UCWK_NO;
		}
		// 親契約識別コード="03:サービス契約内訳"
		else if("03".equals(oyaKeiSkbtCd))
		{
			// オプションサービス契約.サービス契約内訳番号
			svsKeiUcwkNo = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_KEI_UCWK_NO));
		}
		
		// サービス契約内訳番号
		setParam[3] = svsKeiUcwkNo;
		
		// ＴＶ契約状態コード
		setParam[4] = tvKeiStatCd;
		
		// 機器製造番号
		setParam[5] = kikiSeizoNo;
		
		// ＳＴＢＩＤ
		setParam[6] = stbId;
		
		// ＳＹＳＩＤ
		String sysid = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_OP_SVC_KEI.SYSID));
		if("".equals(sysid))
		{
			// "0000000000"
			sysid = ZERO_SYSID;
		}
		setParam[7] = sysid;
		
		// 登録年月日時分秒
		setParam[8] = sysDate;
		
		// 登録オペレータアカウント
		setParam[9] = batchUserId;
		
		// 更新年月日時分秒
		setParam[10] = sysDate;
		
		// 更新オペレータアカウント
		setParam[11] = batchUserId;
		
		// 削除年月日時分秒
		setParam[12] = "";
		
		// 削除オペレータアカウント
		setParam[13] = "";
		
		// 無効フラグ → 0：有効を設定
		setParam[14] = "0";
		
		// 登録運用年月日
		setParam[15] = "";
		
		// 登録処理ID
		setParam[16] = "";
		
		// 更新運用年月日
		setParam[17] = "";
		
		// 更新処理ID
		setParam[18] = "";
		
		// 削除運用年月日
		setParam[19] = "";
		
		// 削除処理ID
		setParam[20] = "";
		
		executeKK_T_TV_OP_WATCH_JSK_PKINSERT(setParam);
	}
	
	/**
	 * テレビオプション視聴実績の不要なデータ削除。<br>
	 * @throws Exception 
	 */
	private void deleteTvOpWatchJsk() throws Exception
	{
		super.logPrint.printDebugLog("テレビオプション視聴実績の不要なデータ削除--->" + dltInfoList.size() + "件");
		
		// 削除処理
		for(int i = 0; i < dltInfoList.size(); i++)
		{
			JBSbatCommonDBInterface dbInfo = dltInfoList.get(i);
			
			// 削除対象の集計年月
			String shukYm = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_TV_OP_WATCH_JSK.SHUK_YM));
			
			executeKK_T_TV_OP_WATCH_JSK_KK_DELETE_001(new Object[]{shukYm});
			
		}
	}

	/**
	/**
	 * テレビ契約状態コードを編集します。<br>
	 * @param dbInfo オプションサービス契約情報
	 * @param shukStaymd 集計開始年月日
	 * @param shukEndymd 集計終了年月日
	 * @return String "1:契約中","2:無料中","3:停止中"
	 * @throws Exception 
	 */
	private String editTvKeiStatCd(JBSbatCommonDBInterface dbInfo, String shukStaymd, String shukEndymd) throws Exception
	{
		String result = "";
		
		// オプションサービス契約.サービス課金終了日
		String svcChrgEndymd = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_CHRG_ENDYMD));
		
		// オプションサービス契約.サービス休止年月日
		String svcPauseYmd = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_PAUSE_YMD));
		
		// オプションサービス契約.サービス休止解除年月日
		String svcPauseRlsYmd = JBSbatStringUtil.Rtrim(dbInfo.getString(JBSbatKK_T_OP_SVC_KEI.SVC_PAUSE_RLS_YMD));
		
		// サービス課金終了日＜集計開始年月日
		if(0 > svcChrgEndymd.compareTo(shukStaymd))
		{
			result = "2";
		}
		// サービス休止年月日＜＝集計終了年月日かつ、集計開始年月日＜＝サービス休止解除年月日
		else if(0 >= svcPauseYmd.compareTo(shukEndymd) && 0 >= shukStaymd.compareTo(svcPauseRlsYmd))
		{
			
			result = "3";
		}
		else
		{
			result = "1";
		}
		
		return result;
	}
}