/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JEKK0081C080ETDA
*   ソースファイル名：JEKK0081C080ETDA.java
*   作成者          ：富士通
*   日付            ：2011年10月14日
*＜機能概要＞
*   サービス契約休止変更のDBアクセス部品クラス
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/10/14  富士通      新規作成
*   v5.00.01    2013/10/10  FJ）寺本    OM-2013-0002952
*   v6.00.00    2013/12/04  FJ）宇野    OM-2013-0004529
*  v10.00.00    2014/10/22  FJ) 齋藤    OM-2014-0003297 解約中に休止解除日を過ぎると休止解除できない
**********************************************************************/

package eo.ejb.common.db;

import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.util.JPCUtilCommon;
import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbm.entity.KK1681ETMsg;
import eo.ejb.cbm.entity.KK1681LE;
import eo.ejb.cbs.cbsmsg.EKK0081C080CBSMsg;
import eo.ejb.cbs.mainproc.JKKejbIdoRsvUtil;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.edit.JKKejbKK0081Edit;
import eo.ejb.common.rule.JKKejbRule0083001;

/**
 * <p>
 * サービス契約休止変更のDBアクセス部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK0081C080ETDA
{
	/** 予約適用コード：予約確定 */
	private static final String YOYAKU_KAKUTEI = "2";

	/** 異動予約詳細コード：サービス休止 */
	private static final String KEY_IDO_RSV_CD_005 = "005";

	/** 異動予約状態コード：未反映 */
	private static final String KEY_IDO_RSV_STAT_CD = "00"; 
	
	/** 異動予約状態コード：反映済 */
	private static final String YOYAKU_HANEIZUMI = "01";
	//2014/10/22 OM-2014-0003297 ADD START
	/** 異動予約詳細コード：サービス休止解除 */
	private static final String KEY_IDO_RSV_CD_006 = "006";
	
	/** 異動予約状態コード：取消済 */
	private static final String YOYAKU_TORIKESHIZUMI = "02";
	//2014/10/22 OM-2014-0003297 ADD END

	/** 無効フラグ 有効 */
	private static final String MK_FLG_VALID = "0";
	
	/** スキーマID 異動予約 */
	private static final String SCHEMAID_IDORSV = "KK1681";
	
	/** スキーマID サービス契約 */
	private static final String SCHEMAID_SVCKEI = "KK0081";
	
	/**
	 * <p>
	 * 新しいJEKK0081C080ETDAを作成します。
	 * </p>
	 */
	public JEKK0081C080ETDA()
	{
	}

	/**
	 * <p>
	 * 異動予約にDBアクセスを行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void execDBAccess(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// サービス契約のカレントレコード取得
		CAANMsg inETMsgCurrent = new CAANMsg(KK0081ETMsg.class.getName());
		inETMsgCurrent.set(KK0081ETMsg.SVC_KEI_NO, inCBSMsg.getObject(EKK0081C080CBSMsg.SVC_KEI_NO));
		inETMsgCurrent.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));
		CAANMsg retCurrent = new JKKejbKK0081DBABase().findByCurrent(inETMsgCurrent);

		// 相関ルールにて振舞うスキーマを判定
		JKKejbRule0083001 rule0083 = new JKKejbRule0083001(inCBSMsg);
		
		rule0083.setSvc_if_id(inCBSMsg.getString(JCMConstants.TEMPLATE_ID_KEY));
		rule0083.setOpe_date(JKKModelCommon.getOpeDate(inCBSMsg)); // 運用日時を設定
		rule0083.setChaf_svc_pause_rls_ymd(inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RLS_YMD)); // 変更後サービス休止解除年月日
		rule0083.setChbf_svc_pause_rls_ymd(retCurrent.getString(KK0081ETMsg.SVC_PAUSE_RLS_YMD)); // 変更前サービス休止解除年月日
		rule0083.setChaf_svc_pause_ymd(inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_YMD)); // 変更後サービス休止年月日
		rule0083.setChbf_svc_pause_ymd(retCurrent.getString(KK0081ETMsg.SVC_PAUSE_YMD)); // 変更前サービス休止年月日
		List<HashMap<String, Object>> ruleList = rule0083.referRuleEngine();
		
		if (null == ruleList)
		{
			// 相関ルールチェックの結果が0件の場合はエラーとする
			inCBSMsg.set(EKK0081C080CBSMsg.IDO_DIV_ERR, "EA");
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.TEMPLATE_CORRELATION_ERR);
			return;
		}
		
		// 相関ルールチェック結果を格納
		new JKKejbIdoRsvUtil().setOnlyIdoRsvFlg(inCBSMsg, inContext, ruleList);
		
		String ido_rsv_stat_cd  = null;
		String ido_rsv_dtl_cd  = null;

		
		for (HashMap<String, Object> hm : ruleList)
		{
			//異動予約詳細コードを取得
			ido_rsv_dtl_cd = (String)hm.get(JKKejbRule0083001.IDO_RSV_DTL_CD);

			//異動予約状態コードを取得
			ido_rsv_stat_cd = (String)hm.get(JKKejbRule0083001.IDO_RSV_STAT_CD);
			
			//異動予約詳細コードから更新対象の異動予約レコードを取得
			//2014/10/22 OM-2014-0003297 MOD START
			//CAANMsg[] currentIdoMsg = getCurrentKK1681(inCBSMsg, inContext, ido_rsv_dtl_cd);
			CAANMsg[] currentIdoMsg = getCurrentKK1681(inCBSMsg, inContext, ido_rsv_dtl_cd,KEY_IDO_RSV_STAT_CD);
			//2014/10/22 OM-2014-0003297 MOD END
			//2014/10/22 OM-2014-0003297 ADD START
			//異動予約レコードが存在しない場合、取消済のレコードを検索
			if (currentIdoMsg == null || currentIdoMsg.length == 0)
			{
				if(KEY_IDO_RSV_CD_006.equals(ido_rsv_dtl_cd)){
				currentIdoMsg = getCurrentKK1681(inCBSMsg, inContext, ido_rsv_dtl_cd,YOYAKU_TORIKESHIZUMI);
				}
			}
			//2014/10/22 OM-2014-0003297 ADD END
			if (SCHEMAID_IDORSV.equals(hm.get(JKKejbRule0083001.TRGT_SCHEMA_ID)))
			{
				//異動予約のDBアクセス
				updateKK1681(inCBSMsg, inContext, ido_rsv_dtl_cd, ido_rsv_stat_cd, currentIdoMsg);

			}

			if (SCHEMAID_SVCKEI.equals(hm.get(JKKejbRule0083001.TRGT_SCHEMA_ID)))
			{
				createKK0081(inCBSMsg, inContext, ido_rsv_dtl_cd, ido_rsv_stat_cd, currentIdoMsg);
			}
			
		}
		
	}
	
	/**
	 * 更新対象の異動予約の取得を行います。
	 * @param inCBSMsg 入力メッセージ
	 * @param inContext AgentDispatchContext
	 * @param ido_rsv_dtl_cd 異動予約詳細コード
	 * @return 更新対象の異動予約レコード
	 */
	//2014/10/22 OM-2014-0003297 MOD START
	//private CAANMsg[] getCurrentKK1681(CAANMsg inCBSMsg, AgentDispatchContext inContext, String ido_rsv_dtl_cd)
	private CAANMsg[] getCurrentKK1681(CAANMsg inCBSMsg, AgentDispatchContext inContext, String ido_rsv_dtl_cd, String kei_ido_rsv_stat_cd)
	//2014/10/22 OM-2014-0003297 MOD END
	{
		// 異動予約メッセージインスタンスを生成
		CAANMsg idoMsg = new CAANMsg(KK1681ETMsg.class.getName());

		// サービス契約番号に紐付く異動予約番号を取得するためにメッセージを生成
		idoMsg.set(KK1681ETMsg.SVC_KEI_NO, inCBSMsg.getString(EKK0081C080CBSMsg.SVC_KEI_NO));
		idoMsg.set(KK1681ETMsg.IDO_RSV_DTL_CD, ido_rsv_dtl_cd);
		//2014/10/22 OM-2014-0003297 MOD START
		//idoMsg.set(KK1681ETMsg.IDO_RSV_STAT_CD, KEY_IDO_RSV_STAT_CD);
		idoMsg.set(KK1681ETMsg.IDO_RSV_STAT_CD, kei_ido_rsv_stat_cd);
		//2014/10/22 OM-2014-0003297 MOD END
		idoMsg.set(KK1681ETMsg.MK_FLG, MK_FLG_VALID);

		// KK1681LEインスタンスの生成
		KK1681LE idoLe = new KK1681LE();

		// CAANMsg配列を生成
		CAANMsg[] resIdoMsg = new CAANMsg[]{};

		try
		{
			// ロジカルエンティティを生成し、異動予約を検索
			resIdoMsg = idoLe.findByCondition(idoMsg);
		}
		catch(CAANException ce)
		{
			throw new CAANRuntimeException(ce);
		}

		return resIdoMsg;
	}
	
	/**
	 * 異動予約への更新を行います。
	 * 即時の場合は、サービス契約の作成も行います。
	 * @param inCBSMsg 入力メッセージ
	 * @param inContext AgentDispatchContext
	 * @param ido_rsv_dtl_cd 異動予約詳細コード
	 * @param ido_rsv_stat_cd 異動予約状態コード
	 * @param resIdoMsg 更新対象の異動予約
	 */
	private void updateKK1681(CAANMsg inCBSMsg, AgentDispatchContext inContext, 
			String ido_rsv_dtl_cd, String ido_rsv_stat_cd, CAANMsg[] resIdoMsg)
	{
		// 異動予約更新用Msg生成
		CAANMsg update1681ETMsg = new CAANMsg(KK1681ETMsg.class.getName());

		String rsv_aply_ymd = null;
		String ido_rsv_rsn_cd = null;
		String ido_rsv_rsn_memo = null;
		String opedate = JKKModelCommon.getOpeDate(inCBSMsg);

		//予約適用年月日の値設定
		if(KEY_IDO_RSV_CD_005.equals(ido_rsv_dtl_cd))
		{
			//異動予約詳細コードがサービス休止ならサービス休止年月日
			// 運用日 ＞ サービス休止年月日の場合
			if (JPCUtilCommon.isPastDate(inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_YMD), opedate, "0"))
			{
				//運用日を設定
				rsv_aply_ymd = opedate;
			}
			else
			{
				//サービス休止年月日を設定
				rsv_aply_ymd = inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_YMD);
			}
			ido_rsv_rsn_cd = inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RSN_CD);
			ido_rsv_rsn_memo = inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RSN_MEMO);
		}
		else
		{
			//異動予約詳細コードがサービス休止解除ならサービス休止解除年月日
			// 運用日 ＞ サービス休止解除の場合
			if (JPCUtilCommon.isPastDate(inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RLS_YMD), opedate, "0"))
			{
				//運用日を設定
				rsv_aply_ymd = opedate;
			}
			else
			{
				//サービス休止解除を設定
				rsv_aply_ymd = inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RLS_YMD);
			}
			ido_rsv_rsn_cd = inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RLS_RSN_CD);
			ido_rsv_rsn_memo = inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RLS_RSN_MEMO);
		}

		// 取得した異動予約番号の数だけ更新処理を行う
		// 取得件数分ループ処理
		for(CAANMsg msg : resIdoMsg)
		{
			// 異動予約番号	IDO_RSV_NO
			update1681ETMsg.set(KK1681ETMsg.IDO_RSV_NO, msg.getString(KK1681ETMsg.IDO_RSV_NO));

			// 予約適用年月日
			update1681ETMsg.set(KK1681ETMsg.RSV_APLY_YMD, rsv_aply_ymd);

			if(ido_rsv_stat_cd != null)
			{
				// 異動予約状態コード
				update1681ETMsg.set(KK1681ETMsg.IDO_RSV_STAT_CD, ido_rsv_stat_cd);
			}

			if (YOYAKU_HANEIZUMI.equals(ido_rsv_stat_cd))
			{
				// 異動予約反映年月日
				update1681ETMsg.set(KK1681ETMsg.IDO_RSV_HANEI_YMD, rsv_aply_ymd);
			}

			// 申込明細番号
			update1681ETMsg.set(KK1681ETMsg.MSKM_DTL_NO, inCBSMsg.getString(EKK0081C080CBSMsg.MSKM_DTL_NO));

			// サービス休止年月日(サービス休止解除年月日) ＞ 運用日時の場合
			if (JPCUtilCommon.isFutureDate(rsv_aply_ymd, JKKModelCommon.getOpeDate(inCBSMsg), "0"))
			{
				// サービス休止課金開始年月日
				update1681ETMsg.set(KK1681ETMsg.SVC_PAUSE_CHRG_STA_YMD, inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_CHRG_STA_YMD));
			}

			// 異動予約理由コード
			update1681ETMsg.set(KK1681ETMsg.IDO_RSV_RSN_CD, ido_rsv_rsn_cd);

			// 異動予約理由メモ
			update1681ETMsg.set(KK1681ETMsg.IDO_RSV_RSN_MEMO, ido_rsv_rsn_memo);
			
			// 更新年月日時分秒
			update1681ETMsg.set(KK1681ETMsg.UPD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));

			// 更新オペレータアカウント
			update1681ETMsg.set(KK1681ETMsg.UPD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));

			// 更新処理の実行
			JKKejbDBAUtil dbaUtil1681 = new JKKejbDBAUtil(inCBSMsg);
			dbaUtil1681.update(update1681ETMsg);

		}

		// 返却項目メッセージ生成
		inCBSMsg.set(EKK0081C080CBSMsg.UPD_DTM, update1681ETMsg.getString(KK1681ETMsg.UPD_DTM));
		inCBSMsg.set(EKK0081C080CBSMsg.UPD_OPEACNT, update1681ETMsg.getString(KK1681ETMsg.UPD_OPEACNT));

	}

	/**
	 * サービス契約の作成を行います。
	 * @param inCBSMsg 入力メッセージ
	 * @param inContext AgentDispatchContext
	 * @param ido_rsv_dtl_cd 異動予約詳細コード
	 * @param ido_rsv_stat_cd 異動予約状態コード
	 * @param resIdoMsg 異動予約情報
	 */
	private void createKK0081(CAANMsg inCBSMsg, AgentDispatchContext inContext, String ido_rsv_dtl_cd, String ido_rsv_stat_cd, CAANMsg[] resIdoMsg)
	{
		String rsv_aply_ymd = null;
		String svc_kei_stat = null;

		//予約適用年月日とサービス契約ステータスの値設定
		if(KEY_IDO_RSV_CD_005.equals(ido_rsv_dtl_cd))
		{
			//異動予約詳細コードがサービス休止ならサービス休止年月日
			rsv_aply_ymd = inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_YMD);
			//休止・中断中
			svc_kei_stat = "210";
		}
		else
		{
			//異動予約詳細コードがサービス休止解除ならサービス休止解除年月日
			rsv_aply_ymd = inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RLS_YMD);
			//サービス提供中
			svc_kei_stat = "100";
		}

		
		// サービス契約作成用の情報を異動予約から取り出す
		//申込明細番号、新料金グループコード、新料金コースコード、新料金プランコード、新提供方式契約番号
		//違約金発生コード、異動区分、電波障害案件番号
		
		// 申込明細番号
		String mskm_dtl_no = inCBSMsg.getString(EKK0081C080CBSMsg.MSKM_DTL_NO);

		// サービス契約のカレントレコード取得
		CAANMsg inETMsgCurrent = new CAANMsg(KK0081ETMsg.class.getName());
		inETMsgCurrent.set(KK0081ETMsg.SVC_KEI_NO, inCBSMsg.getObject(EKK0081C080CBSMsg.SVC_KEI_NO));
		inETMsgCurrent.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));
		CAANMsg retCurrent = new JKKejbKK0081DBABase().findByCurrent(inETMsgCurrent);
		String opedate = JKKModelCommon.getOpeDate(inCBSMsg);

		
		// サービス契約 新規レコード用Msg生成
		CAANMsg inETMsgSvcKei = new CAANMsg(KK0081ETMsg.class.getName());

		// サービス契約番号
		inETMsgSvcKei.set(KK0081ETMsg.SVC_KEI_NO, inCBSMsg.getObject(EKK0081C080CBSMsg.SVC_KEI_NO));

		// 世代登録年月日時分秒
		inETMsgSvcKei.set(KK0081ETMsg.GENE_ADD_DTM, (String)JKKModelCommon.getTransferGeneAddDtm(inCBSMsg, inContext));

		// サービス契約ステータス	SVC_KEI_STAT
		inETMsgSvcKei.set(KK0081ETMsg.SVC_KEI_STAT, svc_kei_stat);

		// SYSID	SYSID
		inETMsgSvcKei.set(KK0081ETMsg.SYSID, retCurrent.getString(KK0081ETMsg.SYSID));

		// サービスコード	SVC_CD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_CD, retCurrent.getString(KK0081ETMsg.SVC_CD));

		// 申込明細番号	MSKM_DTL_NO
		inETMsgSvcKei.set(KK0081ETMsg.MSKM_DTL_NO, mskm_dtl_no);

		// 整理番号 SEIRI_NO
		inETMsgSvcKei.set(KK0081ETMsg.SEIRI_NO, retCurrent.getString(KK0081ETMsg.SEIRI_NO));

		// 面開発案件番号	MENKAIHAT_ANKEN_NO
		inETMsgSvcKei.set(KK0081ETMsg.MENKAIHAT_ANKEN_NO, retCurrent.getString(KK0081ETMsg.MENKAIHAT_ANKEN_NO));

		// 料金グループコード	PRC_GRP_CD
		inETMsgSvcKei.set(KK0081ETMsg.PRC_GRP_CD, retCurrent.getString(KK0081ETMsg.PRC_GRP_CD));

		// 料金コースコード	PCRS_CD
		inETMsgSvcKei.set(KK0081ETMsg.PCRS_CD, retCurrent.getString(KK0081ETMsg.PCRS_CD));

		// 料金プランコード	PPLAN_CD
		inETMsgSvcKei.set(KK0081ETMsg.PPLAN_CD, retCurrent.getString(KK0081ETMsg.PPLAN_CD));

		// 提供方式契約番号	TK_HOSHIKI_KEI_NO
		inETMsgSvcKei.set(KK0081ETMsg.TK_HOSHIKI_KEI_NO, retCurrent.getString(KK0081ETMsg.TK_HOSHIKI_KEI_NO));

		// サービス利用開始希望年月日	SVC_USE_STA_KIBO_YMD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_USE_STA_KIBO_YMD, retCurrent.getString(KK0081ETMsg.SVC_USE_STA_KIBO_YMD));

		// 予約適用開始希望年月日	RSV_TSTA_KIBO_YMD
		inETMsgSvcKei.set(KK0081ETMsg.RSV_TSTA_KIBO_YMD, retCurrent.getString(KK0081ETMsg.RSV_TSTA_KIBO_YMD));

		// ID速報書出力要否	ID_SOKHOSHO_OUTPUT_YH
		inETMsgSvcKei.set(KK0081ETMsg.ID_SOKHOSHO_OUTPUT_YH, retCurrent.getString(KK0081ETMsg.ID_SOKHOSHO_OUTPUT_YH));

		// サービス契約後続業務依頼年月日	SVC_KEI_KZKWRK_REQYMD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_KEI_KZKWRK_REQYMD, retCurrent.getString(KK0081ETMsg.SVC_KEI_KZKWRK_REQYMD));

		// 照査年月日	SHOSA_YMD
		inETMsgSvcKei.set(KK0081ETMsg.SHOSA_YMD, retCurrent.getString(KK0081ETMsg.SHOSA_YMD));

		// 照査取消年月日	SHOSA_CL_YMD
		inETMsgSvcKei.set(KK0081ETMsg.SHOSA_CL_YMD, retCurrent.getString(KK0081ETMsg.SHOSA_CL_YMD));

		// 審査結果コード	SKEKKA_CD
		inETMsgSvcKei.set(KK0081ETMsg.SKEKKA_CD, retCurrent.getString(KK0081ETMsg.SKEKKA_CD));

		// 審査結果詳細コード	SKEKKA_DTL_CD
		inETMsgSvcKei.set(KK0081ETMsg.SKEKKA_DTL_CD, retCurrent.getString(KK0081ETMsg.SKEKKA_DTL_CD));

		// 審査結果補記コード	SKEKKA_HOKI_CD
		inETMsgSvcKei.set(KK0081ETMsg.SKEKKA_HOKI_CD, retCurrent.getString(KK0081ETMsg.SKEKKA_HOKI_CD));

		// 審査結果送信コード	SKEKKA_SEND_CD
		inETMsgSvcKei.set(KK0081ETMsg.SKEKKA_SEND_CD, retCurrent.getString(KK0081ETMsg.SKEKKA_SEND_CD));

		// 支払い方法継続フラグ	PAYWAY_KEIZOKU_FLG
		inETMsgSvcKei.set(KK0081ETMsg.PAYWAY_KEIZOKU_FLG, retCurrent.getString(KK0081ETMsg.PAYWAY_KEIZOKU_FLG));

		// 試用加入年月日	FTRIAL_KANYU_YMD
		inETMsgSvcKei.set(KK0081ETMsg.FTRIAL_KANYU_YMD, retCurrent.getString(KK0081ETMsg.FTRIAL_KANYU_YMD));

		// 試用期間終了年月日	FTRIAL_PRD_ENDYMD
		inETMsgSvcKei.set(KK0081ETMsg.FTRIAL_PRD_ENDYMD, retCurrent.getString(KK0081ETMsg.FTRIAL_PRD_ENDYMD));

		// 本加入年月日	HONKANYU_YMD
		inETMsgSvcKei.set(KK0081ETMsg.HONKANYU_YMD, retCurrent.getString(KK0081ETMsg.HONKANYU_YMD));

		// 本加入移行期限年月日	HONKANYU_IKO_KIGEN_YMD
		inETMsgSvcKei.set(KK0081ETMsg.HONKANYU_IKO_KIGEN_YMD, retCurrent.getString(KK0081ETMsg.HONKANYU_IKO_KIGEN_YMD));

		// 契約締結年月日	KEI_CNC_YMD
		inETMsgSvcKei.set(KK0081ETMsg.KEI_CNC_YMD, retCurrent.getString(KK0081ETMsg.KEI_CNC_YMD));

		// プラン開始年月日	PLAN_STAYMD
		inETMsgSvcKei.set(KK0081ETMsg.PLAN_STAYMD, retCurrent.getString(KK0081ETMsg.PLAN_STAYMD));

		// プラン終了年月日	PLAN_ENDYMD
		inETMsgSvcKei.set(KK0081ETMsg.PLAN_ENDYMD, retCurrent.getString(KK0081ETMsg.PLAN_ENDYMD));

		// プラン課金開始年月日	PLAN_CHRG_STAYMD
		inETMsgSvcKei.set(KK0081ETMsg.PLAN_CHRG_STAYMD, retCurrent.getString(KK0081ETMsg.PLAN_CHRG_STAYMD));

		// プラン課金終了年月日	PLAN_CHRG_ENDYMD
		inETMsgSvcKei.set(KK0081ETMsg.PLAN_CHRG_ENDYMD, retCurrent.getString(KK0081ETMsg.PLAN_CHRG_ENDYMD));

		// プラン終了種別コード	PLAN_END_SBT_CD
		inETMsgSvcKei.set(KK0081ETMsg.PLAN_END_SBT_CD, retCurrent.getString(KK0081ETMsg.PLAN_END_SBT_CD));

		// 予約適用年月日	RSV_APLY_YMD
		// 運用日 ＞ 予約適用年月日の場合
		if (JPCUtilCommon.isPastDate(rsv_aply_ymd, opedate, "0"))
		{
			inETMsgSvcKei.set(KK0081ETMsg.RSV_APLY_YMD, opedate);
		}
		else
		{
			inETMsgSvcKei.set(KK0081ETMsg.RSV_APLY_YMD, rsv_aply_ymd);
		}

		// 予約取消年月日	RSV_CL_YMD
		inETMsgSvcKei.set(KK0081ETMsg.RSV_CL_YMD, retCurrent.getString(KK0081ETMsg.RSV_CL_YMD));

		// 予約適用コード	RSV_APLY_CD
		inETMsgSvcKei.set(KK0081ETMsg.RSV_APLY_CD, YOYAKU_KAKUTEI);

		// サービスキャンセル年月日	SVC_CANCEL_YMD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_CANCEL_YMD, retCurrent.getString(KK0081ETMsg.SVC_CANCEL_YMD));

		// サービスキャンセル理由コード	SVC_CANCEL_RSN_CD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_CANCEL_RSN_CD, retCurrent.getString(KK0081ETMsg.SVC_CANCEL_RSN_CD));

		// サービス開始年月日	SVC_STA_YMD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_STA_YMD, retCurrent.getString(KK0081ETMsg.SVC_STA_YMD));

		// サービス課金開始年月日	SVC_CHRG_STAYMD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_CHRG_STAYMD, retCurrent.getString(KK0081ETMsg.SVC_CHRG_STAYMD));

		// 継続サービス開始年月日	KEIZK_SVC_STAYMD
		inETMsgSvcKei.set(KK0081ETMsg.KEIZK_SVC_STAYMD, retCurrent.getString(KK0081ETMsg.KEIZK_SVC_STAYMD));

		// 継続サービス課金開始年月日	KEIZK_SVC_CHRG_STAYMD
		inETMsgSvcKei.set(KK0081ETMsg.KEIZK_SVC_CHRG_STAYMD, retCurrent.getString(KK0081ETMsg.KEIZK_SVC_CHRG_STAYMD));	
		
		// レター発送仕分区分	LETTER_HASSO_SHIWAKE_DIV
		inETMsgSvcKei.set(KK0081ETMsg.LETTER_HASSO_SHIWAKE_DIV, retCurrent.getString(KK0081ETMsg.LETTER_HASSO_SHIWAKE_DIV));

		// サンキューレター送付先コード	THNX_LETTER_SHS_CD
		inETMsgSvcKei.set(KK0081ETMsg.THNX_LETTER_SHS_CD, retCurrent.getString(KK0081ETMsg.THNX_LETTER_SHS_CD));

		// サービス契約ステータスが"サービス提供中"の場合
		if (JKKModelConst.SVC_KEI_STAT_SVCTK_CHU.equals(svc_kei_stat))
		{
			// 休止前カレントデータ（サービス提供中）のWEBオプション追加不可フラグを設定する
			JKKejbKK0081Edit kk0081Edit = new JKKejbKK0081Edit();
			inETMsgSvcKei.set(KK0081ETMsg.WEB_OP_ADD_FAIL_FLG, kk0081Edit.getColumnByStat(inCBSMsg, inContext, inCBSMsg.getObject(EKK0081C080CBSMsg.SVC_KEI_NO), svc_kei_stat, KK0081ETMsg.WEB_OP_ADD_FAIL_FLG));
			
		}
		// サービス契約ステータスが"休止・中断中"の場合
		else if (JKKModelConst.SVC_KEI_STAT_PAUSE_STP_CHU.equals(svc_kei_stat))
		{
			// WEBオプション追加不可フラグに"不可"を設定する
			inETMsgSvcKei.set(KK0081ETMsg.WEB_OP_ADD_FAIL_FLG, JKKModelConst.WEB_OP_ADD_FAIL_FLG_FUKA);
		}
		else
		{
			// サービス契約ステータスが（"サービス提供中"or"休止・中断中"）以外の場合はカレント引継
			inETMsgSvcKei.set(KK0081ETMsg.WEB_OP_ADD_FAIL_FLG, retCurrent.getString(KK0081ETMsg.WEB_OP_ADD_FAIL_FLG));
		}

		// サービス停止年月日	SVC_STP_YMD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_STP_YMD, retCurrent.getString(KK0081ETMsg.SVC_STP_YMD));

		// サービス停止理由コード	SVC_STP_RSN_CD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_STP_RSN_CD, retCurrent.getString(KK0081ETMsg.SVC_STP_RSN_CD));

		// サービス停止解除年月日	SVC_STP_RLS_YMD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_STP_RLS_YMD, retCurrent.getString(KK0081ETMsg.SVC_STP_RLS_YMD));

		// サービス停止解除理由コード	SVC_STP_RLS_RSN_CD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_STP_RLS_RSN_CD, retCurrent.getString(KK0081ETMsg.SVC_STP_RLS_RSN_CD));

		if(KEY_IDO_RSV_CD_005.equals(ido_rsv_dtl_cd))
		{
			//サービス休止の場合
			// 休止中断コード	PAUSE_STP_CD
			inETMsgSvcKei.set(KK0081ETMsg.PAUSE_STP_CD, inCBSMsg.getString(EKK0081C080CBSMsg.PAUSE_STP_CD));

			// サービス休止年月日	SVC_PAUSE_YMD
			inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_YMD, inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_YMD));

			// サービス休止理由コード	SVC_PAUSE_RSN_CD
			inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_RSN_CD, inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RSN_CD));

			// サービス休止理由メモ	SVC_PAUSE_RSN_MEMO
			inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_RSN_MEMO, inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RSN_MEMO));

			// サービス休止解除年月日	SVC_PAUSE_RLS_YMD
			//inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_RLS_YMD, " ");

			// サービス休止解除理由コード	SVC_PAUSE_RLS_RSN_CD
			//inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_RLS_RSN_CD, " ");

			// サービス休止解除理由メモ	SVC_PAUSE_RLS_RSN_MEMO
			//inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_RLS_RSN_MEMO, " ");

		}
		else
		{
			//サービス休止解除の場合
			// 休止中断コード	PAUSE_STP_CD
			inETMsgSvcKei.set(KK0081ETMsg.PAUSE_STP_CD, retCurrent.getString(KK0081ETMsg.PAUSE_STP_CD));

			// サービス休止年月日	SVC_PAUSE_YMD
			inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_YMD, retCurrent.getString(KK0081ETMsg.SVC_PAUSE_YMD));

			// サービス休止理由コード	SVC_PAUSE_RSN_CD
			inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_RSN_CD, retCurrent.getString(KK0081ETMsg.SVC_PAUSE_RSN_CD));

			// サービス休止理由メモ	SVC_PAUSE_RSN_MEMO
			inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_RSN_MEMO, retCurrent.getString(KK0081ETMsg.SVC_PAUSE_RSN_MEMO));

			// サービス休止解除年月日	SVC_PAUSE_RLS_YMD
			inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_RLS_YMD, inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RLS_YMD));

			// サービス休止解除理由コード	SVC_PAUSE_RLS_RSN_CD
			inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_RLS_RSN_CD, inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RLS_RSN_CD));

			// サービス休止解除理由メモ	SVC_PAUSE_RLS_RSN_MEMO
			inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_RLS_RSN_MEMO, inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_RLS_RSN_MEMO));

		}
		
		// サービス終了年月日	SVC_ENDYMD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_ENDYMD, retCurrent.getString(KK0081ETMsg.SVC_ENDYMD));

		// サービス課金終了年月日	SVC_CHRG_ENDYMD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_CHRG_ENDYMD, retCurrent.getString(KK0081ETMsg.SVC_CHRG_ENDYMD));

		// サービス解約起算年月日
		inETMsgSvcKei.set(KK0081ETMsg.SVC_DSL_KISAN_YMD, retCurrent.getString(KK0081ETMsg.SVC_DSL_KISAN_YMD));

		// サービス解約年月日	SVC_DSL_YMD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_DSL_YMD, retCurrent.getString(KK0081ETMsg.SVC_DSL_YMD));

		// サービス解約理由コード	SVC_DLRE_CD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_DLRE_CD, retCurrent.getString(KK0081ETMsg.SVC_DLRE_CD));

		// サービス解約理由メモ	SVC_DLRE_MEMO
		inETMsgSvcKei.set(KK0081ETMsg.SVC_DLRE_MEMO, retCurrent.getString(KK0081ETMsg.SVC_DLRE_MEMO));

		// サービス解約手続完了フラグ	SVC_DSL_TTDKI_FIN_FLG
		inETMsgSvcKei.set(KK0081ETMsg.SVC_DSL_TTDKI_FIN_FLG, retCurrent.getString(KK0081ETMsg.SVC_DSL_TTDKI_FIN_FLG));

		// 回復年月日	KAIHK_YMD
		inETMsgSvcKei.set(KK0081ETMsg.KAIHK_YMD, retCurrent.getString(KK0081ETMsg.KAIHK_YMD));
		
		// サービスキャンセル取消年月日	SVC_CANCEL_CL_YMD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_CANCEL_CL_YMD, retCurrent.getString(KK0081ETMsg.SVC_CANCEL_CL_YMD));

		// サービス解約取消年月日	SVC_DSL_CL_YMD
		inETMsgSvcKei.set(KK0081ETMsg.SVC_DSL_CL_YMD, retCurrent.getString(KK0081ETMsg.SVC_DSL_CL_YMD));
		
		// 変更元法人サービス契約受付番号	CHGE_MT_HOJINSVKEI_UK_NO
		inETMsgSvcKei.set(KK0081ETMsg.CHGE_MT_HOJINSVKEI_UK_NO, retCurrent.getString(KK0081ETMsg.CHGE_MT_HOJINSVKEI_UK_NO));

		// 変更元法人サービス契約受付番号子	CHGE_MT_HOJINSVKEI_UK_NOPT
		inETMsgSvcKei.set(KK0081ETMsg.CHGE_MT_HOJINSVKEI_UK_NOPT, retCurrent.getString(KK0081ETMsg.CHGE_MT_HOJINSVKEI_UK_NOPT));

		// 変更先法人サービス契約受付番号	CHGE_SK_HOJINSVKEI_UK_NO
		inETMsgSvcKei.set(KK0081ETMsg.CHGE_SK_HOJINSVKEI_UK_NO, retCurrent.getString(KK0081ETMsg.CHGE_SK_HOJINSVKEI_UK_NO));

		// 変更先法人サービス契約受付番号子	CHGE_SK_HOJINSVKEI_UK_NOPT
		inETMsgSvcKei.set(KK0081ETMsg.CHGE_SK_HOJINSVKEI_UK_NOPT, retCurrent.getString(KK0081ETMsg.CHGE_SK_HOJINSVKEI_UK_NOPT));

		// 変更元法人eo読替サービス契約番号	CHMT_HJIN_EO_YKAE_SVKEI_NO
		inETMsgSvcKei.set(KK0081ETMsg.CHMT_HJIN_EO_YKAE_SVKEI_NO, retCurrent.getString(KK0081ETMsg.CHMT_HJIN_EO_YKAE_SVKEI_NO));

		// 変更先法人eo読替サービス契約番号	CHSK_HJIN_EO_YKAE_SVKEI_NO
		inETMsgSvcKei.set(KK0081ETMsg.CHSK_HJIN_EO_YKAE_SVKEI_NO, retCurrent.getString(KK0081ETMsg.CHSK_HJIN_EO_YKAE_SVKEI_NO));

		// 法人サービス契約引継ぎ種別コード 
		inETMsgSvcKei.set(KK0081ETMsg.HOJINSVKEI_HKTGI_SBT_CD, retCurrent.getString(KK0081ETMsg.HOJINSVKEI_HKTGI_SBT_CD));

		// 違約金発生コード	PNLTY_HASSEI_CD
		inETMsgSvcKei.set(KK0081ETMsg.PNLTY_HASSEI_CD, retCurrent.getString(KK0081ETMsg.PNLTY_HASSEI_CD));

		// 違約金変更理由コード	PNLTY_CHGE_RSN_CD
		inETMsgSvcKei.set(KK0081ETMsg.PNLTY_CHGE_RSN_CD, retCurrent.getString(KK0081ETMsg.PNLTY_CHGE_RSN_CD));

		// 異動区分	IDO_DIV
