/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：KKSV0500_KKSV0500OPDBMapper
*	ソースファイル名：KKSV0500_KKSV0500OPDBMapper.java
*	作成者			：Fujitsu
*	日付			：2012年03月12日
*＜機能概要＞
*	BP（有料視聴者一覧データ件数取得）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/03/12   FJ          新規作成
*   v4.00.00    2013/01/27   FJ)強矢     【ST4-2013-0000094】性能障害対応
*
**********************************************************************/
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.web.webview.KKW12101SF.KKW12101SFConst;

/**
 * DataBean-BPマッピングをする。
 * @author 909488
 * 
 */
public class KKSV0500_KKSV0500OPDBMapper
{
	
	/**
	 * コンストラクタ
	 */
	public KKSV0500_KKSV0500OPDBMapper()
	{
	}
	
	/**
	 * 上りマッピングをする
	 * @param bean サービスフォームBean
	 * @param outputMap
	 * @param func_code 機能コード
	 * @return HashMap
	 */
	public HashMap setKKSV050001CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		if(bean == null)
		{
			return null;
		}
		
		if(bean.length != 1)
		{
			return null;
		}
		
		// オプションサービス一覧リスト
		X31SDataBeanAccessArray opSvcList = bean[0].getDataBeanArray(KKW12101SFConst.OP_SVC_LIST);
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		
		// 抽出年月（制御） → 有料視聴者一覧データ件数取得CC.ＫＥＹ＿集計年月
		parentMap.put("key_shuk_ym", bean[0].sendMessageString(KKW12101SFConst.CTRL_CHSHT_YM, X31CWebConst.DATABEAN_GET_VALUE));
		// コード(op_svc_list.code[0]を設定) → 有料視聴者一覧データ件数取得CC.ＫＥＹ＿オプションサービスコード１
		parentMap.put("key_op_svc_cd_1", opSvcList.getDataBean(0).sendMessageString(KKW12101SFConst.CODE_02, X31CWebConst.DATABEAN_GET_VALUE));
		// コード(op_svc_list.code[1]を設定) → 有料視聴者一覧データ件数取得CC.ＫＥＹ＿オプションサービスコード２
		parentMap.put("key_op_svc_cd_2", opSvcList.getDataBean(1).sendMessageString(KKW12101SFConst.CODE_02, X31CWebConst.DATABEAN_GET_VALUE));
		// コード(op_svc_list.code[2]を設定) → 有料視聴者一覧データ件数取得CC.ＫＥＹ＿オプションサービスコード３
		parentMap.put("key_op_svc_cd_3", opSvcList.getDataBean(2).sendMessageString(KKW12101SFConst.CODE_02, X31CWebConst.DATABEAN_GET_VALUE));
		
		outputMap.put("KKSV050001CC", parentMap);
		
