/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0087_KKSV0087OPDBMapper
*	ソースファイル名：KKSV0087_KKSV0087OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年06月03日
*＜機能概要＞
*	BP（ｅｏ光テレビ登録）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/06/03	FJ			新規作成
*   v4.01.00    2012/11/20  FJ) 北浦    【IT1-2012-0002082】ＳＴＢ（２台目以降）不正対応
*   v4.02.00    2012/11/20  FJ) 渡邉    【IT1-2012-0001132】サービス契約内訳の支払い方法継続フラグにはNULLを設定する
*   v4.03.00    2012/11/27  FJ) 渡邉    【IT1-2012-0002080】サービス契約内訳の提供方式契約番号にはNULLを設定する
*   v4.04.00    2012/11/28  FJ）松川    【ANK-1247-00-00】工事依頼情報_連絡事項桁数対応
*   v4.05.00    2013/01/07  FJ）谷口    【ST2-2013-0000002】再送信多CH時の料金プランコード不審
*   v5.00.00    2013/01/17  FJ）松川    【ANK-1355-00-00】必須チェック外し
*   v5.01.00    2013/01/23  FJ) 北浦    【KAD-2012-0001108】書面での受付番号の申込イメージの紐付けについて
*   v5.02.00    2013/01/30  FJ）中山    【ST1-2013-0000265】マンションコースでeo光テレビのコースがＨＤコース固定になる処理を排除
*   v5.03.00    2013/02/09  FJ）渡邉    【IT1-2013-0000244】メゾンタイプ、K-CATのSTB5台申込時の登録処理を修正
*   v5.04.00    2013/02/19  FJ）松田    【ANK-1447-00-00】買取機器の返品処理機能の漏れ対応
*   v5.05.00    2013/02/26  FJ）渡邉    【ST1-2013-0000253】ケーブルガイド誌のガイド誌送付先名、カナ名、電話番号にはNULLを設定する
*   v6.00.00    2013/09/30  FJ) 北浦    【ANK-1583-00-00】 STB提供メニュー拡充(機器追加・価格改定)
*   v10.00.00   2014/07/07  FJ) 中山    【ANK-2135-00-00】BSオプションチャンネル「スターチャンネル」とのセット割検討
*   v31.00.00   2017/11/30  FJ) 麻生    【ANK-3136-00-00】OPMSハードウエア保守切れ対応(STEP2-2)
*	v39.00.00	2018/09/06	FJ) 中原	【ANK-3488-00-00】４KSTB（ACASチップ）導入対応
*	v52.00.00	2021/02/12	FJ )中原	【ANK-3991-00-00】STB新機種追加(2021年4月〜)
*	v54.00.00	2021/08/20	FJ) 平野	【ANK-4096-00-00】宅調宅工同時実施のための聞取り強化対応
*	v57.00.00	2021/02/04	FJ) 吉村	【ANK-4088-00-00】宅内調査の日程調整業務における省人化施策(Step2)
*	v71.00.00	2024/05/27	FJ) 福島	【ANK-4468-04-00】シンプルプラン追加対応
*	v74.00.00	2024/11/28	FJ) 森下	【ANK-4592-00-00】テレビ新コース（スカパー用）導入対応）
**********************************************************************/
package eo.web.webview.mapping;

import static eo.web.webview.common.JKKKeiNewCmnLogicUtil.*;

import java.util.ArrayList;
import java.util.HashMap;


import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.sun.enterprise.tools.common.util.StringUtils;

import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.KKW00101SF.KKW00101SFConst;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKKeiNewCmnLogicUtil;
import eo.web.webview.common.JKKWebCommon;

/**
 * 
 * DataBean-BPマッピングをする。
 * @author 富士通
 */
public class KKSV0087_KKSV0087OPDBMapper
{

