/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKTgWrbSvcKeiUpdTgSyk
*	ソースファイル名	：JBSbatKKTgWrbSvcKeiUpdTgSyk.java
*	作成者				：富士通　
*	作成日				：2011年07月09日
*＜機能概要＞
*　対象割引サービス契約更新対象抽出（集約）部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/09  FJ)久保田	新規作成
*	v1.01.00	2012/02/29  FJ)久保田	【ST2-2012-0000285】集約ロジックを修正
*	v2.00.00	2012/04/15  FJ)藤本		【TAI-2012-0000027】排他制御対応
*	v2.01.00	2012/04/24  FJ)藤本		【IT2-2012-0000477】障害対応
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM048;
import eo.business.util.file.JBSbatKKIFM077;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKTgWrbSvcKeiUpdTgSyk extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 *  割引サービス契約番号
	 */
	protected String wribSvcKeiNo = "";
	
	/**
	 *  世代登録年月日時分秒
	 */
	protected String geneAddDtm = "";
	
	/**
	 *  サービス契約番号
	 */
	protected String svcKeiNo = "";
	
	/**
	 *  サービス契約状態
	 */
	protected String svcKeiStat = "";
	
	/**
	 *  サービス契約内訳番号
	 */
	protected String svcKeiUcwkNo = "";
	
	/**
	 *  サービス契約内訳状態
	 */
	protected String svcKeiUcwkStat = "";
	
	/**
	 *  オプションサービス契約番号
	 */
	protected String opSvcKeiNo = "";
	
	/**
	 *  オプションサービス契約状態
	 */
	protected String opSvcKeiStat = "";
	
	/**
	 *  サブオプションサービス契約番号
	 */
	protected String sbopSvcKeiNo = "";
	
	/**
	 *  サブオプションサービス契約状態
	 */
	protected String sbopSvcKeiStat = "";
	
	/**
	 *  機器提供サービス契約番号
	 */
	protected String kktkSvcKeiNo = "";
	
	/**
	 *  機器提供サービス契約状態
	 */
	protected String kktkSvcKeiStat = "";
	
	/**
	 *  更新対象フラグ
	 */
	protected String updTrgtFlg = "";
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @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(JBSbatKKIFM048.WRIB_SVC_KEI_NO));		// 割引サービス契約番号
		String tmpKey = tmpSb.toString(); // キー（退避）メイン生成
		super.logPrint.printDebugLog("キー（退避）メイン生成：：：：：" +  tmpKey);
		
		//入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap outmap = new JBSbatServiceInterfaceMap();
		outmap.setOutFlg(false);
		// 入力なし（＝最終処理）の場合、集約結果を出力して処理を終了する。
		if (inMap == null) 
		{
			// 更新対象調査がOKの場合
			if(isUpdTg(outputInItem, tmpKey))
			{
				//項目を設定
				outmap.setString(JBSbatKKIFM077.WRIB_SVC_KEI_NO, tmpBean.getString(JBSbatKKIFM048.WRIB_SVC_KEI_NO));	// 割引サービス契約番号
				outmap.setString(JBSbatKKIFM077.GENE_ADD_DTM,  tmpBean.getString(JBSbatKKIFM048.GENE_ADD_DTM));			// 世代登録年月日時分秒
				outmap.setString(JBSbatKKIFM077.SVC_KEI_NO,  tmpBean.getString(JBSbatKKIFM048.SVC_KEI_NO));				// サービス契約番号
				outmap.setString(JBSbatKKIFM077.LAST_UPD_DTM_BF,  tmpBean.getString(JBSbatKKIFM048.LAST_UPD_DTM_BF));	// 最終更新年月日時分秒（更新前）
				//結果がすべてOKならばファイル出力
				tmpBean.setOutFlg(true);
			}
			//出力共通電文に入出力インターフェースを設定する。
			outputInItem.addOutMapList(outmap);
			return outputInItem;
		}
		
		// キー（入力）の設定。
		StringBuilder inSb = new StringBuilder();
		inSb.append(inMap.getString(JBSbatKKIFM048.WRIB_SVC_KEI_NO));		// 割引サービス契約番号
		String inKey = inSb.toString(); // キー（マスタ）メイン生成
		super.logPrint.printDebugLog("キー（マスタ）メイン生成：：：：：" +  inKey);
		
		// キーが不一致
		if (!inKey.equals(tmpKey)) 
		{
			// 更新対象調査がOKの場合
			if(isUpdTg(outputInItem, tmpKey))
			{
				//項目を設定
				outmap.setString(JBSbatKKIFM077.WRIB_SVC_KEI_NO, inMap.getString(JBSbatKKIFM048.WRIB_SVC_KEI_NO));		// 割引サービス契約番号
				outmap.setString(JBSbatKKIFM077.GENE_ADD_DTM, inMap.getString(JBSbatKKIFM048.GENE_ADD_DTM));			// 世代登録年月日時分秒
				outmap.setString(JBSbatKKIFM077.SVC_KEI_NO,  inMap.getString(JBSbatKKIFM048.SVC_KEI_NO));				// サービス契約番号
				outmap.setString(JBSbatKKIFM077.LAST_UPD_DTM_BF,  inMap.getString(JBSbatKKIFM048.LAST_UPD_DTM_BF));		// 最終更新年月日時分秒（更新前）
				tmpBean.setOutFlg(true);
			}
		}
		outmap.setString(JBSbatKKIFM077.WRIB_SVC_KEI_NO, inMap.getString(JBSbatKKIFM048.WRIB_SVC_KEI_NO));		// 割引サービス契約番号
		outmap.setString(JBSbatKKIFM077.GENE_ADD_DTM, inMap.getString(JBSbatKKIFM048.GENE_ADD_DTM));			// 世代登録年月日時分秒
		outmap.setString("UPD_TRGT_FLG", inMap.getString(JBSbatKKIFM048.UPD_TRGT_FLG));							// 更新対象フラグ
		outmap.setString(JBSbatKKIFM077.SVC_KEI_NO, inMap.getString(JBSbatKKIFM048.SVC_KEI_NO));				// サービス契約番号
		outmap.setString(JBSbatKKIFM077.LAST_UPD_DTM_BF, inMap.getString(JBSbatKKIFM048.LAST_UPD_DTM_BF));		// 最終更新年月日時分秒（更新前）
		
		//出力共通電文に入出力インターフェースを設定する。
		outputInItem.addOutMapList(outmap);
		outmap.setOutFlg(false);
		super.logPrint.printDebugLog("execute_END");
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 
	 * 更新対象調査を行います。
	 * 
	 * @param  outputInItem JBSbatOutputItem
	 * @param  tmpKey       String
	 * @return 処理結果
	 * @throws Exception メソッド内で発生した例外全般。
	 */
	private boolean isUpdTg(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.getString("WRIB_SVC_KEI_NO")))
			{
				break;
			}
			
			if ("0".equals(svcBeanIf.get(JBSbatKKIFM048.UPD_TRGT_FLG)))
			{
				outputFlg = false;
				break;
			}
			else
			{
				super.logPrint.printDebugLog("割引サービス契約番号：" + svcBeanIf.get(JBSbatKKIFM048.WRIB_SVC_KEI_NO) + " 更新対象");
			}
		}
		return outputFlg;
	}
}
