/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUDslOpSvcKeiCC
*   ソースファイル名：JFUDslOpSvcKeiCC.java
*   作成者          ：富士通
*   日付            ：2011年10月04日
*＜機能概要＞
*   eo光テレビオプションサービス契約解約コンポーネント部品
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/10/04   FJ）南岡    新規作成
*   v3.00       2012/05/09   FJ）南岡    変更:サービスIF取り込み
*   v4.00       2012/09/18   FJ）美濃原  変更:サービスIF取り込み
*   v4.00       2012/09/28   FJ）美濃原  変更:締結済の異動理由を変更
*   v4.00       2012/10/15   FJ) 大島    変更【ANK-1223-00-00】:進捗補足事項編集対応
*   v4.00       2012/11/27   FJ）中谷    変更【IT1-2012-0002162】サービス課金終了年月日設定値の改修
*   v5.00       2013/06/12   FJ）岡井    変更【内部障害】進捗登録.異動年月日時分秒にシステム日付を設定するように修正
**********************************************************************/
package com.fujitsu.futurity.bp.custom.common;

import java.util.ArrayList;
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.common.constant.JPCModelConstant;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0011D020CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0161C110CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C240CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0351C250CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0821A010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0821A010CBSMsg1List;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK1091D010CBSMsg1List;

