/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JFUOrosiCheck
 *   ソースファイル名：JFUOrosiCheck.java
 *   作成者          ：富士通
 *   日付            ：2018年02月20日
 *＜機能概要＞
 *   新規系・変更系申込の設備卸チェック部品です。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v37.00      2018/02/20   FJ）美濃原  新規作成【ANK-3366-00-00】eo光設備卸対応
 *   v37.00      2018/05/29   FJ）美濃原  修正【IT1-2018-0000075】口座振替エラー
 *   v73.00      2024/11/15   FJ) 浅井    変更    【ANK-4427-00-00】NTT卸対応
**********************************************************************/
package eo.web.webview.common;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import com.fujitsu.futurity.web.x00.JCCBusinessException;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31SWebLog;
import com.fujitsu.futurity.web.x31.X31CMessageResult.X31CMessageMoreInfo;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;

/**
 * 新規系・変更系申込の設備卸チェック部品です。
 * <br>
 * @author 富士通
 */
public class JFUOrosiCheck
{

	/** 新規系・変更系申込の設備卸チェックコンポーネント部品マップキー名 */
	private static final String CC_TITLE_FUSV031501 = "FUSV031501CC";

	/** サービスID */
	private static final String SVC_ID_FUSV0315 = "FUSV0315";

	/** 現顧客情報一覧照会 */
	private static final String ECK0011B504 = "ECK0011B504";

	/** 機能コード */
	private static final String FUNC_CODE = "func_code";

	/**
	 * 新規系・変更系申込の設備卸チェック処理を行います。
	 * <br>
	 * @param bl 実行中のVIEWロジックインスタンス
	 */
	public static void checkOrosi(X31BWebBusinessLogic bl)
	{
		X31SWebLog.DEBUG_LOG.debug("■■■■■☆☆☆新規系・変更系申込の設備卸チェック処理実行開始！☆☆☆■■■■■");

		try
		{
			JFUOrosiCheck.callService(bl);
			X31SWebLog.DEBUG_LOG.debug("■■■■■☆☆☆新規系・変更系申込の設備卸チェック処理実行終了！☆☆☆■■■■■");
		}
		catch (JCCWebServiceException jwse)
		{
			X31CMessageResult msgRes = jwse.getMessageList();

			for (X31CMessageMoreInfo moreInfo : Arrays.asList(msgRes.getMessageMoreInfoList()))
			{
				// 利用サービスエラー
				if (String.valueOf(JPCModelConstant.RELATION_ERR).equals(moreInfo.getStatus()) && ECK0011B504.equals(moreInfo.getTemplateId())
						&& JFUStrConst.RELATION_CHECK_ITEM_SVC_KEI.equals(moreInfo.getItemId())
						&& JFUStrConst.RELATION_CHECK_ITEM_CHECK_ERR.equals(moreInfo.getItemCheckErr()))
				{
					X31SWebLog.DEBUG_LOG.debug("新規系・変更系申込の設備卸チェック【利用サービスエラー】");
					throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0101);
				}

				// 上記以外はシステムエラー
				X31SWebLog.DEBUG_LOG.debug("新規系・変更系申込の設備卸チェック【システムエラー】");
				throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0002);
			}
		}
	}

	/**
	 * 新規系・変更系申込の設備卸チェック処理を行います。
	 * サービス層にて、サービス判定チェックを行います。
	 * <br>
	 * @param bl 実行中のVIEWロジックインスタンス
	 * @param physicalScreenId 物理画面ID
	 */
	private static void callService(X31BWebBusinessLogic bl)
	{
		X31SDataBeanAccess commonInfoBean = bl.getCommonInfoBean();

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// ■SYSID
		String sysId = null;
		// 共有フォームBean.ＷＥＢ新規情報
		X31SDataBeanAccessArray webNewInfoBeanArray = commonInfoBean.getDataBeanArray(CommonInfoCFConst.WEB_NEW_INFO);
		if (webNewInfoBeanArray != null)
		{
			X31SDataBeanAccess webNewInfoBean = webNewInfoBeanArray.getDataBean(JFUStrConst.I_ZERO);
			// 共有フォームBean.ＷＥＢ新規情報.ｓｙｓＩＤ
			sysId = webNewInfoBean.sendMessageString(CommonInfoCFConst.SYSID_06, X31CWebConst.DATABEAN_GET_VALUE);
		}

		if (isNullOrEmpty(sysId))
		{
			// 共有フォームBean.ＷＥＢ変更情報. ＳＳＯ情報. ＳＹＳＩＤ
			sysId = JFUWebCommon.getDataBeanItemByPath(commonInfoBean, JFUWebCommon.SSO_INFO + JFUWebCommon.SEP_0 + CommonInfoCFConst.SYSID_21);
		}

		if (isNullOrEmpty(sysId))
		{
			// SYSID未取得は後続処理を実行せずに処理を抜ける。（既存ロジックで対応できているはず）
			// X31SWebLog.DEBUG_LOG.debug("新規系・変更系申込の設備卸チェック(SYSID取得)【利用制限エラー 】");
			// throw new JCCBusinessException(JFUStrConst.ERROR_CODE_0101);
			X31SWebLog.DEBUG_LOG.debug("新規系・変更系申込の設備卸チェック(SYSID取得不可)【チェック対象外】");
			return;
		}

		// 機能コード
		parentMap.put(FUNC_CODE, JPCModelConstant.FUNC_CD_1);
		// SYSID
		parentMap.put("key_sysid", sysId);

// ANK-4427-00-00 add start
		// 論理画面ＩＤ
		String screenId = JFUStrConst.EMPTY;
		if (!JFUWebCommon.isNull(commonInfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID,	X31CWebConst.DATABEAN_GET_VALUE)))
		{
			screenId = commonInfoBean.sendMessageString(
					CommonInfoCFConst.NEXT_SCREEN_ID,
					X31CWebConst.DATABEAN_GET_VALUE).substring(0, 8);
		}
		// screen_id
		parentMap.put("key_screenid", screenId);
// ANK-4427-00-00 add end

		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();

		inputMap.put(CC_TITLE_FUSV031501, parentMap);

		// サービスIDをparamにセット
		Map<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, SVC_ID_FUSV0315);

		// サービス呼び出し
		bl.invokeService(paramMap, inputMap, outputMap);
	}

	/**
	 * 値が設定されているか判定を行います。
	 * @param value 判定値
	 * @return true:未設定、false:設定
	 */
	private static boolean isNullOrEmpty(String value)
	{
		if (value == null || JFUStrConst.EMPTY.equals(value))
		{
			return true;
		}
		return false;
	}
}
