/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKK2821C030ETDA
*	ソースファイル名：JEKK2821C030ETDA.java
*	作成者			：富士通
*	日付			：2013年12月10日
*＜機能概要＞
*	サービス契約<mineo>開始時の副次処理を行う部品
*＜修正履歴＞
*	バージョン	修正日		修正者		
*   v8.00.00    2013/12/10  富士通      新規作成
*   v10.00.00	2014/07/19	FJ) 橋本	OM-2014-0002236 対応
*	v46.00.00	2019/10/09	 FJ)星野	 ANK-3752-00-00
**********************************************************************/

package eo.ejb.common.db;

import com.fujitsu.futurity.common.JCMConstants;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;
import com.fujitsu.futurity.model.ejb.common.fw.TemplateMainHandler;

import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbm.entity.KK1681ETMsg;
import eo.ejb.cbm.entity.KK2821ETMsg;
import eo.ejb.cbs.cbsmsg.EKK2821C030CBSMsg;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.edit.JKKejbKK1681NumberParts;

/**
 * <p>
 * サービス契約<mineo>開始の副次処理を行う部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK2821C030ETDA implements TemplateMainHandler
{
	/**
	 * <p>
	 * サービス契約<mineo>開始の副次処理を行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	*/
	public void execDBAccess(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// サービス開始年月日の設定値取得
		String svc_sta_ymd = inCBSMsg.getString(EKK2821C030CBSMsg.SVC_STA_YMD);

		// EE対応表の条件の判定
		// サービス開始年月日が運用日より未来日の場合
		if(JKKModelCommon.isFutureDate(svc_sta_ymd, JKKModelCommon.getOpeDate(inCBSMsg), "0"))
		{
			// 異動予約登録処理を実行
			createKK1681(inCBSMsg, inContext);
		}
		else
		{
			// サービス開始年月日が運用日より過去日の場合
			// サービス契約登録処理
			createKK0081(inCBSMsg, inContext);
			// サービス契約<mineo>登録処理
			createKK2811(inCBSMsg, inContext);
		}
	}
	
	/**
	 * <p>
	 * 異動予約登録処理のDBアクセス処理を行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	*/
	private void createKK1681(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// ETMsgの作成
		CAANMsg inETMsg = new CAANMsg(KK1681ETMsg.class.getName());
		
		// 採番処理
		JKKejbKK1681NumberParts numberParts = new JKKejbKK1681NumberParts();
		String ido_rsv_no = numberParts.getIdoRsvNo(inCBSMsg, inContext);
		
		// 異動予約番号	IDO_RSV_NO
		inETMsg.set(KK1681ETMsg.IDO_RSV_NO, ido_rsv_no);
		
		// 異動区分	IDO_DIV
		inETMsg.set(KK1681ETMsg.IDO_DIV, inCBSMsg.getString(EKK2821C030CBSMsg.IDO_DIV));
		
		// 異動予約詳細コード	IDO_RSV_DTL_CD
		inETMsg.set(KK1681ETMsg.IDO_RSV_DTL_CD, JKKModelConst.IDO_RSV_DTL_CD_SVC_STA);
		
		// 予約適用年月日	RSV_APLY_YMD
		inETMsg.set(KK1681ETMsg.RSV_APLY_YMD, inCBSMsg.getString(EKK2821C030CBSMsg.SVC_STA_YMD));
		
		// 異動予約状態コード	IDO_RSV_STAT_CD
		inETMsg.set(KK1681ETMsg.IDO_RSV_STAT_CD, JKKModelConst.IDO_RSV_STAT_CD_MI_HANEI);

		// カレントレコードの取得(サービス契約)
		JKKejbKK0081DBABase kk0081Db = new JKKejbKK0081DBABase();
		CAANMsg inMsg0081 = new CAANMsg(KK0081ETMsg.class.getName());
		inMsg0081.set(KK0081ETMsg.SVC_KEI_NO, inCBSMsg.getString(EKK2821C030CBSMsg.SVC_KEI_NO));
		inMsg0081.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));
		CAANMsg retKK0081 = kk0081Db.findByCurrent(inMsg0081);
		
		// 申込明細番号	MSKM_DTL_NO
		inETMsg.set(KK1681ETMsg.MSKM_DTL_NO, retKK0081.getString(KK0081ETMsg.MSKM_DTL_NO));
		
		// サービス契約番号	SVC_KEI_NO
		inETMsg.set(KK1681ETMsg.SVC_KEI_NO, inCBSMsg.getString(EKK2821C030CBSMsg.SVC_KEI_NO));
		
		// 登録年月日時分秒	ADD_DTM
		inETMsg.set(KK1681ETMsg.ADD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		// 登録オペレータアカウント	ADD_OPEACNT
		inETMsg.set(KK1681ETMsg.ADD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		// 更新年月日時分秒	UPD_DTM
		inETMsg.set(KK1681ETMsg.UPD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		// 更新オペレータアカウント	UPD_OPEACNT
		inETMsg.set(KK1681ETMsg.UPD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		// 無効フラグ	MK_FLG
		inETMsg.set(KK1681ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);

		// 異動予約登録
		JKKejbDBAUtil dba = new JKKejbDBAUtil(inCBSMsg);
		dba.create(inETMsg);
	}

	/**
	 * <p>
	 * サービス契約登録処理のDBアクセス処理を行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	*/
	private void createKK0081(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// カレントレコードの取得(サービス契約)
		JKKejbKK0081DBABase kk0081Db = new JKKejbKK0081DBABase();
		CAANMsg inMsg0081 = new CAANMsg(KK0081ETMsg.class.getName());
		inMsg0081.set(KK0081ETMsg.SVC_KEI_NO, inCBSMsg.getString(EKK2821C030CBSMsg.SVC_KEI_NO));
		inMsg0081.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));
		CAANMsg retKK0081 = kk0081Db.findByCurrent(inMsg0081);
		
		// 世代登録年月日時分秒
		retKK0081.set(KK0081ETMsg.GENE_ADD_DTM, JKKModelCommon.getTransferGeneAddDtm(inCBSMsg, inContext));
		
		// サービス契約ステータス
		retKK0081.set(KK0081ETMsg.SVC_KEI_STAT, JKKModelConst.SVC_KEI_STAT_SVCTK_CHU);
		
		// プラン開始年月日
		retKK0081.set(KK0081ETMsg.PLAN_STAYMD, inCBSMsg.getString(EKK2821C030CBSMsg.SVC_STA_YMD));
		
		// プラン終了年月日
		retKK0081.set(KK0081ETMsg.PLAN_ENDYMD, JKKModelConst.DATE_MAX);
		
		// プラン課金開始年月日
		retKK0081.set(KK0081ETMsg.PLAN_CHRG_STAYMD, inCBSMsg.getString(EKK2821C030CBSMsg.SVC_CHRG_STAYMD));
		
		// プラン課金終了年月日
		retKK0081.set(KK0081ETMsg.PLAN_CHRG_ENDYMD, JKKModelConst.DATE_MAX);
		
		//----------v10.00.00 削除開始----------------
		// 予約適用年月日
		// 締結済レコードの値を引継ぐため、setメソッド実行を削除
//		retKK0081.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));
		//----------v10.00.00 削除終了----------------
		
		// 予約適用コード
		retKK0081.set(KK0081ETMsg.RSV_APLY_CD, JKKModelConst.RSV_APLY_CD_RSV_FIX);
		
		// サービス開始年月日
		retKK0081.set(KK0081ETMsg.SVC_STA_YMD, inCBSMsg.getString(EKK2821C030CBSMsg.SVC_STA_YMD));
		
		// サービス課金開始年月日
		retKK0081.set(KK0081ETMsg.SVC_CHRG_STAYMD, inCBSMsg.getString(EKK2821C030CBSMsg.SVC_CHRG_STAYMD));
		
		// サービス終了年月日
		retKK0081.set(KK0081ETMsg.SVC_ENDYMD, JKKModelConst.DATE_MAX);
		
		// サービス課金終了年月日
		retKK0081.set(KK0081ETMsg.SVC_CHRG_ENDYMD, JKKModelConst.DATE_MAX);
		
		// 異動区分
		retKK0081.set(KK0081ETMsg.IDO_DIV, inCBSMsg.getString(EKK2821C030CBSMsg.IDO_DIV));

		// 登録年月日時分秒	ADD_DTM
		retKK0081.set(KK0081ETMsg.ADD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		// 登録オペレータアカウント	ADD_OPEACNT
		retKK0081.set(KK0081ETMsg.ADD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		// 更新年月日時分秒	UPD_DTM
		retKK0081.set(KK0081ETMsg.UPD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		// 更新オペレータアカウント	UPD_OPEACNT
		retKK0081.set(KK0081ETMsg.UPD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		// 無効フラグ	MK_FLG
		retKK0081.set(KK0081ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);
		
		// サービス契約登録
		JKKejbDBAUtil dba = new JKKejbDBAUtil(inCBSMsg);
		dba.create(retKK0081);
		

		// 返却項目メッセージ生成
		inCBSMsg.set(EKK2821C030CBSMsg.KK0081_GENE_ADD_DTM, retKK0081.getString(KK0081ETMsg.GENE_ADD_DTM));
		inCBSMsg.set(EKK2821C030CBSMsg.SVC_KEI_STAT,        retKK0081.getString(KK0081ETMsg.SVC_KEI_STAT));
		inCBSMsg.set(EKK2821C030CBSMsg.PLAN_ENDYMD,         retKK0081.getString(KK0081ETMsg.PLAN_ENDYMD));
		inCBSMsg.set(EKK2821C030CBSMsg.PLAN_CHRG_ENDYMD,    retKK0081.getString(KK0081ETMsg.PLAN_CHRG_ENDYMD));
		inCBSMsg.set(EKK2821C030CBSMsg.RSV_APLY_YMD,        retKK0081.getString(KK0081ETMsg.RSV_APLY_YMD));
		inCBSMsg.set(EKK2821C030CBSMsg.RSV_APLY_CD,         retKK0081.getString(KK0081ETMsg.RSV_APLY_CD));
		inCBSMsg.set(EKK2821C030CBSMsg.SVC_ENDYMD,          retKK0081.getString(KK0081ETMsg.SVC_ENDYMD));
		inCBSMsg.set(EKK2821C030CBSMsg.SVC_CHRG_ENDYMD,     retKK0081.getString(KK0081ETMsg.SVC_CHRG_ENDYMD));

		inCBSMsg.set(EKK2821C030CBSMsg.ADD_DTM,             retKK0081.getString(KK0081ETMsg.ADD_DTM));
		inCBSMsg.set(EKK2821C030CBSMsg.ADD_OPEACNT,         retKK0081.getString(KK0081ETMsg.ADD_OPEACNT));
		inCBSMsg.set(EKK2821C030CBSMsg.UPD_DTM,             retKK0081.getString(KK0081ETMsg.UPD_DTM));
		inCBSMsg.set(EKK2821C030CBSMsg.UPD_OPEACNT,         retKK0081.getString(KK0081ETMsg.UPD_OPEACNT));
		inCBSMsg.set(EKK2821C030CBSMsg.MK_FLG,              retKK0081.getString(KK0081ETMsg.MK_FLG));
	}
	

	/**
	 * <p>
	 * サービス契約登録処理のDBアクセス処理を行います。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	*/
	private void createKK2811(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{

// ANK-3752-00-00対応 20191009 星野 MOD START
//		CAANMsg retKK2821 = new CAANMsg(KK2821ETMsg.class.getName());
		// カレントレコードの取得
		JKKejbKK2821DBABase kk2821Db = new JKKejbKK2821DBABase();
		CAANMsg inMsg2821 = new CAANMsg(KK2821ETMsg.class.getName());
		inMsg2821.set(KK2821ETMsg.SVC_KEI_NO, inCBSMsg.getString(EKK2821C030CBSMsg.SVC_KEI_NO));
		CAANMsg retKK2821 = kk2821Db.findByCurrent(inMsg2821);
// ANK-3752-00-00対応 20191009 星野 MOD END
		
		// サービス契約番号
		retKK2821.set(KK2821ETMsg.SVC_KEI_NO, inCBSMsg.getString(EKK2821C030CBSMsg.SVC_KEI_NO));
		
		// 世代登録年月日時分秒
		retKK2821.set(KK2821ETMsg.GENE_ADD_DTM, inCBSMsg.getString(EKK2821C030CBSMsg.KK0081_GENE_ADD_DTM));
		
		// 登録年月日時分秒	ADD_DTM
		retKK2821.set(KK2821ETMsg.ADD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		// 登録オペレータアカウント	ADD_OPEACNT
		retKK2821.set(KK2821ETMsg.ADD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		// 更新年月日時分秒	UPD_DTM
		retKK2821.set(KK2821ETMsg.UPD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		// 更新オペレータアカウント	UPD_OPEACNT
		retKK2821.set(KK2821ETMsg.UPD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		// 無効フラグ	MK_FLG
		retKK2821.set(KK2821ETMsg.MK_FLG, JKKModelConst.MK_FLG_YK);

		// サービス契約<mineo>登録
		JKKejbDBAUtil dba = new JKKejbDBAUtil(inCBSMsg);
		dba.create(retKK2821);


		// 返却項目メッセージ生成
		inCBSMsg.set(EKK2821C030CBSMsg.KK2821_GENE_ADD_DTM, retKK2821.getString(KK2821ETMsg.GENE_ADD_DTM));

		inCBSMsg.set(EKK2821C030CBSMsg.ADD_DTM,             retKK2821.getString(KK2821ETMsg.ADD_DTM));
		inCBSMsg.set(EKK2821C030CBSMsg.ADD_OPEACNT,         retKK2821.getString(KK2821ETMsg.ADD_OPEACNT));
		inCBSMsg.set(EKK2821C030CBSMsg.UPD_DTM,             retKK2821.getString(KK2821ETMsg.UPD_DTM));
		inCBSMsg.set(EKK2821C030CBSMsg.UPD_OPEACNT,         retKK2821.getString(KK2821ETMsg.UPD_OPEACNT));
		inCBSMsg.set(EKK2821C030CBSMsg.MK_FLG,              retKK2821.getString(KK2821ETMsg.MK_FLG));
	}
}
