/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：CNSV0021_CNSV0021OPDBMapper
*	ソースファイル名：CNSV0021_CNSV0021OPDBMapper.java
*	作成者			：FJ
*	日付			：2011年08月03日
*＜機能概要＞
*	BP（コンテンツ請求照会(検索ボタン押下)）へのＤ−Ｂマッピングクラスです。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/03	FJ		新規作成
*	v1.00.00	2013/03/02	FJ)味岡	ST1-2013-0000456:コンテンツ請求データ取得方法時のエラー対応
*	v20.00.00	2015/11/13	FJ)清原	【ANK-2565-00-00】クレジットカード番号預かりサービス導入（Step3：預かり番号化）
*   v20.00.01	2015/12/17  FJ)頼経		【ANK-2663-00-00】LalaCALL 代理店対応(STNet・テレビトクシマ)
*	v58.00.00   2022/04/12  FJ)北村     【ANK-3846-00-00】【クレカ】クリアパス→ペイジェント移行
*	v58.00.01	2022/07/27  FJ)北村		【IT1-2022-0000040】決済ID不正
*	v65.00.00	2023/08/01	FJ）吉田	【ANK-4346-00-00】【eo定期】CCMG再構築対応
*
**********************************************************************/
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.JCNStrConst;
import eo.common.util.JCNStringUtil;
import eo.common.util.JPCUtilCommon;
import eo.web.webview.common.JCNEditPrc;
import eo.web.webview.common.JCNWebCommon;

/**
 * DataBean-BPマッピングをする。
 * 
 */
public class CNSV0021_CNSV0021OPDBMapper {
	
	/**
	 * コンストラクタ
	 */
	public CNSV0021_CNSV0021OPDBMapper(){
	}
	

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：コンテンツ請求照会
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	// ANK-4346-00-00 MOD START
//	public HashMap setCNSV002101SC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
	public HashMap setCNSV002102CC(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code) {
	// ANK-4346-00-00 MOD END
		
		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);

		// ANK-4346-00-00 MOD START
//		// ＳＹＳＩＤ → コンテンツ請求照会マップ.SYSID
//		parentMap.put("sysid", bean[0].sendMessageString("ＳＹＳＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
//		// 請求対象年月選択値 → コンテンツ請求照会マップ.課金対象月
//		parentMap.put("chrg_trgt_ym", bean[0].sendMessageString("請求対象年月選択値", X31CWebConst.DATABEAN_GET_VALUE));
//
//		outputMap.put("CNSV002101SC", parentMap);

		// ＳＹＳＩＤ → コンテンツ請求照会マップ.SYSID
		parentMap.put("key_sysid", bean[0].sendMessageString("ＳＹＳＩＤ", X31CWebConst.DATABEAN_GET_VALUE));
		// 請求対象年月選択値 → コンテンツ請求照会マップ.課金対象月
		parentMap.put("key_chrg_trgt_ym", bean[0].sendMessageString("請求対象年月選択値", X31CWebConst.DATABEAN_GET_VALUE));

		outputMap.put("CNSV002102CC", parentMap);
		// ANK-4346-00-00 MOD END
						
		return outputMap;
	}


	/**
	 * 下りマッピング
	 * @param bean　[0]：コンテンツ請求照会
	 * @param outputMap
	 */
	@SuppressWarnings("unchecked")
	// ANK-4346-00-00 MOD START
