/*********************************************************************
*   All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JEKK0101C060ETDA
*   ソースファイル名：JEKK0101C060ETDA.java
*   作成者          ：富士通
*   日付            ：2011年10月06日
*＜機能概要＞
*   サービス契約<eo光TV>料金プラン変更DBアクセス処理部品です。
*＜修正履歴＞
*   バージョン  修正日      修正者      修正内容
*   v1.00.00    2011/10/06  富士通      新規作成
*   v6.00.00    2013/12/21  FJ)大山     OM-2013-0004525
*
**********************************************************************/

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.CAANMsg;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbm.entity.KK0101ETMsg;
import eo.ejb.cbm.entity.KK1681ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0101C060CBSMsg;
import eo.ejb.cbs.mainproc.JKKejbIdoRsvUtil;
import eo.ejb.common.JKKModelCommon;
import eo.ejb.common.JKKModelConst;
import eo.ejb.common.edit.JKKejbEditYmdInit;
import eo.ejb.common.rule.JKKejbRule0083001;


/**
 * <p>
 * サービス契約<eo光TV>料金プラン変更DBアクセス処理部品クラスです。
 * </p>
 * @author 富士通
 */
public class JEKK0101C060ETDA
{

	/** 無効フラグ_有効 */
	private static final String MK_FLG_VALID = "0";

	/**
	 * コンストラクタです。
	 */
	public JEKK0101C060ETDA()
	{

	}

