/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom					 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKyoseiDslTrgtChsh
*	ソースファイル名	：JBSbatKKKyoseiDslTrgtChsh.java
*	作成者				：富士通　
*	作成日				：2011年07月13日
*＜機能概要＞
*　強制解約対象抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/13   富士通		新規作成
*	v3.00.00	2012/02/09   FJ)敷地	【ANK-0061-00-00】インターフェイスされるデータの追加(依頼年月日、サービス課金終了年月日)
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFI004;
import eo.business.util.file.JBSbatKKIFM081;
import eo.business.util.table.JBSbatKK_T_AUTO_SHOSA_RSLT;
import eo.business.util.table.JBSbatKK_T_MSKM_DTL;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JBSbatCheckUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
* 強制解約対象抽出 <p>
* <p>
* 料金Sから送信される強制解約用IFファイルを元に、強制解約対象を抽出し中間ファイルを出力する。
*<BR>
* @author 富士通
*/
public class JBSbatKKKyoseiDslTrgtChsh extends JBSbatBusinessService
{
	/** 警告時のメッセージID **/
	private static final String MESSAGE_ID = "EKKB0260JW";
	
	/** 強制解約対象抽出CC ユースケースID */
	private static final String USECASE_ID = "KKSV0172";
	
	/** 強制解約対象抽出CC オペレーションID */
	private static final String OPERATION_ID = "KKSV0172OP";
	
	/** 強制解約対象抽出CC リクエストキー　強制解約実行 */
	private static final String KKSV017201CC = "KKSV017201CC";
	
	/** 強制解約対象抽出CC レスポンスキー　抽出対象請求契約番号 */
	private static final String CHSHT_TRGT_SEIKY_KEI_NO = "chsht_trgt_seiky_kei_no";
	
	/** 強制解約対象抽出CC レスポンスキー　サービス契約番号リスト */
	private static final String SVC_KEI_NO_LIST = "svc_kei_no_list";
	
	/** 強制解約対象抽出CC レスポンスキー　サービス契約情報 */
	private static final String SVC_KEI_INFO = "svc_kei_info";
	
	/** 強制解約対象抽出CC レスポンスキー　サービス契約番号 */
	private static final String SVC_KEI_NO = "svc_kei_no";
	
	/** 強制解約対象抽出CC レスポンスキー　請求契約番号 */
	private static final String SEIKY_KEI_NO = "seiky_kei_no";
	
	/** 強制解約対象抽出CC レスポンスキー　ＳＹＳＩＤ */
	private static final String SYSID = "sysid";				//2012-02-07, サブIT障害938対応
	
	// TG1-2013-0000840 強制解約対象抽出処理で撤去解約中の契約を抽出しなかった場合のメッセージが不明確 2013/08/06 START
	/** 強制解約対象抽出CC レスポンスキー　撤去解約予約リスト */
	private static final String TEKKYO_DSL_RSV_LIST = "tekkyo_dsl_rsv_list";

	/** 撤去解約予約が存在するため強制解約対象外となった場合のメッセージID **/
	private static final String MESSAGE_ID_TEKKYO_DSL_RSV = "EKKB1090AI";
	// TG1-2013-0000840 強制解約対象抽出処理で撤去解約中の契約を抽出しなかった場合のメッセージが不明確 2013/08/06 END

	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		JBSbatOutputItem outputBean = null;
		JBSbatServiceInterfaceMap outmap = null;
		String seikyNo = null;
		HashMap<String, Object> paramMap = null;
		HashMap<String, Object> inputMap = null;
		HashMap<String, Object> kksv017201cc = null;
		HashMap<String, Object> outputMap = null;
		HashMap<String, Object> svcKeiInfo = null;
		String svcKeiNo = null;
		String seikyKeiNo = null;
		String sysid = null;								//2012-02-07, サブIT障害938対応
		String reqYmd = null;
		String svcChrgEndymd = null;
		
		ArrayList svcKeiNoList = null;
		
