/*********************************************************************
*  All Rights reserved,Copyright (c) Fujitsu ,2014					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKStbWatchCtrlEndReq
*	ソースファイル名	：JBSbatKKStbWatchCtrlEndReq.java
*	作成者				：富士通　
*	作成日				：2014年07月31日
*＜機能概要＞
*　STB直送時視聴制御終了依頼部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v10.01.00	2014/07/31  富士通		新規作成 【ANK-2141-00-00】STB交換方法変更
*	v11.00.00   2014/12/25  FJ)中野    【OM-2014-0003828】連携時にSTB情報のみ連携するはずがC-CAS情報まで連携してしまっている。
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.util.file.JBSbatWCIFI002;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKStbWatchCtrlEndReq extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(機器提供サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";

	/** SQL定義キー(KK_SELECT_198)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_198 = "KK_SELECT_198";

	/** SQL定義キー(KK_UPDATE_009)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_UPDATE_009 = "KK_UPDATE_009";

	/** テーブルアクセスクラス(機器提供サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	// 機器提供サービス契約抽出エラーメッセージ
	private static final String ERR_MSG_KK_SELECT_198 = "機器提供サービス契約抽出エラー。";
	// 機器提供サービス契約更新エラーメッセージ
	private static final String ERR_MSG_KK_UPDATE_009 = "機器提供サービス契約更新エラー。";

	// スキップ件数
	int skipCnt = 0;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");
		
		// 出力共通電文を生成する。
		JBSbatOutputItem outputBean = null;
		// 処理進捗
		int progress = 0;
		
		try {
			// inMapの情報を取得
			// 機器提供サービス契約番号を取得する
			String kktkSvcKeiNo = inMap.getString("KKTK_SVC_KEI_NO");
			// 異動予約番号
			String idoRsvno = inMap.getString("IDO_RSV_NO");
			// 旧機器変更番号を取得する
			String oldKikiChgNo = inMap.getString("OLD_KIKI_CHG_NO");
			
			super.logPrint.printDebugLog("■機器提供サービス契約番号：" + kktkSvcKeiNo);
			super.logPrint.printDebugLog("■異動予約番号　　　　　　：" + idoRsvno);
			super.logPrint.printDebugLog("■旧機器変更番号　　　　　：" + oldKikiChgNo);
			
			
			// 異動予約で抽出された処理対象データに対し
			// 視聴制御依頼(撤去)を行うための情報(旧STB機器情報)を抽出する。
			// 機器提供サービス契約番号、旧機器変更番号、バッチ運用年月日をパラメータに設定します。
			String [] param = {kktkSvcKeiNo, oldKikiChgNo, super.commonItem.getOpeDate()};
			// 機器提供サービス契約テーブルにアクセスするSQLを実行します
			executeKK_T_KKTK_SVC_KEI_KK_SELECT_198(param);
			
			// 抽出結果取得用
			progress = 1;
			JBSbatCommonDBInterface map = new JBSbatCommonDBInterface();
			map = db_KK_T_KKTK_SVC_KEI.selectNext();
			
			
			// 機器提供サービス契約.eoTV機器設置承認状態コードが「'2'：視聴制御連携済み」以外の場合
			if (!JBSbatKKConst.CD00644_2.equals(map.getString("EO_TV_KKST_SNN_STAT_CD"))) {
				// スキップ件数をカウントアップ
				skipCnt++;
				//警告メッセージを出力し、このレコードに関する処理は終了させる
				commonItem.getLogPrint().printBusinessErrorLog("EKKB1200AI",
						new String[]{	"視聴制御連携済みでない。" + 
										"（機器提供サービス契約番号；" + kktkSvcKeiNo +
										"、旧機器変更番号：" + oldKikiChgNo +
										"、eoTV機器設置承認状態コード：" + map.getString("EO_TV_KKST_SNN_STAT_CD") + "）"});
				return new JBSbatOutputItem();
			}
			
			// ▼▼▼▼▼ OM-2014-0003828 2014/12/25 ADD START ▼▼▼▼▼
			// 連携対象はSTBだけとなる為、処理対象の機器がSTBかどうかを確認する。
			if (!JBSbatKKConst.KKTK_SVC_CD_STB.equals(map.getString("KKTK_SVC_CD"))) {
				// スキップ件数をカウントアップ
				skipCnt++;
				//警告メッセージを出力し、このレコードに関する処理は終了させる
				commonItem.getLogPrint().printBusinessErrorLog("EKKB1200AI",
						new String[]{	"視聴制御連携対象外" + 
										"（機器提供サービス契約番号；" + kktkSvcKeiNo +
										"、旧機器変更番号：" + oldKikiChgNo + "）"});
				return new JBSbatOutputItem();
			}
			// ▲▲▲▲▲ OM-2014-0003828 2014/12/25 ADD END   ▲▲▲▲▲
			
			// 視聴制御依頼(撤去)データファイルの作成
			outputBean = createKkifm621(map);
			
			// ファイル出力した機器提供サービス契約レコードに対して、視聴制御依頼(撤去)結果の設定更新を行う。
			progress = 2;
			// 世代登録年月日時分秒を取得する
			String geneAddDtm = map.getString("GENE_ADD_DTM");
			
			super.logPrint.printDebugLog("■世代登録年月日時分秒　　：" + geneAddDtm);
			
			// 機器提供サービス契約番号、世代登録年月日時分秒をパラメータに設定します。
			String [] param2 = {kktkSvcKeiNo, geneAddDtm};
			// 機器提供サービス契約を更新するSQLを実行します
			executeKK_T_KKTK_SVC_KEI_KK_UPDATE_009(param2);
			
		
		} catch (Exception e) {
			// 想定外のエラーが発生した場合、警告メッセージを出力し、このレコードに関する処理は終了させる
			String errMsg = "想定外エラー";
			if (progress == 1) {
				errMsg = ERR_MSG_KK_SELECT_198;
			} else if (progress == 2) {
				errMsg = ERR_MSG_KK_UPDATE_009;
			}
			
			
			commonItem.getLogPrint().printBusinessErrorLog("EKKB0010CW",
					new String[]{	errMsg + "expMessage:" + e.getMessage()});
			throw new JBSbatBusinessError();
		} finally {
			super.logPrint.printDebugLog("execute_END");
		}
		
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_KKTK_SVC_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		// スキップ件数がある場合、ログ出力する
		if (skipCnt > 0) {
			commonItem.getLogPrint().printBusinessErrorLog("EKKB1200AI",
					new String[]{	"スキップ件数：" + skipCnt});
		}
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * SQLKEY(KK_SELECT_198)で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_KKTK_SVC_KEI_KK_SELECT_198(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_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_198);
	}

	/**
	 * SQLKEY(KK_UPDATE_009)で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_KKTK_SVC_KEI_KK_UPDATE_009(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.executeBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_UPDATE_009);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 視聴制御依頼(撤去)データファイルの作成
	 * @return outputBean JBSbatOutputItem
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private JBSbatOutputItem createKkifm621(JBSbatCommonDBInterface map) throws Exception
	{
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		//入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
		//項目を設定
		outmap.setString(JBSbatWCIFI002.REQ_TRN_CD, "01");				// 依頼処理コード
		outmap.setString(JBSbatWCIFI002.KOJIAK_NO, "0000000000");		// 工事案件番号
		outmap.setString(JBSbatWCIFI002.TAKNKIKI_MODEL_CD, map.getString("TAKNKIKI_MODEL_CD"));	// 宅内機器型式コード
		outmap.setString(JBSbatWCIFI002.KIKI_SEIZO_NO, map.getString("KIKI_SEIZO_NO"));			// 機器製造番号
		outmap.setString(JBSbatWCIFI002.KOJI_IDO_FLG, "9");				// 工事移動フラグ
		
		//出力フラグを設定
		outmap.setOutFlg(true);
		//出力共通電文に入出力インターフェースを設定する。
		outputBean.addOutMapList(outmap);
		//出力共通電文を返却
		return outputBean;
	}

}
