/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKMalwareBlockingNonFlgChengeOver
*	ソースファイル名	：JBSbatKKMalwareBlockingNonFlgChengeOver.java
*	作成者				：富士通　
*	作成日				：2020年04月03日
*＜機能概要＞
*	マルウェアブロッキング データ移行登録部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v49.00.00	2020/04/03  FJ)澤田		ANK-3834-00-00_マルウェアブロッキング データ移行
*********************************************************************/
package eo.business.service;

import java.util.HashMap;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM904;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JCCBatchEsbInterface;

/**
* マルウェアブロッキング データ移行部品です。 <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKMalwareBlockingNonFlgChengeOver extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	// マルウェアブロッキング データ移行CCマップ リクエストキー
	private static final String JKKMALWAREBLOCKINGNONFLGCHENGEOVERCC = "KKSV094601CC";
		
	/** フリー項目[待機時間] */
	private String free = null;
		
	/** マルウェアブロッキング データ移行サービス ユースケースID */
	private static final String USECASE_ID = "KKSV0946";
	
	/** マルウェアブロッキング データ移行 オペレーションID */
	private static final String OPERATION_ID = "KKSV0946OP";
	
	/** 1レコードに対しての待ち時間 */
	private long sleepLong;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/

		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// シェルから渡されたfreeの値を取得
		free = (String)commonItem.getFreeItem();
		String[] lines = free.split(JKKBatConst.S_PARAM_DELIM);
		String sleepDate = lines[0];
		// デフォ1.5秒
		if (sleepDate.isEmpty())
		{
			sleepDate = "1500";
		}
		
		// 「%1% KEY=%2%」
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECKB0040AI,
				new String[] { "マルウェアブロッキング データ移行処理", "待ち時間:" + sleepDate});
		
		sleepLong = Long.parseLong(sleepDate);

		
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap 入力電文
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		try 
		{
			//開始時間
			long staTime = System.currentTimeMillis();
			
			HashMap<String, Object> paramMap = new HashMap<String, Object>();
			// サービスに渡す業務データを格納するMAP
			HashMap<String, Object> inputMap = new HashMap<String, Object>();
			// サービスの処理結果が格納されるMAP
			HashMap<String, Object> outputMap = new HashMap<String, Object>();
			// サービス契約番号
			String svcKeiNo = inMap.getString(JBSbatKKIFM904.SVC_KEI_NO);
			// サービスＩＤのセット
			paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, USECASE_ID);
			paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, OPERATION_ID);
			
			// inputMapにCCに必要な情報をセットする
			inputMap.put(JKKMALWAREBLOCKINGNONFLGCHENGEOVERCC, setMalwareBlockingNonFlgCC(inMap));
			
			// マルウェアブロッキング データ移行サービスを呼び出す
			JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inputMap, outputMap);
			
			// BPサービスの戻り値をチェック
			String returnCode = outputMap.get(JCCBatchEsbInterface.RETURN_CODE).toString();
			if (!JCCBatchEsbInterface.RETURN_CODE_SUCCESS.equals(returnCode))
			{
				throw new Exception();
			}
			
			HashMap<String, Object> KKSV094601CC = (HashMap<String, Object>)outputMap.get(JKKMALWAREBLOCKINGNONFLGCHENGEOVERCC);
			String err_flg = (String)KKSV094601CC.get("err_flg");
			// エラーフラグが１の場合
			if ("1".equals(err_flg))
			{
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECKB0040AI,
						new String[] { "マルウェアブロッキング データ移行処理", super.commonItem.getInputCount() + "行目 契約ステータスが受付済またはキャンセル済:" + svcKeiNo});
				// エラーフラグ設定
				super.commonItem.setErrFlg(true);
				return null;
			}
			else if ("2".equals(err_flg))
			{
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECKB0040AI,
						new String[] { "マルウェアブロッキング データ移行処理", super.commonItem.getInputCount() + "行目 サービス契約が存在しません:" + svcKeiNo});
				// エラーフラグ設定
				super.commonItem.setErrFlg(true);
				return null;
			}
			else if ("3".equals(err_flg))
			{
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECKB0040AI,
						new String[] { "マルウェアブロッキング データ移行処理", super.commonItem.getInputCount() + "行目 サービス契約がネット契約ではありません:" + svcKeiNo});
				// エラーフラグ設定
				super.commonItem.setErrFlg(true);
				return null;
			}
			else if ("4".equals(err_flg))
			{
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECKB0040AI,
						new String[] { "マルウェアブロッキング データ移行処理", super.commonItem.getInputCount() + "行目 サービス契約が照査NGのデータです:" + svcKeiNo});
				// エラーフラグ設定
				super.commonItem.setErrFlg(true);
				return null;
			}
			//終了時間
			long endTime = System.currentTimeMillis();
			
			//開始時間から終了時間を取得する。
			long exeTime = endTime - staTime;
			
			// 待機時間から実行時間の差を取得
			long waitTime = sleepLong - exeTime;
			
			// 待機時間がマイナスならスリープしない
			if (waitTime > 0)
			{
				Thread.sleep(waitTime);
			}
		}
		catch (Exception e) 
		{
			String svcKeiNo = inMap.getString(JBSbatKKIFM904.SVC_KEI_NO);
			// エラーログ出力
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, new String[]{e.getMessage() +  super.commonItem.getInputCount() + "行目 サービス契約番号：" + svcKeiNo});
			
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);
		}

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 上りマッピングをする
	 * @param inMap 入力電文
	 * @return HashMap<String, Object> 処理結果
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> setMalwareBlockingNonFlgCC(JBSbatServiceInterfaceMap inMap) throws Exception 
	{
		HashMap<String, Object> ccMap = new HashMap<String, Object>();

		// サービス契約番号
		ccMap.put("svc_kei_no", inMap.getString(JBSbatKKIFM904.SVC_KEI_NO));
		// 共通情報のマッピング
		ccMap.put("func_code", "1");
		
		return ccMap;
	}
}