/*******************************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 ********************************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JCKejbCK0141SecProc
 *	ソースファイル名：JCKejbCK0141SecProc.java
 *	作成者			：EKek0048
 *	日付			：2011年06月27日
 *＜機能概要＞
 *	オプトインメール受信設定に対する副次処理を行う部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	ｖ1.00.00
 *
 ********************************************************************************/

package eo.ejb.common.db;

import java.util.ArrayList;
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 eo.ejb.cbm.entity.CK0141ETMsg;
import eo.ejb.cbm.entity.CK0141LE;
import eo.ejb.common.JCKModelCommon;

/**
* <p>
* オプトインメール受信設定に対する副次処理を行う部品です。
* </p>
* @author 富士通
*/
public class JCKejbCK0141SecProc extends JCKejbCK0141DBABase
{
	/** オプトインメール受信設定ステータス(解除済) **/
	private static final String OPTINM_RCV_SETTE_STAT_KAIJYOSU = "020";

	/** オプトインメール受信設定ステータス(登録済) **/
	private static final String OPTINM_RCV_SETTE_STAT_TOUROKU = "010";

	/** 無効フラグ(有効) **/
	private static final String MK_FLG_YUKO = "0";

	/**
	 * <p>
	 * オプトインメール受信設定のお客様変更を行います。
	 * </p>
	 * @param inCbsMsg CBSメッセージ
	 * @param newSysid 更新後のSYSID
	 * @param mlad メールアドレス
	 * @param oldSysid 更新前のSYSID
	 * @param rsvAplyYmd 予約適用年月日
	 */
	public void optinMRcvSetteCustChg(CAANMsg inCbsMsg, String newSysid, String mlad, String oldSysid, String rsvAplyYmd)
	{

		// オプトインメール受信設定の一覧照会を行う
		CAANMsg inETMsg0141 = new CAANMsg(CK0141ETMsg.class.getName());
		inETMsg0141.set(CK0141ETMsg.SYSID, oldSysid);
		inETMsg0141.set(CK0141ETMsg.MLAD, mlad);

		CK0141LE ck0141 = new CK0141LE();
		CAANMsg[] otETMsg0141Insert = null;

		try
		{
			otETMsg0141Insert = ck0141.findByCondition(inETMsg0141);
		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}

		// 検索結果0件の場合は終了
		int listCnt = otETMsg0141Insert.length;
		if (listCnt < 1)
		{
			return;
		}

		String primaryKey = null;
		HashMap<String, String> escapeMap = new HashMap<String, String>();
		try
		{
			for (int j = 0; j < listCnt; j++)
			{
				// プライマリキーを取得(SYSIDとメールアドレスは検索条件なので全て同じ値)
				primaryKey = otETMsg0141Insert[j].getString(CK0141ETMsg.OPTINM_NO);

				if (escapeMap.containsKey(primaryKey))
				{
					continue;
				}

				// 初検索の場合
				escapeMap.put(primaryKey, null);

				// カレント検索
				CAANMsg curInMsg = new CAANMsg(CK0141ETMsg.class.getName());
				curInMsg.set(CK0141ETMsg.OPTINM_NO, primaryKey);
				curInMsg.set(CK0141ETMsg.SYSID, oldSysid);
				curInMsg.set(CK0141ETMsg.MLAD, mlad);
				CAANMsg curRetMsgForTouroku = new JCKejbCK0141DBABase().findByCurrent(curInMsg); // "登録済"変更用
				CAANMsg curRetMsgForKaijo = new JCKejbCK0141DBABase().findByCurrent(curInMsg); // "解除済"変更用

				// オプトインメール受信設定お客様変更処理(登録済用)を行う。
				curRetMsgForTouroku.set(CK0141ETMsg.SYSID, newSysid);
				curRetMsgForTouroku.set(CK0141ETMsg.GENE_ADD_DTM, JCKModelCommon.getSysDateTimeStamp());
				curRetMsgForTouroku.set(CK0141ETMsg.OPTINM_RCV_SETTE_STAT, OPTINM_RCV_SETTE_STAT_TOUROKU);
				curRetMsgForTouroku.set(CK0141ETMsg.ADD_DTM, inCbsMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
				curRetMsgForTouroku.set(CK0141ETMsg.ADD_OPEACNT, inCbsMsg.getString(JCMConstants.OPERATOR_ID_KEY));
				curRetMsgForTouroku.set(CK0141ETMsg.UPD_DTM, inCbsMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
				curRetMsgForTouroku.set(CK0141ETMsg.UPD_OPEACNT, inCbsMsg.getString(JCMConstants.OPERATOR_ID_KEY));
				curRetMsgForTouroku.set(CK0141ETMsg.MK_FLG, MK_FLG_YUKO);
				curRetMsgForTouroku.setNull(CK0141ETMsg.DEL_DTM);
				curRetMsgForTouroku.setNull(CK0141ETMsg.DEL_OPEACNT);

				create(curRetMsgForTouroku);

				// オプトインメール受信設定お客様変更処理(解除済用)を行う。
				curRetMsgForKaijo.set(CK0141ETMsg.GENE_ADD_DTM, JCKModelCommon.getSysDateTimeStamp());
				curRetMsgForKaijo.set(CK0141ETMsg.OPTINM_RCV_SETTE_STAT, OPTINM_RCV_SETTE_STAT_KAIJYOSU);
				curRetMsgForKaijo.set(CK0141ETMsg.OPTINM_RCV_SETTE_MK_YMD, rsvAplyYmd);
				curRetMsgForKaijo.set(CK0141ETMsg.ADD_DTM, inCbsMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
				curRetMsgForKaijo.set(CK0141ETMsg.ADD_OPEACNT, inCbsMsg.getString(JCMConstants.OPERATOR_ID_KEY));
				curRetMsgForKaijo.set(CK0141ETMsg.UPD_DTM, inCbsMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
				curRetMsgForKaijo.set(CK0141ETMsg.UPD_OPEACNT, inCbsMsg.getString(JCMConstants.OPERATOR_ID_KEY));
				curRetMsgForKaijo.set(CK0141ETMsg.MK_FLG, MK_FLG_YUKO);
				curRetMsgForKaijo.setNull(CK0141ETMsg.DEL_DTM);
				curRetMsgForKaijo.setNull(CK0141ETMsg.DEL_OPEACNT);

				create(curRetMsgForKaijo);
			}
		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}
	}
	
	/**
	 * <p>
	 * オプトインメール受信設定のお客様回復を行います。
	 * </p>
	 * @param inCbsMsg CBSメッセージ
	 * @param sysid 入力のSYSID
	 * @param cust_kaihk_ymd お客様回復年月日
	 */
	public void custKaihk(CAANMsg inCbsMsg, String sysid, String cust_kaihk_ymd)
	{
		// オプトインメール受信設定の一覧照会を行う
		CAANMsg inETMsg0141 = new CAANMsg(CK0141ETMsg.class.getName());
		inETMsg0141.set(CK0141ETMsg.SYSID, sysid);
		inETMsg0141.set(CK0141ETMsg.MK_FLG, MK_FLG_YUKO);

		CK0141LE ck0141 = new CK0141LE();
		CAANMsg[] otETMsg0141Update = null;

		try
		{
			otETMsg0141Update = ck0141.findByCondition(inETMsg0141);
		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}

		// オプトインメール受信設定が存在しない場合は終了
		int listCnt = otETMsg0141Update.length;
		if (listCnt < 1)
		{
			return;
		}
		try
		{
			List<String> tyohukuList = new ArrayList<String>();
			for (int j = 0; j < listCnt; j++)
			{
				String optNo = otETMsg0141Update[j].getString(CK0141ETMsg.OPTINM_NO);
				String mlAd = otETMsg0141Update[j].getString(CK0141ETMsg.MLAD);
				
				String priKeys = optNo + "_" + mlAd;
				//既に検索済みのキーはスキップ
				if (tyohukuList.contains(priKeys)) 
				{
					continue;
				}
				
				tyohukuList.add(priKeys);
				
				CAANMsg curMsgCK0141 = new CAANMsg(CK0141ETMsg.class.getName());
				//主キーをセット
				curMsgCK0141.set(CK0141ETMsg.OPTINM_NO, optNo);
				curMsgCK0141.set(CK0141ETMsg.SYSID, sysid);
				curMsgCK0141.set(CK0141ETMsg.MLAD, mlAd);
				
				CAANMsg inETMsg0141Insert = findByCurrent(curMsgCK0141);

				// オプトインメール受信設定のETメッセージに以下の値を設定し登録を行う。
				inETMsg0141Insert.set(CK0141ETMsg.GENE_ADD_DTM, JCKModelCommon.getSysDateTimeStamp());
				inETMsg0141Insert.set(CK0141ETMsg.OPTINM_RCV_SETTE_STAT, OPTINM_RCV_SETTE_STAT_TOUROKU);
				inETMsg0141Insert.setNull(CK0141ETMsg.OPTINM_RCV_SETTE_MK_YMD);
				inETMsg0141Insert.set(CK0141ETMsg.OPTINM_RCV_SETTE_KAIHK_YMD, cust_kaihk_ymd);
				inETMsg0141Insert.set(CK0141ETMsg.ADD_DTM, inCbsMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
				inETMsg0141Insert.set(CK0141ETMsg.ADD_OPEACNT, inCbsMsg.getString(JCMConstants.OPERATOR_ID_KEY));
				inETMsg0141Insert.set(CK0141ETMsg.UPD_DTM, inCbsMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
				inETMsg0141Insert.set(CK0141ETMsg.UPD_OPEACNT, inCbsMsg.getString(JCMConstants.OPERATOR_ID_KEY));
				inETMsg0141Insert.setNull(CK0141ETMsg.DEL_DTM);
				inETMsg0141Insert.setNull(CK0141ETMsg.DEL_OPEACNT);
				inETMsg0141Insert.set(CK0141ETMsg.MK_FLG, MK_FLG_YUKO);
				
				// カレント情報を元に登録
				
				create(inETMsg0141Insert);
				
			}
		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}
	}
	
	/**
	 * <p>
	 * オプトインメール受信設定のお客様退会を行います。
	 * </p>
	 * @param inCbsMsg CBSメッセージ
	 * @param sysid 入力のSYSID
	 * @param cust_Taikai_ymd お客様退会年月日
	 */
	public void custTaikai(CAANMsg inCbsMsg, String sysid, String cust_Taikai_ymd)
	{
		// オプトインメール受信設定の一覧照会を行う
		CAANMsg inETMsg0141 = new CAANMsg(CK0141ETMsg.class.getName());
		inETMsg0141.set(CK0141ETMsg.SYSID, sysid);
		inETMsg0141.set(CK0141ETMsg.MK_FLG, MK_FLG_YUKO);

		CK0141LE ck0141 = new CK0141LE();
		CAANMsg[] otETMsg0141Update = null;

		try
		{
			otETMsg0141Update = ck0141.findByCondition(inETMsg0141);
		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}

		// オプトインメール受信設定が存在しない場合は終了
		int listCnt = otETMsg0141Update.length;
		if (listCnt < 1)
		{
			return;
		}
		try
		{
			List<String> tyohukuList = new ArrayList<String>();
			for (int j = 0; j < listCnt; j++)
			{
				String optNo = otETMsg0141Update[j].getString(CK0141ETMsg.OPTINM_NO);
				String mlAd = otETMsg0141Update[j].getString(CK0141ETMsg.MLAD);
				
				String priKeys = optNo + "_" + mlAd;
				//既に検索済みのキーはスキップ
				if (tyohukuList.contains(priKeys)) 
				{
					continue;
				}
				
				tyohukuList.add(priKeys);
				
				CAANMsg curMsgCK0141 = new CAANMsg(CK0141ETMsg.class.getName());
				//主キーをセット
				curMsgCK0141.set(CK0141ETMsg.OPTINM_NO, optNo);
				curMsgCK0141.set(CK0141ETMsg.SYSID, sysid);
				curMsgCK0141.set(CK0141ETMsg.MLAD, mlAd);
				
				CAANMsg inETMsg0141Insert = findByCurrent(curMsgCK0141);

				// オプトインメール受信設定のETメッセージに以下の値を設定し登録を行う。
				inETMsg0141Insert.set(CK0141ETMsg.GENE_ADD_DTM, JCKModelCommon.getSysDateTimeStamp());
				inETMsg0141Insert.set(CK0141ETMsg.OPTINM_RCV_SETTE_STAT, OPTINM_RCV_SETTE_STAT_KAIJYOSU);
				inETMsg0141Insert.set(CK0141ETMsg.OPTINM_RCV_SETTE_MK_YMD, cust_Taikai_ymd);
				inETMsg0141Insert.set(CK0141ETMsg.ADD_DTM, inCbsMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
				inETMsg0141Insert.set(CK0141ETMsg.ADD_OPEACNT, inCbsMsg.getString(JCMConstants.OPERATOR_ID_KEY));
				inETMsg0141Insert.set(CK0141ETMsg.UPD_DTM, inCbsMsg.getString(JCMConstants.OPERATE_DATETIME_KEY));
				inETMsg0141Insert.set(CK0141ETMsg.UPD_OPEACNT, inCbsMsg.getString(JCMConstants.OPERATOR_ID_KEY));
				inETMsg0141Insert.setNull(CK0141ETMsg.DEL_DTM);
				inETMsg0141Insert.setNull(CK0141ETMsg.DEL_OPEACNT);
				inETMsg0141Insert.set(CK0141ETMsg.MK_FLG, MK_FLG_YUKO);
				
				// カレント情報を元に登録
				
				create(inETMsg0141Insert);
			}
		}
		catch (CAANException e1)
		{
			throw new CAANRuntimeException(e1);
		}
	}
}
