/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKTrgtSvcKeiReadSyk
*	ソースファイル名	：JBSbatKKTrgtSvcKeiReadSyk.java
*	作成者				：富士通　
*	作成日				：2011年07月06日
*＜機能概要＞
*　対象サービス契約確認（集約）部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/06  FJ)久保田	新規作成
*	v2.00.00	2012/04/13  FJ)久保田	【TAI-2012-0000027】排他制御対応
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM054;
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 JBSbatKKTrgtSvcKeiReadSyk extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** SQL定義キー(KK_SELECT_046)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_046 = "KK_SELECT_046";

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 *  契約一時金番号
	 */
	protected String kicjknNo = "";
	
	/**
	 *  サービス契約番号（ネット）
	 */
	protected String svcKeiNoNet = "";
	
	/**
	 *  サービス契約番号（ネットＴＶ電話）
	 */
	protected String svcKeiNoNettvtel = "";
	
	/**
	 *  サービス契約番号
	 */
	protected String svcKeiNo = "";
	
	/**
	 *  更新年月日時分秒(初期検索)
	 */
	protected String lastUpdDtmBf = "";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @param outputInItem 入力情報
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		super.logPrint.printDebugLog("execute_START");
		
		// 1件目（退避リストが空のとき）
		if (!outputInItem.isOutMapList()) 
		{
			// 出力電文に入力電文を設定して返却。
			outputInItem.addOutMapList(inMap);
			return outputInItem;
		}
		
		// 出力電文に設定されている内容（集計結果）を取得する。
		JBSbatServiceInterfaceMap tmpBean = (JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(outputInItem.getOutMapList().size() - 1);
		StringBuilder tmpSb = new StringBuilder();
		tmpSb.append(tmpBean.getString(JBSbatKKIFM054.KICJKN_NO));		// 契約一時金番号
		tmpSb.append(tmpBean.getString(JBSbatKKIFM054.SVC_KEI_NO));		// サービス契約番号
		tmpSb.append(tmpBean.getString(JBSbatKKIFM054.UPD_DTM_BF));		// 更新年月日時分秒
		String tmpKey = tmpSb.toString(); // キー（退避）メイン生成
		
		// 入力なし（＝最終処理）の場合、集計結果を出力して処理を終了する。
		if (inMap == null) 
		{
			// サービス契約ステータス調査がOKの場合
			if(isSvcKeiStat(outputInItem, tmpKey))
			{
				//結果がすべてOKならばファイル出力
				tmpBean.setOutFlg(true);
			}
			return outputInItem;
		}
		
		// キー（入力）の設定。
		StringBuilder inSb = new StringBuilder();
		inSb.append(inMap.getString(JBSbatKKIFM054.KICJKN_NO));			// 契約一時金番号
		inSb.append(inMap.getString(JBSbatKKIFM054.SVC_KEI_NO));		// サービス契約番号
		inSb.append(inMap.getString(JBSbatKKIFM054.UPD_DTM_BF));		// 更新年月日時分秒
		String inKey = inSb.toString(); // キー（マスタ）メイン生成
		super.logPrint.printDebugLog("キー（マスタ）メイン生成：：：：：" +  inKey);
		
		// キーが不一致
		if (!inKey.equals(tmpKey)) 
		{
			// サービス契約ステータス調査がOKの場合
			if(isSvcKeiStat(outputInItem, tmpKey))
			{
				tmpBean.setOutFlg(true);
			}
		}
		
		//出力共通電文に入出力インターフェースを設定する。
		outputInItem.addOutMapList(inMap);
		inMap.setOutFlg(false);
		super.logPrint.printDebugLog("execute_END");
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 
	 * サービス契約ステータス調査を行います。
	 * 
	 * @param  outputInItem JBSbatOutputItem
	 * @param  tmpKey       String
	 * @return 処理結果
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private boolean isSvcKeiStat(JBSbatOutputItem outputInItem, String tmpKey) throws Exception 
	{
		boolean outputFlg = true;
		
		//溜め込んだ中間ファイルの情報のチェックを行う。
		// 出力結果電文リストを設定する
		for (int j = outputInItem.getOutMapList().size() - 1 ; j >= 0 ; j--)
		{
			JBSbatServiceInterfaceMap svcBeanIf = (JBSbatServiceInterfaceMap)outputInItem.getOutMapList().get(j);
			
			if (!tmpKey.equals(svcBeanIf.get(JBSbatKKIFM054.KICJKN_NO)))
			{
				break;
			}
			
			// フィールド変数の初期化
			svcKeiNoNet      = "";
			svcKeiNoNettvtel = "";
			
			// サービス契約番号（ネット）の取得
			svcKeiNoNet = svcBeanIf.getString(JBSbatKKIFM054.SVC_KEI_NO_NET);
			// サービス契約番号（ネットＴＶ電話）
			svcKeiNoNettvtel = svcBeanIf.getString(JBSbatKKIFM054.SVC_KEI_NO_NETTVTEL);
			
			// キーが一致
			if (svcKeiNoNet.equals(svcKeiNoNettvtel)) 
			{
				
			}
			else
			{
				// SQL実行結果取得用mapを生成（サービス契約）
				JBSbatCommonDBInterface svckeiList = new JBSbatCommonDBInterface();
				
				// サービス契約番号（ネットＴＶ電話）
				svckeiList.setValue(svcKeiNoNettvtel);
				svckeiList.setValue(commonItem.getOpeDate());
				svckeiList.setValue(commonItem.getOpeDate());
				
				// サービス契約ステータス取得SQLの件数を取得します
				int getSvckeiCount = db_KK_T_SVC_KEI.executeBySqlDefine(svckeiList, KK_T_SVC_KEI_KK_SELECT_046);
				
				// サービス契約ステータス取得SQLの件数が存在した場合
				if(getSvckeiCount != 0)
				{
					
				}
				// サービス契約ステータス取得SQLの件数が存在しない場合
				else
				{
					outputFlg = false;
					break;
				}
			}
		}
		return outputFlg;
	}
}
