/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JKKejbKK0021SecProc
 *	ソースファイル名：JKKejbKK0021SecProc.java
 *	作成者			：EKek0048
 *	日付			：2011年04月05日
 *＜機能概要＞
 *	申込明細に対する副次処理を行う部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	ｖ1.00.00
 *	ｖ33.00.00	2017/07/11	FJ)鈴木		【ANK-3097-00-00】申込書イメージ付け替え機能の実装＜随時削減策＞
 *
 ********************************************************************************/

package eo.ejb.common.db;

import com.fujitsu.futurity.model.base.CAANCreateException;
import com.fujitsu.futurity.model.base.CAANFinderException;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.ejb.cbm.entity.KK0021ETMsg;
import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbs.cbsmsg.EKK0021C012CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0021C130CBSMsg;
import eo.ejb.cbs.cbsmsg.EKK0021C060CBSMsg;
import eo.ejb.common.JCCModelCommon;
import eo.ejb.common.JKKModelCommon;

/**
 * <p>
 * 申込明細に対する副次処理部品クラスです。
 * </p>
 * @author 富士通
 *
 */
public class JKKejbKK0021SecProc extends JKKejbKK0021DBABase
{

	/**
	 * コンストラクタです。
	 */
	public JKKejbKK0021SecProc()
	{
		super();
	}
	
	/** 申込明細ステータス(キャンセル済) **/
	private static final String MSKM_DTL_STAT = "920";

	/** 無効フラグ(有効) **/
	private static final String MK_FLG_YUKO = "0";

	/** シーケンス定義名(WEB受付番号) */
	private static final String SEQ_NAME = "SEQ_WEB_UK_NO";

	/** 接頭語(WEB受付番号) */
	private static final String PREFIX_SEQWEBUKNO = "";

	/** 接続語(WEB受付番号) */
	private static final String SETUZOKU_WEBUKNO = "K";

	/** シーケンス補正桁数 */
	private static final int SEQUENCE_LENGTH = 7;

	/**
	 * 申込明細キャンセルに対する副次処理部品
	 * @param cbsMsg
	 * @param svc_kei_no
	 * @param mskmDtlCancelYmd
	 * @param mskmDtlCancelRsnCd
	 * @param mskmDtlCancelRsnMemo
	 */
	public void mskmDtlCancel(CAANMsg cbsMsg, String svc_kei_no, String mskmDtlCancelYmd, String mskmDtlCancelRsnCd, String mskmDtlCancelRsnMemo)
	
	{
		// 工事案件中止によるキャンセルまたは解約の場合、下記の処理を行う。
		
		// (2) サービス契約に紐づく申込明細.申込明細番号を取得する。
		CAANMsg msgKkTSvcKeiCrt = new CAANMsg(KK0081ETMsg.class.getName());
		
		msgKkTSvcKeiCrt.set(KK0081ETMsg.SVC_KEI_NO, svc_kei_no);
		msgKkTSvcKeiCrt.set(KK0081ETMsg.RSV_APLY_YMD, JKKModelCommon.getOpeDate(cbsMsg));
		
		CAANMsg crtKK0081 = new JKKejbKK0081DBABase().findByCurrent(msgKkTSvcKeiCrt);
		
		String mskmDtlNo = crtKK0081.getString(KK0081ETMsg.MSKM_DTL_NO);
		
		// 申込明細キャンセルのETメッセージに以下の値を設定し、申込明細キャンセルのカレントレコードの照会を行う。
		CAANMsg msgMskmDtlCancelCrt = new CAANMsg(KK0021ETMsg.class.getName());
		
		msgMskmDtlCancelCrt.set(KK0021ETMsg.MSKM_DTL_NO , mskmDtlNo);
		//msgOpIspCrt.set(KK0361ETMsg.GENE_ADD_DTM, JCMInterface.getServerDatetime());

		CAANMsg crtKK0021 = findByCurrent(msgMskmDtlCancelCrt);
		if (!(crtKK0021 == null))
		{
			// 申込明細キャンセル処理を行う。
			crtKK0021.set(KK0021ETMsg.GENE_ADD_DTM, JKKModelCommon.getSysDateTimeStamp());
			crtKK0021.set(KK0021ETMsg.MSKM_DTL_STAT, MSKM_DTL_STAT);
			crtKK0021.set(KK0021ETMsg.MSKM_DTL_CANCEL_YMD, mskmDtlCancelYmd);
			crtKK0021.set(KK0021ETMsg.MSKM_DTL_CANCEL_RSN_CD, mskmDtlCancelRsnCd);
			crtKK0021.set(KK0021ETMsg.MSKM_DTL_CANCEL_RSN_MEMO, mskmDtlCancelRsnMemo);
			crtKK0021.set(KK0021ETMsg.MSKM_DTL_CANCEL_CL_YMD, "");
			crtKK0021.set(KK0021ETMsg.ADD_DTM, cbsMsg.getString(EKK0021C060CBSMsg.OPERATEDATETIME));
			crtKK0021.set(KK0021ETMsg.ADD_OPEACNT, cbsMsg.getString(EKK0021C060CBSMsg.ADD_OPEACNT));
			crtKK0021.set(KK0021ETMsg.UPD_DTM, cbsMsg.getString(EKK0021C060CBSMsg.OPERATEDATETIME));
			crtKK0021.set(KK0021ETMsg.UPD_OPEACNT, cbsMsg.getString(EKK0021C060CBSMsg.UPD_OPEACNT));
			crtKK0021.set(KK0021ETMsg.DEL_DTM, "");
			crtKK0021.set(KK0021ETMsg.DEL_OPEACNT, "");
			crtKK0021.set(KK0021ETMsg.MK_FLG, MK_FLG_YUKO);
			
			try
			{
				create(crtKK0021);
			}
			catch (CAANCreateException cce)
			{
				throw new CAANRuntimeException(cce);
			}
		}
	}

