/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JCKSV904901CC
*   ソースファイル名：JCKSV904901CC.java
*   作成者          ：富士通
*   日付            ：2011年12月09日
*＜機能概要＞
*   メール送信を行います。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2011/12/09   FJ）眞方    新規作成
*
**********************************************************************/

package com.fujitsu.futurity.bp.custom.common;

import static eo.common.constant.JCKStrConst.*;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpCommonUtil.*;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpScParamHenshu.getResultString;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpScParamHenshu.isSuccess;
import static com.fujitsu.futurity.bp.custom.common.JCKPmpScParamHenshu.isError;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.bp.custom.constant.CKSV9049_CKSV9049OP_CKSV904901CC;
import com.fujitsu.futurity.bp.custom.constant.CKSV9049_CKSV9049OP_CKSV904901CC_rep_text_list;
import com.fujitsu.futurity.bp.x21.bpm.db.SessionHandle;
import com.fujitsu.futurity.bp.x21.bpm.parameter.IRequestParameterReadWrite;
import com.fujitsu.futurity.bp.x21.cc.AbstractCommonComponent;
import com.fujitsu.futurity.bp.x21.cc.ICommonComponent;
import com.fujitsu.futurity.bp.x21.cc.exception.CCException;
import com.fujitsu.futurity.model.base.CAANMsg;

import eo.ejb.cbs.cbsmsg.ECK0011B050CBSMsg;
import eo.ejb.cbs.cbsmsg.ECK0011B050CBSMsg1List;

/**
 * メール送信を行います。
 * <BR>
 * @ author 富士通
 */
public class JCKSV904901CC extends AbstractCommonComponent implements ICommonComponent
{
	/**
	 * 共通コンポーネント実行
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return リクエストパラメータ
	 * @throws Throwable
	 */
	@SuppressWarnings("unchecked")
	public IRequestParameterReadWrite executeMain(SessionHandle handle, IRequestParameterReadWrite param, String fixedText) throws Throwable
	{
		// 下りユーザデータ
		Map<String, Object> resultMap = new HashMap();

		//***************************************************
		// 入力パラメータ取得
		//***************************************************
		Map inUserMap   = (Map)param.getData(fixedText);
		String mlad     = (String)inUserMap.get(CKSV9049_CKSV9049OP_CKSV904901CC.MLAD);
		String mailCd   = (String)inUserMap.get(CKSV9049_CKSV9049OP_CKSV904901CC.MAIL_CD);
		String sysid    = (String)inUserMap.get(CKSV9049_CKSV9049OP_CKSV904901CC.SYSID);
		List repTextList = (List)inUserMap.get(CKSV9049_CKSV9049OP_CKSV904901CC.REP_TEXT_LIST);
		String eoId     = null;
		String custKana = null;

		//***************************************************
		// お客様情報取得
		//***************************************************
		Map result = callECK0011B050(handle, param, "2", sysid);
		if (isSuccess(result))
		{
			String keyPre = ECK0011B050CBSMsg.ECK0011B050CBSMSG1LIST + "[0].";
			eoId     = getResultString(result, keyPre + ECK0011B050CBSMsg1List.EOID);
			custKana = getResultString(result, keyPre + ECK0011B050CBSMsg1List.CONT_CUST_KANA);
			if (JCKBPCommon.isNullOrBlank(custKana))
			{
				custKana = getResultString(result, keyPre + ECK0011B050CBSMsg1List.CUST_KANA);
			}
		}

		//***************************************************
		// メールへの埋め込み文字を設定
		//***************************************************
		String[] repTextAry = {};
		if (repTextList != null)
		{
			repTextAry = new String[repTextList.size()];
			for (int i = 0; i < repTextList.size(); i++)
			{
				Map rec = (Map)repTextList.get(i);
				repTextAry[i] = (String) rec.get(CKSV9049_CKSV9049OP_CKSV904901CC_rep_text_list.REP_TEXT);
			}
		}

		//***************************************************
		// メール送信の実行
		//***************************************************
		boolean res = callMailSendScForPmp(handle, param, sysid, eoId, custKana, mailCd, mlad, repTextAry);

		//***************************************************
		// 返却パラメータ設定
		//***************************************************

		// 下りコントロールマップのセット
		result = getLastResult(param);
		JCKPmpScParamHenshu.setResultCtrlData(param, result, fixedText);

		// 下りユーザデータマップのセット
		String returnCd = null;
		if (res){
			returnCd = PMP_NORMAL_END;
		} else {
			returnCd = PMP_ERR_MAILSEND;
		}
		resultMap.put("return_cd", returnCd);
		JCKPmpScParamHenshu.setResultUserData(param, fixedText, resultMap);

		//***************************************************
		// 処理結果の判定
		//***************************************************
		if (isError(result)) {
			String errMsg = "PMP連携用メール送信CCで例外が発生しました";
			throw new CCException(errMsg, new Exception(errMsg));
		}

		return param;
	}

	/**
	 * BPチェック用パラメータ作成
	 * @param handle セッションハンドル
	 * @param param リクエストパラメータ
	 * @param fixedText ユーザ定義文字列
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public HashMap getInvokeCBS(SessionHandle handle, IRequestParameterReadWrite param, String fixedText){
		return JCKPmpScParamHenshu.createBpNotCheckParam();
	}

	/**
	 * ＢＰチェック結果を編集する。
	 * <br />
	 * @param param リクエストパラメータ
	 * @param caanMsgs サービスインターフェイス用のパラメータ配列
	 * @param returnCode リターンコード
	 * @return リクエストパラメータ
	 * @throws Throwable 
	 */
	public IRequestParameterReadWrite editErrorInfo(IRequestParameterReadWrite param, CAANMsg[] caanMsgs, Integer returnCode) throws Throwable
	{
		return JCKPmpScParamHenshu.editErrorInfo(param, caanMsgs, returnCode);
	}
}
