/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUAddCommonMappingCC.
*   ソースファイル名：JFUAddCommonMappingCC.java
*   作成者          ：富士通
*   日付            ：2011年10月24日
*＜機能概要＞
*   ロント新規または追加申込処理での共有マッピング処理部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v7.00       2014/01/20   FJ）文元    新規作成
*   
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.exception.RequestParameterException;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;

import eo.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0081A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1681B001CBSMsg;

/**
 * フロント新規または追加申込処理での共有マッピング処理部品
 * 
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUAddCommonMappingCC extends JFUBaseNetChgCommonCC
{	
	// ■IN項目
	/** IN項目:サービス契約番号(テレビ)  */
	private static final String IN_SVC_KEI_NO_TV = "in_svc_kei_no_tv";
	/** IN項目：更新年月日時分秒(更新前) テレビ */
	private static final String IN_TV_UPD_DTM_BF = "in_tv_upd_dtm_bf";
	
	/* ■□ サービス契約一意照会SC ■□ */
	/** テンプレートID(サービス契約一意照会) */
	private static final String TEMPLATE_ID_EKK0081A010 = "EKK0081A010";
	/** テンプレートID(サービス契約一意照会明細) */
	private static final String TEMPLATE_ID_EKK0081A010_DETAIL = EKK0081A010CBSMsg.EKK0081A010CBSMSG1LIST;
	/** IN項目リスト(サービス契約一意照会) */
	private static final List<String> IN_COLUMN_LIST_EKK0081A010 =
			Arrays.asList(EKK0081A010CBSMsg.KEY_SVC_KEI_NO, EKK0081A010CBSMsg.KEY_GENE_ADD_DTM, EKK0081A010CBSMsg.KEY_RSV_APLY_YMD);
	/** 関連チェックエラー項目(サービス契約一意照会) */
	private static final String ERROR_COLUMN_EKK0081A010 = EKK0081A010CBSMsg.KEY_SVC_KEI_NO_ERR;
	/** SC実行結果取得キー(サービス契約一意照会) */
	private static final String TEMP_TEMPLATE_KEY_EKK0081A010 = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_EKK0081A010 + TEMP_TEMPLATE_PRIFIX_SEP + "1";

	/**
	 * 最新の機器提供サービス契約（多機能）から更新年月日時分秒取得し共有マップへ設定処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Throwable 
	 */
	public IRequestParameterReadWrite setSvkeiLastUpdDtmByTakino(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		String inParamKeySvcKeiNo = (String)inMap.get(IN_SVC_KEI_NO_TV);
		
		if (inParamKeySvcKeiNo == null || inParamKeySvcKeiNo.length() == 0)
		{
			// テレビの申込なしの場合、処理終了
			return param;
		}
		
		// ●サービス契約一意照会
		// ユーザデータ初期化
		initData(param, fixedText, IN_COLUMN_LIST_EKK0081A010);
		// 上りマッピング
		setInMapSvcKeiUniqueSearch(param, fixedText, inParamKeySvcKeiNo);
		// サービスIF実行
		executeSC(handle, param, fixedText, TEMPLATE_ID_EKK0081A010, TEMPLATE_ID_EKK0081A010_DETAIL, IN_COLUMN_LIST_EKK0081A010, ERROR_COLUMN_EKK0081A010);
		// 更新年月日時分秒
		String updDtmBf = getTemplateListValue(inMap, TEMP_TEMPLATE_KEY_EKK0081A010, TEMPLATE_ID_EKK0081A010_DETAIL, EKK0081A010CBSMsg1List.LAST_UPD_DTM, 0);

		// ●更新年月日時分秒(更新前) テレビを取得
		String tvUpdDtmBf = (String)inMap.get(IN_TV_UPD_DTM_BF);
		
		// ●テレビの現在の最終更新年月日時分秒がある場合、機器提供サービス契約(多機能)最新の最終更新年月日時分秒を比較
		if (tvUpdDtmBf != null && tvUpdDtmBf.length() > 0)
		{
			// = 0
			// < -
			// > +
			if (tvUpdDtmBf.compareTo(updDtmBf) < 0)
			{
				// lastUpdDtmが大きければその値を共有マップに設定
				JFUBPCommon.setTvSvkeiLastUpdDtm(param, updDtmBf);
			}
		}
		
		return param;
	}

	/**
	 * 上りマッピング項目設定(サービス契約一意照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param svcKeiNo サービス契約番号
	 * @throws RequestParameterException
	 */
	private void setInMapSvcKeiUniqueSearch(IRequestParameterReadWrite param, String fixedText, String svcKeiNo) throws RequestParameterException
	{
		// 機能コード設定(2:カレント)
		setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);

		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 予約適用年月日
		inMap.put(EKK0081A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));
		// サービス契約番号
		inMap.put(EKK1681B001CBSMsg.KEY_SVC_KEI_NO, svcKeiNo);
	}
	
	/**
	 * チェック処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	@Override
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}
}