	/**
	 * WEB受付番号の採番を行う。
	 * 
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 */
	public void getWebUkNo(CAANMsg inCBSMsg, AgentDispatchContext inContext)
	{

		StringBuffer sBuf = new StringBuffer();

		// 運用日変換
		String opeDate = JKKModelCommon.getOpeDate(inCBSMsg);
		String opeDateYear = opeDate.substring(2, 4);
		String opeDateMonth = opeDate.substring(4, 6);
		String strHexOpeDate = Integer.toHexString(Integer.parseInt(opeDateMonth)).toUpperCase();
		String opeDateDay = opeDate.substring(6, 8);

		// シーケンスより番号取得
		String value = JCCModelCommon.getFormatedNextSeq(SEQ_NAME, PREFIX_SEQWEBUKNO, SEQUENCE_LENGTH);

		// 採番を行う
		sBuf.append(opeDateYear)
			.append(strHexOpeDate)
			.append(opeDateDay)
			.append(SETUZOKU_WEBUKNO)
			.append(value);

		// O項目の設定
		inCBSMsg.set(EKK0021C012CBSMsg.WEB_UK_NO, sBuf.toString());
	}
	
	//ANK-3097-00-00 ADD START
	/**
	 * <p>
	 * 申込書イメージ付替登録する
	 * </p>
	 * @param inCbsMsg CBSメッセージ
	 * @param mskmDtlno 申込明細番号
	 * @param geneAddDtm 世代登録年月日時分秒
	 * @param mskmshoNo 申込書番号
	 * @param mskmshoDtlNo 申込書明細番号
	 * @param mskmFormCd 申込種別コード
	 */
	public void updateKK0021C130(CAANMsg inCbsMsg, String mskmDtlno, String geneAddDtm, String mskmshoNo, String mskmshoDtlNo, String mskmFormCd)
	{
		// 更新用メッセージ作成
		CAANMsg inETMsg = new CAANMsg(KK0021ETMsg.class.getName());

		//更新条件を設定
		inETMsg.set(KK0021ETMsg.MSKM_DTL_NO, mskmDtlno);
		inETMsg.set(KK0021ETMsg.GENE_ADD_DTM, geneAddDtm);
		
		//更新する項目を設定
		inETMsg.set(KK0021ETMsg.MSKMSHO_NO, mskmshoNo);
		inETMsg.set(KK0021ETMsg.MSKMSHO_DTL_NO, mskmshoDtlNo);
		inETMsg.set(KK0021ETMsg.MSKM_FORM_CD, mskmFormCd);
		
		inETMsg.set(KK0021ETMsg.UPD_DTM,  inCbsMsg.getString(EKK0021C130CBSMsg.OPERATEDATETIME));
		inETMsg.set(KK0021ETMsg.UPD_OPEACNT, inCbsMsg.getString(EKK0021C130CBSMsg.OPERATORID));

		// 更新を行う
		try
		{
			super.update(inETMsg);
		}
		catch (CAANFinderException cfe)
		{
			throw new CAANRuntimeException(cfe);
		}
	}
	//ANK-3097-00-00 ADD END
}
