/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSBatKKEoTvAutoShoninTgChsht
*	ソースファイル名	：JBSBatKKEoTvAutoShoninTgChsht.java
*	作成者				：富士通　
*	作成日				：2011年08月02日
*＜機能概要＞
*　ｅｏＴＶ機器設置自動承認対象抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/02	FJ）庭山	新規作成
*	v2.00.00	2012/04/12  FJ）藤本	【TAI-2012-0000027】排他制御対応
*	v4.00.00	2012/12/20  FJ）柳		【IT1-2012-0002511】対応
*	v4.01.00	2012/12/29  FJ）柳		【IT1-2012-0002616】対応
*	v4.02.00	2013/03/22  FJ) 中作 	【IT1-2013-0000498】障害対応
**********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM091;
import eo.business.util.table.JBSbatKK_T_KKTK_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI_UCWK;
import eo.business.util.table.JBSbatKK_T_SVKEI_EXC_CTRL;
import eo.business.util.table.JBSbatKU_T_KJAK_TG_TKKIKI;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
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;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKEoTvAutoShoninTgChsht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約内訳)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI_UCWK = "KK_T_SVC_KEI_UCWK";
	
	/** テーブル(機器提供サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";

	/** SQL定義キー(KK_SELECT_018)*/
	private static final String KK_T_SVC_KEI_UCWK_KK_SELECT_018 = "KK_SELECT_018";
	
	/** SQL定義キー(KK_SELECT_014)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_014 = "KK_SELECT_014";
	
	/** テーブルアクセスクラス(サービス契約内訳)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI_UCWK = null;
	
	/** テーブルアクセスクラス(機器提供サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 宅内機器種別コード（STB）
	 */
	private static final String STB_CD = "A0";

	/**
	 * 宅内機器種別コード（B-CAS）
	 */
	private static final String BCAS_CD = "B0";

	/**
	 * 宅内機器種別コード（C-CAS）
	 */
	private static final String CCAS_CD = "C0";

	/**
	 * 退避サービス契約内訳番号
	 */
	private String bk_svc_kei_ucwk_no = "";


	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI_UCWK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI_UCWK);
		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @param outputInItem 入力情報
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");

		JBSbatServiceInterfaceMap out_map = null;
		JBSbatCommonDBInterface db_map = null;

		String[] param = new String[2];

		// 入力レコードの終了判定
		if (inMap == null)
		{
			// 退避出力領域の情報をファイル出力します。
			JBSbatServiceInterfaceMap prt_map = (JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0);
			prt_map.setOutFlg(true);
			return outputInItem;
		}
		
		// 機器提供サービス契約番号
		String kktk_svc_kei_no = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKU_T_KJAK_TG_TKKIKI.KKTK_SVC_KEI_NO));
		
		// 予定機器変更番号の取得
		String kiki_chg_no = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKU_T_KJAK_TG_TKKIKI.RSV_KIKI_CHG_NO));
		
		// 機器提供サービス契約TBLを検索します。（世代のMAXを取得）
		JBSbatCommonDBInterface outMap014 = this.selectKktkSvcKei014(kktk_svc_kei_no, kiki_chg_no);
		
		// 検索結果を判断します。
		if (null == outMap014)
		{
			// 退避出力領域の情報をファイル出力します。
			JBSbatServiceInterfaceMap map = new JBSbatServiceInterfaceMap();
			map.setOutFlg(false);
			return outputInItem;
		}

		String ucwk_no = JBSbatStringUtil.Rtrim(outMap014.getString(JBSbatKK_T_KKTK_SVC_KEI.SVC_KEI_UCWK_NO));
		String kiki_sbt_cd = JBSbatStringUtil.Rtrim(outMap014.getString(JBSbatKK_T_KKTK_SVC_KEI.TAKNKIKI_SBT_CD));

		// 退避サービス契約内訳番号 = ""の場合、以下の処理を行います。
		if (bk_svc_kei_ucwk_no.length() == 0)
		{
			JBSbatServiceInterfaceMap map = new JBSbatServiceInterfaceMap();
			map.setOutFlg(false);
			outputInItem.addOutMapList(map);

			// 退避サービス契約内訳番号にサービス契約内訳番号を設定します。
			bk_svc_kei_ucwk_no = ucwk_no;
		}

		// 退避サービス契約内訳番号 <> サービス契約内訳番号の場合、以下の処理を行います。
		if (!bk_svc_kei_ucwk_no.equals(ucwk_no))
		{
			// 退避出力領域の情報をファイル出力します。
			JBSbatServiceInterfaceMap prt_map = (JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0);
			prt_map.setOutFlg(true);

			// 退避サービス契約内訳番号にサービス契約内訳番号を設定します。
			bk_svc_kei_ucwk_no = ucwk_no;

			// 新規退避出力領域の情報を設定します。
			out_map = new JBSbatServiceInterfaceMap();
			out_map.setOutFlg(false);
			outputInItem.addOutMapList(out_map);
		}
		// 退避サービス契約内訳番号 = サービス契約内訳番号の場合、以下の処理を行います。
		else
		{
			// 退避出力情報を取得します。
			out_map = (JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(0);
		}

		// 宅内機器種別コード = 「STB」の場合、以下の処理を行います。
		if (STB_CD.equals(kiki_sbt_cd))
		{
			// サービス契約内訳の検索を行います。
			param[0] = ucwk_no;
			param[1] = super.opeDate;

			executeKK_T_SVC_KEI_UCWK_KK_SELECT_018(param);
			db_map = db_KK_T_SVC_KEI_UCWK.selectNext();

			// 検索結果がある場合、以下の処理を行います。
			if (db_map != null)
			{
				// 退避出力領域に料金コースコードを設定します。
				out_map.setString(JBSbatKKIFM091.PCRS_CD, JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_T_SVC_KEI_UCWK.PCRS_CD)));
			}
			// 検索結果がない場合、エラーとし処理中断します。
			else
			{
				throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, new String[]{"KK_T_SVC_KEI_UCWK", ucwk_no});
			}
		}

		// 退避出力領域に設定します。
		setOutData(out_map, outMap014, kiki_sbt_cd);
		super.logPrint.printDebugLog("execute_END");

		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI_UCWK.close();
		db_KK_T_KKTK_SVC_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_018)で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_SVC_KEI_UCWK_KK_SELECT_018(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI_UCWK.selectBySqlDefine(paramList, KK_T_SVC_KEI_UCWK_KK_SELECT_018);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 退避出力領域へ転記処理をします。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.機器提供サービス契約番号を設定します。<br>
	 *
	 * 2.世代登録年月日時分秒を設定します。<br>
	 * 
	 * 3.宅内機器型式コードを設定します。<br>
	 *
	 * 4.機器製造番号を設定します。<br>
	 *
	 * 5.宅内機器異動コードを設定します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param out_map　出力電文。
	 * @param in_map　入力電文。
	 * @param type　宅内機器種別コード。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setOutData(JBSbatServiceInterfaceMap out_map, JBSbatCommonDBInterface outmap014, String type) throws Exception
	{
		String kktk_svc_kei_no = JBSbatStringUtil.Rtrim(outmap014.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO));
		String add_dtm = JBSbatStringUtil.Rtrim(outmap014.getString(JBSbatKK_T_KKTK_SVC_KEI.GENE_ADD_DTM));
		String model_cd = JBSbatStringUtil.Rtrim(outmap014.getString(JBSbatKK_T_KKTK_SVC_KEI.TAKNKIKI_MODEL_CD));
		String seizo_no = JBSbatStringUtil.Rtrim(outmap014.getString(JBSbatKK_T_KKTK_SVC_KEI.KIKI_SEIZO_NO));
		String ido_cd = JBSbatStringUtil.Rtrim(outmap014.getString(JBSbatKK_T_KKTK_SVC_KEI.TAKNKIKI_IDO_CD));
		String svc_kei_no = JBSbatStringUtil.Rtrim(outmap014.getString(JBSbatKK_T_SVKEI_EXC_CTRL.SVC_KEI_NO));
		String last_upd_dtm = JBSbatStringUtil.Rtrim(outmap014.getString(JBSbatKK_T_SVKEI_EXC_CTRL.LAST_UPD_DTM));

		// STBの場合
		if (STB_CD.equals(type))
		{
			out_map.setString(JBSbatKKIFM091.KKTK_SVC_KEI_NO_S, kktk_svc_kei_no);
			out_map.setString(JBSbatKKIFM091.GENE_ADD_DTM_S, add_dtm);
			out_map.setString(JBSbatKKIFM091.TAKNKIKI_MODEL_CD_S, model_cd);
			out_map.setString(JBSbatKKIFM091.KIKI_SEIZO_NO_S, seizo_no);
			out_map.setString(JBSbatKKIFM091.RSV_TAKNKIKI_IDO_CD_S, ido_cd);
			out_map.setString(JBSbatKKIFM091.SVC_KEI_NO_S, svc_kei_no);
			out_map.setString(JBSbatKKIFM091.LAST_UPD_DTM_S, last_upd_dtm);
		}
		// B-CASの場合
		else if (BCAS_CD.equals(type))
		{
			out_map.setString(JBSbatKKIFM091.KKTK_SVC_KEI_NO_B, kktk_svc_kei_no);
			out_map.setString(JBSbatKKIFM091.GENE_ADD_DTM_B, add_dtm);
			out_map.setString(JBSbatKKIFM091.TAKNKIKI_MODEL_CD_B, model_cd);
			out_map.setString(JBSbatKKIFM091.KIKI_SEIZO_NO_B, seizo_no);
			out_map.setString(JBSbatKKIFM091.RSV_TAKNKIKI_IDO_CD_B, ido_cd);
			out_map.setString(JBSbatKKIFM091.SVC_KEI_NO_B, svc_kei_no);
			out_map.setString(JBSbatKKIFM091.LAST_UPD_DTM_B, last_upd_dtm);
		}
		// C-CASの場合
		else if (CCAS_CD.equals(type))
		{
			out_map.setString(JBSbatKKIFM091.KKTK_SVC_KEI_NO_C, kktk_svc_kei_no);
			out_map.setString(JBSbatKKIFM091.GENE_ADD_DTM_C, add_dtm);
			out_map.setString(JBSbatKKIFM091.TAKNKIKI_MODEL_CD_C, model_cd);
			out_map.setString(JBSbatKKIFM091.KIKI_SEIZO_NO_C, seizo_no);
			out_map.setString(JBSbatKKIFM091.RSV_TAKNKIKI_IDO_CD_C, ido_cd);
			out_map.setString(JBSbatKKIFM091.SVC_KEI_NO_C, svc_kei_no);
			out_map.setString(JBSbatKKIFM091.LAST_UPD_DTM_C, last_upd_dtm);
		}
	}
	
	/**
	 * 機器提供サービス契約TBLの検索を行います。(KK_SELECT_119)
	 * <br>
	 * @param kktkSvcKeiNo 機器提供サービス契約番号
	 * @param kkChgNo 機器変更番号
	 * @return JBSbatCommonDBInterface 入出力インターフェースオブジェクト
	 * @throws Exception メソッド内で発生した例外全般
	 */
	private JBSbatCommonDBInterface selectKktkSvcKei014(String kktkSvcKeiNo, String kkChgNo) throws Exception
	{
		// 機器提供サービス契約TBLを検索し、世代のMAXを取得します。
		// 機器提供サービス契約TBL検索条件項目を設定します。
		Object[] paramList = new Object[5];
		
		paramList[0] = kktkSvcKeiNo;		// 機器提供サービス契約番号
		paramList[1] = kkChgNo;				// 機器変更番号
		paramList[2] = STB_CD;				// 宅内機器種別コード（STB）
		paramList[3] = BCAS_CD;				// 宅内機器種別コード（B-CAS）
		paramList[4] = CCAS_CD;				// 宅内機器種別コード（C-CAS）
		
		super.logPrint.printDebugLog("paramList[0]：" + paramList[0]);
		super.logPrint.printDebugLog("paramList[1]：" + paramList[1]);
		super.logPrint.printDebugLog("paramList[2]：" + paramList[2]);
		super.logPrint.printDebugLog("paramList[3]：" + paramList[3]);
		super.logPrint.printDebugLog("paramList[4]：" + paramList[4]);
		
		// 機器提供サービス契約情報検索処理を実行します。
		executeKK_T_KKTK_SVC_KEI_KK_SELECT_014(paramList);
		
		// 検索結果を取得します。
		JBSbatCommonDBInterface outDbMap = db_KK_T_KKTK_SVC_KEI.selectNext();
		
		return outDbMap;
	}
	
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_014)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	機器提供サービス契約番号
	 *		 	機器変更番号
	 *		 	宅内機器種別コード(「STB」「B-CAS」「C-CAS」)
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KKTK_SVC_KEI_KK_SELECT_014(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_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_014);
	}
}
