/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JFUGetManmosKanri
 *   ソースファイル名：JFUGetManmosKanri.java
 *   作成者          ：富士通
 *   日付            ：2018年08月29日
 *＜機能概要＞
 *   MT管理情報照会(MANMOS)部品です（View）。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v60.00      2022/06/20  FJ）美濃原  【ANK-4244-00-00】【eo定期】MT既設賃貸対応
 *   
**********************************************************************/
package eo.web.webview.common;

import static com.fujitsu.futurity.web.x31.X31SWebLog.DEBUG_LOG;

import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.web.x31.X31BWebBusinessLogic;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;

import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JKKCommonUtil;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.mapping.FUSV0337_FUSV0337OPDBMapper;

/**
 * MT管理情報照会(MANMOS)部品です。
 * <br>
 * @author 富士通
 */
public class JFUGetManmosKanri
{

	// ■サービス関係
	/** サービスID：FUSV0337 */
	private static final String USECASE_ID_FUSV0337 = "FUSV0337";

	/**
	 * MT管理情報照会(MANMOS)照会CCの結果をＭＡＮＭＯＳ管理情報リスト（連番取得用）Beanに保管する。
	 * @param bean マンション情報(一般、量販訪販Web) 又は 引越しNaviサービスフォームBean<br/>
	 *                         注）ＭＡＮＭＯＳ管理情報リスト、回線場所連番は同一項目名とする
	 * @param outputMap サービスIF結果
	 */
	@SuppressWarnings("unchecked")
	public static void setBeanManmosKnriInfoList(X31SDataBeanAccess bean, HashMap<String, Object> outputMap)
	{
		if (!outputMap.containsKey("JFUGetManmosKanriInfoCC"))
		{
			// 棟情報リスト 退避
			bean.sendMessageString(CommonInfoCFConst.TOU_INFO_LIST_16, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			// 部屋番号リスト 退避
			bean.sendMessageString(CommonInfoCFConst.RM_NO_LIST_16, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			// ＭＡＮＭＯＳ管理情報リスト（連番取得用）退避
			X31SDataBeanAccessArray knriInfoList = bean.getDataBeanArray(CommonInfoCFConst.MANMOS_KNRI_INFO_LIST);
			knriInfoList.clearArray();
			return;
		}

		HashMap parentMap = (HashMap)outputMap.get("JFUGetManmosKanriInfoCC");
		if (bean != null)
		{
			String tou_info_list = JFUStrConst.EMPTY;
			String rm_no_list = JFUStrConst.EMPTY;
			List<HashMap<String, String>> manmos_knri_info_list = null;
			if (parentMap != null)
			{
				tou_info_list = JFUWebCommon.nvl((String)parentMap.get("tou_info_list"), JFUStrConst.EMPTY);
				rm_no_list = JFUWebCommon.nvl((String)parentMap.get("rm_no_list"), JFUStrConst.EMPTY);
				manmos_knri_info_list = (List<HashMap<String, String>>)parentMap.get("manmos_knri_info_list");
			}
			// 棟情報リスト 退避
			bean.sendMessageString(CommonInfoCFConst.TOU_INFO_LIST_16, X31CWebConst.DATABEAN_SET_VALUE, tou_info_list);
			// 部屋番号リスト 退避
			bean.sendMessageString(CommonInfoCFConst.RM_NO_LIST_16, X31CWebConst.DATABEAN_SET_VALUE, rm_no_list);

			// ＭＡＮＭＯＳ管理情報リスト（連番取得用）退避
			X31SDataBeanAccessArray knriInfoList = bean.getDataBeanArray(CommonInfoCFConst.MANMOS_KNRI_INFO_LIST);
			if (knriInfoList != null)
			{
				knriInfoList.clearArray();
			}

			// ＭＡＮＭＯＳ管理情報リストの要素数分ループする
			if (manmos_knri_info_list != null)
			{
				for (HashMap<String, String> childMap : manmos_knri_info_list)
				{
					X31SDataBeanAccess childBean = knriInfoList.addDataBean();
					childBean.sendMessageString(CommonInfoCFConst.TOU_NO_70, X31CWebConst.DATABEAN_SET_VALUE, childMap.get("tou_no"));
					childBean.sendMessageString(CommonInfoCFConst.RM_NO_70, X31CWebConst.DATABEAN_SET_VALUE, childMap.get("rm_no"));
					childBean.sendMessageString(CommonInfoCFConst.SEQ_70, X31CWebConst.DATABEAN_SET_VALUE, childMap.get("seq"));
					childBean.sendMessageString(CommonInfoCFConst.CCT_SET_CD_70, X31CWebConst.DATABEAN_SET_VALUE, childMap.get("cct_set_cd"));
				}
			}
		}
	}

	/**
	 * ＭＡＮＭＯＳ管理情報リスト（連番取得用）Beanから、選択された部屋情報を取得する。
	 * @param mansionInfoBean マンション情報(一般、量販訪販Web) 又は 引越しNaviサービスフォームBean<br/>
	 *                         注）ＭＡＮＭＯＳ管理情報リスト、回線場所連番は同一項目名とする。
	 * @param inTou 棟
	 * @param inRmNo 部屋番号
	 * @return 棟・部屋番号が指定された場合に、該当部屋の情報を返却
	 */
	public static HashMap<String, String> getManmosKnriInfoFromBean(X31SDataBeanAccess mansionInfoBean, String inTou, String inRmNo)
	{
		if (mansionInfoBean == null)
		{
			return new HashMap<String, String>();
		}
		if (JFUWebCommon.isNull(inTou) && JFUWebCommon.isNull(inRmNo))
		{
			return new HashMap<String, String>();
		}

		// ＭＡＮＭＯＳ管理情報リスト
		X31SDataBeanAccessArray knriInfoList = mansionInfoBean.getDataBeanArray(CommonInfoCFConst.MANMOS_KNRI_INFO_LIST);
		// マンション情報 回線場所連番（初期化）
		mansionInfoBean.sendMessageString(CommonInfoCFConst.KAISEN_PLACE_RENBAN_16, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);

		if (knriInfoList != null)
		{
			for (int i = 0; i < knriInfoList.getCount(); i++)
			{
				X31SDataBeanAccess knriInfoBean = knriInfoList.getDataBean(i);

				// 部屋情報を取得
				String tou_no = knriInfoBean.sendMessageString(CommonInfoCFConst.TOU_NO_70, X31CWebConst.DATABEAN_GET_VALUE);
				String rm_no = knriInfoBean.sendMessageString(CommonInfoCFConst.RM_NO_70, X31CWebConst.DATABEAN_GET_VALUE);
				String seq = knriInfoBean.sendMessageString(CommonInfoCFConst.SEQ_70, X31CWebConst.DATABEAN_GET_VALUE);
				String cct_set_cd = knriInfoBean.sendMessageString(CommonInfoCFConst.CCT_SET_CD_70, X31CWebConst.DATABEAN_GET_VALUE);
				if (tou_no.equals(inTou) && rm_no.equals(inRmNo))
				{
					HashMap<String, String> result = new HashMap<String, String>();
					result.put("tou_no", tou_no);
					result.put("rm_no", rm_no);
					result.put("seq", seq);
					result.put("cct_set_cd", cct_set_cd);
					// マンション情報 回線場所連番
					mansionInfoBean.sendMessageString(CommonInfoCFConst.KAISEN_PLACE_RENBAN_16, X31CWebConst.DATABEAN_SET_VALUE, seq);
					return result;
				}
			}
		}
		return new HashMap<String, String>();
	}

	/**
	 * MT管理情報照会(MANMOS)照会CCの結果から、選択された部屋情報を取得する。
	 * 
	 * <br>
	 * @param paramMap MT管理情報照会（ＭＡＮＭＯＳ）
	 * @return 部屋情報
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public static HashMap<String, Object> getManmosKnriInfoFromCC(HashMap<String, Object> paramMap) throws Exception
	{
		if (paramMap == null)
		{
			return new HashMap<String, Object>();
		}

		HashMap<String, Object> resutlMap = new HashMap<String, Object>();
		boolean isExists = false;
		String cfm_rslt_cd = JFUStrConst.EMPTY;
		String sekou_ng_flg = JFUStrConst.EMPTY;
		String cct_set_cd = JFUStrConst.EMPTY;

		List<HashMap<String, String>> manmos_knri_info_list = null;
		manmos_knri_info_list = (List<HashMap<String, String>>)paramMap.get("manmos_knri_info_list");

		if (manmos_knri_info_list != null)
		{
			String select_tou_no = (String)paramMap.get("select_tou_no");
			String select_rm_no = (String)paramMap.get("select_rm_no");
			// リストの要素数分ループする
			for (HashMap<String, String> childMap : manmos_knri_info_list)
			{
				String checkTouNo = childMap.get("tou_no");
				if (JKKCommonUtil.judgeMinusFullChar(checkTouNo))
				{
					checkTouNo = JFUStrConst.EMPTY;
				}
				if (checkTouNo.equals(select_tou_no) && childMap.get("rm_no").equals(select_rm_no))
				{
					isExists = true;
					cfm_rslt_cd = JFUWebCommon.nvl(childMap.get("cfm_rslt_cd"), JFUStrConst.EMPTY);
					sekou_ng_flg = JFUWebCommon.nvl(childMap.get("sekou_ng_flg"));
					cct_set_cd = JFUWebCommon.nvl(childMap.get("cct_set_cd"));
					break;
				}
			}
		}

		resutlMap.put("exists", isExists);
		resutlMap.put("cfm_rslt_cd", cfm_rslt_cd);
		resutlMap.put("sekou_ng_flg", sekou_ng_flg);
		resutlMap.put("cct_set_cd", cct_set_cd);
		return resutlMap;
	}

	/**
	 * MT管理情報照会(MANMOS)照会CCの結果をBeanに保管する。<br>
	 * ※サービス追加用
	 * 
	 * @param bean マンション情報(一般、量販訪販Web)<br/>
	 *                         注）ＭＡＮＭＯＳ管理情報リスト、回線場所連番は同一項目名とする
	 * @param outputMap サービスIF結果
	 */
	public static void setBeanManmosKnriInfoHeya(X31SDataBeanAccess bean, HashMap<String, Object> outputMap)
	{

		// コンセント設置内容（初期値設定）部屋単位
		bean.sendMessageString(CommonInfoCFConst.CCT_SET_CD_16, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// ＭＡＮＭＯＳ管理工事フラグ（初期値設定）部屋単位
		bean.sendMessageString(CommonInfoCFConst.MANMOS_KNRI_KOJI_FLG_16, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		// ＭＡＮＭＯＳ管理情報リスト（初期値設定）
		bean.getDataBeanArray(CommonInfoCFConst.MANMOS_KNRI_INFO_LIST).clearArray();

		if (!outputMap.containsKey("JFUGetManmosKanriInfoCC"))
		{
			return;
		}

		HashMap parentMap = (HashMap)outputMap.get("JFUGetManmosKanriInfoCC");
		String cct_set_cd = JFUStrConst.EMPTY;
		if (bean != null)
		{
			List<HashMap<String, String>> manmos_knri_info_list = null;
			if (parentMap != null)
			{
				manmos_knri_info_list = (List<HashMap<String, String>>)parentMap.get("manmos_knri_info_list");
			}

			// ＭＡＮＭＯＳ管理情報リスト
			// 機器情報リスト(ネット)の要素数分ループする（1件のみのはず）
			if (manmos_knri_info_list != null)
			{
				for (HashMap<String, String> childMap : manmos_knri_info_list)
				{
					cct_set_cd = JFUWebCommon.nvl(childMap.get("cct_set_cd"));
					bean.sendMessageString(CommonInfoCFConst.CCT_SET_CD_16, X31CWebConst.DATABEAN_SET_VALUE, cct_set_cd);
				}
			}
		}
	}

	/**
	 * ＭＡＮＭＯＳ管理物件取得<br>
	 * ※低価格マンション用
	 * 
	 * <br>
	 * @param bl X31BWebBusinessLogic
	 * @param beans サービスフォームBean、共有フォームBean.WEB新規情報.マンション情報
	 */
	public static void searchSeqLpms(X31BWebBusinessLogic bl, X31SDataBeanAccess[] beans)
	{
		// 低価格マンションで使用
		DEBUG_LOG.info("★★★JFUGetManmosKanri search開始★★★");

		try
		{
			// 検索処理呼び出し
			searchLpms(bl, beans);
		}
		catch (Exception e)
		{
			DEBUG_LOG.info("※検索処理中にエラー発生※");

			// 検索結果なしとして扱う
			// 棟情報リスト 退避
			beans[1].sendMessageString(CommonInfoCFConst.TOU_INFO_LIST_16, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			// 部屋番号リスト 退避
			beans[1].sendMessageString(CommonInfoCFConst.RM_NO_LIST_16, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
			// ＭＡＮＭＯＳ管理情報リスト（連番取得用）退避
			X31SDataBeanAccessArray knriInfoList = beans[1].getDataBeanArray(CommonInfoCFConst.MANMOS_KNRI_INFO_LIST);
			knriInfoList.clearArray();
		}

		DEBUG_LOG.info("★★★JFUGetManmosKanri search終了★★★");
	}

	/**
	 * 低価格マンションのMT管理情報照会(MANMOS)照会検索処理。
	 * 
	 * <br>
	 * @param beans サービスフォームBean、共有フォームBean.WEB新規情報.マンション情報
	 */
	private static void searchLpms(X31BWebBusinessLogic bl, X31SDataBeanAccess[] beans)
	{
		// ユースケースIDを格納
		HashMap<String, String> paramMap = new HashMap<String, String>();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_FUSV0337);

		// DBMapper呼び出し
		FUSV0337_FUSV0337OPDBMapper mapper = new FUSV0337_FUSV0337OPDBMapper();

		// ●上りマッピング
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		// 住所検索情報一覧照会
		mapper.setManmosKanriInfoLpms(beans, dataMap, JPCModelConstant.FUNC_CD_1);

		// 検索結果格納用マップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		// 光配線１Ｇのみフラグ＝光化マンションフラグ
		String hikarikaMansFlg = beans[1].sendMessageString(CommonInfoCFConst.HHS_1GONLY_FLG_16, X31CWebConst.DATABEAN_GET_VALUE);

		// ●サービスの呼び出し
		bl.invokeService(paramMap, dataMap, outputMap);

		// ●下りマッピング
		setBeanManmosKnriInfoList(beans[1], outputMap);

		if (JFUStrConst.HHS_1GONLY_FLG_1.equals(hikarikaMansFlg))
		{
			String tou = beans[1].sendMessageString(CommonInfoCFConst.TOU_INFO_16, X31CWebConst.DATABEAN_GET_VALUE);
			String rmno = beans[1].sendMessageString(CommonInfoCFConst.RM_NO_16, X31CWebConst.DATABEAN_GET_VALUE);
			HashMap<String, String> resultMap = getManmosKnriInfoFromBean(beans[1], tou, rmno);

			beans[1].sendMessageString(CommonInfoCFConst.KAISEN_PLACE_RENBAN_16, X31CWebConst.DATABEAN_SET_VALUE, resultMap.get("seq"));
			beans[1].sendMessageString(CommonInfoCFConst.CCT_SET_CD_16, X31CWebConst.DATABEAN_SET_VALUE, resultMap.get("cct_set_cd"));
			// ＭＡＮＭＯＳ管理工事フラグ（初期値設定）部屋単位
			beans[1].sendMessageString(CommonInfoCFConst.MANMOS_KNRI_KOJI_FLG_16, X31CWebConst.DATABEAN_SET_VALUE, JFUStrConst.EMPTY);
		}
	}

}