	/**
	 * コンストラクタ
	 */
	public KKSV0087_KKSV0087OPDBMapper()
	{
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：申込新規登録画面
	 * @param outputMap
	 * @param func_code　機能コード
	 * @return マッピング結果
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV008701SC(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>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 電障コード → サービス契約＜eo光テレビ＞登録マップ.ＫＥＹ＿電波障害案件番号
		parentMap.put("key_dmps_anken_no", bean[0].sendMessageString(KKW00101SFConst.DMPS_ANKEN_NO,
				X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("KKSV008701SC", parentMap);
						
		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：申込新規登録画面
	 * @param outputMap データ出力先マップ
	 * @param func_code　機能コード
	 * @param mskmMap
	 * @param opeDateTimeStamp 運用日付時分秒(YYYYMMDDhhmmssSSS)
	 * @param mansionMap マンション情報マップ
	 * @param viewLogic ビューロジック
	 * @return データ格納マップ
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV008701CC(X31SDataBeanAccess[] bean, HashMap outputMap, 
			String func_code, HashMap mskmMap, String opeDateTimeStamp, HashMap mansionMap, JCCWebBusinessLogic viewLogic) throws Exception
	{

		if (null == bean)
		{
			return null;
		}

		if (1 != bean.length)
		{
			return null;
		}
		X31SDataBeanAccessArray dataBeanArray = null;
		X31SDataBeanAccess subBean = null;
		X31SDataBeanAccess dataBean = bean[0];
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		String catvCompFlg = dataBean.sendMessageString(KKW00101SFConst.CATV_COMP_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 異動区分
		String mskmFlg = bean[0].sendMessageString(KKW00101SFConst.MSKM_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		String idoDiv = "";
		if (MSKM_FLG_SHINKI.equals(mskmFlg))
		{
			// 00001（新規契約）
			idoDiv = JKKStrConst.CD00576_00001;
		}
		else
		{
			// 00002（サービス追加）
			idoDiv = JKKStrConst.CD00576_00002;
		}
		
		String seiky_kei_no = "";
		if ("1".equals(func_code))
		{
			seiky_kei_no = getSeikyKeiNo(mskmMap); // 請求契約番号
			if(MSKM_FLG_TSUIKA.equals(mskmFlg) 
					&& (PAYWAY_KEIZOKU_UPD.equals(bean[0].sendMessageString(KKW00101SFConst.PAYWAY_KEIZOKU_USE, X31CWebConst.DATABEAN_GET_VALUE))
					|| bean[0].sendMessageBoolean(KKW00101SFConst.PAYWAY_KEIZOKU_USE_FAIL_FLG, X31CWebConst.DATABEAN_GET_VALUE) == true))
			{	// 追加申込、支払方法変更 または 支払方法継続利用不可の場合
				seiky_kei_no = "";
			}
		}

		/*-----------------------------------------------
		 * 申込明細登録
		 *-----------------------------------------------*/
		// 申込番号
		String mskmNo = bean[0].sendMessageString(KKW00101SFConst.MSKM_NO, X31CWebConst.DATABEAN_GET_VALUE);
		parentMap.put("kk0021_mskm_no", mskmNo);

		// 申込明細登録マップ.SYSID
		parentMap.put("kk0021_sysid", bean[0].sendMessageString(KKW00101SFConst.PARAM_SYSID, X31CWebConst.DATABEAN_GET_VALUE));

		// 申込形態コード
		parentMap.put("kk0021_mskm_form_cd", getAddMskmFormCd(bean[0]));

		// 申込書番号
		parentMap.put("kk0021_mskmsho_no", bean[0].sendMessageString(KKW00101SFConst.MSKMSHO_NO, X31CWebConst.DATABEAN_GET_VALUE));

		// 申込明細ステータス(010：受付済)
		parentMap.put("kk0021_mskm_dtl_stat", JKKStrConst.MSKM_DTL_STAT_UKETSUKEZUMI);

		if (!JPCModelConstant.FUNC_CD_2.equals(func_code))
		{
			// 申込連絡先メールアドレス
			parentMap.put("kk0021_mskm_rrks_mlad", bean[0].sendMessageString(KKW00101SFConst.RRSK_MLAD, X31CWebConst.DATABEAN_GET_VALUE));
			
			// マンション設備システム連携用記事欄
			parentMap.put("kk0021_manssbsys_rnki_yo_kijiran",
					bean[0].sendMessageString(KKW00101SFConst.KOJIREQINFO_RRKJIKO, X31CWebConst.DATABEAN_GET_VALUE));
		}

		String mskmshoSbtCd = null;

		// 申込形態コード
		String mskmFormCd = bean[0].sendMessageString(KKW00101SFConst.MSKM_FORM_CD, X31CWebConst.DATABEAN_GET_VALUE);
		// 申込書の種類
		String mskmshoKind = bean[0].sendMessageString(KKW00101SFConst.MSKMSHO_KIND, X31CWebConst.DATABEAN_GET_VALUE);
		// 住居タイプ
		String jyukyoType = bean[0].sendMessageString(KKW00101SFConst.JYUKYO_TYPE, X31CWebConst.DATABEAN_GET_VALUE);

		if(MSKM_FORM_CD_TEL.equals(mskmFormCd))
		{
			// 電話申込の場合
			mskmshoSbtCd = jyukyoType;
		}
		else if(MSKM_FORM_CD_SHOMEN.equals(mskmFormCd))
		{
			// 書面申込
			mskmshoSbtCd = mskmshoKind;
		}

		// 申込書種別コード
		parentMap.put("kk0021_mskmsho_sbt_cd", mskmshoSbtCd);

		String hukkaAnken = null;
		String newconstBukken = null;
		// ANK-4088-00-00 ADD START
		String takchoApoKadenKibo = null;
		// ANK-4088-00-00 ADD END


		// ホームの場合
		if (isMskmType(bean[0], IS_JDG_YO_MSKM_TYPE_HOME, null))
		{
			// 復活案件の判定
			if (bean[0].sendMessageBoolean(KKW00101SFConst.HUKKAT_ANKEN, X31CWebConst.DATABEAN_GET_VALUE))
			{
				hukkaAnken = HUKKAT_ARI;
			}
			else
			{
				hukkaAnken = HUKKAT_NASHI;
			}

			// 復活案件フラグ
			parentMap.put("kk0021_hukkat_anken_flg", hukkaAnken);

			// 新築物件の判定
			if (bean[0].sendMessageBoolean(KKW00101SFConst.NEWCONST_BUKKEN, X31CWebConst.DATABEAN_GET_VALUE))
			{
				newconstBukken = NEWCONST_BKN_CD_NEWCONST;
			}
			else
			{
				newconstBukken = NEWCONST_BKN_CD_SHKV;
			}

			// 新築物件コード
			parentMap.put("kk0021_newconst_bukken_cd", newconstBukken);

			String sameEquipReMskm = eo.web.webview.common.JKKWebCommon.convertCode(
					bean[0], KKW00101SFConst.SAME_EQUIP_RE_MSKM,
					KKW00101SFConst.SAME_EQUIP_RE_MSKM_CD_56,
					KKW00101SFConst.SAME_EQUIP_RE_MSKM_CD_LIST_56);

			// 同一設備再申込コード
			parentMap.put("kk0021_same_equip_re_mskm_cd", sameEquipReMskm);
			
			// ANK-4468-04-00 DEL START
//			// ANK-4088-00-00 ADD START
//			// 宅内調査のアポ架電希望の判定
//			if (bean[0].sendMessageBoolean(KKW00101SFConst.TAKCHO_APO_KADEN_KIBO_UM, X31CWebConst.DATABEAN_GET_VALUE))
//			if (!StringUtils.isEmpty(apoUmu) && JKKStrConst.KIBO_YES.equals(apoUmu))
//			// ANK-4468-04-00 MOD END
//			{
//				takchoApoKadenKibo = JKKStrConst.KIBO_YES;
//			}
//			else
//			{
//				takchoApoKadenKibo = JKKStrConst.KIBO_NO;
//			}
//			// ANK-4088-00-00 ADD END
			// ANK-4468-04-00 DEL END
		}
		else
		{
			// 画面に表示されていない場合、"0"を設定する。

			// 復活案件フラグ
			parentMap.put("kk0021_hukkat_anken_flg", HUKKAT_NASHI);
			// 新築物件コード
			parentMap.put("kk0021_newconst_bukken_cd", NEWCONST_BKN_CD_SHKV);
			// 同一設備再申込コード
			parentMap.put("kk0021_same_equip_re_mskm_cd", SAME_EQUIP_RE_MSKM_CD_SHKV);
		}

		// ANK-4468-04-00 ADD START
		// 宅内調査のアポ架電希望コード
		parentMap.put("kk0021_takcho_apo_kaden_kibo_um", getApoKadenUmCode(bean[0], KKW00101SFConst.TAKCHO_APO_KADEN_KIBO_UM));
		// ANK-4468-04-00 ADD END

		// 新規申込種別コード
		parentMap.put("kk0021_new_mskm_sbt_cd", bean[0].sendMessageString(KKW00101SFConst.NEW_MSKM_SBT_CD, X31CWebConst.DATABEAN_GET_VALUE));

		// 追加申込の場合
		if(MSKM_FLG_TSUIKA.equals(mskmFlg))
		{
			// オプションサービス引継有無
			String opSvcHktgiUm = UMU_NASI;
			if(bean[0].sendMessageBoolean(KKW00101SFConst.SVC_NYO_HKTGI, X31CWebConst.DATABEAN_GET_VALUE))
			{
				opSvcHktgiUm = UMU_ARI;
			}
			parentMap.put("kk0021_op_svc_hktgi_um", opSvcHktgiUm);

			// 解約書類送付希望有無
			String dslAticleSohuKiboUm = UMU_NASI;
			if(bean[0].sendMessageBoolean(KKW00101SFConst.DSL_BUNSHO_KIND_SOHU_KIBO, X31CWebConst.DATABEAN_GET_VALUE))
			{
				dslAticleSohuKiboUm = UMU_ARI;
			}
			parentMap.put("kk0021_dsl_aticle_sohu_kibo_um", dslAticleSohuKiboUm);
		}
		else
		{
			// 画面に表示されていない場合、"0"を設定する。

			// オプションサービス引継有無
			parentMap.put("kk0021_op_svc_hktgi_um", UMU_NASI);
		}

		// 本人確認書類種別コード
		String hninCfmCd = JKKWebCommon.getPullDownCode(bean[0], KKW00101SFConst.HNIN_CFM_BUNSHO_KIND_SBT_LIST,
				KKW00101SFConst.SELECT_CD_59, KKW00101SFConst.CD_LIST_59);
		hninCfmCd = (JKKStrConst.CD01566_9.equals(hninCfmCd))?(""):(hninCfmCd);

		parentMap.put("kk0021_hnin_cfm_aticle_sbt_cd", hninCfmCd);

		//本人確認書類コードがその他の場合
		if (!JPCModelConstant.FUNC_CD_2.equals(func_code) && JKKStrConst.CD00714_3.equals(hninCfmCd))
		{
			parentMap.put("kk0021_hnin_cfm_aticle_nm",
					bean[0].sendMessageString(KKW00101SFConst.HNIN_CFM_BUNSHO_KIND_OTR, X31CWebConst.DATABEAN_GET_VALUE));
		}

		if(MSKM_FORM_CD_SHOMEN.equals(mskmFormCd) && (MSKM_KIND_HOME.equals(mskmshoKind) || MSKM_KIND_MEZON.equals(mskmshoKind)))
		{	// 書面申込のホームまたはメゾン
			// 地図添付有無
			String mapTempUm = JKKWebCommon.getPullDownCode(
					bean[0], KKW00101SFConst.MAPTEMP_ARI, KKW00101SFConst.MAP_TEMP_UM_CD_38, KKW00101SFConst.MAP_TEMP_UM_CD_LIST_38);
			parentMap.put("kk0021_map_temp_um", mapTempUm);
		}

		/** KCN */
		if (catvCompFlg.equals(JKKKeiNewCmnLogicUtil.CATV_COMP_FLG_KCN))
		{	
			dataBeanArray = dataBean.getDataBeanArray(KKW00101SFConst.KCN_TUNER_USE_CNT_LIST);
			subBean = dataBeanArray.getDataBean(0);
			int kcnUseCnt = Integer.parseInt(subBean.sendMessageString(KKW00101SFConst.TUNER_USE_CNT_CD_22, X31CWebConst.DATABEAN_GET_VALUE)) + 1;
			String kcnCode = "";
			kcnCode = getKcnStbKindCd(dataBean, KKW00101SFConst.KCN_TUNER_USE_CNT_LIST, 
					KKW00101SFConst.TUNER_USE_CNT_CD_22, KKW00101SFConst.KCN_TV_TUNER_LIST , KKW00101SFConst.KCN_TV_TUNER_04);
			
			//KCNSTB申込台数
			parentMap.put("kk0021_kcn_stb_mskm_cnt", Integer.toString(kcnUseCnt));	
			//KCNSTB種類コード
			parentMap.put("kk0021_kcn_stb_kind_cd", kcnCode);	
		}

		// 申込年月日
		String mskmYmd =
			dataBean.sendMessageString(KKW00101SFConst.MSKM_YMD_Y, X31CWebConst.DATABEAN_GET_VALUE)
				+ dataBean.sendMessageString(KKW00101SFConst.MSKM_YMD_M, X31CWebConst.DATABEAN_GET_VALUE)
				+ dataBean.sendMessageString(KKW00101SFConst.MSKM_YMD_D, X31CWebConst.DATABEAN_GET_VALUE);

		// 申込年月日
		if (8 != mskmYmd.length())
		{
			mskmYmd = opeDateTimeStamp.substring(0, 8);
		}
		parentMap.put("kk0021_mskm_ymd", mskmYmd);

		// マンション・メゾンの場合
		if (isMskmType(bean[0], IS_JDG_YO_MSKM_TYPE_MANSION, null) || isMskmType(bean[0], IS_JDG_YO_MSKM_TYPE_MEZON, null))
		{
			// 契約付加コード
			String keiHukaCd = eo.web.webview.common.JKKWebCommon.convertCode(
					bean[0], KKW00101SFConst.FUKA_LIST,
					KKW00101SFConst.FUKA_CD_57,
					KKW00101SFConst.FUKA_CD_LIST_57);

			parentMap.put("kk0021_kei_huka_cd", keiHukaCd);

			// マンションID
			parentMap.put("kk0021_mansion_id", bean[0].sendMessageString(KKW00101SFConst.MID, X31CWebConst.DATABEAN_GET_VALUE));
			// CAT-ID
			parentMap.put("kk0021_catid", bean[0].sendMessageString(KKW00101SFConst.CATID, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// 申込種別コード
		String mskmSbtCd = eo.web.webview.common.JKKWebCommon.convertCode(
				bean[0], KKW00101SFConst.MSKM_SBT,
				KKW00101SFConst.SELECT_CD_59,
				KKW00101SFConst.CD_LIST_59);

		parentMap.put("kk0021_mkm_uk_sbt_cd", mskmSbtCd);
		
		if(!"2".equals(func_code))
		{
			//申込書明細番号
			parentMap.put("kk0021_mskmsho_dtl_no", bean[0].sendMessageString(KKW00101SFConst.TV_MSKMSHO_DTL_NO, X31CWebConst.DATABEAN_GET_VALUE));
		}

		// ANK-3136-00-00 ADD START
		// ホームまたはメゾンで機能コード１の場合、追加する。特記事項のタブは特記サービスでチェックしている。
		if ((isMskmType(bean[0], IS_JDG_YO_MSKM_TYPE_HOME, null) || isMskmType(bean[0], IS_JDG_YO_MSKM_TYPE_MEZON, null))
				&& !JPCModelConstant.FUNC_CD_2.equals(func_code))
		{
			// 他システム連携_宅内調査要否
			String tsyrnTakchoYh = "";
			if (bean[0].sendMessageBoolean(KKW00101SFConst.TSYRN_TAKCHO_HUYO_FLG, X31CWebConst.DATABEAN_GET_VALUE))
			{
				tsyrnTakchoYh = JKKCommonConst.KH_FAIL;
			}
			else
			{
				tsyrnTakchoYh = JKKCommonConst.KH_PSG;
			}
			parentMap.put("kk0021_tsyrn_takcho_yh", tsyrnTakchoYh);
			// 他システム連携_工事連絡先氏名
			parentMap.put("kk0021_tsyrn_kj_rrks_nm", bean[0].sendMessageString(KKW00101SFConst.TSYRN_TKJ_RRKS_NM, X31CWebConst.DATABEAN_GET_VALUE));
			// 他システム連携_工事連絡先電話番号
			parentMap.put("kk0021_tsyrn_kj_rrks_tln", bean[0].sendMessageString(KKW00101SFConst.TSYRN_TKJ_RRKS_TLN, X31CWebConst.DATABEAN_GET_VALUE));
			// 他システム連携_宅内調査時連絡先氏名
			parentMap.put("kk0021_tsyrn_takcho_ji_rrks_nm", bean[0].sendMessageString(KKW00101SFConst.TSYRN_TAKCHO_JI_RRKS_NM, X31CWebConst.DATABEAN_GET_VALUE));
			// 他システム連携_宅内調査時連絡先電話番号
			parentMap.put("kk0021_tsyrn_takcho_ji_rrks_tln", bean[0].sendMessageString(KKW00101SFConst.TSYRN_TAKCHO_JI_RRKS_TLN, X31CWebConst.DATABEAN_GET_VALUE));
			// 他システム連携_連絡希望日時
			parentMap.put("kk0021_tsyrn_rrk_kibo_date", bean[0].sendMessageString(KKW00101SFConst.TSYRN_RRK_KIBO_DATE, X31CWebConst.DATABEAN_GET_VALUE));
			// 他システム連携_地図有無
			String tsyrnMapUm = "";
			if (bean[0].sendMessageBoolean(KKW00101SFConst.TSYRN_MAP_UM, X31CWebConst.DATABEAN_GET_VALUE))
			{
				tsyrnMapUm = JKKCommonConst.UM_U;
			}
			else
			{
				tsyrnMapUm = JKKCommonConst.UM_M;
			}
			parentMap.put("kk0021_tsyrn_map_um", tsyrnMapUm);
			// 他システム連携_既存契約情報
			parentMap.put("kk0021_tsyrn_kzn_kei_inf", bean[0].sendMessageString(KKW00101SFConst.TSYRN_KZN_KEI_INF, X31CWebConst.DATABEAN_GET_VALUE));
			// 他システム連携_不備解消年月日
			parentMap.put("kk0021_tsyrn_hbi_kaishou_ymd", bean[0].sendMessageString(KKW00101SFConst.TSYRN_HBI_KAISHOU_YMD, X31CWebConst.DATABEAN_GET_VALUE));
			// 設備流用有無
			String equipRyuyoUm = "";
			if (bean[0].sendMessageBoolean(KKW00101SFConst.TV_EQUIP_RYUYO_ANKEN, X31CWebConst.DATABEAN_GET_VALUE))
			{
				equipRyuyoUm = JKKCommonConst.UM_U;
			}
			else
			{
				equipRyuyoUm = JKKCommonConst.UM_M;
			}
			parentMap.put("kk0021_equip_ryuyo_um", equipRyuyoUm);
			// 流用元工事案件番号
			parentMap.put("kk0021_ryuyo_moto_kjak_no", bean[0].sendMessageString(KKW00101SFConst.TV_EQUIP_RYUYO_MT_KJAK_NO, X31CWebConst.DATABEAN_GET_VALUE));
			// 設備流用工事完了希望年月日
			String sbryKjFinKiboymd = bean[0].sendMessageString(KKW00101SFConst.TV_RYUYO_KIBO_Y, X31CWebConst.DATABEAN_GET_VALUE)
					+ bean[0].sendMessageString(KKW00101SFConst.TV_RYUYO_KIBO_M, X31CWebConst.DATABEAN_GET_VALUE)
					+ bean[0].sendMessageString(KKW00101SFConst.TV_RYUYO_KIBO_D, X31CWebConst.DATABEAN_GET_VALUE);
			parentMap.put("kk0021_sbry_kj_fin_kiboymd", sbryKjFinKiboymd);
			// ANK-4096-00-00 ADD START
			// 現在利用先契約回線区分
			parentMap.put("kk0021_now_use_sk_kei_kisn_div", bean[0].sendMessageString(KKW00101SFConst.USE_SK_KEI_KISN_DIV, X31CWebConst.DATABEAN_GET_VALUE));
			// 機器設置場所変更有無
			parentMap.put("kk0021_kiki_setplc_chgum", bean[0].sendMessageString(KKW00101SFConst.KIKI_SETPLACE_CHGE_RSV_UM, X31CWebConst.DATABEAN_GET_VALUE));
			// 同日実施希望有無
			parentMap.put("kk0021_dojitu_jssi_kbum", bean[0].sendMessageString(KKW00101SFConst.TAKCHO_KJ_DOJITU_JSSI_UM, X31CWebConst.DATABEAN_GET_VALUE));
			// ANK-4096-00-00 ADD END
		}
		// ANK-3136-00-00 ADD END


		parentMap.put("kk0101_seiky_kei_no", seiky_kei_no);// 請求契約番号
		parentMap.put("kk0101_svc_kei_stat", JKKStrConst.CD00037_UK_ZM); // サービス契約ステータス
		parentMap.put("kk0101_svc_cd", JKKStrConst.CD00130_03); // サービスコード
		parentMap.put("kk0101_ido_div", idoDiv); // 異動区分
		parentMap.put("kk0101_sysid", dataBean.sendMessageString(KKW00101SFConst.PARAM_SYSID, X31CWebConst.DATABEAN_GET_VALUE)); // SYSID

		if (!JPCModelConstant.FUNC_CD_2.equals(func_code) && isMskmType(bean[0], IS_JDG_YO_MSKM_TYPE_HOME, null))
		{
			// 面開発案件番号
			parentMap.put("kk0101_menkaihat_anken_no",
					bean[0].sendMessageString(KKW00101SFConst.MENKAIHAT_ANKEN_NO, X31CWebConst.DATABEAN_GET_VALUE));
		}

		if (JPCModelConstant.FUNC_CD_1.equals(func_code))
		{
			//紹介コード
			parentMap.put("kk0101_intr_cd", bean[0].sendMessageString(KKW00101SFConst.INTR_CD, X31CWebConst.DATABEAN_GET_VALUE));
		}

		parentMap.put("kk0101_rule0059_auto_aply", JKKStrConst.CD00001_0); // 事務手数料自動適用要否
		parentMap.put("kk0101_rule0079_auto_aply", JKKStrConst.CD00001_0); // 工事費自動適用要否
		
		// 業務連絡備考
		parentMap.put("kk0101_work_rrk_biko", bean[0].sendMessageString(KKW00101SFConst.TV_KIJIRAN, X31CWebConst.DATABEAN_GET_VALUE));

		// 自動照査処理状態コード
		String autoShosaTranStatCd = null;

		if(MSKM_FORM_CD_SHOMEN.equals(mskmFormCd))
		{
			// 書面申込
			autoShosaTranStatCd = JKKStrConst.CD00628_TGG;	// 対象外
		}
		else
		{
			autoShosaTranStatCd = JKKStrConst.CD00628_MI_TRAN;	// 未処理
		}
		parentMap.put("kk0101_auto_shosa_tran_stat_cd", autoShosaTranStatCd);
		
		// 支払方法継続フラグ対応
		if (MSKM_FLG_TSUIKA.equals(mskmFlg))
		{
			// サービス契約内訳＜ｅｏ光テレビ＞登録マップ.支払方法継続フラグ(追加時のみ)
			parentMap.put("kk0101_payway_keizoku_flg", dataBean.sendMessageString(
					KKW00101SFConst.PAYWAY_KEIZOKU_USE, X31CWebConst.DATABEAN_GET_VALUE));
		}

		parentMap.put("kk0101_pcrs_cd", JKKKeiNewCmnLogicUtil.getTvSvcKeiPcrsCd(dataBean)); // 料金コースコード（サービス契約＜ＴＶ＞）
		parentMap.put("kk0101_pplan_cd", JKKKeiNewCmnLogicUtil.getTvSvcKeiPplanCd(dataBean)); // 料金プランコード（サービス契約＜ＴＶ＞）
		parentMap.put("kk0101_prc_grp_cd", JKKKeiNewCmnLogicUtil.getTvSvcKeiPgrpCd(dataBean)); // 料金グループコード		
		
		//再送信
		if (catvCompFlg.equals(JKKKeiNewCmnLogicUtil.CATV_COMP_FLG_RESEND)) 
		{
			parentMap.put("kk0101_dmps_anken_no", dataBean.sendMessageString(KKW00101SFConst.DMPS_ANKEN_NO, 
			X31CWebConst.DATABEAN_GET_VALUE)); // 電波障害案件番号
			
			//チャンネル　多CH未選択時
			if (dataBean.sendMessageBoolean(KKW00101SFConst.MULTI_CHANNEL, X31CWebConst.DATABEAN_GET_VALUE).equals(false))
			{
				parentMap.put("kk0101_re_send_tk_svc_sbt_cd", JKKWebCommon.convertCode(dataBean, KKW00101SFConst.RE_SEND_TK_SVC_SBT_CD,
						KKW00101SFConst.SSSTYPE_CD_43, KKW00101SFConst.SSSTYPE_CD_LIST_43)); // 再送信種別
			}
		}
		
		// 提供方式契約番号
		parentMap.put("kk0101_tk_hoshiki_kei_no", JKKWebCommon.getTkHoshikiKeiNoTv(mansionMap));

		if((MSKM_FORM_CD_TEL.equals(mskmFormCd) && JYUKYO_TYPE_MANSION.equals(jyukyoType))
				|| (MSKM_FORM_CD_SHOMEN.equals(mskmFormCd) && MSKMSHO_KIND_MANSION.equals(mskmshoKind)))
		{	// マンションタイプの場合
			// サービス利用開始希望年月日
			String kiboYYYY = dataBean.sendMessageString(KKW00101SFConst.SVC_STA_KIBO_YMD_Y, X31CWebConst.DATABEAN_GET_VALUE);
			String kiboMM = dataBean.sendMessageString(KKW00101SFConst.SVC_STA_KIBO_YMD_M, X31CWebConst.DATABEAN_GET_VALUE);
			String kiboDD = dataBean.sendMessageString(KKW00101SFConst.SVC_STA_KIBO_YMD_D, X31CWebConst.DATABEAN_GET_VALUE);
			String kiboYmd = kiboYYYY + kiboMM + kiboDD;
			parentMap.put("kk0101_svc_use_sta_kibo_ymd", kiboYmd);
		}
		
		// ANK-4592-00-00 MOD START
//		/** K-CAT 或いは 再送信  かつ　ベーシックHD・プレミアムHD*/
//		if ((catvCompFlg.equals(JKKKeiNewCmnLogicUtil.CATV_COMP_FLG_KCAT) || catvCompFlg.equals(JKKKeiNewCmnLogicUtil.CATV_COMP_FLG_RESEND)) 
//				&& dataBean.sendMessageString(KKW00101SFConst.MSKM_SVC_CHOICE, X31CWebConst.DATABEAN_GET_VALUE).equals(MSKM_SVC_CHOICE_HD))
		/** K-CAT 或いは 再送信  かつ　ベーシックHD・プレミアムHD あるいは CSコース*/
		if ((catvCompFlg.equals(JKKKeiNewCmnLogicUtil.CATV_COMP_FLG_KCAT) || catvCompFlg.equals(JKKKeiNewCmnLogicUtil.CATV_COMP_FLG_RESEND)) 
				&& (dataBean.sendMessageString(KKW00101SFConst.MSKM_SVC_CHOICE, X31CWebConst.DATABEAN_GET_VALUE).equals(MSKM_SVC_CHOICE_HD))
						|| dataBean.sendMessageString(KKW00101SFConst.MSKM_SVC_CHOICE, X31CWebConst.DATABEAN_GET_VALUE).equals(MSKM_SVC_CHOICE_CSBASIC)
						|| dataBean.sendMessageString(KKW00101SFConst.MSKM_SVC_CHOICE, X31CWebConst.DATABEAN_GET_VALUE).equals(MSKM_SVC_CHOICE_CSPREMIUM))
		// ANK-4592-00-00 MOD END
		{
			parentMap.put("kk0381_seiky_kei_no", seiky_kei_no);// 請求契約番号
			parentMap.put("kk0381_op_svc_cd", JKKStrConst.OP_SVC_CABLE_GUDMG); // オプションサービスコード
			parentMap.put("kk0381_ido_div", idoDiv); // 異動区分
			parentMap.put("kk0381_op_svc_kei_stat", JKKStrConst.OP_SVC_STAT_UKETSUKEZUMI); // オプションサービス契約ステータス
			parentMap.put("kk0381_sysid", dataBean.sendMessageString(KKW00101SFConst.PARAM_SYSID, X31CWebConst.DATABEAN_GET_VALUE)); // SYSID
			parentMap.put("kk0381_pcrs_cd", JKKStrConst.CD00134_B36); // 料金コースコード（オプションサービス契約＜ＴＶ＞）
			parentMap.put("kk0381_pplan_cd", JKKStrConst.OPSVC_PPLAN_CABLE_GUDMG); // 料金プランコード（オプションサービス契約＜ＴＶ＞）

			/** 親契約識別コード */
			parentMap.put("kk0381_oya_kei_skbt_cd", JKKStrConst.CD_DIV_OYAKEISKBTCD_SVCKEI);

			/** ケーブルガイド誌の申込冊数 */
			String cnt = dataBean.sendMessageString(KKW00101SFConst.CABLE_GUIDE_MSKM_CNT, X31CWebConst.DATABEAN_GET_VALUE);
			int cable_guide_mskm_cnt = 0;
			if (!"".equals(cnt) && cnt.matches("[0-9]+"))
			{
				cable_guide_mskm_cnt = Integer.parseInt(cnt);
				parentMap.put("kk0381_cable_guide_mskm_cnt", String.valueOf(cable_guide_mskm_cnt));
			}	
			else
			{
				parentMap.put("kk0381_cable_guide_mskm_cnt", String.valueOf(cnt));
			}

			// ガイド誌送付先個別指定フラグ
			parentMap.put("kk0381_guidemg_shs_ksitei_flg", JKKStrConst.CD00010_KOBET_NASHI);
			
			//ガイド誌送付先住所手動入力フラグ
			parentMap.put("kk0381_gudmg_shs_ad_man_input_flg", JKKStrConst.AD_MAN_INPUT_NO);
		}

		ArrayList dataList = new ArrayList();
		parentMap.put("svc_kei_ucwk_list", dataList);
		
		if (!JPCModelConstant.FUNC_CD_2.equals(func_code)
				&& (catvCompFlg.equals(JKKKeiNewCmnLogicUtil.CATV_COMP_FLG_KCAT) || catvCompFlg.equals(JKKKeiNewCmnLogicUtil.CATV_COMP_FLG_RESEND))
				&& dataBean.sendMessageString(KKW00101SFConst.MSKM_SVC_CHOICE, X31CWebConst.DATABEAN_GET_VALUE).equals(MSKM_SVC_CHOICE_HD))
		{
			/** K-CAT or 再送信 ベーシックHD・プレミアムHD */

			ArrayList dataList_kiki = new ArrayList();
			parentMap.put("kktk_svc_kei_list", dataList_kiki);

			subBean = (dataBean.getDataBeanArray(KKW00101SFConst.KCAT_TUNER_USE_CNT_LIST)).getDataBean(0);
			int kcatUseCnt = Integer.parseInt(subBean.sendMessageString(KKW00101SFConst.TUNER_USE_CNT_CD_22, X31CWebConst.DATABEAN_GET_VALUE)) + 1;
			
			//STB主契約判定処理
			JKKWebCommon.stbMainKeiCheck(viewLogic, kcatUseCnt);
			
			dataBeanArray = dataBean.getDataBeanArray(KKW00101SFConst.KCAT_TV_TUNER_LIST);
			for (int i = 0; i < kcatUseCnt; i++)
			{
				HashMap childMap_svc = new HashMap();
				subBean = dataBeanArray.getDataBean(i);
				
				//サービス契約内訳＜TV＞
				childMap_svc.put("kk0181_seiky_kei_no", seiky_kei_no);// 請求契約番号
				childMap_svc.put("kk0181_ido_div", idoDiv); // 異動区分
				childMap_svc.put("kk0181_svc_kei_ucwk_stat", JKKStrConst.CD00037_UK_ZM); // サービス契約内訳ステータス

				childMap_svc.put("kk0181_pcrs_cd", getTvSckeiUwPcrsCd(subBean)); // 料金コースコード（サービス契約内訳＜ＴＶ＞）
				// 料金プランコード（サービス契約内訳＜ＴＶ＞）
				childMap_svc.put("kk0181_pplan_cd", getTvSckeiUwPplanCd(subBean, mskmFormCd, mskmshoKind, jyukyoType));
				dataList.add(childMap_svc);
				
				// チェックのみ以外の場合
				/*****************************************************************************
				 *  機器提供サービス契約登録のマッピング EKK0341D010
				 *****************************************************************************/
				// 機器提供サービス契約
				for (int j = 0; j <= 2; j++)
				{
					HashMap childMap_kktk = new HashMap();
					switch(j)
					{
					case 0:
						//STB
						String kcatTvTuner = JKKWebCommon.convertCodeMultiArray(dataBean, 
								KKW00101SFConst.KCAT_TV_TUNER_LIST, 
								subBean.sendMessageString(KKW00101SFConst.KCAT_TV_TUNER_03, X31CWebConst.DATABEAN_GET_VALUE), 
								KKW00101SFConst.KCAT_TV_TUNER_CD_LIST_03);
						
						// STB料金関連コード取得
						HashMap<String, String> prcKnrnMap = getStbPrcKnrnCd(kcatTvTuner);
						
						String pcrs_cd = prcKnrnMap.get(STB_PRC_KNRN_KEY_PCRSCD); // 料金コースコード（機器提供サービス契約）
						String pplan_cd = prcKnrnMap.get(STB_PRC_KNRN_KEY_PPLANCD); // 料金プランコード（機器提供サービス契約）
						
						JKKWebCommon.getKktkSvcKeiIniData(bean[0], childMap_kktk, JKKStrConst.KKTK_SVC_CD_STB, pcrs_cd,
								pplan_cd, "kk0341_", mansionMap, JKKWebCommon.getSvcMap(outputMap, KKSV008031CC));
						childMap_kktk.put("kk0341_link_stb_flg", "0");	// リンクＳＴＢフラグ
						
						break;
						
					case 1:
						//B-CAS
						// ANK-3488-00-00 ADD START
						// 4KSTBの場合はB-CASを作成しない
						String kcatTvTunerFour = JKKWebCommon.convertCodeMultiArray(dataBean, 
								KKW00101SFConst.KCAT_TV_TUNER_LIST, 
								subBean.sendMessageString(KKW00101SFConst.KCAT_TV_TUNER_03, X31CWebConst.DATABEAN_GET_VALUE), 
								KKW00101SFConst.KCAT_TV_TUNER_CD_LIST_03);
						
						// STB料金関連コード取得
						HashMap<String, String> prcKnrnMapFour = getStbPrcKnrnCd(kcatTvTunerFour);
						String pcrsCd_four = "";
						pcrsCd_four = prcKnrnMapFour.get(STB_PRC_KNRN_KEY_PCRSCD);
						// ANK-3991-00-00 MOD START
						//if (!(JKKStrConst.CD00134_4KSTB_HDD_NON.equals(pcrsCd_four) || JKKStrConst.CD00134_4KSTB_HDD_2TB.equals(pcrsCd_four) ) )
						if (!(JKKStrConst.CD00134_4KSTB_HDD_NON.equals(pcrsCd_four) || JKKStrConst.CD00134_4KSTB_HDD_2TB.equals(pcrsCd_four) ||
								JKKStrConst.CD00134_4KSTB_HDD_NON_NEW.equals(pcrsCd_four) || JKKStrConst.CD00134_4KSTB_HDD_2TB_NEW.equals(pcrsCd_four) ) )
						// ANK-3991-00-00 MOD END
						{
						// ANK-3488-00-00 ADD END
							JKKWebCommon.getKktkSvcKeiIniData(bean[0], childMap_kktk, JKKStrConst.KKTK_SVC_CD_B_CAS, JKKStrConst.CD00134_BCAS, JKKStrConst.CD00565_BCAS,
									"kk0341_", mansionMap, JKKWebCommon.getSvcMap(outputMap, KKSV008031CC));
							break;
						// ANK-3488-00-00 ADD START
						}
						else {
							continue;
						}
						// ANK-3488-00-00 ADD END
						
					case 2:
						//C-CAS
						JKKWebCommon.getKktkSvcKeiIniData(bean[0], childMap_kktk, JKKStrConst.KKTK_SVC_CD_C_CAS, JKKStrConst.CD00134_CCAS, JKKStrConst.CD00565_CCAS,
								"kk0341_", mansionMap, JKKWebCommon.getSvcMap(outputMap, KKSV008031CC));
						break;
						
					default:
					}
					
					childMap_kktk.put("kk0341_seiky_kei_no", seiky_kei_no);// 請求契約番号
					childMap_kktk.put("kk0341_ido_div", idoDiv); // 異動区分
					childMap_kktk.put("kk0341_kktk_svc_kei_stat", JKKStrConst.CD00056_STAT_UKETSUKEZUMI); // 機器提供サービス契約ステータス
					childMap_kktk.put("kk0341_sysid", dataBean.sendMessageString(KKW00101SFConst.PARAM_SYSID, X31CWebConst.DATABEAN_GET_VALUE)); // SYSID
	
					dataList_kiki.add(childMap_kktk);
				}
			}
		}
		
		// スターチャンネルセット登録
		if (JPCModelConstant.FUNC_CD_1.equals(func_code))
		{
			if (bean[0].sendMessageBoolean(KKW00101SFConst.STAR_CHANNEL_SET, X31CWebConst.DATABEAN_GET_VALUE))
			{
				HashMap<String, Object> dataMap = new HashMap<String, Object>();
				
				// SYSID
				dataMap.put("sysid", bean[0].sendMessageString(KKW00101SFConst.PARAM_SYSID,
						X31CWebConst.DATABEAN_GET_VALUE));
				// 起算日
				dataMap.put("kisan_ymd", mskmYmd);
				// 異動区分
				dataMap.put("ido_div", idoDiv);
				
				parentMap.put("addStarChannelSetMap", dataMap);
				
				// 申込時登録不可契約予約登録リスト
				ArrayList<HashMap<String, Object>> addMkjAddfKeiRvList = new ArrayList<HashMap<String, Object>>();
				
				dataMap = new HashMap<String, Object>();
				
				// 申込時登録不可契約予約種別コード
				dataMap.put("kk2931_mkj_addf_kei_rv_sbt_cd", JKKStrConst.CD01647_CDBS_STCH_SET);
				// 設定対象契約識別コード
				dataMap.put("kk2931_sete_tg_kei_skbt_cd", JKKStrConst.CD_DIV_OYAKEISKBTCD_SVCKEI);
				// オプションサービスコード
				dataMap.put("kk2931_op_svc_cd", JKKStrConst.OP_SVC_CD_STCH_BSPT);
				// 料金コースコード
				dataMap.put("kk2931_pcrs_cd", JKKStrConst.OPSVC_PCRS_STCH_BSPT);
				// 料金プランコード
				dataMap.put("kk2931_pplan_cd", JKKStrConst.OPSVC_PPLAN_STCH_BSPT);
				// 予約契約数
				dataMap.put("kk2931_rsv_kei_cnt", "1");
				// 申込時登録不可契約予約反映方法コード
				dataMap.put("kk2931_mkj_addf_kei_rvhne_way_cd", JKKStrConst.CD01648_MAN_HANEI);
				
				addMkjAddfKeiRvList.add(dataMap);
				
				parentMap.put("addMkjAddfKeiRvList", addMkjAddfKeiRvList);
			}
		}
		
		// --------------------------
		// 回線対象サービス契約登録
		// --------------------------
		if (mskmMap != null)
		{
			HashMap kaisenTgSvcMap = (HashMap)mskmMap.get("KKSV007907CC");
			if (kaisenTgSvcMap != null)
			{
				ArrayList childList = null;
				childList = (ArrayList)kaisenTgSvcMap.get("mskm_svc_kei_ucwk_list");
				
				// 利用場所情報が取得出来た場合、サービス契約回線内訳番号を設定
				if (childList != null) 
				{
					HashMap childMap = (HashMap)childList.get(0);

					// サービス契約回線内訳番号
					parentMap.put("kk0241_svc_kei_kaisen_ucwk_no", (String)childMap.get("kk0251_svc_kei_kaisen_ucwk_no"));
				}
			}
			
			// 利用場所が更新の場合は回線対象サービス契約登録は不要
			if (RIYO_KAISEN_OTHER.equals(dataBean.sendMessageString(KKW00101SFConst.RIYO_KAISEN, X31CWebConst.DATABEAN_GET_VALUE)))
			{
				parentMap.put("kk0241_svc_kei_kaisen_ucwk_no", null);
			}
		}

		outputMap.put("KKSV008701CC", parentMap);

		return outputMap;
	}

	/**
	 * 下りマッピングをする
	 * @param bean　[0]：申込新規登録画面
	 * @param outputMap
	 * @return X31SDataBeanAccess[]
	 */
	@SuppressWarnings("unchecked")
	public X31SDataBeanAccess[] getKKSV008701SC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{

		if (bean == null)
		{
			return null;
		}
		if (!outputMap.containsKey("KKSV008701SC"))
		{
			return null;
		}
		HashMap parentMap = (HashMap)outputMap.get("KKSV008701SC");
		if (parentMap == null)
		{
			return null;
		}

		ArrayList childList = null;

		childList = (ArrayList)parentMap.get("EKK0581A010CBSMsg1List");

		if (childList == null || 0 == childList.size())
		{
			return null;
		}

		HashMap childMap = (HashMap)childList.get(0);

		// 電波障害相対料金プランコード
		bean[0].sendMessageString(KKW00101SFConst.DMPS_ANKEN_AITAI_PPLAN_CD, X31CWebConst.DATABEAN_SET_VALUE,
				((String)childMap.get("dmps_anken_aitai_pplan_cd")));

		return bean;
	}
	
	/**
	 * 申込情報マップから請求契約番号を取得します。
	 * @param mskmInfoMap JKKGetMskmSvcKeiUcwkListCCで取得した申込情報マップ
	 * @return 請求契約番号
	 */
	@SuppressWarnings("unchecked")
	private String getSeikyKeiNo(HashMap<String, Object> mskmInfoMap)
	{
		HashMap paywayMap = (HashMap)mskmInfoMap.get("KKSV007903CC");
		if (paywayMap == null)
		{
			return null;
		}
		return (String)paywayMap.get("seiky_kei_no"); // 請求契約番号
	}
}