//	public X31SDataBeanAccess[] getCNSV002101SC(X31SDataBeanAccess[] bean, HashMap outputMap, boolean authFlg){
	public X31SDataBeanAccess[] getCNSV002102CC(X31SDataBeanAccess[] bean, HashMap outputMap, boolean authFlg){
	// ANK-4346-00-00 MOD END
		int syokeiKomi = 0;
		int syokeiNuki = 0;
		int gokei = 0;

		HashMap parentMap = null;
		// ANK-4346-00-00 MOD START
//		if(outputMap.containsKey("CNSV002101SC")){
//			parentMap = (HashMap)outputMap.get("CNSV002101SC");
//		}
		if(outputMap.containsKey("CNSV002102CC")){
			parentMap = (HashMap)outputMap.get("CNSV002102CC");
		}
		// ANK-4346-00-00 MOD END

		ArrayList childList = null;
		
		// ANK-4346-00-00 MOD START
//		X31SDataBeanAccessArray listCNSV002101SC_cont_sei_kbt_cont_sei_list = bean[0].getDataBeanArray("コンテンツ請求個別");
		X31SDataBeanAccessArray listCNSV002102SC_cont_sei_kbt_cont_sei_list = bean[0].getDataBeanArray("コンテンツ請求個別");
		// ANK-4346-00-00 MOD END
		childList = null;
		// ANK-4346-00-00 MOD START
//		if(listCNSV002101SC_cont_sei_kbt_cont_sei_list != null && parentMap != null && parentMap.containsKey("cont_sei_list")){
		if(listCNSV002102SC_cont_sei_kbt_cont_sei_list != null && parentMap != null && parentMap.containsKey("cont_sei_list")){
		// ANK-4346-00-00 MOD END
			childList = (ArrayList)parentMap.get("cont_sei_list");

			for(int i = 0, j = 0; i < childList.size(); ){
				X31SDataBeanAccess subbean = null;
				// ANK-4346-00-00 MOD START
//				if(listCNSV002101SC_cont_sei_kbt_cont_sei_list.getCount() -1 >= i){
//					subbean = listCNSV002101SC_cont_sei_kbt_cont_sei_list.getDataBean(i);
//				}else{
//					subbean = listCNSV002101SC_cont_sei_kbt_cont_sei_list.addDataBean();
//				}
				if(listCNSV002102SC_cont_sei_kbt_cont_sei_list.getCount() -1 >= i){
					subbean = listCNSV002102SC_cont_sei_kbt_cont_sei_list.getDataBean(i);
				}else{
					subbean = listCNSV002102SC_cont_sei_kbt_cont_sei_list.addDataBean();
				}
				// ANK-4346-00-00 MOD END
				HashMap childMap = (HashMap)childList.get(i);
				if (subbean == null) {
					continue;
				}
				// コンテンツ請求個別.コンテンツ支払い方法コード ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.コンテンツ支払い方法コード
				if (childMap != null) {
					subbean.sendMessageString("コンテンツ支払い方法コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("cont_payway_cd"));
				} else {
					subbean.sendMessageString("コンテンツ支払い方法コード", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// コンテンツ請求個別.カード会社コード ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.カード会社コード
				if (childMap != null) {
					subbean.sendMessageString("カード会社コード", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_comp_cd"));
				} else {
					subbean.sendMessageString("カード会社コード", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// コンテンツ請求個別.カード会社名 ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.カード会社名
				if (childMap != null) {
					subbean.sendMessageString("カード会社名", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_comp_nm"));
				} else {
					subbean.sendMessageString("カード会社名", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// コンテンツ請求個別.クレジットカードＩＤ ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.クレジットカードＩＤ
				if (childMap != null) {
					subbean.sendMessageString("クレジットカードＩＤ", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_id"));
				} else {
					subbean.sendMessageString("クレジットカードＩＤ", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// コンテンツ請求個別.クレジットカード番号 ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.クレジットカード番号
				if (childMap != null) {
					subbean.sendMessageString("クレジットカード番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("crecard_no"));
					if(!authFlg)
					{
						subbean.sendMessageString("クレジットカード番号", X31CWebConst.DATABEAN_SET_VALUE, JCNStrConst.MASK_CARD_NO);
					}
				} else {
					subbean.sendMessageString("クレジットカード番号", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// コンテンツ請求個別.ＩＳＰ決済サービス契約番号 ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.ＩＳＰ決済サービス契約番号
				if (childMap != null) {
					subbean.sendMessageString("ＩＳＰ決済サービス契約番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("isp_kssai_svc_kei_no"));
				} else {
					subbean.sendMessageString("ＩＳＰ決済サービス契約番号", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
				// コンテンツ請求個別.請求契約番号 ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.請求契約番号
				if (childMap != null) {
					subbean.sendMessageString("請求契約番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_kei_no"));
				} else {
					subbean.sendMessageString("請求契約番号", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
// ANK-3846-00-00 ADD START
				// コンテンツ請求個別.決済ＩＤ ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.決済ID
				if (childMap != null) {
					subbean.sendMessageString("決済ＩＤ", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("kssai_id"));
				} else {
					subbean.sendMessageString("決済ＩＤ", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}
// ANK-3846-00-00 ADD END
				
				// 支払い方法表示用編集
				String payway = "";
				String str_isp_kssai_svc_kei_no = "";
				str_isp_kssai_svc_kei_no = (String)childMap.get("isp_kssai_svc_kei_no");
				
//				if (childMap.get("cont_payway_cd").equals("1")) {
				
				// ISP決済請求契約番号が空の場合はクレジットカードの表示処理を行う
				if ("".equals(str_isp_kssai_svc_kei_no))
				{
					// クレジットカード決済
//					v20.00.00 Mod Start
//					payway = (String)childMap.get("crecard_comp_nm") + "　カード番号：" + JCNWebCommon.crecardNoEdit((String)childMap.get("crecard_no"));
// ANK-3846-00-00 Mod START
//					payway = JCNWebCommon.editCreditCard((String)childMap.get("crecard_comp_nm"),
//														(String)childMap.get("crecard_no"),
//														(String)childMap.get("crecard_yk_kigen"),
//														(String)childMap.get("crecard_no_azkri_id"));
// v58.00.01 IT1-2022-0000040 MOD START
					// 決済ＩＤの値より半角スペースを削除
					String kssaiId = JPCUtilCommon.trim((String)childMap.get("kssai_id"));
					payway = JCNWebCommon.editCreditCard((String)childMap.get("crecard_comp_nm"),
														(String)childMap.get("crecard_no"),
														(String)childMap.get("crecard_yk_kigen"),
														(String)childMap.get("crecard_no_azkri_id"),
//														(String)childMap.get("kssai_id"));
														kssaiId);
// v58.00.01 IT1-2022-0000040 MOD END

// ANK-3846-00-00 Mod End
//					v20.00.00 Mod End
					if(!authFlg)
					{
// ANK-3846-00-00 Mod START
						//payway = JCNStrConst.MASK_CARD_NO;
						payway = JCNStrConst.MASK_CARD_NO + JCNStrConst.MASK_KSSAI_ID;
// ANK-3846-00-00 Mod End
					}
				} else {
					// ISP決済
					payway = "プロバイダ料金に合算【お客さまID：" + (String)childMap.get("isp_kssai_svc_kei_no") + "】";
					bean[0].sendMessageString("請求契約番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("seiky_kei_no"));
					bean[0].sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap.get("isp_kssai_svc_kei_no"));
				}
				if (childMap != null) {
					subbean.sendMessageString("支払い方法表示", X31CWebConst.DATABEAN_SET_VALUE, payway);
				} else {
					subbean.sendMessageString("支払い方法表示", X31CWebConst.DATABEAN_SET_VALUE, new String());
				}

				// ３層目比較用にデータを取得
//				String contPayCd = (String)childMap.get("cont_payway_cd");
				String isp_kssai_svc_kei_no = (String)childMap.get("isp_kssai_svc_kei_no");
				String crecardCompCd = (String)childMap.get("crecard_comp_cd");
				String crecardId = (String)childMap.get("crecard_id");
				X31SDataBeanAccessArray detailArray = subbean.getDataBeanArray("コンテンツ契約個別");
				
				int k = 0;
				for (j = i; j < childList.size(); j++, i++, k++) {
					HashMap detailMap = (HashMap)childList.get(j);
					// 比較対象のデータ取得
//					String wkContPayCd = (String)detailMap.get("cont_payway_cd");
					String wkisp_kssai_svc_kei_no = (String)detailMap.get("isp_kssai_svc_kei_no");
					String wkCrecardCompCd = (String)detailMap.get("crecard_comp_cd");
					String wkCrecardId = (String)detailMap.get("crecard_id");
					
					// コンテンツ支払い方法、カード会社コード、クレジットカードIDのいずれかが変わった時点でbreak
//					if ((!contPayCd.equals(wkContPayCd))||(!crecardCompCd.equals(wkCrecardCompCd))||(!crecardId.equals(wkCrecardId))) {
//						break;
//					}
					
					// ISP決済請求契約番号、カード会社コード、クレジットカードIDのいずれかが変わった時点でbreak
					if ((!wkisp_kssai_svc_kei_no.equals(isp_kssai_svc_kei_no))||(!crecardCompCd.equals(wkCrecardCompCd))||(!crecardId.equals(wkCrecardId))) {
						break;
					}

					X31SDataBeanAccess detail = detailArray.addDataBean();
					// コンテンツ請求個別.コンテンツ契約個別.コンテンツサービスコード ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.コンテンツサービスコード
					if (detailMap != null) {
						detail.sendMessageString("コンテンツサービスコード", X31CWebConst.DATABEAN_SET_VALUE, (String)detailMap.get("cont_svc_cd"));
					} else {
						detail.sendMessageString("コンテンツサービスコード", X31CWebConst.DATABEAN_SET_VALUE, new String());
					}
					// コンテンツ請求個別.コンテンツ契約個別.コンテンツサービス名 ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.コンテンツサービス名
					if (detailMap != null) {
						detail.sendMessageString("コンテンツサービス名", X31CWebConst.DATABEAN_SET_VALUE, (String)detailMap.get("cont_svc_nm"));
					} else {
						detail.sendMessageString("コンテンツサービス名", X31CWebConst.DATABEAN_SET_VALUE, new String());
					}
					// コンテンツ請求個別.コンテンツ契約個別.コンテンツコード ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.コンテンツコード
					if (detailMap != null) {
						detail.sendMessageString("コンテンツコード", X31CWebConst.DATABEAN_SET_VALUE, (String)detailMap.get("cont_cd"));
					} else {
						detail.sendMessageString("コンテンツコード", X31CWebConst.DATABEAN_SET_VALUE, new String());
					}
					// コンテンツ請求個別.コンテンツ契約個別.コンテンツ外部コード ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.コンテンツ外部コード
					if (detailMap != null) {
						detail.sendMessageString("コンテンツ外部コード", X31CWebConst.DATABEAN_SET_VALUE, (String)detailMap.get("cont_out_cd"));
					} else {
						detail.sendMessageString("コンテンツ外部コード", X31CWebConst.DATABEAN_SET_VALUE, new String());
					}
					// コンテンツ請求個別.コンテンツ契約個別.コンテンツ名 ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.コンテンツ名
					if (detailMap != null) {
						// ANK-2663-00-00 MOD START
						//detail.sendMessageString("コンテンツ名", X31CWebConst.DATABEAN_SET_VALUE, (String)detailMap.get("cont_nm"));
						// コンテンツ名用編集
						String wkContNm = "";
						// コンテンツサービスコードが0070（LaLaCall）かつ仕入先が設定されている場合
						if (JCNStrConst.CN0011_CONT_SVC_CD_050.equals((String)detailMap.get("cont_svc_cd")) && (String)detailMap.get("supplier") != null 
								&& !"".equals((String)detailMap.get("supplier"))){
							wkContNm = (String)detailMap.get("cont_nm") + "【" + (String)detailMap.get("supplier") + "】";
						} else {
							wkContNm = (String)detailMap.get("cont_nm") ;
						}
						detail.sendMessageString("コンテンツ名", X31CWebConst.DATABEAN_SET_VALUE, wkContNm);
						// ANK-2663-00-00 MOD END
					} else {
						detail.sendMessageString("コンテンツ名", X31CWebConst.DATABEAN_SET_VALUE, new String());
					}
					// コンテンツ請求個別.コンテンツ契約個別.コンテンツキャンペーンＩＤ ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.コンテンツキャンペーンＩＤ
					if (detailMap != null) {
						detail.sendMessageString("コンテンツキャンペーンＩＤ", X31CWebConst.DATABEAN_SET_VALUE, (String)detailMap.get("cont_campaign_id"));
					} else {
						detail.sendMessageString("コンテンツキャンペーンＩＤ", X31CWebConst.DATABEAN_SET_VALUE, new String());
					}
					// コンテンツ請求個別.コンテンツ契約個別.コンテンツキャンペーン名 ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.コンテンツキャンペーン名
					if (detailMap != null) {
						detail.sendMessageString("コンテンツキャンペーン名", X31CWebConst.DATABEAN_SET_VALUE, (String)detailMap.get("cont_campaign_nm"));
					} else {
						detail.sendMessageString("コンテンツキャンペーン名", X31CWebConst.DATABEAN_SET_VALUE, new String());
					}
					// コンテンツ請求個別.コンテンツ契約個別.数量 ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.コンテンツ購入数量
					if (detailMap != null) {
						detail.sendMessageString("数量", X31CWebConst.DATABEAN_SET_VALUE, (String)detailMap.get("cont_buy_cnt"));
					} else {
						detail.sendMessageString("数量", X31CWebConst.DATABEAN_SET_VALUE, new String());
					}
					// コンテンツ請求個別.コンテンツ契約個別.課金訂正区分名 ← コンテンツ請求照会マップ.コンテンツ請求照会リスト.コンテンツ課金訂正区分名
					if (detailMap != null) {
						// ANK-4346-00-00 MOD START
//						detail.sendMessageString("課金訂正区分名", X31CWebConst.DATABEAN_SET_VALUE, (String)detailMap.get("contchrgtesei_div_nm"));
						if(JCNStringUtil.isNullBlank((String)detailMap.get("contchrgtesei_div_nm")))
						{
							detail.sendMessageString("課金訂正区分名", X31CWebConst.DATABEAN_SET_VALUE, new String());
						}
						else{
							detail.sendMessageString("課金訂正区分名", X31CWebConst.DATABEAN_SET_VALUE, "("+(String)detailMap.get("contchrgtesei_div_nm")+")");
						}
						// ANK-4346-00-00 MOD END
					} else {
						detail.sendMessageString("課金訂正区分名", X31CWebConst.DATABEAN_SET_VALUE, new String());
					}
					
					if (k % 2 == 1) {
						detail.sendMessageString("ＣＳＳクラス名", X31CWebConst.DATABEAN_SET_VALUE, "odd");
					} else {
						detail.sendMessageString("ＣＳＳクラス名", X31CWebConst.DATABEAN_SET_VALUE, "even");
					}
					
					// コンテンツサービス個別.コンテンツ契約個別.０５０電話番号
					if (detailMap != null) {
						detail.sendMessageString("０５０電話番号", X31CWebConst.DATABEAN_SET_VALUE, JCNWebCommon.formatTelNo((String)detailMap.get("n_050_telno")));
					} else {
						detail.sendMessageString("０５０電話番号", X31CWebConst.DATABEAN_SET_VALUE, new String());
					}
					
					// 金額編集
					JCNEditPrc.editPrice1(detailMap, detail);
					
					// 小計算出
					syokeiKomi = syokeiKomi + Integer.parseInt(detail.sendMessageString("税込合計", X31CWebConst.DATABEAN_GET_VALUE));
					syokeiNuki = syokeiNuki + Integer.parseInt(detail.sendMessageString("本体料金", X31CWebConst.DATABEAN_GET_VALUE));
				}
				
				// 小計設定
				subbean.sendMessageString("小計税込", X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(syokeiKomi));
				subbean.sendMessageString("小計税抜", X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(syokeiNuki));
				
				gokei = gokei + syokeiKomi;
				syokeiKomi = 0;
				syokeiNuki = 0;
			}
			
			// 合計設定
			bean[0].sendMessageString("合計",  X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(gokei));
		}


		return bean;
	}


}