/**
 * eo光テレビオプションサービス契約解約コンポーネント部品
 * <br>
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JFUDslOpSvcKeiCC extends JFUBaseCC
{

	/** オプションサービス契約解約リスト */
	private static final String CC_OP_SVC_KEI_DSL_LIST = "cc_op_svc_kei_dsl_list";

	/** オプションサービス契約番号 */
	private static final String CC_OP_SVC_KEI_NO = "cc_op_svc_kei_no";

	/** 更新年月日時分秒 */
	private static final String CC_UPD_DTM = "cc_upd_dtm";

	/** オプションサービスコード */
	private static final String CC_OP_SVC_CD = "cc_op_svc_cd";

	/** SYSID */
	private static final String CC_SYSID = "cc_sysid";

	/** サービス契約番号 */
	private static final String CC_SVC_KEI_NO = "cc_svc_kei_no";

	/** 進捗特記事項1 */
	private static final String CC_PRG_TKJK_1 = "cc_prg_tkjk_1";

	/** サービス契約内訳番号 */
	private static final String CC_SVC_KEI_UCWK_NO = "cc_svc_kei_ucwk_no";

	/** オプションサービス契約ステータス */
	private static final String CC_OP_SVC_KEI_STAT = "cc_op_svc_kei_stat";

	/** 請求契約番号 */
	private static final String CC_SEIKY_KEI_NO = "cc_seiky_kei_no";

	/** 申込内容承認登録.更新年月日時分秒 */
	private static final String KK0011_UPD_DTM = "kk0011_upd_dtm";

	/** オプションサービス契約解約.更新年月日時分秒 */
	private static final String KK0351_UPD_DTM = "kk0351_upd_dtm";

	/** 最終更新年月日時分秒 */
	private static final String LAST_UPD_DTM = "last_upd_dtm";

	/** ■申込内容承認登録 */
	/** テンプレートID(申込内容承認登録) */
	private static final String TEMPLATE_ID_MSKM_NAIYO_SHONIN_ADD = "EKK0011D020";

	/** テンプレートID(明細)(申込内容承認登録) */
	private static final String TEMPLATE_ID_DETAIL_MSKM_NAIYO_SHONIN_ADD = EKK0011D020CBSMsg.EKK0011D020CBSMSG1LIST;

	/* ++++++++++ v3.00 修正開始 ++++++++++ */
	/** IN項目リスト(申込内容承認登録) */
	private static final List<String> IN_COLUMN_LIST_MSKM_NAIYO_SHONIN_ADD =
			Arrays.asList(EKK0011D020CBSMsg.SYSID, EKK0011D020CBSMsg.MSKM_SBT_CD, EKK0011D020CBSMsg.MSKMSHO_ARIV_YMD, EKK0011D020CBSMsg.MSKM_UK_DTM,
					EKK0011D020CBSMsg.MSKM_UK_TNT_USER_ID, EKK0011D020CBSMsg.MSKM_YMD, EKK0011D020CBSMsg.TTL_BUSINESS_CENTER_UK_NO,
					EKK0011D020CBSMsg.TTL_BUSINESS_MSKM_OPT_CD, EKK0011D020CBSMsg.MSKM_RRKS_TELNO, EKK0011D020CBSMsg.MSKM_JSSIS_SBT_CD,
					EKK0011D020CBSMsg.CUST_YOBO_JIKO, EKK0011D020CBSMsg.TEL_RRK_KIBOD_SBT_CD,
					EKK0011D020CBSMsg.TEL_RRK_KIBO_TIME_CD, EKK0011D020CBSMsg.TAKCHO_KIBOD_SBT_CD, EKK0011D020CBSMsg.TAKCHO_KIBO_TIME_CD,
					EKK0011D020CBSMsg.KARI_MSKM_FLG, EKK0011D020CBSMsg.REFERER, EKK0011D020CBSMsg.KEPCO_CUSTINFO_JUJU_DOI_UM,
					EKK0011D020CBSMsg.SHOSA_BF_RRK_JIKO_YH, EKK0011D020CBSMsg.SHOSA_BF_RRK_JIKO, EKK0011D020CBSMsg.USE_SVC_KEIZK_SBT_CD,
					EKK0011D020CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD, EKK0011D020CBSMsg.UK_TNTSHA_SKBT_CD, EKK0011D020CBSMsg.KOJI_REQ_INFO_RRK_JIKO,
					EKK0011D020CBSMsg.MSKM_ROUTE_SKBT_CD, EKK0011D020CBSMsg.AGNT_MSKM_TRTG_UM);
	/* ++++++++++ v3.00 修正終了 ++++++++++ */

	/** SC実行結果取得キー(申込内容承認登録) */
	private static final String TEMP_TEMPLATE_KEY_MSKM_NAIYO_SHONIN_ADD =
			TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_MSKM_NAIYO_SHONIN_ADD + TEMP_TEMPLATE_PRIFIX_SEP;

	/** ■オプションサービス一意照会 */
	private static final String TEMPLATE_ID_OP_SVC = "EKK0821A010";

	/** テンプレートID(明細)(オプションサービス一意照会) */
	private static final String TEMPLATE_ID_DETAIL_OP_SVC = EKK0821A010CBSMsg.EKK0821A010CBSMSG1LIST;

	/** IN項目リスト(オプションサービス一意照会) */
	private static final List<String> IN_COLUMN_LIST_OP_SVC =
			Arrays.asList(EKK0821A010CBSMsg.KEY_OP_SVC_CD, EKK0821A010CBSMsg.KEY_RSV_APLY_YMD, EKK0821A010CBSMsg.KEY_GENE_ADD_DTM);
	/** 関連チェックエラー項目(オプションサービス契約一意照会) */
	private static final String ERROR_COLUMN_OP_SVC_CD = EKK0821A010CBSMsg.KEY_OP_SVC_CD_ERR;
	/** SC実行結果取得キー(オプションサービス契約一意照会) */
	private static final String TEMP_TEMPLATE_KEY_OP_SVC = TEMP_TEMPLATE_PRIFIX + TEMPLATE_ID_OP_SVC + TEMP_TEMPLATE_PRIFIX_SEP;

	/** ■オプションサービス契約解約 */
	/** テンプレートID(オプションサービス契約解約) */
	private static final String TEMPLATE_ID_OP_SVC_KEI_DSL = "EKK0351C240";

	/** IN項目リスト(オプションサービス契約解約) */
	private static final List<String> IN_COLUMN_LIST_OP_SVC_KEI_DSL =
			Arrays.asList(EKK0351C240CBSMsg.OP_SVC_KEI_NO, EKK0351C240CBSMsg.MSKM_DTL_NO, EKK0351C240CBSMsg.RSV_TSTA_KIBO_YMD,
					EKK0351C240CBSMsg.SVC_ENDYMD, EKK0351C240CBSMsg.SVC_CHRG_ENDYMD, EKK0351C240CBSMsg.SVC_DLRE_CD, EKK0351C240CBSMsg.SVC_DLRE_MEMO,
					EKK0351C240CBSMsg.DSL_TNT_USER_ID, EKK0351C240CBSMsg.PNLTY_HASSEI_CD, EKK0351C240CBSMsg.IDO_DIV, EKK0351C240CBSMsg.UPD_DTM_BF);

	/** ■オプションサービス契約解約確定 */
	/** テンプレートID(オプションサービス契約解約確定) */
	private static final String TEMPLATE_ID_OP_SVC_KEI_DSL_FIX = "EKK0351C250";

	/** IN項目リスト(オプションサービス契約解約確定) */
	private static final List<String> IN_COLUMN_LIST_OP_SVC_KEI_DSL_FIX =
			Arrays.asList(EKK0351C250CBSMsg.OP_SVC_KEI_NO, EKK0351C250CBSMsg.SVC_ENDYMD, EKK0351C250CBSMsg.SVC_CHRG_ENDYMD,
					EKK0351C250CBSMsg.SVC_DLRE_CD, EKK0351C250CBSMsg.SVC_DLRE_MEMO, EKK0351C250CBSMsg.DSL_TNT_USER_ID, EKK0351C250CBSMsg.IDO_DIV,
					EKK0351C250CBSMsg.UPD_DTM_BF);

	/** ■進捗登録 */
	/** テンプレートID(進捗登録) */
	private static final String TEMPLATE_ID_PRG_ADD = "EKK1091D010";

	/** テンプレートID(明細)(進捗登録) */
	private static final String TEMPLATE_ID_DETAIL_PRG_ADD = EKK1091D010CBSMsg.EKK1091D010CBSMSG1LIST;

	/** IN項目リスト(進捗登録) */
	private static final List<String> IN_COLUMN_LIST_PRG_ADD =
			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);

	/** ■申込明細照査・後続業務依頼 */
	/** テンプレートID(申込明細照査・後続業務依頼) */
	private static final String TEMPLATE_ID_MSKM_DTL_SHOSA_KZKWRK_REQ = "EKK0021C060";

	/** IN項目リスト(申込明細照査・後続業務依頼) */
	private static final List<String> IN_COLUMN_LIST_MSKM_DTL_SHOSA_KZKWRK_REQ =
			Arrays.asList(EKK0021C060CBSMsg.MSKM_DTL_NO, EKK0021C060CBSMsg.RRK_JIKO_ADD_DTM, EKK0021C060CBSMsg.MSKM_DTL_SHOSA_DTM,
					EKK0021C060CBSMsg.KZKWRK_REQYMD, EKK0021C060CBSMsg.RRK_JIKO, EKK0021C060CBSMsg.UPD_DTM_BF, EKK0021C060CBSMsg.IDO_DIV,
					EKK0021C060CBSMsg.TELNO, EKK0021C060CBSMsg.DAIHYO_TELNO, EKK0021C060CBSMsg.TELNO_USE_PLACE_NO,
					EKK0021C060CBSMsg.SIP_USER_ID_DEL_ZUMI_FLG, EKK0021C060CBSMsg.TEL_BAS_HOST_ID, EKK0021C060CBSMsg.N_050_OP_TELNO,
					EKK0021C060CBSMsg.KIKI_NINSHO_ID, EKK0021C060CBSMsg.KIKI_NINSHO_ID_PWD);

	/**
	 * eo光テレビオプションサービス契約解約実行処理<br>
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ管理クラス
	 * @throws Exception 例外
	 */
	public IRequestParameterReadWrite dslOpSvcKei(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{

		// リクエストパラメータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// 機能コード取得
		String funcCode = getFuncCode(param, fixedText);

		// オプションサービス契約解約一覧取得
		ArrayList opSvcKeiDslList = (ArrayList)inMap.get(CC_OP_SVC_KEI_DSL_LIST);

		// オプションサービス契約解約一覧の件数分、解約処理を行う。
		for (int i = 0; i < opSvcKeiDslList.size(); i++)
		{

			// オプションサービス契約解約情報取得
			HashMap opSvcKeiDslMap = (HashMap)opSvcKeiDslList.get(i);

			// ●申込内容承認登録
			// 機能コード設定
			setFuncCode(param, fixedText, funcCode);
			// 上りマッピング
			setInMapMskmNaiyoShoninAdd(param, fixedText);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_MSKM_NAIYO_SHONIN_ADD, TEMPLATE_ID_DETAIL_MSKM_NAIYO_SHONIN_ADD,
					IN_COLUMN_LIST_MSKM_NAIYO_SHONIN_ADD, BLANK);
			// 下りマッピング
			setOutMapMskmNaiyoShoninAdd(param, fixedText, i);

			// ●オプションサービス一意照会
			// 機能コード設定(2:カレント)
			setFuncCode(param, fixedText, JPCModelConstant.FUNC_CD_2);
			// 上りマッピング
			setInMapOpSvc(param, fixedText, opSvcKeiDslMap);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_OP_SVC, TEMPLATE_ID_DETAIL_OP_SVC, IN_COLUMN_LIST_OP_SVC, ERROR_COLUMN_OP_SVC_CD);

			// ●オプションサービス契約解約
			// 機能コード設定
			setFuncCode(param, fixedText, funcCode);
			// 上りマッピング
			setInMapOpSvcKeiDsl(param, fixedText, opSvcKeiDslMap, i);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_OP_SVC_KEI_DSL, BLANK, IN_COLUMN_LIST_OP_SVC_KEI_DSL, BLANK);
			// 下りマッピング
			setOutMapOpSvcKeiDsl(param, fixedText);

			// 実行判定
			// 機能コードが"1"(チェック＆登録)の場合
			if (JPCModelConstant.FUNC_CD_1.equals(funcCode))
			{
				// オプションチャンネルオペレーション方法コード判定が"True"(自動)の場合
				if (checkOpChannelOprtnWayCd(param, fixedText, i))
				{
					// ●オプションサービス契約解約確定
					// 機能コード設定
					setFuncCode(param, fixedText, funcCode);
					// 上りマッピング
					setInMapOpSvcKeiDslFix(param, fixedText, opSvcKeiDslMap);
					// サービスIF実行
					executeSC(handle, param, fixedText, TEMPLATE_ID_OP_SVC_KEI_DSL_FIX, BLANK, IN_COLUMN_LIST_OP_SVC_KEI_DSL_FIX, BLANK);
					// 下りマッピング
					setOutMapOpSvcKeiDslFix(param, fixedText);
				}
			}

			// ●進捗登録
			// 機能コード設定
			setFuncCode(param, fixedText, funcCode);
			// 上りマッピング
			setInMapPrgAdd(param, fixedText, opSvcKeiDslMap, i);
			// サービスIF実行
			executeSC(handle, param, fixedText, TEMPLATE_ID_PRG_ADD, TEMPLATE_ID_DETAIL_PRG_ADD, IN_COLUMN_LIST_PRG_ADD, BLANK);

			// 実行判定
			// 機能コードが"1"(チェック＆登録)の場合
			if (JPCModelConstant.FUNC_CD_1.equals(funcCode))
			{
				// オプションチャンネルオペレーション方法コード判定が"True"(自動)
				if (checkOpChannelOprtnWayCd(param, fixedText, i))
				{
					// ●申込明細照査・後続業務依頼
					// 機能コード設定
					setFuncCode(param, fixedText, funcCode);
					// 上りマッピング
					setInMapMskmDtlShosaKzkwrkReq(param, fixedText, opSvcKeiDslMap, i);
					// サービスIF実行
					executeSC(handle, param, fixedText, TEMPLATE_ID_MSKM_DTL_SHOSA_KZKWRK_REQ, BLANK, IN_COLUMN_LIST_MSKM_DTL_SHOSA_KZKWRK_REQ, BLANK);
				}
			}
		}
		return param;
	}

	/**
	 * 上りマッピング項目設定(申込内容承認登録)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	private void setInMapMskmNaiyoShoninAdd(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);
		// SYSID
		inMap.put(EKK0011D020CBSMsg.SYSID, inMap.get(CC_SYSID));
		// 申込種別コード
		inMap.put(EKK0011D020CBSMsg.MSKM_SBT_CD, JFUStrConst.KK0971_MSKM_SBT_CD_00026);
		// 申込受付年月日時分秒
		inMap.put(EKK0011D020CBSMsg.MSKM_UK_DTM, JFUBPCommon.getOpeDateTimeStamp(null));
		// 申込年月日
		inMap.put(EKK0011D020CBSMsg.MSKM_YMD, JFUBPCommon.getOpeDate(null));
		// コンシューマ営業用申込状態識別コード
		inMap.put(EKK0011D020CBSMsg.CONSMBSN_MSKM_STAT_SKBT_CD, JFUStrConst.CD00760_04);

		// 申込内容承認登録明細
		List<HashMap> inList = new ArrayList();
		HashMap<String, String> childMap = new HashMap();

		// 申込形態コード
		childMap.put(EKK0011D020CBSMsg1List.MSKM_FORM_CD, JFUStrConst.CD00591_01);

		childMap.put(EKK0011D020CBSMsg1List.MSKMSHO_NO, null);
		childMap.put(EKK0011D020CBSMsg1List.WEB_UK_NO, null);
		childMap.put(EKK0011D020CBSMsg1List.MSKM_DTL_SBT_CD, null);
		childMap.put(EKK0011D020CBSMsg1List.RRKS_KTAI_TELNO, null);
		childMap.put(EKK0011D020CBSMsg1List.RRKS_OFFC_NM, null);
		childMap.put(EKK0011D020CBSMsg1List.DT_RRKS_TELNO, null);
		childMap.put(EKK0011D020CBSMsg1List.NEW_MSKM_SBT_CD, null);
		childMap.put(EKK0011D020CBSMsg1List.MSKM_OPTNTY_CD, null);
		childMap.put(EKK0011D020CBSMsg1List.TAKCHO_KIBO_APO_KIGEN_YMD, null);
		childMap.put(EKK0011D020CBSMsg1List.KOJI_APO_RRKS_SHITEI_CD, null);
		childMap.put(EKK0011D020CBSMsg1List.KOJI_APO_RRKS_TELNO, null);
		childMap.put(EKK0011D020CBSMsg1List.RRK_JIKO_ADD_DTM, null);
		childMap.put(EKK0011D020CBSMsg1List.MSKM_RRKS_MLAD, null);
		childMap.put(EKK0011D020CBSMsg1List.KOJI_PRG_TCHI_MLAD, null);
		childMap.put(EKK0011D020CBSMsg1List.RRK_JIKO, null);
		childMap.put(EKK0011D020CBSMsg1List.KJSC_TCH_KTAI_MLAD, null);
		childMap.put(EKK0011D020CBSMsg1List.ML_SEND_JGI_FLG, null);
		childMap.put(EKK0011D020CBSMsg1List.ML_SEND_JGI_RSN_MEMO, null);
		childMap.put(EKK0011D020CBSMsg1List.BMP_MSKM_RRKS_TLN, null);
		childMap.put(EKK0011D020CBSMsg1List.OP_SVC_HKTGI_UM, null);
		childMap.put(EKK0011D020CBSMsg1List.DSL_ATICLE_SOHU_KIBO_UM, null);
		childMap.put(EKK0011D020CBSMsg1List.RRK_WAY_HOKI, null);
		childMap.put(EKK0011D020CBSMsg1List.NEWCONST_BUKKEN_CD, null);
		childMap.put(EKK0011D020CBSMsg1List.HUKKAT_ANKEN_FLG, null);
		childMap.put(EKK0011D020CBSMsg1List.SAME_EQUIP_RE_MSKM_CD, null);
		childMap.put(EKK0011D020CBSMsg1List.HNIN_CFM_ATICLE_SBT_CD, null);
		childMap.put(EKK0011D020CBSMsg1List.MSKMSHO_SBT_CD, null);
		/* ++++++++++ v3.00 修正開始 ++++++++++ */
		childMap.put(EKK0011D020CBSMsg1List.KEI_HUKA_CD, null);
		/* ++++++++++ v3.00 修正終了 ++++++++++ */
		childMap.put(EKK0011D020CBSMsg1List.MAP_TEMP_UM, null);
		childMap.put(EKK0011D020CBSMsg1List.KCN_STB_MSKM_CNT, null);
		childMap.put(EKK0011D020CBSMsg1List.KCN_STB_KIND_CD, null);
		/* ++++++++++ v3.00 修正開始 ++++++++++ */
		childMap.put(EKK0011D020CBSMsg1List.MANSSBSYS_RNKI_YO_KIJIRAN, null);
		childMap.put(EKK0011D020CBSMsg1List.MANSION_ID, null);
		childMap.put(EKK0011D020CBSMsg1List.CATID, null);
		childMap.put(EKK0011D020CBSMsg1List.MKM_UK_SBT_CD, null);
		childMap.put(EKK0011D020CBSMsg1List.MSKMSHO_TRAT_IF_TNTSHA_NM, null);
		childMap.put(EKK0011D020CBSMsg1List.MSKMSHO_TRAT_IF_TELNO, null);
		/* ++++++++++ v3.00 修正終了 ++++++++++ */
		childMap.put(EKK0011D020CBSMsg1List.MSKMSHO_DTL_NO, null);	//申込書明細番号
		childMap.put(EKK0011D020CBSMsg1List.HNIN_CFM_ATICLE_NM, null);	//本人確認書類名

		inList.add(childMap);
		inMap.put(TEMPLATE_ID_DETAIL_MSKM_NAIYO_SHONIN_ADD, inList);
	}

	/**
	 * 下りマッピング項目設定(申込内容承認登録)
	 * 
	 * <br>
	 * @param param			リクエストパラメータ
	 * @param fixedText		サービスメッセージ
	 * @param index			オプションサービス契約処理対象インデックス
	 * @throws RequestParameterException
	 */
	private void setOutMapMskmNaiyoShoninAdd(IRequestParameterReadWrite param, String fixedText, int index) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		int templateNo = index + 1;

		// 申込登録明細情報取得
		List<HashMap> mskmNaiyoList =
				getTemplateList((HashMap)param.getData(fixedText), TEMP_TEMPLATE_KEY_MSKM_NAIYO_SHONIN_ADD + templateNo,
						TEMPLATE_ID_DETAIL_MSKM_NAIYO_SHONIN_ADD);
		HashMap mskmNaiyoMap = mskmNaiyoList.get(0);

		// 更新年月日時分秒
		mskmNaiyoMap.put(KK0011_UPD_DTM, inMap.get(EKK0161C110CBSMsg.UPD_DTM));
	}

	/**
	 * 上りマッピング項目設定(オプションサービス一意照会)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param opSvcKeiDslMap オプションサービス契約解約情報
	 * @throws RequestParameterException
	 */
	private void setInMapOpSvc(IRequestParameterReadWrite param, String fixedText, HashMap opSvcKeiDslMap) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// オプションサービスコード
		inMap.put(EKK0821A010CBSMsg.KEY_OP_SVC_CD, opSvcKeiDslMap.get(CC_OP_SVC_CD));
		// 予約適用年月日
		inMap.put(EKK0821A010CBSMsg.KEY_RSV_APLY_YMD, JFUBPCommon.getOpeDate(null));
	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約解約)
	 * 
	 * <br>
	 * @param param				リクエストパラメータ
	 * @param fixedText			サービスメッセージ
	 * @param opSvcKeiDslMap	オプションサービス契約解約情報
	 * @param index				オプションサービス契約処理対象インデックス
	 * @throws RequestParameterException
	 */
	private void setInMapOpSvcKeiDsl(IRequestParameterReadWrite param, String fixedText, HashMap opSvcKeiDslMap, int index)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// サービス終了年月日を取得
		String svcEndDate = getEndDate(opSvcKeiDslMap);

		// 異動区分を取得
		String idoDiv = getIdoDiv(opSvcKeiDslMap);

		int templateNo = index + 1;

		// 申込登録明細情報取得
		List<HashMap> mskmNaiyoList =
				getTemplateList((HashMap)param.getData(fixedText), TEMP_TEMPLATE_KEY_MSKM_NAIYO_SHONIN_ADD + templateNo,
						TEMPLATE_ID_DETAIL_MSKM_NAIYO_SHONIN_ADD);
		HashMap mskmNaiyoMap = mskmNaiyoList.get(0);

		// オプションサービス契約番号
		inMap.put(EKK0351C240CBSMsg.OP_SVC_KEI_NO, opSvcKeiDslMap.get(CC_OP_SVC_KEI_NO));
		// 申込明細番号
		inMap.put(EKK0351C240CBSMsg.MSKM_DTL_NO, mskmNaiyoMap.get(EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		// 予約適用開始希望年月日
		inMap.put(EKK0351C240CBSMsg.RSV_TSTA_KIBO_YMD, svcEndDate);
		// サービス解約理由コード
		inMap.put(EKK0351C240CBSMsg.SVC_DLRE_CD, JFUStrConst.CD00879_01);
		// 異動区分
		inMap.put(EKK0351C240CBSMsg.IDO_DIV, idoDiv);
		// サービス課金終了年月日
		inMap.put(EKK0351C240CBSMsg.SVC_CHRG_ENDYMD, JFUBPCommon.getSvcChrgEndYmdOpTv(null));
		
		// 最終更新年月日設定
		String lastUpdDtm = String.valueOf(opSvcKeiDslMap.get(CC_UPD_DTM));

		// 機能コードが"1"(チェック＆登録)の場合
		if (JPCModelConstant.FUNC_CD_1.equals(getFuncCode(param, fixedText)))
		{
			// 解約処理が1件目以降の場合
			if (templateNo > 1)
			{
				lastUpdDtm = String.valueOf(inMap.get(LAST_UPD_DTM));
			}
		}

		// 更新年月日時分秒(更新前)
		inMap.put(EKK0351C240CBSMsg.UPD_DTM_BF, lastUpdDtm);
	}

	/**
	 * 下りマッピング項目設定(オプションサービス契約解約)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	private void setOutMapOpSvcKeiDsl(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		// 更新年月日時分秒
		inMap.put(KK0351_UPD_DTM, inMap.get(EKK0351C240CBSMsg.UPD_DTM));
		// 最終更新年月日時分秒
		inMap.put(LAST_UPD_DTM, inMap.get(EKK0351C240CBSMsg.UPD_DTM));
	}

	/**
	 * 上りマッピング項目設定(オプションサービス契約解約確定)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @param opSvcKeiDslMap オプションサービス契約解約情報
	 * @throws RequestParameterException
	 */
	private void setInMapOpSvcKeiDslFix(IRequestParameterReadWrite param, String fixedText, HashMap opSvcKeiDslMap) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		// サービス終了年月日を取得
		String svcEndDate = getEndDate(opSvcKeiDslMap);

		// 異動区分を取得
		String idoDiv = getIdoDiv(opSvcKeiDslMap);

		// オプションサービス契約番号
		inMap.put(EKK0351C250CBSMsg.OP_SVC_KEI_NO, opSvcKeiDslMap.get(CC_OP_SVC_KEI_NO));
		// サービス終了年月日
		inMap.put(EKK0351C250CBSMsg.SVC_ENDYMD, svcEndDate);
		// サービス解約理由コード
		inMap.put(EKK0351C250CBSMsg.SVC_DLRE_CD, JFUStrConst.CD00879_01);
		// 異動区分
		inMap.put(EKK0351C250CBSMsg.IDO_DIV, idoDiv);
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0351C250CBSMsg.UPD_DTM_BF, inMap.get(KK0351_UPD_DTM));
		// サービス課金終了年月日
		inMap.put(EKK0351C250CBSMsg.SVC_CHRG_ENDYMD,JFUBPCommon.getSvcChrgEndYmdOpTv(null));
	}

	/**
	 * 下りマッピング項目設定(オプションサービス契約解約確定)
	 * 
	 * <br>
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @throws RequestParameterException
	 */
	private void setOutMapOpSvcKeiDslFix(IRequestParameterReadWrite param, String fixedText) throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap<String, Object> inMap = (HashMap<String, Object>)param.getData(fixedText);

		// 最終更新年月日時分秒
		inMap.put(LAST_UPD_DTM, inMap.get(EKK0351C250CBSMsg.UPD_DTM));
	}

	/**
	 * 上りマッピング項目設定(進捗登録)
	 * 
	 * <br>
	 * @param param				リクエストパラメータ
	 * @param fixedText			サービスメッセージ
	 * @param opSvcKeiDslMap	オプションサービス契約解約情報
	 * @param index				オプションサービス契約処理対象インデックス
	 * @throws RequestParameterException
	 */
	private void setInMapPrgAdd(IRequestParameterReadWrite param, String fixedText, HashMap opSvcKeiDslMap, int index)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		int templateNo = index + 1;

		// 異動区分を取得
		String idoDiv = getIdoDiv(opSvcKeiDslMap);

		// 申込登録明細情報取得
		List<HashMap> mskmNaiyoList =
				getTemplateList((HashMap)param.getData(fixedText), TEMP_TEMPLATE_KEY_MSKM_NAIYO_SHONIN_ADD + templateNo,
						TEMPLATE_ID_DETAIL_MSKM_NAIYO_SHONIN_ADD);
		HashMap mskmNaiyoMap = mskmNaiyoList.get(0);

		// 申込明細番号
		inMap.put(EKK1091D010CBSMsg.MSKM_DTL_NO, mskmNaiyoMap.get(EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		// 請求契約番号
		inMap.put(EKK1091D010CBSMsg.SEIKY_KEI_NO, inMap.get(CC_SEIKY_KEI_NO));
		// サービス契約番号
		inMap.put(EKK1091D010CBSMsg.SVC_KEI_NO, inMap.get(CC_SVC_KEI_NO));
		// サービス契約内訳番号
		inMap.put(EKK1091D010CBSMsg.SVC_KEI_UCWK_NO, opSvcKeiDslMap.get(CC_SVC_KEI_UCWK_NO));
		// オプションサービス契約番号
		inMap.put(EKK1091D010CBSMsg.OP_SVC_KEI_NO, opSvcKeiDslMap.get(CC_OP_SVC_KEI_NO));
		// 異動区分
		inMap.put(EKK1091D010CBSMsg.IDO_DIV, idoDiv);
		// 異動年月日時分秒
		inMap.put(EKK1091D010CBSMsg.IDO_DTM, JFUBPCommon.getSysDateTimeStamp());
		// 進捗ステータス
		inMap.put(EKK1091D010CBSMsg.PRG_STAT, JFUStrConst.CD00647_5102);
		// 進捗特記事項1
		inMap.put(EKK1091D010CBSMsg.PRG_TKJK_1, inMap.get(CC_PRG_TKJK_1));
		// 異動理由明細
		List<HashMap> inList = new ArrayList();
		HashMap<String, String> childMap = new HashMap();
		// 異動理由コード
		childMap.put(EKK1091D010CBSMsg1List.IDO_RSN_CD, JFUStrConst.CD00846_56);
		// 異動理由メモ
		childMap.put(EKK1091D010CBSMsg1List.IDO_RSN_MEMO, "");

		inList.add(childMap);
		inMap.put(TEMPLATE_ID_DETAIL_PRG_ADD, inList);
	}

	/**
	 * 上りマッピング項目設定(申込明細照査・後続業務依頼)
	 * 
	 * <br>
	 * @param param				リクエストパラメータ
	 * @param fixedText			サービスメッセージ
	 * @param opSvcKeiDslMap	オプションサービス契約解約情報
	 * @param index				オプションサービス契約処理対象インデックス
	 * @throws RequestParameterException
	 */
	private void setInMapMskmDtlShosaKzkwrkReq(IRequestParameterReadWrite param, String fixedText, HashMap opSvcKeiDslMap, int index)
			throws RequestParameterException
	{
		// ユーザデータ取得
		HashMap inMap = (HashMap)param.getData(fixedText);

		int templateNo = index + 1;

		// 異動区分を取得
		String idoDiv = getIdoDiv(opSvcKeiDslMap);

		// 申込登録明細情報取得
		List<HashMap> mskmNaiyoList =
				getTemplateList((HashMap)param.getData(fixedText), TEMP_TEMPLATE_KEY_MSKM_NAIYO_SHONIN_ADD + templateNo,
						TEMPLATE_ID_DETAIL_MSKM_NAIYO_SHONIN_ADD);
		HashMap mskmNaiyoMap = mskmNaiyoList.get(0);

		// 申込明細番号
		inMap.put(EKK0021C060CBSMsg.MSKM_DTL_NO, mskmNaiyoMap.get(EKK0011D020CBSMsg1List.MSKM_DTL_NO));
		// 後続業務依頼年月日
		inMap.put(EKK0021C060CBSMsg.KZKWRK_REQYMD, JFUBPCommon.getOpeDate(null));
		// 更新年月日時分秒(更新前)
		inMap.put(EKK0021C060CBSMsg.UPD_DTM_BF, mskmNaiyoMap.get(KK0011_UPD_DTM));
		// 異動区分
		inMap.put(EKK0021C060CBSMsg.IDO_DIV, idoDiv);
	}

	/**
	 * オプションチャンネルオペレーション方法コード判定処理
	 * 
	 * <br>
	 * @param param			リクエストパラメータ
	 * @param fixedText		サービスメッセージ
	 * @param index			オプションサービス契約処理対象インデックス
	 * @return true:自動 false:手動
	 * @throws RequestParameterException
	 */
	private boolean checkOpChannelOprtnWayCd(IRequestParameterReadWrite param, String fixedText, int index) throws RequestParameterException
	{

		int templateNo = index + 1;

		// オプションサービス一意照会
		List<HashMap> opSvcList =
				getTemplateList((HashMap)param.getData(fixedText), TEMP_TEMPLATE_KEY_OP_SVC + templateNo, TEMPLATE_ID_DETAIL_OP_SVC);
		HashMap<String, String> opSvcMap = opSvcList.get(0);

		// オプションチャンネルオペレーション方法コードが"1"(自動) または"2"(申込のみ手動)の場合
		if ("1".equals(opSvcMap.get(EKK0821A010CBSMsg1List.OP_CHANNEL_OPRTN_WAY_CD))
				|| "2".equals(opSvcMap.get(EKK0821A010CBSMsg1List.OP_CHANNEL_OPRTN_WAY_CD)))
		{
			return true;
		}

		return false;
	}

	/**
	 * チェック処理
	 * 
	 * <br>
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText サービスメッセージ
	 * @return リクエストパラメータ
	 * @throws Exception
	 */
	public HashMap<String, Object> getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Exception
	{
		return null;
	}

	/**
	 * サービス終了年月日取得処理
	 * 
	 * <br>
	 * @param opSvcKeiDslMap	リクエストパラメータ
	 * @return svcEndDate		サービス終了年月日
	 * @throws RequestParameterException
	 */
	private String getEndDate(HashMap opSvcKeiDslMap) throws RequestParameterException
	{
		String svcEndDate = null;

		// オプションｎサービス契約ステータスが"030"(締結済)の場合
		if (JFUStrConst.CD00037_030.equals(opSvcKeiDslMap.get(CC_OP_SVC_KEI_STAT)))
		{
			// オンライン運用日付を取得
			svcEndDate = JFUBPCommon.getOpeDate(null);
		}
		else
		{
			// オンライン運用日付の末日を取得
			svcEndDate = JFUBPCommon.getEndOfMonthOnlineDate(null);
		}
		return svcEndDate;
	}

	/**
	 * 異動区分取得処理
	 * 
	 * <br>
	 * @param opSvcKeiDslMap	リクエストパラメータ
	 * @return idoDiv			サービス終了年月日
	 * @throws RequestParameterException
	 */
	private String getIdoDiv(HashMap opSvcKeiDslMap) throws RequestParameterException
	{
		String idoDiv = null;

		// オプションサービス契約ステータスが"030"(締結済)の場合
		if (JFUStrConst.CD00037_030.equals(opSvcKeiDslMap.get(CC_OP_SVC_KEI_STAT)))
		{
			// 異動区分"00055"(オプション予約取消)を設定
			idoDiv = JFUStrConst.CD00576_00055;
		}
		else
		{
			// 異動区分"00031"(オプション設定)を設定
			idoDiv = JFUStrConst.CD00576_00031;
		}
		return idoDiv;
	}

}
