/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKA186SFLogic
*	ソースファイル名：KKA186SFLogic.java
*	作成者			：FJ)柳
*	日付			：2018年03月26日
*＜機能概要＞
*   認証IDパスワード変更連携(卸先事業者)(API)のビューロジックです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v37.00.00	2018/03/26	FJ)柳		【ANK-3366-00-00】eo光設備卸対応
**********************************************************************/
package eo.web.webview.KKA186SF;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONException;
import org.json.JSONObject;

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.common.util.JKKCommonUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.common.JKKApiCommon;
import eo.web.webview.mapping.KKSV0901_KKSV0901OPDBMapper;

/**
 * KKA186のビューロジックです。<p>
 * <br>
 * @author FJ)柳
 */
@SuppressWarnings("serial")
public class KKA186SFLogic extends JCCWebBusinessLogic
{
	/** 変更区分：1(変更) */
	private static final Object CATEGORY_OF_CHANGE_CHG = "1";
	/** 変更区分：2(初期化) */
	private static final Object CATEGORY_OF_CHANGE_SHKKA = "2";
	
	/**
	 * 認証IDパスワード変更連携(卸先事業者)処理です。
	 * <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());
			
			// 共有フォームBean取得
			X31SDataBeanAccess commonBean = super.getCommonInfoBean();
			
			// ------------------------------
			// システム提供時間外チェック
			// ------------------------------
			// 業務規制チェックエラー
			if (!JKKApiCommon.checkRequestRestriction(commonBean))
			{
				// 処理応答電文(エラー)を取得
				jsonResponse = JKKApiCommon.createJsonResponse(requestMap,
						JKKStrConst.RETURN_CD_8000, JKKStrConst.RETURN_MESSAGE_SYSTEM_TIME_OUT).toString();
				
				// 応答電文に設定
				bean.sendMessageString(KKA186SFConst.RSP_MSG, X31CWebConst.DATABEAN_SET_VALUE, JKKApiCommon.getResponseMsg(jsonResponse));
				
				return true;
			}
			
			// --------------------
			// パラメータチェック
			// --------------------
			jsonResponse = checkParameter(requestMap);
			
			// パラメータチェックエラー
			if (!JKKApiCommon.isNull(jsonResponse))
			{
				// 応答電文に設定
				bean.sendMessageString(KKA186SFConst.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, "KKSV0901");
			
			HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
			HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
			
			KKSV0901_KKSV0901OPDBMapper mapper = new KKSV0901_KKSV0901OPDBMapper();
			
			// 上りマッピング
			mapper.setKKSV090101CC(requestMap, inputMap, JPCModelConstant.FUNC_CD_1);
			
			// サービス呼び出し
			invokeService(paramMap, inputMap, outputMap);
			
			Map<String, Object> responseMap = new HashMap<String, Object>();
			
			// 下りマッピング
			mapper.getKKSV090101CC(responseMap, outputMap);
			
			// -------------------------
			// サービス処理結果の取得
			// -------------------------
			// 共通項目を設定したJSONオブジェクトを生成する
			JSONObject jsonResObj = JKKApiCommon.createJsonResponse(requestMap, (String)responseMap.get("returnCode"), (String)responseMap.get("returnMessage"));
			
			// 個別項目設定
			if (JKKStrConst.CHECK_OK.equals((String)responseMap.get("returnCode")))
			{
				jsonResObj.put("commonKey", JKKApiCommon.getJsonValue(requestMap.get("commonKey")));
			}
			
			jsonResponse = jsonResObj.toString();
		}
		catch (Exception e)
		{
			// 例外トレースのログ出力
			JKKApiCommon.printDebugLog(e);
			
			// 処理応答電文(エラー)を取得
			jsonResponse = JKKApiCommon.createJsonResponse(requestMap,
					JKKStrConst.RETURN_CD_9000, JKKStrConst.RETURN_MESSAGE_SYSTEM_ERROR).toString();
		}
		
		// 応答電文に設定
		bean.sendMessageString(KKA186SFConst.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が規定の値でない場合、コード値不整合チェックエラー
		if (!JKKStrConst.SERVICE_ID_WSALE022.equals((String)requestMap.get("serviceID")))
		{
			returnCode = JKKStrConst.RETURN_CD_1000;
			returnMessage = JKKStrConst.RETURN_MESSAGE_SERVICEID_CHECK_ERROR;
		}
		// 変更区分が"1"(変更)、"2"(初期化)のいずれでもない場合、コード値不整合チェックエラー
		else if (!CATEGORY_OF_CHANGE_CHG.equals((String)requestMap.get("categoryOfChange")) &&
				!CATEGORY_OF_CHANGE_SHKKA.equals((String)requestMap.get("categoryOfChange")))
		{
			returnCode = JKKStrConst.RETURN_CD_1000;
			returnMessage = "「変更区分」コード値不整合チェックエラー";
		}
		
		// --------------------
		// 単項目関連チェック
		// --------------------
		// 変更区分が"1"(変更) かつ 変更後認証IDパスワードが未設定の場合、条件付き必須入力チェックエラー
		if (CATEGORY_OF_CHANGE_CHG.equals((String)requestMap.get("categoryOfChange")) &&
				JKKCommonUtil.isNull((String)requestMap.get("authenticationIdPassword")))
		{
			returnCode = "1050";
			returnMessage = "条件付き必須チェック(変更後認証IDパスワード)エラー";
		}
		
		if (!JKKApiCommon.isNull(returnCode))
		{
			// 処理応答電文(エラー)を取得
			jsonErrorResponse = JKKApiCommon.createJsonResponse(requestMap, returnCode, returnMessage).toString();
		}
		
		return jsonErrorResponse;
	}
}