		return outputMap;
	}
	
	/**
	 * 下りマッピング
	 * @param bean サービスフォームBean
	 * @param outputMap
	 * @return X31SDataBeanAccess[]
	 */
	public X31SDataBeanAccess[] getKKSV050001CC(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		HashMap parentMap = null;
		if(outputMap.containsKey("KKSV050001CC"))
		{
			parentMap = (HashMap)outputMap.get("KKSV050001CC");
		}
		
		// 契約者数合計情報をマッピングし、契約者数有料情報件数、契約者数無料情報件数、契約者数停止情報件数を設定する
		getKKSV050001CC(bean, parentMap, "tv_op_list_gk_kei", 
				KKW12101SFConst.TV_OP_LIST_GK_KEI, KKW12101SFConst.TV_OP_LIST_YRYO_KEI_CNT, 
				KKW12101SFConst.TV_OP_LIST_MURYO_KEI_CNT, KKW12101SFConst.TV_OP_LIST_STP_KEI_CNT);
		
		
		// STB台数合計情報をマッピングし、STB台数有料情報件数、STB台数無料情報件数、STB台数停止情報件数を設定する
		int tv_op_list_gk_stb_cnt = getKKSV050001CC(bean, parentMap, "tv_op_list_gk_stb", 
				KKW12101SFConst.TV_OP_LIST_GK_STB, KKW12101SFConst.TV_OP_LIST_YRYO_STB_CNT, 
				KKW12101SFConst.TV_OP_LIST_MURYO_STB_CNT, KKW12101SFConst.TV_OP_LIST_STP_STB_CNT);
		
		// STB台数合計情報件数
		bean[0].sendMessageString(KKW12101SFConst.TV_OP_LIST_GK_STB_CNT, 
				X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(tv_op_list_gk_stb_cnt));
		
		
		// 先月比合計（増）をマッピングし、先月比有料（増）件数、先月比無料（増）件数、先月比停止（増）件数を設定する
		int tv_op_gk_back_month_rt_zou_cnt = getKKSV050001CC(bean, parentMap, "tv_op_gk_back_month_rt_zou", 
				KKW12101SFConst.TV_OP_GK_BACK_MONTH_RT_ZOU, KKW12101SFConst.TV_OP_YRYO_BACK_MONTH_RT_ZOU_CNT, 
				KKW12101SFConst.TV_OP_MRYO_BACK_MONTH_RT_ZOU_CNT, KKW12101SFConst.TV_OP_STP_BACK_MONTH_RT_ZOU_CNT);
		
		// 先月比合計（増）件数
		bean[0].sendMessageString(KKW12101SFConst.TV_OP_GK_BACK_MONTH_RT_ZOU_CNT, 
				X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(tv_op_gk_back_month_rt_zou_cnt));
		
		
		// 先月比合計（減）をマッピングし、先月比有料（減）件数、先月比無料（減）件数、先月比停止（減）件数を設定する
		int tv_op_gk_back_month_rt_gen_cnt = getKKSV050001CC(bean, parentMap, "tv_op_gk_back_month_rt_gen", 
				KKW12101SFConst.TV_OP_GK_BACK_MONTH_RT_GEN, KKW12101SFConst.TV_OP_YRYO_BACK_MONTH_RT_GEN_CNT, 
				KKW12101SFConst.TV_OP_MRYO_BACK_MONTH_RT_GEN_CNT, KKW12101SFConst.TV_OP_STP_BACK_MONTH_RT_GEN_CNT);
		
		// 先月比合計（減）件数
		bean[0].sendMessageString(KKW12101SFConst.TV_OP_GK_BACK_MONTH_RT_GEN_CNT, 
				X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(tv_op_gk_back_month_rt_gen_cnt));
		
		
		return bean;
	}
	
	/**
	 * 下りマッピング
	 * @param bean サービスフォームBean
	 * @param parentMap
	 * @param mapKey
	 * @param componentID
	 * @param cntYryoKey
	 * @param cntMryoKey
	 * @param cntStpKey
	 * @return 合計件数
	 */
	private int getKKSV050001CC(X31SDataBeanAccess[] bean, 
									HashMap parentMap, 
									String mapKey, 
									String componentID, 
									String cntYryoKey, 
									String cntMryoKey, 
									String cntStpKey)
	{
		
		X31SDataBeanAccessArray subbeanArray = bean[0].getDataBeanArray(componentID);
		subbeanArray.clearArray();
		
		int cnt_gk = 0;
		int cnt_yryo = 0;
		int cnt_mryo = 0;
		int cnt_stp = 0;
		
		if(parentMap.containsKey(mapKey))
		{
			ArrayList childList = (ArrayList)parentMap.get(mapKey);
			cnt_gk = childList.size();
			
			for(int i = 0; i < childList.size(); i++)
			{
				X31SDataBeanAccess subbean = subbeanArray.addDataBean();
				HashMap childMap = (HashMap)childList.get(i);
				
				// ＴＶ契約状態コード
				String tv_kei_stat_cd = (String)childMap.get("tv_kei_stat_cd");
				
				if ("1".equals(tv_kei_stat_cd))
				{
					// "1":契約中 の場合 "有料"にカウント
					cnt_yryo++;
				}
				else if ("2".equals(tv_kei_stat_cd))
				{
					// "2":無料中 の場合 "無料"にカウント
					cnt_mryo++;
				}
				else if ("3".equals(tv_kei_stat_cd))
				{
					// "3":停止中 の場合 "停止"にカウント
					cnt_stp++;
				}
				
				// サービス契約番号 ← 有料視聴者一覧データ件数取得CC.サービス契約番号
				subbean.sendMessageString(KKW12101SFConst.SVC_KEI_NO_03, 
						X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("svc_kei_no"));
				// ＴＶ契約状態コード ← 有料視聴者一覧データ件数取得CC.ＴＶ契約状態コード
				subbean.sendMessageString(KKW12101SFConst.TV_KEI_STAT_CD_03, 
						X31CWebConst.DATABEAN_SET_VALUE, tv_kei_stat_cd);
				// 機器製造番号 ← 有料視聴者一覧データ件数取得CC.機器製造番号
				subbean.sendMessageString(KKW12101SFConst.KIKI_SEIZO_NO_03, 
						X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kiki_seizo_no"));
				// ＳＴＢＩＤ ← 有料視聴者一覧データ件数取得CC.ＳＴＢＩＤ
				subbean.sendMessageString(KKW12101SFConst.STB_ID_03, 
						X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("stb_id"));
				// ＳＹＳＩＤ ← 有料視聴者一覧データ件数取得CC.ＳＹＳＩＤ
				subbean.sendMessageString(KKW12101SFConst.SYSID_03, 
						X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("sysid"));
			}
		}
		
		// 有料件数
		bean[0].sendMessageString(cntYryoKey, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(cnt_yryo));
		
		// 無料件数
		bean[0].sendMessageString(cntMryoKey, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(cnt_mryo));
		
		// 停止件数
		bean[0].sendMessageString(cntStpKey, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(cnt_stp));
		
		// 合計件数
		return cnt_gk;
	}
	
}
