/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKEponSwchKjFinFix
*	ソースファイル名	：JBSbatKKEponSwchKjFinFix.java
*	作成者				：富士通　
*	作成日				：2012年05月29日
*＜機能概要＞
*　E-PON切替工事完了確定部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v3.00.00	2012/05/30  FJ)神吉		新規作成
*	v4.00.00	2012/11/12  FJ)桑島		【ANK-1223-00-00】進捗対応
*	v4.01.00	2012/12/29  FJ)中作		【ST4-2012-0000301】障害対応
*	v4.02.00	2013/03/14	FJ)中作		【IT1-2013-0000498】品質強化対策
*	v4.03.00	2013/03/25	FJ)柳		【IT1-2013-0000498】品質強化対策
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatCommon;
import eo.business.util.table.JBSbatKK_T_KJ_FIN_WK;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKU_T_KOJIAK;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.log.JBSbatLogUtil;
import eo.framework.util.JBSbatStringUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKEponSwchKjFinFix extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** テーブル(進捗)*/
	private static final String D_TBL_NAME_KK_T_PRG = "KK_T_PRG";
	
	/** テーブルアクセスクラス(共通部品)*/
	private JBSbatSQLAccess stmt = null;
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// 共通部品用
		stmt = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_PRG);
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");
		
		String svcKeiNo    = "";					// サービス契約番号
		String kojiakNo    = "";					// 工事案件番号
		String adChgFixDtm = "";					// 住所変更確定年月日時分秒
		String svcKeiKaisenUcwkNo    = "";			// サービス契約回線内訳番号
		String kojiUkOptntyIdoDtm    = "";			// 工事受付契機異動年月日時分秒
		String svcCd       = "";					// サービスコード
		String sysId   = "";						// SYSID
		String idoDtm = "";							// 異動年月日時分秒
		//異動区分（00067:E-PON→GE-PON設備切替）
		String ido_div = "00067";

		// サービス契約番号
		svcKeiNo = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_KJ_FIN_WK.SVC_KEI_NO));
		// 工事案件番号
		kojiakNo = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_KJ_FIN_WK.KOJIAK_NO));
		// 住所変更確定年月日時分秒
		adChgFixDtm = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKU_T_KOJIAK.AD_CHG_FIX_DTM));
		// サービス契約回線内訳番号
		svcKeiKaisenUcwkNo = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_KJ_FIN_WK.SVC_KEI_KAISEN_UCWK_NO));
		// 工事受付契機異動年月日時分秒
		kojiUkOptntyIdoDtm = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKU_T_KOJIAK.KOJI_UK_OPTNTY_IDO_DTM));
		// サービスコード
		svcCd = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SVC_CD));
		// SYSID
		sysId = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SYSID));
		// 異動年月日時分秒
		//共通部品（進捗.異動年月日取得部品）より異動年月日時分秒（またはシステム日付）を取得
		idoDtm = JKKBatCommon. getIdoDtmMax(commonItem, JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_KJ_FIN_WK.SVC_KEI_NO)), ido_div, stmt);

		
		// ログレベルがデバッグモードの場合
		if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
		{
			super.logPrint.printDebugLog("サービス契約番号（工事完了ワーク検索）：" +  svcKeiNo);
			super.logPrint.printDebugLog("工事案件番号（工事完了ワーク検索）：" +  kojiakNo);
			super.logPrint.printDebugLog("住所変更確定年月日時分秒（工事完了ワーク検索）：" +  adChgFixDtm);
			super.logPrint.printDebugLog("サービス契約回線内訳番号（工事完了ワーク検索）：" +  svcKeiKaisenUcwkNo);
			super.logPrint.printDebugLog("工事受付契機異動年月日時分秒（工事完了ワーク検索）：" +  kojiUkOptntyIdoDtm);
			super.logPrint.printDebugLog("サービスコード（工事完了ワーク検索）：" +  svcCd);
			super.logPrint.printDebugLog("SYSID（工事完了ワーク検索）：" +  sysId);
			super.logPrint.printDebugLog("異動年月日時分秒（工事完了ワーク検索）：" +  idoDtm);
		}
		
		// ユースケースIDを格納するMAP
		HashMap<Object, Object>  paramMapOpn = new HashMap<Object, Object>();
		paramMapOpn.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, "KKSV0576");
		paramMapOpn.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, "KKSV0576OP");
		
		// サービスに渡す業務データを格納するMAP
		HashMap<String, Object> inputMapOpn = new HashMap<String, Object>();
		
		HashMap<Object, Object> inputMap = new HashMap<Object, Object>();
		
		// inputMapに設定するデータ(工事案件＜eo光ネット＞諸変更)をHashMapで構築する。
		HashMap<String, Object>  kojiakDataMap = new HashMap<String, Object>();
		
		kojiakDataMap.put("svc_kei_no", svcKeiNo);                    		 // サービス契約番号
		kojiakDataMap.put("svc_kei_kaisen_ucwk_no", svcKeiKaisenUcwkNo);     // サービス契約回線内訳番号
		kojiakDataMap.put("kojiak_no", kojiakNo);                    		 // 工事案件番号
		kojiakDataMap.put("ad_chg_fix_dtm", adChgFixDtm);                    // 住所変更確定年月日時分秒
		kojiakDataMap.put("koji_uk_cd", "070");								 // 工事受付コード
		kojiakDataMap.put("koji_uk_dtail_cd", "A3");						 // 工事受付詳細コード
		kojiakDataMap.put("koji_uk_optnty_ido_dtm", kojiUkOptntyIdoDtm);	 // 工事受付契機異動年月日時分秒
		kojiakDataMap.put("svc_cd", svcCd);									 // サービスコード
		kojiakDataMap.put("sysid", sysId);                   				 // SYSID
		
		String listTitle = "kjAnkenEoNetShoChgMap";
		
		// inputMapにデータを未設置工事案件＜eo光ネット＞タイトルをキーとして設定する。
		inputMap.put(listTitle, kojiakDataMap);
		
		
		// inputMapに設定するデータ(進捗登録)をHashMapで構築する。
		HashMap<String, Object>  prgAddDataMap = new HashMap<String, Object>();
		
		// 異動理由明細情報リスト生成
		ArrayList<HashMap<String, Object>>idoRsnDtlList = new ArrayList<HashMap<String, Object>>();
		
		// 異動理由明細マップをHashMapで構築する。
		HashMap<String, Object>  iDoRsnDtlDataMap = new HashMap<String, Object>();
		
		// 進捗登録Mapへ設定
		prgAddDataMap.put("svc_kei_no", svcKeiNo);                    			// サービス契約番号
		prgAddDataMap.put("ido_div", ido_div);     								// 異動区分（00067:E-PON→GE-PON設備切替）
		prgAddDataMap.put("ido_dtm", idoDtm);									// 異動年月日時分秒
		prgAddDataMap.put("prg_stat", "3302");									// 進捗ステータス（3302（機種変更））
				
		// 異動理由詳細Mapへ設定
		iDoRsnDtlDataMap.put("ido_rsn_cd", "23");								// 異動理由コード（23:機種変更） 
		
		// 異動理由詳細リストへ異動理由詳細Mapを設定
		idoRsnDtlList.add(iDoRsnDtlDataMap);
		
		String listTitle2 = "EKK1091D010CBSMsg1List";
		
		// 進捗登録Mapへ異動理由詳細リストを設定
		prgAddDataMap.put(listTitle2, idoRsnDtlList);
		
		String listTitle3 = "prgAddMap";
		
		// inputMapにデータを進捗登録Mapタイトルをキーとして設定する。
		inputMap.put(listTitle3, prgAddDataMap);
		
		inputMapOpn.put("KKSV057601CC", inputMap);
		
		// サービスの処理結果が格納されるMAP
		HashMap<Object, Object> outputMapOpn = new HashMap<Object, Object>();
		
		// サービス呼び出し
		JCCBatchEsbInterface.invokeService(super.commonItem, paramMapOpn, inputMapOpn, outputMapOpn);
		
		
		// 部品からのリターンコードを取得します。
		String returnCode = (String)outputMapOpn.get("RETURN_CODE");
		super.logPrint.printDebugLog("★RETURN_CODE：" + returnCode);
		
		// サービスインターフェースよりエラーが返却された場合
		if(!"0000".equals(returnCode))
		{
			StringBuffer sb = new StringBuffer();
			sb.append(" サービス契約番号：" +svcKeiNo);
			sb.append("、サービス契約回線内訳番号："+ svcKeiKaisenUcwkNo);
			sb.append("、工事案件番号："+ kojiakNo);
			// 「サービスインターフェイスエラーの場合は、下記のログ出力する。
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, 
				new String[]{"E-PON切替工事完了確定CCでエラーが発生しました(リターンコード):" + returnCode + sb.toString()});
			
		}
		
		super.logPrint.printDebugLog("execute_END");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		// 共通部品用
		stmt.close();
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
