/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0246_KKSV0246OPDBMapper
*	ソースファイル名：KKSV0246_KKSV0246OPDBMapper.java
*	作成者			：Fujitsu
*	日付			：2011年08月30日
*＜機能概要＞
*	BP（機器提供サービス契約機器変更登録処理サービス）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/30	Fujitsu		新規作成
*	v3.00.00	2012/03/19  F)今岡		巻取り@サーバ関連チェック対応
*	v4.00.00	2012/08/08	FJ）古田	【ANK-0398-00-00】住所管理に伴う「例外登録」の管理追加対応
*	v5.00.00	2013/03/14	FJ）古田	【IT1-2013-0000466】回線データの排他エラー
*	v18.00.00	2015/08/14	FJ)阪口		【ANK-2631-00-00】ワンストップ案件（ＳＴＥＰ１）※koptWebBからkoptWebAへコピー
*	v25.00.00	2016/05/09	FJ)黒田		【ANK-2530-00-00】TV新コースおよびVOD導入
*	v25.00.01	2016/05/23	FJ)田口		【ANK-2530-00-00】TV新コースおよびVOD導入 ※koptWebBからkoptWebAへコピー
*   v39.00.00	2018/09/18	FJ)謝		【ANK-3488-00-00】４KSTB（ACASチップ）導入対応
*   v39.00.00	2018/10/02	FJ)謝		【ANK-3488-00-00】４KSTB（ACASチップ）導入対応 ※koptWebBとの資産同期
*
**********************************************************************/
package eo.web.webview.mapping;

import java.util.ArrayList;
import java.util.HashMap;

import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;

import eo.common.constant.JKKStrConst;
import eo.web.webview.KKA15401SF.KKW03301SFConst;

/**
 * DataBean-BPマッピングをする。
 * @author 909141
 */
public class KKSV0246_KKSV0246OPDBMapper
{
	
	/** 工事CC連携用データ格納キー */
	private static final String KOJI_RENKEI_MAP_KEY = "kojifixtext";
	
	/**
	 * コンストラクタ
	 */
	public KKSV0246_KKSV0246OPDBMapper()
	{
	}
	
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：機器提供サービス契約機器変更情報
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return HashMap
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV024601CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		if (bean == null)
		{
			return null;
		}
		
		if (bean.length != 1)
		{
			return null;
		}
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		
		X31SDataBeanAccess beanTemp = bean[0];
		// 一覧で選択されたリスト
		X31SDataBeanAccess selectBean = getSelectList(beanTemp);
		
		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		
		// 機器提供サービス契約情報サーバーチェックCC
		// チェック画面ＩＤ
		parentMap.put("check_scrn_id", "KKW035");

