/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUAddSpPrgCC
*   ソースファイル名：JFUAddSpPrgCC.java
*   作成者          ：富士通
*   日付            ：2017年05月16日
*＜機能概要＞
*   セキュリティパック進捗登録コモンコンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v32.00      2017/05/16   FJ）張本   【ANK-3149-00-00】新セキュリティパック導入
*   
**********************************************************************/
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.JFUStrConst;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;

/**
 * セキュリティパック進捗登録コモンコンポーネント部品
 * 
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUAddSpPrgCC extends JFUBaseNetChgCommonCC
{

	/** IN項目:セキュリティーパック操作部品CC文字列 */
	private static final String IN_SP_OP_CC_TXT = "sp_op_cc_txt";
	/** IN項目:進捗特記事項1 セキュリティパック登録 */
	private static final String IN_PARAM_PRG_TKJK_1_SP = "prg_tkjk_1_sp";
	/** IN項目:進捗特記事項1 リモートサポートプラス登録 */
	private static final String IN_PARAM_PRG_TKJK_1_RSP = "prg_tkjk_1_rsp";
	/** IN項目:進捗特記事項1 マカフィーマルチアクセス登録 */
	private static final String IN_PARAM_PRG_TKJK_1_MCF = "prg_tkjk_1_mcf";
	/** IN項目:進捗特記事項1 インターネットサギウォール登録 */
	private static final String IN_PARAM_PRG_TKJK_1_ISW = "prg_tkjk_1_isw";
	/** IN項目:進捗特記事項1 ノートンファミリープレミア登録 */
	private static final String IN_PARAM_PRG_TKJK_1_NFP = "prg_tkjk_1_nfp";

	/** IN項目:進捗登録   */
	private static final String PRG_KBN_ADD = "add_";
	/** IN項目:進捗登録   */
	private static final String PRG_KBN_DSL = "dsl_";

	/** 登録用情報リスト */
	public static final String KEY_ADD_INFO_LIST = "add_info_list";
	/** 解約用情報リスト */
	public static final String KEY_DSL_INFO_LIST = "cancel_info_list";
	/** 処理結果明細リスト */
	private static final String TRAN_RESULT_LIST = "tran_result_list";

	/** 申込明細番号 */
	private static final String MSKM_DTL_NO = "mskm_dtl_no";
	/** 請求契約番号 */
	private static final String SEIKY_KEI_NO = "seiky_kei_no";
	/** サービス契約番号 */
	private static final String SVC_KEI_NO = "svc_kei_no";
	/** オプションサービス契約番号 */
	private static final String OP_SVC_KEI_NO = "op_svc_kei_no";
	/** 割引サービス契約番号 */
	private static final String WRIB_SVC_KEI_NO = "wrib_svc_kei_no";
	/** 進捗ステータス */
	private static final String PRG_STAT = "prg_stat";
	/** 割引サービスコード */
	private static final String WRIB_SVC_CD = "wrib_svc_cd";
	/** オプションサービスコード */
	private static final String OP_SVC_CD = "op_svc_cd";
	/** 異動区分 */
	private static final String IDO_DIV = "ido_div";

	/* ■□ EKK1091D010_進捗登録SC ■□ */
	/** テンプレートID(進捗登録) */
	private static final String TEMP_ID_EKK1091D010 = "EKK1091D010";
	/** テンプレートID(進捗登録明細) */
	private static final String TEMP_ID_DTL_EKK1091D010 = "EKK1091D010CBSMsg1List";
	/** IN項目リスト(進捗登録) */
	private static final List<String> IN_COL_LIST_EKK1091D010 =
			Arrays.asList(EKK1091D010CBSMsg.MSKM_DTL_NO, EKK1091D010CBSMsg.SEIKY_KEI_NO, EKK1091D010CBSMsg.SEIKY_WAY_NO_KOZA,
					EKK1091D010CBSMsg.SEIKY_WAY_NO_CRECARD, EKK1091D010CBSMsg.SVC_KEI_NO, EKK1091D010CBSMsg.SVC_KEI_UCWK_NO,
					EKK1091D010CBSMsg.SVC_KEI_KAISEN_UCWK_NO, EKK1091D010CBSMsg.KKTK_SVC_KEI_NO, EKK1091D010CBSMsg.OP_SVC_KEI_NO,
					EKK1091D010CBSMsg.SEIOPSVC_KEI_NO, EKK1091D010CBSMsg.SBOP_SVC_KEI_NO, EKK1091D010CBSMsg.WRIB_SVC_KEI_NO,
					EKK1091D010CBSMsg.IDO_DIV, EKK1091D010CBSMsg.IDO_DTM, EKK1091D010CBSMsg.PRG_STAT, EKK1091D010CBSMsg.PRG_MEMO,
					EKK1091D010CBSMsg.PRG_TKJK_1, EKK1091D010CBSMsg.PRG_TKJK_2, EKK1091D010CBSMsg.PRG_DTM_I);
	/** 関連チェックエラー項目(進捗登録) */
	private static final String ERR_COL_EKK1091D010 = null;

	/**
	 * セキュリティパック進捗登録処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Throwable 
	 */
	public IRequestParameterReadWrite addSpPrg(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{

		try
		{
			// ユーザデータ取得
			HashMap inMap = (HashMap)param.getData(fixedText);

			// IN項目:セキュリティーパック操作部品CC文字列
			String inParamSpOpCC = (String)(inMap).get(IN_SP_OP_CC_TXT);

			// セキュリティーパック操作部品CCマップ
			HashMap<String, Object> parentMap = (HashMap<String, Object>)param.getData(inParamSpOpCC);

			String[] infoList = { KEY_ADD_INFO_LIST, KEY_DSL_INFO_LIST };
			String[] prgKbn = { PRG_KBN_ADD, PRG_KBN_DSL };

			String idoDtm = JFUBPCommon.getSysDateTimeStamp();

			// 登録用／解約用情報リスト
			for (int i = 0; i < infoList.length; i++)
			{
				List<HashMap<String, Object>> addList = (List<HashMap<String, Object>>)parentMap.get(infoList[i]);

				if (addList != null)
				{
					for (HashMap addMap : addList)
					{
						// 処理結果明細リスト
						List<HashMap<String, Object>> tranList = (List<HashMap<String, Object>>)addMap.get(TRAN_RESULT_LIST);

						if (tranList != null)
						{
							for (HashMap dtlMap : tranList)
							{
								// スマートリンクプレミアムパックは除外する
								if (JFUStrConst.KK0841_WRIB_SVC_CD_PREPA.equals(dtlMap.get(WRIB_SVC_CD)))
								{
									continue;
								}

								// ○EKK1091D010_進捗登録
								// ユーザデータ初期化
								JFUBPCommon.initData(param, fixedText, IN_COL_LIST_EKK1091D010);
								// 上りマッピング
								setInMapEKK1091D010(param, fixedText, dtlMap, (String)parentMap.get(IDO_DIV), idoDtm, prgKbn[i]);
								// サービスIF実行
								JFUBPCommon.executeSC(handle, param, fixedText, TEMP_ID_EKK1091D010, TEMP_ID_DTL_EKK1091D010,
										IN_COL_LIST_EKK1091D010, ERR_COL_EKK1091D010);
							}
						}

					}
				}
			}
		}
		finally
		{
			this.deleteTempArea(param, fixedText);
		}
		return param;
	}

	/**
	 * 上りマッピング項目設定(進捗登録)
	 *
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param dataMap 処理結果データマップ
	 * @param idoDiv 異動区分
	 * @param idoDtm 異動年月日時分秒
	 * @param prgKbn 進捗登録区分
	 * @throws RequestParameterException
	 */
	private void setInMapEKK1091D010(IRequestParameterReadWrite param, String fixedText, HashMap dataMap, String idoDiv, String idoDtm, String prgKbn)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード設定
		JFUBPCommon.setFuncCode(param, fixedText, getFuncCode(param, fixedText));

		// 申込明細番号
		inMap.put(EKK1091D010CBSMsg.MSKM_DTL_NO, dataMap.get(MSKM_DTL_NO));
		// 請求契約番号
		inMap.put(EKK1091D010CBSMsg.SEIKY_KEI_NO, dataMap.get(SEIKY_KEI_NO));
		// サービス契約番号
		inMap.put(EKK1091D010CBSMsg.SVC_KEI_NO, dataMap.get(SVC_KEI_NO));
		// オプションサービス契約番号
		inMap.put(EKK1091D010CBSMsg.OP_SVC_KEI_NO, dataMap.get(OP_SVC_KEI_NO));
		// 割引サービス契約番号
		inMap.put(EKK1091D010CBSMsg.WRIB_SVC_KEI_NO, dataMap.get(WRIB_SVC_KEI_NO));
		// 異動区分
		inMap.put(EKK1091D010CBSMsg.IDO_DIV, idoDiv);
		// 異動年月日時分秒
		inMap.put(EKK1091D010CBSMsg.IDO_DTM, idoDtm);
		// 進捗ステータス
		inMap.put(EKK1091D010CBSMsg.PRG_STAT, dataMap.get(PRG_STAT));
		// 進捗特記事項1
		if (JFUStrConst.KK0841_WRIB_SVC_CD_SECUPA.equals(dataMap.get(WRIB_SVC_CD)))
		{
			inMap.put(EKK1091D010CBSMsg.PRG_TKJK_1, inMap.get(prgKbn + IN_PARAM_PRG_TKJK_1_SP));
		}
		else if (JFUStrConst.CD00136_B021.equals(dataMap.get(OP_SVC_CD)))
		{
			inMap.put(EKK1091D010CBSMsg.PRG_TKJK_1, inMap.get(prgKbn + IN_PARAM_PRG_TKJK_1_RSP));
		}
		else if (JFUStrConst.CD00136_B130.equals(dataMap.get(OP_SVC_CD)))
		{
			inMap.put(EKK1091D010CBSMsg.PRG_TKJK_1, inMap.get(prgKbn + IN_PARAM_PRG_TKJK_1_MCF));
		}
		else if (JFUStrConst.CD00136_B131.equals(dataMap.get(OP_SVC_CD)))
		{
			inMap.put(EKK1091D010CBSMsg.PRG_TKJK_1, inMap.get(prgKbn + IN_PARAM_PRG_TKJK_1_ISW));
		}
		else if (JFUStrConst.CD00136_B132.equals(dataMap.get(OP_SVC_CD)))
		{
			inMap.put(EKK1091D010CBSMsg.PRG_TKJK_1, inMap.get(prgKbn + IN_PARAM_PRG_TKJK_1_NFP));
		}

	}
}
