/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKMiStcKikiSvcCncl
*	ソースファイル名	：JBSbatKKMiStcKikiSvcCncl.java
*	作成者				：富士通　
*	作成日				：2012年04月05日
*＜機能概要＞
*　未設置機器サービスキャンセル部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/04/05  FJ)庭山		新規作成
*	v3.00.00	2011/04/06	FJ)神吉		【ANK-0066-00-00】対応
*	v4.00.00	2012/12/04  FJ)神吉		【IT1-2012-0002055】割引登録CC呼出対応
*	v4.01.00	2013/03/26	FJ)柳		【IT1-2013-0000498】品質強化対策
*	v7.00.00	2013/12/07	FJ)石原		【ANK-1578-00-00】対応
*********************************************************************/
package eo.business.service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM173;
import eo.common.constant.JCNStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.log.JBSbatLogUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKMiStcKikiSvcCncl extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");
		
		// ユースケースIDを格納するMAP
		HashMap<Object, Object>  paramMapOpn = new HashMap<Object, Object>();
		paramMapOpn.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, "KKSV0550");
		paramMapOpn.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, "KKSV0550OP");
		
		// サービスに渡す業務データを格納するMAP
		HashMap<String, Object> inputMapOpn = new HashMap<String, Object>();
		
		/** サービス契約番号（未設置機器キャンセル対象ファイル） */
		String svcKeiNo_173 = inMap.getString(JBSbatKKIFM173.SVC_KEI_NO);
		
		/** 機器提供サービス契約番号（ルーター）（未設置機器キャンセル対象ファイル） */
		String kktkSvcKeiNoRuter_173 = inMap.getString(JBSbatKKIFM173.KKTK_SVC_KEI_NO_ROUTER);

		/** 世代登録年月日時分秒（ルーター）（未設置機器キャンセル対象ファイル） */
		String geneAddDtmRuter_173 = inMap.getString(JBSbatKKIFM173.GENE_ADD_DTM_ROUTER);

		/** 宅内機器型式コード（ルーター）（未設置機器キャンセル対象ファイル） */
		String taknkikiModelCdRuter_173 = inMap.getString(JBSbatKKIFM173.TAKNKIKI_MODEL_CD_ROUTER);

		/** 機器製造番号（ルーター）（未設置機器キャンセル対象ファイル） */
		String kikiSeizoNoRuter_173 = inMap.getString(JBSbatKKIFM173.KIKI_SEIZO_NO_ROUTER);

		/** ＯＬＳ機能有無（ルーター）（未設置機器キャンセル対象ファイル） */
		String olsKinoUmRuter_173 = inMap.getString(JBSbatKKIFM173.OLS_KINO_UM_ROUTER);

		/** ＳＹＳＩＤ（未設置機器キャンセル対象ファイル） */
		String sysId_173 = inMap.getString(JBSbatKKIFM173.SYSID);

		/** 登録／変更区分（未設置機器キャンセル対象ファイル） */
		String AddChgeDiv_173 = inMap.getString(JBSbatKKIFM173.ADD_CHGE_DIV);

		/** 申込番号（未設置機器キャンセル対象ファイル） */
		String mskmNo_173 = inMap.getString(JBSbatKKIFM173.MSKM_NO);

		/** 申込種別コード（未設置機器キャンセル対象ファイル） */
		String MskmSbt_173 = inMap.getString(JBSbatKKIFM173.MSKM_SBT_CD);

		/** サービス解約理由コード（未設置機器キャンセル対象ファイル） */
		String svcDlreCd_173 = inMap.getString(JBSbatKKIFM173.SVC_DLRE_CD);

		/** 異動区分（未設置機器キャンセル対象ファイル） */
		String idoDiv_173 = inMap.getString(JBSbatKKIFM173.IDO_DIV);

		/** 対象契約識別コード（未設置機器キャンセル対象ファイル） */
		String tgKeiSkbtCd_173 = inMap.getString(JBSbatKKIFM173.TG_KEI_SKBT_CD);

		/** サービス契約ステータス（未設置機器キャンセル対象ファイル） */
		String svcKeiStat_173 = inMap.getString(JBSbatKKIFM173.SVC_KEI_STAT);

		/** サービス契約内訳番号（未設置機器キャンセル対象ファイル） */
		String svcKeiucwkNo_173 = inMap.getString(JBSbatKKIFM173.SVC_KEI_UCWK_NO);

		/** サービス契約内訳ステータス（未設置機器キャンセル対象ファイル） */
		String svcKeiUcwkStat_173 = inMap.getString(JBSbatKKIFM173.SVC_KEI_UCWK_STAT);

		/** 機器提供サービス契約番号（未設置機器キャンセル対象ファイル） */
		String kktkSvcKeiNo_173 = inMap.getString(JBSbatKKIFM173.KKTK_SVC_KEI_NO);

		/** 機器提供サービス契約ステータス（未設置機器キャンセル対象ファイル） */
		String kktkSvcKeiStat_173 = inMap.getString(JBSbatKKIFM173.KKTK_SVC_KEI_STAT);

		/** サービスコード（未設置機器キャンセル対象ファイル） */
		String svcCd_173 = inMap.getString(JBSbatKKIFM173.SVC_CD);

		/** 料金グループコード（未設置機器キャンセル対象ファイル） */
		String prcGrpCd_173 = inMap.getString(JBSbatKKIFM173.PRC_GRP_CD);

		/** 料金コースコード（未設置機器キャンセル対象ファイル） */
		String pcrsCd_173 = inMap.getString(JBSbatKKIFM173.PCRS_CD);

		/** 料金プランコード（未設置機器キャンセル対象ファイル） */
		String pPlanCd_173 = inMap.getString(JBSbatKKIFM173.PPLAN_CD);

		/** 機器提供サービスコード（未設置機器キャンセル対象ファイル） */
		String kktkSvcCd_173 = inMap.getString(JBSbatKKIFM173.KKTK_SVC_CD);

		/** 機器提供種別コード（未設置機器キャンセル対象ファイル） */
		String kktkSbtCd_173 = inMap.getString(JBSbatKKIFM173.KKTK_SBT_CD);

		/** 変更前サービスコード（未設置機器キャンセル対象ファイル） */
		String chgeBfSvcCd_173 = inMap.getString(JBSbatKKIFM173.CHGE_BF_SVC_CD);

		/** 変更前料金グループコード（未設置機器キャンセル対象ファイル） */
		String chgeBfPrcGrpCd_173 = inMap.getString(JBSbatKKIFM173.CHGE_BF_PRC_GRP_CD);

		/** 変更前料金コースコード（未設置機器キャンセル対象ファイル） */
		String chgeBfPcrsCd_173 = inMap.getString(JBSbatKKIFM173.CHGE_BF_PCRS_CD);

		/** 変更前料金プランコード（未設置機器キャンセル対象ファイル） */
		String chgeBfPplanCd_173 = inMap.getString(JBSbatKKIFM173.CHGE_BF_PPLAN_CD);
		
		/** サービス契約回線内訳番号（未設置機器キャンセル対象ファイル） */
		String svcKeiKaisenUcwkNo_173 = inMap.getString(JBSbatKKIFM173.SVC_KEI_KAISEN_UCWK_NO);
		
		// inputMapに設定するデータをHashMapで構築する。
		HashMap<String, Object>  dataMapOpn = new HashMap<String, Object>();
		dataMapOpn.put("ols_kino_um_router", olsKinoUmRuter_173);			// ＯＬＳ機能有無
		dataMapOpn.put("odr_hakko_joken_no", "");							// オーダ発行条件番号
		dataMapOpn.put("svc_kei_no", svcKeiNo_173);							// サービス契約番号
		dataMapOpn.put("order_sbt_cd", "");									// オーダ種別コード
		dataMapOpn.put("svc_order_cd", "");									// サービスオーダコード
		dataMapOpn.put("yokyu_sbt_cd", "");									// 要求種別コード
		dataMapOpn.put("odr_hakko_joken_cd", "");							// オーダ発行条件コード
		dataMapOpn.put("same_trn_no", "");									// 同一処理番号
		dataMapOpn.put("taknkiki_model_cd", taknkikiModelCdRuter_173);		// 宅内機器型式コード
		dataMapOpn.put("kiki_seizo_no", kikiSeizoNoRuter_173);				// 機器製造番号
		dataMapOpn.put("odr_inf_sksi_wk_no", "");							// オーダ情報作成ワーク番号
		dataMapOpn.put("kktk_svc_kei_no", kktkSvcKeiNoRuter_173);          // 機器提供サービス契約番号
		dataMapOpn.put("kktsvkei_gadtm", geneAddDtmRuter_173);           	// 機器提供サービス契約世代登録年月日時分秒
		dataMapOpn.put("sysid_cc", sysId_173);                              // ＳＹＳＩＤ_ＣＣ
		dataMapOpn.put("add_chge_div_cc", AddChgeDiv_173);                  // 登録／変更区分_ＣＣ
		dataMapOpn.put("mskm_no_cc", mskmNo_173);                           // 申込番号_ＣＣ
		dataMapOpn.put("mskm_sbt_cd_cc", MskmSbt_173);                    	// 申込種別コード_ＣＣ
		dataMapOpn.put("ido_div_cc", idoDiv_173);                           // 異動区分_ＣＣ
		dataMapOpn.put("func_code_cc", "1");                           		// 機能コード_ＣＣ
		dataMapOpn.put("svc_dlre_cd_cc", svcDlreCd_173);                    // サービス解約理由コード_ＣＣ
		dataMapOpn.put("grp_div_cc", "00");                             	// グループ区分_ＣＣ
		dataMapOpn.put("tg_kei_skbt_cd_cc", tgKeiSkbtCd_173);               // 対象契約識別コード_ＣＣ
		dataMapOpn.put("svc_kei_no_cc", svcKeiNo_173);                      // サービス契約番号_ＣＣ
		dataMapOpn.put("svc_kei_stat_cc", svcKeiStat_173);                  // サービス契約ステータス_ＣＣ
		dataMapOpn.put("svc_kei_ucwk_no_cc", svcKeiucwkNo_173);             // サービス契約内訳番号_ＣＣ
		dataMapOpn.put("svc_kei_ucwk_stat_cc", svcKeiUcwkStat_173);         // サービス契約内訳ステータス_ＣＣ
		dataMapOpn.put("kktk_svc_kei_no_cc", kktkSvcKeiNo_173);             // 機器提供サービス契約番号_ＣＣ
		dataMapOpn.put("kktk_svc_kei_stat_cc", kktkSvcKeiStat_173);         // 機器提供サービス契約ステータス_ＣＣ
		dataMapOpn.put("svc_cd_cc", svcCd_173);                             // サービスコード_ＣＣ
		dataMapOpn.put("prc_grp_cd_cc", prcGrpCd_173);                      // 料金グループコード_ＣＣ
		dataMapOpn.put("pcrs_cd_cc", pcrsCd_173);                           // 料金コースコード_ＣＣ
		dataMapOpn.put("pplan_cd_cc", pPlanCd_173);                         // 料金プランコード_ＣＣ
		dataMapOpn.put("kktk_svc_cd_cc", kktkSvcCd_173);                    // 機器提供サービスコード_ＣＣ
		dataMapOpn.put("kktk_sbt_cd_cc", kktkSbtCd_173);                    // 機器提供種別コード_ＣＣ
		dataMapOpn.put("chge_bf_svc_cd_cc", chgeBfSvcCd_173);               // 変更前サービスコード_ＣＣ
		dataMapOpn.put("chge_bf_prc_grp_cd_cc", chgeBfPrcGrpCd_173);        // 変更前料金グループコード_ＣＣ
		dataMapOpn.put("chge_bf_pcrs_cd_cc", chgeBfPcrsCd_173);             // 変更前料金コースコード_ＣＣ
		dataMapOpn.put("chge_bf_pplan_cd_cc", chgeBfPplanCd_173);           // 変更前料金プランコード_ＣＣ
		dataMapOpn.put("svc_kei_kaisen_ucwk_no_cc", svcKeiKaisenUcwkNo_173);	// サービス契約回線内訳番号
		
		// ログレベルがデバッグモードの場合
		if(super.logPrint.chkLogLevel(JBSbatLogUtil.MODE_DEBUG))
		{
			super.logPrint.printDebugLog("サービス契約番号：" +  svcKeiNo_173);
			super.logPrint.printDebugLog("機器提供サービス契約番号（ルーター）：" +  kktkSvcKeiNoRuter_173);
			super.logPrint.printDebugLog("世代登録年月日時分秒（ルーター）：" +  geneAddDtmRuter_173);
			super.logPrint.printDebugLog("宅内機器型式コード（ルーター）：" +  taknkikiModelCdRuter_173);
			super.logPrint.printDebugLog("機器製造番号（ルーター）：" +  kikiSeizoNoRuter_173);
			super.logPrint.printDebugLog("ＯＬＳ機能有無（ルーター）：" +  olsKinoUmRuter_173);
			super.logPrint.printDebugLog("ＳＹＳＩＤ：" +  sysId_173);
			super.logPrint.printDebugLog("登録／変更区分：" +  AddChgeDiv_173);
			super.logPrint.printDebugLog("申込番号：" +  mskmNo_173);
			super.logPrint.printDebugLog("申込種別コード：" +  MskmSbt_173);
			super.logPrint.printDebugLog("サービス解約理由コード：" +  svcDlreCd_173);
			super.logPrint.printDebugLog("異動区分：" +  idoDiv_173);
			super.logPrint.printDebugLog("対象契約識別コード：" +  tgKeiSkbtCd_173);
			super.logPrint.printDebugLog("サービス契約ステータス：" +  svcKeiStat_173);
			super.logPrint.printDebugLog("サービス契約内訳番号：" +  svcKeiucwkNo_173);
			super.logPrint.printDebugLog("サービス契約内訳ステータス：" +  svcKeiUcwkStat_173);
			super.logPrint.printDebugLog("機器提供サービス契約番号：" +  kktkSvcKeiNo_173);
			super.logPrint.printDebugLog("機器提供サービス契約ステータス：" +  kktkSvcKeiStat_173);
			super.logPrint.printDebugLog("サービスコード：" +  svcCd_173);
			super.logPrint.printDebugLog("料金グループコード：" +  prcGrpCd_173);
			super.logPrint.printDebugLog("料金コースコード：" +  pcrsCd_173);
			super.logPrint.printDebugLog("料金プランコード：" +  pPlanCd_173);
			super.logPrint.printDebugLog("機器提供サービスコード：" +  kktkSvcCd_173);
			super.logPrint.printDebugLog("機器提供種別コード：" +  kktkSbtCd_173);
			super.logPrint.printDebugLog("変更前サービスコード：" +  chgeBfSvcCd_173);
			super.logPrint.printDebugLog("変更前料金グループコード：" +  chgeBfPrcGrpCd_173);
			super.logPrint.printDebugLog("変更前料金コースコード：" +  chgeBfPcrsCd_173);
			super.logPrint.printDebugLog("変更前料金プランコード：" +  chgeBfPplanCd_173);
			super.logPrint.printDebugLog("変更前料金プランコード：" + svcKeiKaisenUcwkNo_173);
		}

		inputMapOpn.put("KKSV055001CC", dataMapOpn);
		
		// サービスの処理結果が格納される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_173);
			sb.append("、機器提供サービス契約番号："+kktkSvcKeiNo_173);

			// 「サービスインターフェイスエラーの場合は、下記のログ出力する。
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, 
				new String[]{"機器解約登録CCでエラーが発生しました(リターンコード):" + returnCode + sb.toString()});
			
			//エラーフラグ設定
			super.commonItem.setErrFlg(true);
			
			//出力情報を返却
			return new JBSbatOutputItem() ;
			}


		super.logPrint.printDebugLog("execute_END");
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * ファイル読み込み処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で読込ファイルディレクトリ(フルパス)を設定します。<br>
	 *
	 * 2.引数を元にファイル読込を行い、行をListへ格納します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param strFileDir    入力ディレクトリ(フルパス)。
	 * @return resultList   返却用List
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private static ArrayList<String> readFile(String strFileDir) throws Exception
	{
		ArrayList<String> resultList = new  ArrayList<String>();
		
		// 外部出力ファイルパス
		JBSbatInputFileUtil inFile = new JBSbatInputFileUtil(strFileDir);
		inFile.setEncode(JKKBatConst.SJIS);						// 文字コード
		inFile.setLine(JCNStrConst.S_LINE_SEPARAOR_LF);			// 改行コード
		inFile.createReader();
		
		try
		{
			while (true)
			{
				String line = inFile.readLine();
				if (null == line)
				{
					inFile.close();
					break;
				}
				resultList.add(line);
			}
			
			return resultList;
		}
		catch (IOException e)
		{
			throw new JBSbatBusinessException("EKKB0020CE", new String[]{strFileDir});
		}
		finally
		{
			inFile.close();
		}
	}
}