		//-- 入力データの取得
		// 入力レコードに異常があった場合
		if (inMap.isInputErrorFlg())
		{
			// 業務エラーログ出力
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0100AE, new String[] {"強制解約依頼情報"});
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);
			return null;
		}
		
		//データ取得(請求契約番号)
		seikyNo = inMap.getString(JBSbatKKIFI004.REQ_SEIKY_NO);
		
		//データ取得(依頼年月日)
		reqYmd = inMap.getString(JBSbatKKIFI004.REQYMD);
		
		//データ取得(サービス課金終了年月日)
		svcChrgEndymd = inMap.getString(JBSbatKKIFI004.SVC_CHRG_ENDYMD);
		
		
		
		//-- CCの呼び出し
		paramMap = new HashMap<String, Object>();
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, USECASE_ID);
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, OPERATION_ID);
		
		//サービスに渡すデータの設定
		inputMap = new HashMap<String, Object>();
		kksv017201cc = new HashMap<String, Object>();
		kksv017201cc.put(CHSHT_TRGT_SEIKY_KEI_NO, seikyNo);
		
		//マップに設定
		inputMap.put(KKSV017201CC, kksv017201cc);

		//戻り値用マップ
		outputMap = new HashMap<String, Object>();
		
		//サービス呼び出し
		JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inputMap, outputMap);

		//-- 値の取得
		kksv017201cc = (HashMap<String, Object>)outputMap.get(KKSV017201CC);
		
		//サービス契約番号リストの取得
		svcKeiNoList = (ArrayList)kksv017201cc.get(SVC_KEI_NO_LIST);
		
		//-- ファイル出力
		outputBean = new JBSbatOutputItem();
		//レスポンスが取得できているか？(０件のときも含む)
		if((svcKeiNoList == null) || (svcKeiNoList.size() == 0))
		{
			
			//警告を設定
			super.logPrint.printBusinessErrorLog(MESSAGE_ID, new String[]{seikyNo});
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);

		}
		else
		{
			
			//取得した件数分のループ
			for(int i = 0 ; i < svcKeiNoList.size() ; i++)
			{
				
				//１要素取得
				svcKeiInfo = (HashMap<String, Object>)svcKeiNoList.get(i);
				
				//要素から各種データ取得
				svcKeiNo = (String)svcKeiInfo.get(SVC_KEI_NO);
				seikyKeiNo = (String)svcKeiInfo.get(SEIKY_KEI_NO);
				sysid = (String)svcKeiInfo.get(SYSID);
				
				outmap = new JBSbatServiceInterfaceMap();
				
				//請求契約番号
				outmap.setString(JBSbatKKIFM081.SEIKY_KEI_NO, seikyKeiNo);
				
				//サービス契約番号
				outmap.setString(JBSbatKKIFM081.SVC_KEI_NO, svcKeiNo);
				//2012-02-07, サブIT障害938対応　↓↓↓
				//ＳＹＳＩＤ
				outmap.setString(JBSbatKKIFM081.SYSID, sysid);
				//2012-02-07, サブIT障害938対応　↑↑↑
				
				//契約年月日
				outmap.setString(JBSbatKKIFM081.REQYMD, reqYmd);
				
				//サービス課金終了年月日
				outmap.setString(JBSbatKKIFM081.SVC_CHRG_ENDYMD, svcChrgEndymd);
				
				outmap.setOutFlg(true);
				outputBean.addOutMapList(outmap);
				
			}
			
		}
		
		// TG1-2013-0000840 強制解約対象抽出処理で撤去解約中の契約を抽出しなかった場合のメッセージが不明確 2013/08/06 START
		ArrayList<HashMap<String, Object>> tekkyoDslRsvList = (ArrayList<HashMap<String, Object>>)kksv017201cc.get(TEKKYO_DSL_RSV_LIST);
		if (null != tekkyoDslRsvList)
		{
			for (HashMap<String, Object> tekkyoDslRsvInfo : tekkyoDslRsvList)
			{
				svcKeiNo = (String)tekkyoDslRsvInfo.get(SVC_KEI_NO);
				seikyKeiNo = (String)tekkyoDslRsvInfo.get(SEIKY_KEI_NO);
				// INFOメッセージとして業務ログに出力
				super.logPrint.printBusinessErrorLog(MESSAGE_ID_TEKKYO_DSL_RSV, new String[]{seikyKeiNo, svcKeiNo});
			}
		}
		// TG1-2013-0000840 強制解約対象抽出処理で撤去解約中の契約を抽出しなかった場合のメッセージが不明確 2013/08/06 END
		
		//出力リストを返却
		return outputBean;
		
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
