/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JEKK2541D020ETDA
*	ソースファイル名：JEKK2541D020ETDA.java
*	作成者			：富士通
*	日付			：2012年08月10日
*＜機能概要＞
*	割賦契約引継登録時の副次処理を行う部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/08/10	富士通		新規作成
*
**********************************************************************/

package eo.ejb.common.db;

import com.fujitsu.futurity.common.JCMConstants;
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.ejb.cbm.entity.KK2541ETMsg;
import eo.ejb.cbs.cbsmsg.EKK2541D020CBSMsg;
import eo.ejb.common.JCKModelCommon;

/**
 * <p>
 * 割賦契約引継登録の副次処理を行う部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK2541D020ETDA
{
	
	/** 予約適用コード 予約確定 */
	private static final String APLYCD_DECIDED = "2";
	
	/** 無効フラグ 有効 */
	private static final String MKFLG_VALID = "0";

	/**
	 * <p>
	 * 割賦契約引継登録のDBアクセスを行います。
	 * </p>
	 * @param inCBSMsg　CBSメッセージ
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void execDBAccess(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{
		// 引継元割賦契約番号を取得する
		String hktgimotoKapKeiNo = null;

		// 引継元割賦契約番号が未設定の場合
		if (inCBSMsg.isNull(EKK2541D020CBSMsg.HKTGI_MOTO_KAP_KEI_NO))
		{
			// 何も行わず処理終了
			return;
		}

		// 引継元割賦契約番号を取得する
		hktgimotoKapKeiNo = inCBSMsg.getString(EKK2541D020CBSMsg.HKTGI_MOTO_KAP_KEI_NO);

		// 引継元割賦契約番号を元にカレントレコードを取得する
		CAANMsg kk2541CurRec = this.getKK2541KapKeiNoCurrentRec(inCBSMsg, hktgimotoKapKeiNo);

		// カレントレコード取得失敗時
		if (kk2541CurRec == null)
		{
			// 何も行わず処理終了
			return;
		}

		// 各種情報を割賦契約に登録します
		this.insertKapKei(inCBSMsg, inContext, kk2541CurRec);
	}
	
	/**
	 * <p>
	 * 割賦契約より割賦契約番号をKEYにカレントレコードを取得する
	 * </p>
	 * @param inCBSMsg           処理対象のメッセージキャリア
	 * @param hktgimotoKapKeiNo  引継元割賦契約番号
	 * @return 引継元割賦契約番号に紐づいた割賦契約のカレントレコード
	 */
	private CAANMsg getKK2541KapKeiNoCurrentRec(CAANMsg inCBSMsg, String hktgimotoKapKeiNo)
	{
		// 割賦契約の割賦契約番号をKEYにカレントレコードを取得する
		CAANMsg kk2541Cond = new CAANMsg(KK2541ETMsg.class.getName());
		kk2541Cond.set(KK2541ETMsg.KAP_KEI_NO, hktgimotoKapKeiNo);
		kk2541Cond.set(KK2541ETMsg.RSV_APLY_YMD, inCBSMsg.getString(EKK2541D020CBSMsg.RSV_APLY_YMD));

		return new JKKejbKK2541DBABase().findByCurrent(kk2541Cond);
	}

	/**
	 * <p>
	 * 割賦契約のDBアクセスを行います。
	 * </p>
	 * @param inCBSMsg      処理対象のメッセージキャリア
	 * @param inContext     Agentから渡されたAgentDispatchContext
	 * @param kk2541CurRec  割賦契約のカレントデータ
	 */
	private void insertKapKei(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg kk2541CurRec)
	{
		// 挿入レコード格納用
		CAANMsg insETMsg = new CAANMsg(KK2541ETMsg.class.getName());

		// 割賦契約登録内容(入力項目)
		insETMsg.set(KK2541ETMsg.KAP_KEI_NO, inCBSMsg.getString(EKK2541D020CBSMsg.KAP_KEI_NO));
		insETMsg.set(KK2541ETMsg.GENE_ADD_DTM, inCBSMsg.getString(EKK2541D020CBSMsg.GENE_ADD_DTM));
		insETMsg.set(KK2541ETMsg.KKTK_SVC_KEI_NO, inCBSMsg.getString(EKK2541D020CBSMsg.KKTK_SVC_KEI_NO));
		insETMsg.set(KK2541ETMsg.ADD_JI_KIKI_CHG_NO, inCBSMsg.getString(EKK2541D020CBSMsg.ADD_JI_KIKI_CHG_NO));
		insETMsg.set(KK2541ETMsg.MSKM_DTL_NO, inCBSMsg.getString(EKK2541D020CBSMsg.MSKM_DTL_NO));
		insETMsg.set(KK2541ETMsg.IDO_DIV, inCBSMsg.getString(EKK2541D020CBSMsg.IDO_DIV));
		insETMsg.set(KK2541ETMsg.KAP_KEI_CHRG_STAYMD, inCBSMsg.getString(EKK2541D020CBSMsg.KAP_KEI_CHRG_STAYMD));
		insETMsg.set(KK2541ETMsg.HKTGI_MOTO_KAP_KEI_NO, inCBSMsg.getString(EKK2541D020CBSMsg.HKTGI_MOTO_KAP_KEI_NO));
		insETMsg.set(KK2541ETMsg.RSV_APLY_YMD, JCKModelCommon.getOpeDate(inCBSMsg, inContext));
		insETMsg.set(KK2541ETMsg.RSV_APLY_CD, APLYCD_DECIDED);

		// 割賦契約登録内容(引継項目)
		insETMsg.set(KK2541ETMsg.KAP_KEI_STAT, kk2541CurRec.getString(KK2541ETMsg.KAP_KEI_STAT));
		insETMsg.set(KK2541ETMsg.KAP_PLAN_CD, kk2541CurRec.getString(KK2541ETMsg.KAP_PLAN_CD));
		insETMsg.set(KK2541ETMsg.KAP_IKT_SIKY_SWCH_YM, kk2541CurRec.getString(KK2541ETMsg.KAP_IKT_SIKY_SWCH_YM));
		insETMsg.set(KK2541ETMsg.KAP_KEI_CNC_YMD, kk2541CurRec.getString(KK2541ETMsg.KAP_KEI_CNC_YMD));
		insETMsg.set(KK2541ETMsg.KAP_KEI_CHRG_STDARD_YMD, kk2541CurRec.getString(KK2541ETMsg.KAP_KEI_CHRG_STDARD_YMD));
		insETMsg.set(KK2541ETMsg.KAP_SEIKY_STA_YM, kk2541CurRec.getString(KK2541ETMsg.KAP_SEIKY_STA_YM));
		insETMsg.set(KK2541ETMsg.KAP_PAY_ZAN_CNT, kk2541CurRec.getString(KK2541ETMsg.KAP_PAY_ZAN_CNT));
		insETMsg.set(KK2541ETMsg.KAP_SEIKY_ZUMI_CNT, kk2541CurRec.getString(KK2541ETMsg.KAP_SEIKY_ZUMI_CNT));
		insETMsg.set(KK2541ETMsg.KAP_SEIKY_ZUMI_AMNT, kk2541CurRec.getString(KK2541ETMsg.KAP_SEIKY_ZUMI_AMNT));
		insETMsg.set(KK2541ETMsg.TNMT_BUY_TCHISHO_OPUT_SKCD, kk2541CurRec.getString(KK2541ETMsg.TNMT_BUY_TCHISHO_OPUT_SKCD));
		insETMsg.set(KK2541ETMsg.PRMOP_REKEIJI_WRBHIAPL_FLG, kk2541CurRec.getString(KK2541ETMsg.PRMOP_REKEIJI_WRBHIAPL_FLG));
		insETMsg.set(KK2541ETMsg.TNMT_BUY_UK_TNTSHA_NM, kk2541CurRec.getString(KK2541ETMsg.TNMT_BUY_UK_TNTSHA_NM));

		// 共通部
		insETMsg.set(KK2541ETMsg.ADD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		insETMsg.set(KK2541ETMsg.ADD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		insETMsg.set(KK2541ETMsg.UPD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		insETMsg.set(KK2541ETMsg.UPD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		insETMsg.set(KK2541ETMsg.MK_FLG, MKFLG_VALID);

		createKK2541(insETMsg);

		// 返却Msgを設定する
		inCBSMsg.set(EKK2541D020CBSMsg.KAP_KEI_NO, insETMsg.getString(KK2541ETMsg.KAP_KEI_NO));
		inCBSMsg.set(EKK2541D020CBSMsg.GENE_ADD_DTM, insETMsg.getString(KK2541ETMsg.GENE_ADD_DTM));
		inCBSMsg.set(EKK2541D020CBSMsg.KAP_KEI_STAT, insETMsg.getString(KK2541ETMsg.KAP_KEI_STAT));
		inCBSMsg.set(EKK2541D020CBSMsg.KAP_PLAN_CD, insETMsg.getString(KK2541ETMsg.KAP_PLAN_CD));
		inCBSMsg.set(EKK2541D020CBSMsg.RSV_APLY_YMD, insETMsg.getString(KK2541ETMsg.RSV_APLY_YMD));
		inCBSMsg.set(EKK2541D020CBSMsg.RSV_APLY_CD, insETMsg.getString(KK2541ETMsg.RSV_APLY_CD));
		inCBSMsg.set(EKK2541D020CBSMsg.KAP_IKT_SIKY_SWCH_YM, insETMsg.getString(KK2541ETMsg.KAP_IKT_SIKY_SWCH_YM));
		inCBSMsg.set(EKK2541D020CBSMsg.KAP_KEI_CNC_YMD, insETMsg.getString(KK2541ETMsg.KAP_KEI_CNC_YMD));
		inCBSMsg.set(EKK2541D020CBSMsg.KAP_KEI_CHRG_STDARD_YMD, insETMsg.getString(KK2541ETMsg.KAP_KEI_CHRG_STDARD_YMD));
		inCBSMsg.set(EKK2541D020CBSMsg.KAP_SEIKY_STA_YM, insETMsg.getString(KK2541ETMsg.KAP_SEIKY_STA_YM));
		inCBSMsg.set(EKK2541D020CBSMsg.KAP_PAY_ZAN_CNT, insETMsg.getString(KK2541ETMsg.KAP_PAY_ZAN_CNT));
		inCBSMsg.set(EKK2541D020CBSMsg.KAP_SEIKY_ZUMI_CNT, insETMsg.getString(KK2541ETMsg.KAP_SEIKY_ZUMI_CNT));
		inCBSMsg.set(EKK2541D020CBSMsg.KAP_SEIKY_ZUMI_AMNT, insETMsg.getString(KK2541ETMsg.KAP_SEIKY_ZUMI_AMNT));
		inCBSMsg.set(EKK2541D020CBSMsg.TNMT_BUY_TCHISHO_OPUT_SKCD, insETMsg.getString(KK2541ETMsg.TNMT_BUY_TCHISHO_OPUT_SKCD));
		inCBSMsg.set(EKK2541D020CBSMsg.PRMOP_REKEIJI_WRBHIAPL_FLG, insETMsg.getString(KK2541ETMsg.PRMOP_REKEIJI_WRBHIAPL_FLG));
		inCBSMsg.set(EKK2541D020CBSMsg.ADD_DTM, insETMsg.getString(KK2541ETMsg.ADD_DTM));
		inCBSMsg.set(EKK2541D020CBSMsg.ADD_OPEACNT, insETMsg.getString(KK2541ETMsg.ADD_OPEACNT));
		inCBSMsg.set(EKK2541D020CBSMsg.UPD_DTM, insETMsg.getString(KK2541ETMsg.UPD_DTM));
		inCBSMsg.set(EKK2541D020CBSMsg.UPD_OPEACNT, insETMsg.getString(KK2541ETMsg.UPD_OPEACNT));
		inCBSMsg.set(EKK2541D020CBSMsg.MK_FLG, insETMsg.getString(KK2541ETMsg.MK_FLG));
		inCBSMsg.set(EKK2541D020CBSMsg.TNMT_BUY_UK_TNTSHA_NM, insETMsg.getString(KK2541ETMsg.TNMT_BUY_UK_TNTSHA_NM));
	}

	/**
	 * <p>
	 * 割賦契約の登録を行います。
	 * </p>
	 * @param etMsg ETメッセージ
	 */
	private void createKK2541(CAANMsg etMsg)
	{
		try
		{
			JKKejbDBAUtil dbaU = new JKKejbDBAUtil(etMsg);
			dbaU.create(etMsg);
		}
		catch (CAANRuntimeException ce)
		{
			etMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.FATAL_ERR);
			throw new CAANRuntimeException(ce);
		}
	}
}