	/**
	 * <p>
	 * サービス契約<eo光TV>料金プラン変更のDBアクセス処理
	 * @param svcKeiNo   サービス契約番号
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * </p>
	 */
	public void execDBAccess(String svcKeiNo, CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{

		// 異動予約の登録処理の呼び出し
		createIdoRsv(svcKeiNo, inCBSMsg, inContext);

	}

	/**
	 * <p>
	 * 異動予約のDBアクセスを行います。
	 * @param svcKeiNo   サービス契約番号
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * </p>
	 */
	private void createIdoRsv(String svcKeiNo, CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{

		// 相関ルールにて異動予約詳細コード、異動予約状態コードを取得
		JKKejbRule0083001 rule0083 = new JKKejbRule0083001(inCBSMsg);
		rule0083.setSvc_if_id(inCBSMsg.getString(JCMConstants.TEMPLATE_ID_KEY)); // サービスIFIDを設定	
		List<HashMap<String, Object>> ruleList = rule0083.referRuleEngine();

		if (null == ruleList)
		{
			// 相関ルールチェックの結果が0件の場合はエラーとする
			inCBSMsg.set(EKK0101C060CBSMsg.IDO_DIV_ERR, "EA");
			inCBSMsg.set(JCMConstants.STATUS_INT_KEY, StatusCodes.TEMPLATE_CORRELATION_ERR);
			return;
		}
		
		// 相関ルールチェック結果を格納
		new JKKejbIdoRsvUtil().setOnlyIdoRsvFlg(inCBSMsg, inContext, ruleList);
		
		HashMap<String, Object> map = ruleList.get(0);

		String idoRsvDtlCd = (String)map.get(JKKejbRule0083001.IDO_RSV_DTL_CD); // 異動予約詳細コード
		String idoRsvStatCd = (String)map.get(JKKejbRule0083001.IDO_RSV_STAT_CD); // 異動予約状態コード

		// ＳＴＢ撤去年月日が入力されている場合、異動予約状態ステータスコードを未反映で設定する。
		if(!inCBSMsg.isNull(EKK0101C060CBSMsg.STB_TEKKYO_YMD)) {
			idoRsvStatCd = JKKModelConst.IDO_RSV_STAT_CD_MI_HANEI;
		}
		JKKejbKK0081DBABase kk0081Db = new JKKejbKK0081DBABase();
		JKKejbKK0101DBABase kk0101Db = new JKKejbKK0101DBABase();

		// カレントレコードの取得(サービス契約)
		CAANMsg inMsg0081 = new CAANMsg(KK0081ETMsg.class.getName());
		inMsg0081.set(KK0081ETMsg.SVC_KEI_NO, svcKeiNo);
		inMsg0081.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(inCBSMsg));
		CAANMsg ret0081 = kk0081Db.findByCurrent(inMsg0081);

		// プライマリキー取得(サービス契約<eo光TV>)
		CAANMsg inMsg0101 = new CAANMsg(KK0101ETMsg.class.getName());
		inMsg0101.set(KK0101ETMsg.SVC_KEI_NO, svcKeiNo);
		inMsg0101.set(KK0101ETMsg.GENE_ADD_DTM, ret0081.getString(KK0081ETMsg.GENE_ADD_DTM));
		CAANMsg ret0101 = kk0101Db.findByPrimaryKey(inMsg0101);

		// 異動予約番号の採番
		String idoRsvNo = JKKModelCommon.getIdoRsvNoKK1681(inCBSMsg, inContext);

		CAANMsg inETMsgIdoRsv = new CAANMsg(KK1681ETMsg.class.getName());
		inETMsgIdoRsv.set(KK1681ETMsg.IDO_RSV_NO, idoRsvNo);
		inETMsgIdoRsv.set(KK1681ETMsg.IDO_DIV, inCBSMsg.getString(EKK0101C060CBSMsg.IDO_DIV));
		inETMsgIdoRsv.set(KK1681ETMsg.IDO_RSV_DTL_CD, idoRsvDtlCd);
		inETMsgIdoRsv.set(KK1681ETMsg.RSV_APLY_YMD, JKKejbEditYmdInit.convRsvAplyYmdInit(inCBSMsg.getString(EKK0101C060CBSMsg.RSV_APLY_YMD)));
		inETMsgIdoRsv.set(KK1681ETMsg.IDO_RSV_STAT_CD, idoRsvStatCd);
		inETMsgIdoRsv.set(KK1681ETMsg.MSKM_DTL_NO, inCBSMsg.getString(EKK0101C060CBSMsg.MSKM_DTL_NO));
		inETMsgIdoRsv.set(KK1681ETMsg.SVC_KEI_NO, inCBSMsg.getString(EKK0101C060CBSMsg.SVC_KEI_NO));
		inETMsgIdoRsv.set(KK1681ETMsg.NEW_PRC_GRP_CD, inCBSMsg.getString(EKK0101C060CBSMsg.PRC_GRP_CD));
		inETMsgIdoRsv.set(KK1681ETMsg.NEW_PCRS_CD, inCBSMsg.getString(EKK0101C060CBSMsg.PCRS_CD));
		inETMsgIdoRsv.set(KK1681ETMsg.NEW_PPLAN_CD, inCBSMsg.getString(EKK0101C060CBSMsg.PPLAN_CD));
		inETMsgIdoRsv.set(KK1681ETMsg.NEW_DMPS_ANKEN_NO, inCBSMsg.getString(EKK0101C060CBSMsg.DMPS_ANKEN_NO));
		inETMsgIdoRsv.set(KK1681ETMsg.NEW_TK_HOSHIKI_KEI_NO, inCBSMsg.getString(EKK0101C060CBSMsg.TK_HOSHIKI_KEI_NO));
		inETMsgIdoRsv.set(KK1681ETMsg.OLD_PRC_GRP_CD, ret0081.getString(KK0081ETMsg.PRC_GRP_CD));
		inETMsgIdoRsv.set(KK1681ETMsg.OLD_PCRS_CD, ret0081.getString(KK0081ETMsg.PCRS_CD));
		inETMsgIdoRsv.set(KK1681ETMsg.OLD_PPLAN_CD, ret0081.getString(KK0081ETMsg.PPLAN_CD));
		inETMsgIdoRsv.set(KK1681ETMsg.OLD_TK_HOSHIKI_KEI_NO, ret0081.getString(KK0081ETMsg.TK_HOSHIKI_KEI_NO));
		inETMsgIdoRsv.set(KK1681ETMsg.OLD_DMPS_ANKEN_NO, ret0101.getString(KK0101ETMsg.DMPS_ANKEN_NO));
		inETMsgIdoRsv.set(KK1681ETMsg.PNLTY_HASSEI_CD, inCBSMsg.getString(EKK0101C060CBSMsg.PNLTY_HASSEI_CD));
		inETMsgIdoRsv.set(KK1681ETMsg.ADD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		inETMsgIdoRsv.set(KK1681ETMsg.ADD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		inETMsgIdoRsv.set(KK1681ETMsg.UPD_DTM, inCBSMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
		inETMsgIdoRsv.set(KK1681ETMsg.UPD_OPEACNT, inCBSMsg.getString(JCMConstants.OPERATOR_ID_KEY));
		inETMsgIdoRsv.set(KK1681ETMsg.MK_FLG, MK_FLG_VALID);

		JKKejbDBAUtil dbaUtil = new JKKejbDBAUtil(inCBSMsg);
		dbaUtil.create(inETMsgIdoRsv);

		// O項目のセット
		inCBSMsg.set(EKK0101C060CBSMsg.ADD_DTM, inETMsgIdoRsv.getString(JCMConstants.OPERATE_DATETIME_KEY));
		inCBSMsg.set(EKK0101C060CBSMsg.ADD_OPEACNT, inETMsgIdoRsv.getString(JCMConstants.OPERATOR_ID_KEY));
		inCBSMsg.set(EKK0101C060CBSMsg.UPD_DTM, inETMsgIdoRsv.getString(JCMConstants.OPERATE_DATETIME_KEY));
		inCBSMsg.set(EKK0101C060CBSMsg.UPD_OPEACNT, inETMsgIdoRsv.getString(JCMConstants.OPERATOR_ID_KEY));
		inCBSMsg.set(EKK0101C060CBSMsg.MK_FLG, MK_FLG_VALID);
	}
}