//		inETMsgSvcKei.set(KK0081ETMsg.IDO_DIV, inCBSMsg.getString(EKK0081C080CBSMsg.IDO_DIV));
		inETMsgSvcKei.set(KK0081ETMsg.IDO_DIV, resIdoMsg[0].getString(KK1681ETMsg.IDO_DIV));
		
		// 初期デフォルトパスワード	SHK_DFLT_PWD
		inETMsgSvcKei.set(KK0081ETMsg.SHK_DFLT_PWD, retCurrent.getString(KK0081ETMsg.SHK_DFLT_PWD));

		// お客さまIDパスワード CUST_ID_PWD
		inETMsgSvcKei.set(KK0081ETMsg.CUST_ID_PWD, retCurrent.getString(KK0081ETMsg.CUST_ID_PWD));

		// 面開発案件仮登録フラグ	MENKAIHAT_ANKEN_KR_ADD_FLG
		inETMsgSvcKei.set(KK0081ETMsg.MENKAIHAT_ANKEN_KR_ADD_FLG, retCurrent.getString(KK0081ETMsg.MENKAIHAT_ANKEN_KR_ADD_FLG));

		// 紹介コード	INTR_CD
		inETMsgSvcKei.set(KK0081ETMsg.INTR_CD, retCurrent.getString(KK0081ETMsg.INTR_CD));

		// 照査解約完了コード	SHOSA_DSL_FIN_CD
		inETMsgSvcKei.set(KK0081ETMsg.SHOSA_DSL_FIN_CD, retCurrent.getString(KK0081ETMsg.SHOSA_DSL_FIN_CD));

		// 異動NG状態コード	IDO_NG_STAT_CD
		inETMsgSvcKei.set(KK0081ETMsg.IDO_NG_STAT_CD, retCurrent.getString(KK0081ETMsg.IDO_NG_STAT_CD));

		// 課金開始年月日補正有無	CHRG_STA_YMD_HOSEI_UM
		inETMsgSvcKei.set(KK0081ETMsg.CHRG_STA_YMD_HOSEI_UM, retCurrent.getString(KK0081ETMsg.CHRG_STA_YMD_HOSEI_UM));

		if(KEY_IDO_RSV_CD_005.equals(ido_rsv_dtl_cd))
		{
			// サービス休止課金開始年月日	SVC_PAUSE_CHRG_STA_YMD
			inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_CHRG_STA_YMD, inCBSMsg.getString(EKK0081C080CBSMsg.SVC_PAUSE_CHRG_STA_YMD));
		}
		else
		{
			// サービス休止課金開始年月日	SVC_PAUSE_CHRG_STA_YMD
			inETMsgSvcKei.set(KK0081ETMsg.SVC_PAUSE_CHRG_STA_YMD, retCurrent.getString(KK0081ETMsg.SVC_PAUSE_CHRG_STA_YMD));
		}
		
		// 業務連絡備考	WORK_RRK_BIKO
		inETMsgSvcKei.set(KK0081ETMsg.WORK_RRK_BIKO, retCurrent.getString(KK0081ETMsg.WORK_RRK_BIKO));

		// 自動照査処理状態コード	AUTO_SHOSA_TRAN_STAT_CD
		inETMsgSvcKei.set(KK0081ETMsg.AUTO_SHOSA_TRAN_STAT_CD, retCurrent.getString(KK0081ETMsg.AUTO_SHOSA_TRAN_STAT_CD));

		// 機器未登録リスト出力済フラグ	KIKI_MIADD_LIST_OPUTZM_FLG
		inETMsgSvcKei.set(KK0081ETMsg.KIKI_MIADD_LIST_OPUTZM_FLG, retCurrent.getString(KK0081ETMsg.KIKI_MIADD_LIST_OPUTZM_FLG));

		// 回復不可契約抽出済フラグ	KAIHK_FAIL_KEI_CST_ZM_FLG
		inETMsgSvcKei.set(KK0081ETMsg.KAIHK_FAIL_KEI_CST_ZM_FLG, retCurrent.getString(KK0081ETMsg.KAIHK_FAIL_KEI_CST_ZM_FLG));

		// サービス提供物消去処理実施年月日時分秒	SVCTK_BUT_DEL_TRN_JSSI_DTM
		inETMsgSvcKei.set(KK0081ETMsg.SVCTK_BUT_DEL_TRN_JSSI_DTM, retCurrent.getString(KK0081ETMsg.SVCTK_BUT_DEL_TRN_JSSI_DTM));

		// 従量超過通知要否	JURYO_CHOK_TCHI_YH
		inETMsgSvcKei.set(KK0081ETMsg.JURYO_CHOK_TCHI_YH, retCurrent.getString(KK0081ETMsg.JURYO_CHOK_TCHI_YH));

		// 登録年月日時分秒	ADD_DTM
		inETMsgSvcKei.set(KK0081ETMsg.ADD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));

		// 登録オペレータアカウント	ADD_OPEACNT
		inETMsgSvcKei.set(KK0081ETMsg.ADD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));

		// 更新年月日時分秒	UPD_DTM
		inETMsgSvcKei.set(KK0081ETMsg.UPD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));

		// 更新オペレータアカウント	UPD_OPEACNT
		inETMsgSvcKei.set(KK0081ETMsg.UPD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));

		// 無効フラグ	MK_FLG
		inETMsgSvcKei.set(KK0081ETMsg.MK_FLG, MK_FLG_VALID);

		// 登録処理の実行
		JKKejbDBAUtil dbaUtil = new JKKejbDBAUtil(inCBSMsg);
		dbaUtil.create(inETMsgSvcKei);

		// 返却項目メッセージ生成
		inCBSMsg.set(EKK0081C080CBSMsg.GENE_ADD_DTM, inETMsgSvcKei.getString(KK0081ETMsg.GENE_ADD_DTM));
		inCBSMsg.set(EKK0081C080CBSMsg.SVC_KEI_STAT, inETMsgSvcKei.getString(KK0081ETMsg.SVC_KEI_STAT));
		inCBSMsg.set(EKK0081C080CBSMsg.ADD_DTM, inETMsgSvcKei.getString(KK0081ETMsg.ADD_DTM));
		inCBSMsg.set(EKK0081C080CBSMsg.ADD_OPEACNT, inETMsgSvcKei.getString(KK0081ETMsg.ADD_OPEACNT));
		inCBSMsg.set(EKK0081C080CBSMsg.UPD_DTM, inETMsgSvcKei.getString(KK0081ETMsg.UPD_DTM));
		inCBSMsg.set(EKK0081C080CBSMsg.UPD_OPEACNT, inETMsgSvcKei.getString(KK0081ETMsg.UPD_OPEACNT));
		inCBSMsg.set(EKK0081C080CBSMsg.MK_FLG, inETMsgSvcKei.getString(KK0081ETMsg.MK_FLG));

	}

}
