/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKA181SFLogic
*   ソースファイル名：KKA181SFLogic.java
*   作成者          ：富士通
*   日付            ：2018年03月26日
*＜機能概要＞
*   利用停止解除連携(API)のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v37.00.00   2018/03/26   FJ)クウン  【ANK-3366-00-00】eo光設備卸対応
*
**********************************************************************/
package eo.web.webview.KKA185SF;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.common.JKKApiCommon;
import eo.web.webview.mapping.KKSV0900_KKSV0900OPDBMapper;

import org.json.JSONException;
import org.json.JSONObject;

/**
 * KKA185のビューロジックです。<p>
 * <BR>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class KKA185SFLogic extends JCCWebBusinessLogic
{	
	/** 利用停止（卸先事業者）_サービス */
	private static final Object SERVICE_USECASE_ID = "KKSV0900";
	
	/**
	 * 契約者情報変更(卸先事業者)処理です。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception エラーが発生した場合
	 */
	public boolean init() throws Exception
	{
		// サービス結果格納用サービスフォームBean
		X31SDataBeanAccess bean = null;

		// リクエストパラメータ(JSONデータ)
		Map<String, Object> requestMap = null;

		// JSON形式のレスポンスデータ
		String jsonResponse = "";

		try
		{
			// サービス結果格納用サービスフォームBean取得
			bean = getServiceFormBean();

			// JSONデータ取得
			requestMap = JKKApiCommon.getJsonDataFromOrs(getSessionId());

			X31SDataBeanAccess commonBean = super.getCommonInfoBean();

			// 業務規制チェック
			if (!JKKApiCommon.checkRequestRestriction(commonBean))
			{
				// 規制中の場合
				DEBUG_LOG.debug("■業務規制エラー");

				// 処理応答電文(エラー)を取得
				jsonResponse = JKKApiCommon.createJsonResponse(requestMap
																, JKKStrConst.RETURN_CD_8000
																, JKKStrConst.RETURN_MESSAGE_SYSTEM_TIME_OUT).toString();
				// 応答電文に設定
				bean.sendMessageString(KKA185SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, JKKApiCommon.getResponseMsg(jsonResponse));

				return true;
			}

			// パラメータチェック
			jsonResponse = checkParameter(requestMap);
			if (!JKKApiCommon.isNull(jsonResponse))
			{
				// 応答電文に設定
				bean.sendMessageString(KKA185SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, JKKApiCommon.getResponseMsg(jsonResponse));
				return true;
			}

			// サービス呼び出し準備
			HashMap<String, Object> paramMap = new HashMap<String, Object>();
			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SERVICE_USECASE_ID);
			HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
			HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
			KKSV0900_KKSV0900OPDBMapper mapper = new KKSV0900_KKSV0900OPDBMapper();
			// 上りマッピング
			mapper.setKKSV090001CC(requestMap, inputMap, JPCModelConstant.FUNC_CD_1);
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
			
			// 下りマッピング
			Map<String, Object> responseMap = new HashMap<String, Object>();
			mapper.getKKSV090001CC(responseMap, outputMap);

			// 共通項目を設定したJSONオブジェクトを生成する
			JSONObject jsonResObj = JKKApiCommon.createJsonResponse(requestMap
																	, (String)responseMap.get(JKKStrConst.RETURN_CODE)
																	, (String)responseMap.get(JKKStrConst.RETURN_MESSAGE));
			// 個別項目設定
			// リターンコードが「正常」の場合、「共通キー」を設定する
			if (JKKStrConst.CHECK_OK.equals((String)responseMap.get(JKKStrConst.RETURN_CODE)))
			{
				jsonResObj.put(JKKStrConst.COMMON_KEY, JKKApiCommon.getJsonValue(requestMap.get(JKKStrConst.COMMON_KEY)));
			}
			jsonResponse = jsonResObj.toString();
		}
		catch (Exception e)
		{
			DEBUG_LOG.debug("■致命的なエラー発生");

			// 例外トレースのログ出力
			JKKApiCommon.printDebugLog(e);

			// 処理応答電文(エラー)を取得
			jsonResponse = JKKApiCommon.createJsonResponse(requestMap, JKKStrConst.RETURN_CD_9000, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR).toString();
		}

		// 応答電文に設定
		bean.sendMessageString(KKA185SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, JKKApiCommon.getResponseMsg(jsonResponse));

		return true;
	}

	/**
	 * パラメータチェックを行います。
	 * <br>
	 * @param requestMap リクエストパラメータ(JSONデータ)
	 * @return チェックエラーの場合は処理応答電文(エラー)、チェックエラーでない場合は空文字
	 * @throws JSONException JSON処理でエラーが発生した場合
	 */
	private String checkParameter(Map<String, Object> requestMap) throws JSONException
	{
		// 処理応答電文(エラー)
		String jsonErrorResponse = "";
		// リターンコード
		String returnCode = "";
		// リターンメッセージ
		String returnMessage = "";


		// サービスIDチェック
		String serviceId = (String)requestMap.get(JKKStrConst.SERVICE_ID);
		if (!JKKStrConst.SERVICE_ID_WSALE020.equals(serviceId))
		{
			returnCode = JKKStrConst.RETURN_CD_1000;
			returnMessage = JKKStrConst.RETURN_MESSAGE_SERVICEID_CHECK_ERROR;
		}

		if (!JKKApiCommon.isNull(returnCode))
		{
			// 処理応答電文(エラー)を取得
			jsonErrorResponse = JKKApiCommon.createJsonResponse(requestMap, returnCode, returnMessage).toString();
		}

		return jsonErrorResponse;
	}}
