/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0705_KKSV0705OPDBMapper
*	ソースファイル名：KKSV0705_KKSV0705OPDBMapper.java
*	作成者			：富士通
*	日付			：2012年09月25日
*＜機能概要＞
*	BP（請求契約更新確認＿変更）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2012/09/25	FJ）磯俣	新規作成
*	v4.00.01	2012/12/03	FJ)磯俣		IT2-1934(サービス毎に最終更新年月日設定)
*	v4.00.02	2012/12/11	FJ)磯俣		IT1-2339(割引CC修正)
*	v4.00.03	2013/02/17	FJ)庭山		【IT1-2013-0000288】対応
*	v4.00.04	2013/05/02	FJ)磯俣		【IT1-2013-0001240】ネットと電話がある場合に宅内更新を一度だけ行う
*	v5.00.00	2013/11/11	FJ)磯俣    【OM-2013-0003819】併合先の情報で割引ＣＣは呼び出さない
*	v6.00.00	2013/12/13	FJ)磯俣	   【OM-2013-0004356】整理番号を追加
*	v7.00.00	2014/01/24	FJ)磯俣		【IT1-2014-0000014】機器および機器オプションの解約処理追加
*
**********************************************************************/
package eo.web.webview.mapping;

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 eo.common.constant.JKKStrConst;
import eo.common.util.JPCDateUtil;
import eo.web.webview.common.JKKCommonConst;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class KKSV0705_KKSV0705OPDBMapper {
	
	/**
	 * コンストラクタ
	 */
	public KKSV0705_KKSV0705OPDBMapper(){
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：回線内訳紐付変更登録
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	public HashMap setKKSV070501CC(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);

		// 併合元料金グループコードの初期化
		parentMap.put("prc_grp_cd", "");
		// 併合先料金グループコードの初期化
		parentMap.put("heigo_sk_prc_grp_cd", "");
		// eo光電話のサービス契約番号(併合元)の初期化
		parentMap.put("tel_svc_kei_no", "");
		// 併合元サービス契約番号の初期化
		parentMap.put("heigo_mt_svc_kei_no", "");
		// 併合先サービス契約番号の初期化
		parentMap.put("heigo_sk_svc_kei_no", "");
		
		
		// 運用日
		String unyo_ymd = bean[0].sendMessageString("基準日", X31CWebConst.DATABEAN_GET_VALUE);
		
		
		// 併合元リストと併合先リストを合わせたリストを作成する
		ArrayList<HashMap<String, Object>> wariCcList = new ArrayList<HashMap<String, Object>>();
		
		HashMap<String, Object> wariCcMap = null;
		
		
		
		
		/***申込内容承認登録***/
		// SYSID
		parentMap.put("sysid", bean[0].sendMessageString("ＳＹＳＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
		// 申込種別コード(回線内訳併合申込)
		parentMap.put("mskm_sbt_cd", "00042");
		// 申込受付年月日時分秒
		parentMap.put("mskm_uk_dtm", bean[0].sendMessageString("運用日時分秒", X31CWebConst.DATABEAN_GET_VALUE));
		// 申込年月日
		parentMap.put("mskm_ymd", unyo_ymd);
		// コンシューマ営業用申込状態識別コード(承認済)
		parentMap.put("consmbsn_mskm_stat_skbt_cd", "04");
		
		
		/***サービス契約回線内訳使用停止と回線対象サービス契約登録***/
		
		int kikiJikkouCount = 0;
		
		String mtSvc = "";
		
		// 併合元サービス契約番号
		parentMap.put("heigo_mt_svc_kei_no", bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
		// 併合元回線受渡し用リスト
		ArrayList<HashMap<String, Object>> heigomtParmList = new ArrayList<HashMap<String, Object>>();
		
		X31SDataBeanAccessArray heigomtList = bean[0].getDataBeanArray("併合元回線内訳情報リスト");
		
		X31SDataBeanAccess subBean = null;
		int count = heigomtList.getCount().intValue();
		
		for (int i = 0; i < count; i++)
		{
			subBean = heigomtList.getDataBean(i);
			HashMap<String, Object> childMap = new HashMap<String, Object>();
		
			
			
			// サービス契約回線内訳番号
			childMap.put("svc_kei_kaisen_ucwk_no", subBean.sendMessageString("サービス契約回線内訳番号", X31CWebConst.DATABEAN_GET_VALUE));
			parentMap.put("heigo_mt_svc_kei_kaisen_ucwk_no", subBean.sendMessageString("サービス契約回線内訳番号", X31CWebConst.DATABEAN_GET_VALUE));
			
			// 更新年月日時分秒(更新前)(サービス契約回線内訳)
			parentMap.put("kk0251_upd_dtm_bf", subBean.sendMessageString("更新年月日時分秒", X31CWebConst.DATABEAN_GET_VALUE));
			// サービス契約番号
			childMap.put("svc_kei_no", subBean.sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
			// 最終更新年月日時分秒
			childMap.put("kk0241_upd_dtm_bf", subBean.sendMessageString("最終更新年月日時分秒", X31CWebConst.DATABEAN_GET_VALUE));
			
			// 料金グループコード
			String prcGrpCd =  subBean.sendMessageString("料金グループコード", X31CWebConst.DATABEAN_GET_VALUE);
			
			// 料金グループが電話の場合
			if(JKKCommonConst.PRC_GRP_CD_10.equals(prcGrpCd))
			{
				// eo光電話のサービス契約番号(併合元)
				parentMap.put("tel_svc_kei_no", subBean.sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
			}
			
			if (isSvcCd(subBean))
			{
				// 併合元サービス契約番号
				parentMap.put("heigo_mt_svc_kei_no", subBean.sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
			}
			
			// サービスコード
			childMap.put("svc_cd", subBean.sendMessageString("サービスコード", X31CWebConst.DATABEAN_GET_VALUE));
			
			String svcCd = subBean.sendMessageString("サービスコード", X31CWebConst.DATABEAN_GET_VALUE);
			
			// ネットか電話があればカウントする
			if(JKKCommonConst.SVC_CD_NET.equals(svcCd) || JKKCommonConst.SVC_CD_02.equals(svcCd))
			{
				kikiJikkouCount++;
				
/* ++++++++++ v7.00.00 追加開始 ++++++++++ */
				// ネット
				if(JKKCommonConst.SVC_CD_NET.equals(svcCd))
				{
					mtSvc = "01";
				}
				else
				{
					mtSvc = "02";
				}
/* ++++++++++ v7.00.00 追加終了 ++++++++++ */
			}
			
			heigomtParmList.add(childMap);
			
			/*** 割引自動適用ＣＣ用パラメタ設定 ***/
			wariCcMap = new HashMap<String, Object>();
			
			// サービス契約番号
			wariCcMap.put("svc_kei_no", subBean.sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
			// サービス契約ステータス
			wariCcMap.put("svc_kei_stat", subBean.sendMessageString("サービス契約ステータス", X31CWebConst.DATABEAN_GET_VALUE));
			// サービスコード
			wariCcMap.put("svc_cd", subBean.sendMessageString("サービスコード", X31CWebConst.DATABEAN_GET_VALUE));
			// 料金グループコード
			wariCcMap.put("prc_grp_cd", subBean.sendMessageString("料金グループコード", X31CWebConst.DATABEAN_GET_VALUE));
			// 料金コースコード
			wariCcMap.put("pcrs_cd", subBean.sendMessageString("料金コースコード", X31CWebConst.DATABEAN_GET_VALUE));
			// 料金プランコード
			wariCcMap.put("pplan_cd", subBean.sendMessageString("料金プランコード", X31CWebConst.DATABEAN_GET_VALUE));
			wariCcList.add(wariCcMap);
		}
		
		// 元がネットと電話両方の場合
		if(kikiJikkouCount == 2)
		{
			mtSvc = "";
		}
		
		parentMap.put("HEIGOUMOTOList", heigomtParmList);
		
		parentMap.put("kikiJikkouCount", String.valueOf(kikiJikkouCount));
		
		/***サービス契約内訳<eo光電話>情報変更***/
		X31SDataBeanAccessArray kaisenList = bean[0].getDataBeanArray("選択回線内訳情報リスト");
		
		// 併合先回線受渡し用リスト
		ArrayList<HashMap<String, Object>> heigoskParmList = new ArrayList<HashMap<String, Object>>();
		
		int skKikiJikkouCount = 0;
		
		String skSvc = "";
		
		subBean = null;
		count = kaisenList.getCount().intValue();
		
		for (int i = 0; i < count; i++)
		{
			subBean = kaisenList.getDataBean(i);
			HashMap<String, Object> childMap = new HashMap<String, Object>();
			
			// 併合先サービス契約回線内訳番号
			parentMap.put("heigo_sk_svc_kei_kaisen_ucwk_no", subBean.sendMessageString("サービス契約回線内訳番号", X31CWebConst.DATABEAN_GET_VALUE));
			childMap.put("heigo_sk_svc_kei_kaisen_ucwk_no", subBean.sendMessageString("サービス契約回線内訳番号", X31CWebConst.DATABEAN_GET_VALUE));
			
			// サービス契約番号
			childMap.put("svc_kei_no", subBean.sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
			
			if (isSvcCd(subBean))
			{
				// 併合先サービス契約番号
				parentMap.put("heigo_sk_svc_kei_no", subBean.sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
			}
			
			// サービスコード
			childMap.put("svc_cd", subBean.sendMessageString("サービスコード", X31CWebConst.DATABEAN_GET_VALUE));
			
			heigoskParmList.add(childMap);
			
			// 整理番号（同一回線で１種類）
			parentMap.put("seiri_no", subBean.sendMessageString("整理番号", X31CWebConst.DATABEAN_GET_VALUE));
			
/* ++++++++++ OM-2013-0003819 開始 ++++++++++ */
			/*** 割引自動適用ＣＣ用パラメタ設定 ***/
//			wariCcMap = new HashMap<String, Object>();
//			
//			// サービス契約番号
//			wariCcMap.put("svc_kei_no", subBean.sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));
//			// サービス契約ステータス
//			wariCcMap.put("svc_kei_stat", subBean.sendMessageString("サービス契約ステータス", X31CWebConst.DATABEAN_GET_VALUE));
//			// サービスコード
//			wariCcMap.put("svc_cd", subBean.sendMessageString("サービスコード", X31CWebConst.DATABEAN_GET_VALUE));
//			// 料金グループコード
//			wariCcMap.put("prc_grp_cd", subBean.sendMessageString("料金グループコード", X31CWebConst.DATABEAN_GET_VALUE));
//			// 料金コースコード
//			wariCcMap.put("pcrs_cd", subBean.sendMessageString("料金コースコード", X31CWebConst.DATABEAN_GET_VALUE));
//			// 料金プランコード
//			wariCcMap.put("pplan_cd", subBean.sendMessageString("料金プランコード", X31CWebConst.DATABEAN_GET_VALUE));
//			wariCcList.add(wariCcMap);
/* ++++++++++ OM-2013-0003819 終了 ++++++++++ */
			
			String svcCd = subBean.sendMessageString("サービスコード", X31CWebConst.DATABEAN_GET_VALUE);
			// ネットか電話があればカウントする
			if(JKKCommonConst.SVC_CD_NET.equals(svcCd) || JKKCommonConst.SVC_CD_02.equals(svcCd))
			{
				skKikiJikkouCount++;
				
/* ++++++++++ v7.00.00 追加開始 ++++++++++ */
				// ネット
				if(JKKCommonConst.SVC_CD_NET.equals(svcCd))
				{
					skSvc = "01";
				}
				else
				{
					skSvc = "02";
				}
/* ++++++++++ v7.00.00 追加終了 ++++++++++ */
			}
		}
		
		// 先がネットと電話両方の場合
		if(skKikiJikkouCount == 2)
		{
			skSvc = "";
		}
		// 併合元のサービスフラグ
		parentMap.put("mt_svc", mtSvc);
		// 併合先のサービスフラグ
		parentMap.put("sk_svc", skSvc);
		
		parentMap.put("HEIGOUSAKIList", heigoskParmList);
		
		// 割引自動適用CC用キー
		parentMap.put("wari_cc_list", wariCcList);
		
		// 更新年月日時分秒(更新前)(回線対象サービス契約)
//		parentMap.put("kk0241_upd_dtm_bf", bean[0].sendMessageString("最終更新年月日時分秒", X31CWebConst.DATABEAN_GET_VALUE));
		// 使用終了年月日(運用日-1)
		parentMap.put("use_endymd", JPCDateUtil.addDay(unyo_ymd, -1));
		// 異動区分
		parentMap.put("ido_div", bean[0].sendMessageString("異動区分", X31CWebConst.DATABEAN_GET_VALUE));
		// ソート区分
		parentMap.put("key_sort_kbn", "2");
		// 変更理由コード(場所番号変更）
		parentMap.put("key_chg_rsn_cd", "1");
		// 進捗ステータス(回線内訳併合完了）
		parentMap.put("prg_stat", "G020");
		// 異動理由コード
		parentMap.put("ido_rsn_cd", bean[0].sendMessageString("異動理由コード", X31CWebConst.DATABEAN_GET_VALUE));
		
		
		
		outputMap.put("KKSV070501CC", parentMap);
		
		return outputMap;
	}

	/**
	 * サービスコードの判定を行います。
	 * @param bean
	 * @return boolean
	 */
	private boolean isSvcCd(X31SDataBeanAccess bean)
	{
		String svcCd = bean.sendMessageString("サービスコード", X31CWebConst.DATABEAN_GET_VALUE);
		if (JKKStrConst.CD00130_01.equals(svcCd) || JKKStrConst.CD00130_02.equals(svcCd))
		{
			return true;
		}
		return false;
	}
}