		// サービス契約番号
		parentMap.put("svc_kei_no", beanTemp.sendMessageString(KKW03301SFConst.KEY_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		// 異動区分
		parentMap.put("ido_div", beanTemp.sendMessageString(KKW03301SFConst.IDO_KBN, X31CWebConst.DATABEAN_GET_VALUE));
		// 機器送付先名
		parentMap.put("kiki_sohus_nm", beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_SHS_NM, X31CWebConst.DATABEAN_GET_VALUE));
		// 機器送付先カナ名
		parentMap.put("kiki_sohus_kana", beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_SHS_KANA, X31CWebConst.DATABEAN_GET_VALUE));
		// 機器送付先住所コード
		String jyusyhoCd = beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_AD_CD1, X31CWebConst.DATABEAN_GET_VALUE)
							+ beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_AD_CD2, X31CWebConst.DATABEAN_GET_VALUE)
							+ beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_AD_CD3, X31CWebConst.DATABEAN_GET_VALUE)
							+ beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_AD_CD4, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("kiki_sohus_ad_cd", jyusyhoCd);
		// 機器送付先郵便番号
		String pcdCd = beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_PCD_KAMI3, X31CWebConst.DATABEAN_GET_VALUE)
						+ beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_PCD_SHIMO4, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("kiki_sohus_pcd", pcdCd);
		// 機器送付先都道府県名
		parentMap.put("kiki_sohus_state_nm", beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_STATE, X31CWebConst.DATABEAN_GET_VALUE));
		// 機器送付先市区町村名
		parentMap.put("kiki_sohus_city_nm", beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_CITY, X31CWebConst.DATABEAN_GET_VALUE));
		// 機器送付先大字通称名
		parentMap.put("kiki_sohus_oaztsu_nm", beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_OAZTSU, X31CWebConst.DATABEAN_GET_VALUE));
		// 機器送付先字丁目名
		parentMap.put("kiki_sohus_azcho_nm", beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_AZCHO, X31CWebConst.DATABEAN_GET_VALUE));
		// 機器送付先番地号
		parentMap.put("kiki_sohus_bnchigo", beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_BNCHIGO, X31CWebConst.DATABEAN_GET_VALUE));
		// 機器送付先住所補記・建物名
		parentMap.put("kiki_sohus_adrttm", beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_ADRTTM, X31CWebConst.DATABEAN_GET_VALUE));
		// 機器送付先住所補記・部屋番号
		parentMap.put("kiki_sohus_adrrm", beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_ADRRM, X31CWebConst.DATABEAN_GET_VALUE));
		// 機器送付先電話番号
		parentMap.put("kiki_sohus_telno", beanTemp.sendMessageString(KKW03301SFConst.KIKI_SOFU_TELNO, X31CWebConst.DATABEAN_GET_VALUE));
		// 配送依頼指定年月日
		parentMap.put("haiso_req_shitei_ymd", getKkshkaStiYmd(beanTemp));
		// 機器型式コードを取得
		parentMap.put("taknkiki_model_cd", getComboItemData(beanTemp, KKW03301SFConst.KIKI_MODEL, KKW03301SFConst.KIKI_MODEL_CD_05));
		// 基準日
		parentMap.put("std_ymd", beanTemp.sendMessageString(KKW03301SFConst.UNYO_YMD, X31CWebConst.DATABEAN_GET_VALUE));
		// 配送ステータス
		parentMap.put("haiso_stat", beanTemp.sendMessageString(KKW03301SFConst.HAISO_STAT, X31CWebConst.DATABEAN_GET_VALUE));
		// 配送区分コード
		parentMap.put("haiso_div_cd", beanTemp.sendMessageString(KKW03301SFConst.HAISO_DIV, X31CWebConst.DATABEAN_GET_VALUE));
		// 販売種別コードを取得
		parentMap.put("hambai_sbt", getComboItemData(beanTemp, KKW03301SFConst.HAMBAI_SBT, KKW03301SFConst.CD_DIV_CD_06));
		
		// 建物名（倉庫）
		String[] arrSokoInfo = getSplitSokoInfo(getComboItemData(beanTemp, KKW03301SFConst.SOKO_INFO, KKW03301SFConst.SOKO_CD_08));
		// 管理場所識別コード
		parentMap.put("kriplace_skcd", arrSokoInfo[0]);
		// 管理場所コード(建物)
		parentMap.put("key_knri_plc_cd", arrSokoInfo[1]);
		
		// 機器提供種別コード
		parentMap.put("kktk_sbt_cd", getComboItemData(beanTemp, KKW03301SFConst.TK_SBT, KKW03301SFConst.CD_DIV_CD_06));
		// 更新年月日時分秒（サービス契約）
		parentMap.put("upd_dtm_svc_kei", beanTemp.sendMessageString(KKW03301SFConst.UPD_DTM_SVC_KEI, X31CWebConst.DATABEAN_GET_VALUE));
		/* ++++++++++ v5.00.00 変更開始 ++++++++++ */
		// 更新年月日時分秒（サービス契約回線内訳）
		parentMap.put("upd_dtm_svc_kei_kaisen_ucwk", beanTemp.sendMessageString(KKW03301SFConst.UPD_DTM_SVC_KEI_KAISEN_UCWK, X31CWebConst.DATABEAN_GET_VALUE));
		/* ++++++++++ v5.00.00 変更完了 ++++++++++ */
		// 機器提供サービス契約番号
		parentMap.put("kktk_svc_kei_no", beanTemp.sendMessageString(KKW03301SFConst.KKTK_SVC_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
		// 配送方法コード
		parentMap.put("haiso_way_cd", beanTemp.sendMessageString(KKW03301SFConst.HAISO_WAY_CD, X31CWebConst.DATABEAN_GET_VALUE));
		// 機器製造番号
		parentMap.put("kiki_seizo_no", beanTemp.sendMessageString(KKW03301SFConst.KIKI_SEIZO_NO, X31CWebConst.DATABEAN_GET_VALUE));
		// 機器送料有無
		parentMap.put("kiki_soryo_um", getComboItemData(beanTemp, KKW03301SFConst.KIKI_SOURYO_UM, KKW03301SFConst.CD_DIV_CD_06));
		// 機器付加情報コード
		parentMap.put("kiki_huka_info_cd", getComboItemData(beanTemp, KKW03301SFConst.HUKA_INFO, KKW03301SFConst.CD_DIV_CD_06));
		parentMap.put(KOJI_RENKEI_MAP_KEY, KOJI_RENKEI_MAP_KEY);
		// 機器送付先住所手動入力フラグ
		parentMap.put("kiki_shs_ad_man_input_flg", getCheckBoxData(beanTemp, KKW03301SFConst.KIKI_SOFU_REGAI));
		// 返却日
		parentMap.put("henkyaku_ymd", selectBean.sendMessageString(KKW03301SFConst.HMPIN_KURAIRE_YMD_01, X31CWebConst.DATABEAN_GET_VALUE));

		// ＯＰＭＳルータ種別コード
		parentMap.put("opms_router_kind_cd", getSelectComboData(beanTemp,
						KKW03301SFConst.KIKI_MODEL, KKW03301SFConst.KIKI_MODEL_SELECT_INDEX_05, KKW03301SFConst.OPMS_ROUTER_KIND_CD_LIST_05));
		

		// 工事会社コード
		String kojiCompCd = beanTemp.sendMessageString(KKW03301SFConst.KOJI_COMP_CD_CHILD, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("koji_comp_cd", kojiCompCd);
		//工事案件番号
		parentMap.put("kojiak_no", getComboItemData(beanTemp, KKW03301SFConst.KJ_ANKEN_NO_CHILD, KKW03301SFConst.KJ_ANKEN_NO_07));
		//配送作成済フラグ
		String haisoSakseiZumiFlg = getSelectComboData(beanTemp, KKW03301SFConst.KJ_ANKEN_NO_CHILD, KKW03301SFConst.KJ_ANKEN_SELECT_INDEX_07,
																								KKW03301SFConst.HAISO_SAKSEI_ZUMI_FLG_LIST_07);
		parentMap.put("haiso_saksei_zumi_flg", haisoSakseiZumiFlg);

		// ＳＴＢ機器提供サービスコード
		parentMap.put("stb_kktk_svc_cd", beanTemp.sendMessageString(KKW03301SFConst.STB_KKTK_SVC_CD, X31CWebConst.DATABEAN_GET_VALUE));
		// ＢＣＡＳ機器提供サービスコード
		parentMap.put("bcas_kktk_svc_cd", beanTemp.sendMessageString(KKW03301SFConst.BCAS_KKTK_SVC_CD, X31CWebConst.DATABEAN_GET_VALUE));
		// ＣＣＡＳ機器提供サービスコード
		parentMap.put("ccas_kktk_svc_cd", beanTemp.sendMessageString(KKW03301SFConst.CCAS_KKTK_SVC_CD, X31CWebConst.DATABEAN_GET_VALUE));
		// ＳＴＢ宅内機器種別コード
		parentMap.put("tk_sbt_cd_stb", beanTemp.sendMessageString(KKW03301SFConst.TKNKIKI_SBT_CD_STB, X31CWebConst.DATABEAN_GET_VALUE));
		//ＣＣＡＳ宅内機器種別コード
		parentMap.put("tk_sbt_cd_ccas", beanTemp.sendMessageString(KKW03301SFConst.TKNKIKI_SBT_CD_CCAS, X31CWebConst.DATABEAN_GET_VALUE));
		//ＢＣＡＳ宅内機器種別コード
		parentMap.put("tk_sbt_cd_bcas", beanTemp.sendMessageString(KKW03301SFConst.TKNKIKI_SBT_CD_BCAS, X31CWebConst.DATABEAN_GET_VALUE));
		//宅内機器種別コード
		parentMap.put("tk_sbt_cd", getSelectComboData(beanTemp, KKW03301SFConst.KIKI_MODEL, 
										KKW03301SFConst.KIKI_MODEL_SELECT_INDEX_05, KKW03301SFConst.KIKI_SBT_05));
		//ＢＢＲ機器提供サービスコード
		parentMap.put("bbr_kktk_svc_cd", beanTemp.sendMessageString(KKW03301SFConst.BBR_KKTK_SVC_CD, X31CWebConst.DATABEAN_GET_VALUE));
		//ＯＰＭＳルータ種別ベーシックルータ
		parentMap.put("opms_rout_sbt_basic", beanTemp.sendMessageString(KKW03301SFConst.OPMS_ROUT_SBT_BASIC, X31CWebConst.DATABEAN_GET_VALUE));
		
		// 異動理由コード
		X31SDataBeanAccessArray custarraybean = beanTemp.getDataBeanArray(KKW03301SFConst.KTGI_CUST_KEI_HKTGI_LIST);
		ArrayList idoRsnList = new ArrayList();
		if (custarraybean != null && custarraybean.getCount() > 0)
		{
			for (int i = 0; i < custarraybean.getCount(); i++)
			{
				X31SDataBeanAccess subbean = custarraybean.getDataBean(i);
				int count = (Integer)subbean.sendMessage(KKW03301SFConst.HKTGI_IDO_RSN_CD_04, X31CWebConst.DATABEAN_GET_COUNT);
				for (int j = 0; j < count; j++)
				{
					HashMap idoRsnMap = new HashMap();
					// 異動理由コード
					if (subbean != null)
					{
						idoRsnMap.put("ido_rsn_cd", subbean.sendMessageString(KKW03301SFConst.HKTGI_IDO_RSN_CD_04, X31CWebConst.DATABEAN_GET_VALUE, j));
					}
					idoRsnList.add(idoRsnMap);
				}
			}
		}
		
		parentMap.put("EKK1091D010CBSMsg1List", idoRsnList);
// ANK-3488-00-00 ADD START
		// マンション物件コードが"001"(マンション)の場合
		if (JKKStrConst.MANSION_BUKKEN_CD_MANSION.equals(beanTemp.sendMessageString(KKW03301SFConst.MANSION_BUKKEN_CD, X31CWebConst.DATABEAN_GET_VALUE)))
		{
			// 提供方式契約番号
			parentMap.put("tk_hoshiki_kei_no", beanTemp.sendMessageString(KKW03301SFConst.TK_HOSHIKI_KEI_NO, X31CWebConst.DATABEAN_GET_VALUE));
			// 宅内機器型式コード（ＶＯＮＵ）
			parentMap.put("taknkiki_model_cd_vonu", "");
		}
		// マンション物件コードが"001"(マンション)以外の場合
		else
		{
			// 提供方式契約番号
			parentMap.put("tk_hoshiki_kei_no", "");
			// 宅内機器型式コード（ＶＯＮＵ）
			parentMap.put("taknkiki_model_cd_vonu", beanTemp.sendMessageString(KKW03301SFConst.TAKNKIKI_MODEL_CD_VONU, X31CWebConst.DATABEAN_GET_VALUE));
		}
// ANK-3488-00-00 ADD END
		
		outputMap.put("KKSV024601CC", parentMap);
		return outputMap;
	}
	
// ANK-2530-00-00 ADD START
	/**
	 * 上りマッピングをする
	 * @param bean　[0]：機器提供サービス契約一覧
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV024613SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
		
		if(bean == null){
			return null;
		}
		
		if(bean.length != 1){
			return null;
		}

		X31SDataBeanAccess beanTemp = bean[0];

		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 機器型式コード → 宅内機器型式一意照会マップ.ＫＥＹ＿宅内機器型式コード
		parentMap.put("key_taknkiki_model_cd", getComboItemData(beanTemp, KKW03301SFConst.KIKI_MODEL, KKW03301SFConst.KIKI_MODEL_CD_05));
		
		outputMap.put("KKSV024613SC", parentMap);
						
		return outputMap;
	}
// ANK-2530-00-00 ADD END
	
	/**
	 * チェックボックスの値を変換
	 * 
	 * @param bean 画面データ
	 * @param itemId 対象とするコンボボックスの項目ID
	 * @return チェックボックスの値
	 */
	private String getCheckBoxData(X31SDataBeanAccess bean, String itemId)
	{
		String retStr = "0";
		
		boolean checkBox = bean.sendMessageBoolean(KKW03301SFConst.KIKI_SOFU_REGAI, X31CWebConst.DATABEAN_GET_VALUE);
		
		if(checkBox)
		{
			retStr = "1";
		}
		
		return retStr;
		
	}
	
	/**
	 * 画面表示した一覧から選択した一行を取得します
	 * @param bean
	 * @return 選択行
	 */
	private X31SDataBeanAccess getSelectList(X31SDataBeanAccess bean)
	{
		// 画面選択された行番号を取得する。
		String selectRadio = bean.sendMessageString(KKW03301SFConst.SELECTROW, X31CWebConst.DATABEAN_GET_VALUE);
		// 画面一覧から選択された行を取得する。
		X31SDataBeanAccessArray service_list = bean.getDataBeanArray(KKW03301SFConst.SERVICE_LIST);
		return service_list.getDataBean(Integer.parseInt(selectRadio));
	}
	
	/**
	 * コンボボックスのコードと名称領域に設定している値を取得する。
	 * 
	 * @param subbean 画面データ
	 * @param comboItemId 対象プルダウン名
	 * @param itemNme 取得対象項目名
	 * @return 
	 */
	private String getComboItemData(X31SDataBeanAccess bean, String comboItemId, String itemNme)
	{
		
		X31SDataBeanAccess comboItem = bean.getDataBeanArray(comboItemId).getDataBean(0);
		
		return getNullToStr(comboItem.sendMessageString(itemNme, X31CWebConst.DATABEAN_GET_VALUE));
		
	}
	
	/**
	 * コンボボックスのコードを取得する。
	 * 
	 * @param subbean 画面データ
	 * @param comboItemId 対象とするコンボボックスの項目ID
	 * @param selIdxId 選択行インデックスが格納されている項目ID
	 * @param selCodeId 選択されたコードを取得する項目ID
	 * @return コード
	 */
	private String getSelectComboData(X31SDataBeanAccess bean, String comboItemId, String selIdxId, String selCodeId)
	{
		
		// コンボボックスのデータタイプを取得する。
		X31SDataBeanAccess subbean = bean.getDataBeanArray(comboItemId).getDataBean(0);
		String selectedIndex = subbean.sendMessageString(selIdxId, X31CWebConst.DATABEAN_GET_VALUE);
		if (selectedIndex == null || "".equals(selectedIndex))
		{
			return "";

		}
		
		int selIdx = Integer.valueOf(selectedIndex);
		
		return subbean.sendMessageString(selCodeId, X31CWebConst.DATABEAN_GET_VALUE, selIdx);
		
	}
	
	/**
	 * 機器出荷指定日の連結データを取得します。
	 * @return 連結した日付
	 */
	private String getKkshkaStiYmd(X31SDataBeanAccess bean)
	{
		String statY = getNullToStr(bean.sendMessageString(KKW03301SFConst.KKSHKA_STI_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
		String statM = getNullToStr(bean.sendMessageString(KKW03301SFConst.KKSHKA_STI_MON, X31CWebConst.DATABEAN_GET_VALUE));
		String statD = getNullToStr(bean.sendMessageString(KKW03301SFConst.KKSHKA_STI_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		String statYMD = "";
		if(statY != null && !"".equals(statY))
		{
			statYMD = statY.concat(statM).concat(statD);
			if (statYMD != null && statYMD.length() == 8)
			{
				return statYMD;
			}
		}
		return "";
	}
	
	/**
	 * Nullの場合空白を返却します。
	 * @param str 文字列
	 * @return 連結した住所コード
	 */
	private String getNullToStr(String str)
	{
		
		if(str == null)
		{
			return "";
		}
		
		
		return str.trim();
	}
	
	/**
	 * コンボボックスの倉庫コードを分割する。
	 * @param pSokoInfo
	 * @return String[]
	 */
	private String[] getSplitSokoInfo(String pSokoInfo)
	{
	    String sokoInfo = getNullToStr(pSokoInfo);
		String[] arrSokoInfo = {"", ""};
		if(!"".equals(sokoInfo))
		{
			arrSokoInfo = sokoInfo.split(",");
		}
		return arrSokoInfo;
	}
}
