/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：契約管理
 *   モジュール名    ：審査確認画面
 *   ソースファイル名：KKW00187SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2011年10月30日
 *＜機能概要＞
 *   審査確認画面部品です。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/10/30   FJ）富士通  新規作成
 *
 **********************************************************************/
package eo.web.webview.KKW00187SF;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.common.JSYwebLog;
import com.fujitsu.futurity.web.x00.JCCWebServiceException;
import com.fujitsu.futurity.web.x31.X31CMessageResult;
import com.fujitsu.futurity.web.x31.X31CWebConst;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccess;
import com.fujitsu.futurity.web.x31.X31SDataBeanAccessArray;
import com.fujitsu.futurity.web.x31.X31CMessageResult.X31CMessageMoreInfo;

import eo.common.constant.JPCOnlineMessageConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKCommonConst;
import eo.web.webview.common.JKKScreenConst;
import eo.web.webview.mapping.KKSV0106_KKSV0106OPDBMapper;

/**
 * <dd>クラス名：KKW00187SFLogic 
 * <dd>クラス説明：該当サービス契約の審査チェックの結果の表示を行う。 
 * <dd>備考：なし。
 * 
 * @version 1.00.00 2011/06/20
 * @author 富士通
 */
@SuppressWarnings("serial")
public class KKW00187SFLogic extends JCCWebBusinessLogic
{
	/** 画面モード：審査 */
	private static final String SCREEN_MODE_JDG = "1";

// 2011/09/07 松山 DEL START 使用しないクラス変数をコメント化
//	/** 画面モード：照査ＯＫ */
//	private static final String SCREEN_MODE_SHOSA_OK = "2";
//
//	/** 画面モード：照査ＮＧ */
//	private static final String SCREEN_MODE_SHOSA_NG = "3";
// 2011/09/07 松山 DEL END

	/**
	 * <dd>メソッド名：審査／照査確認初期表示処理 <dd>メソッド説明：審査／照査確認画面の初期表示を行う。
	 * 
	 * @return true/false
	 * @throws Exception
	 *             業務サービス内で発生した例外全般。
	 */
	public boolean actionInit() throws Exception
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		if (commoninfoBean == null)
		{
			throw new Exception();
		}

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean =
		{
			bean
		};
		if (bean == null)
		{
			throw new Exception();
		}

		HashMap<String, Object> paramMap = new HashMap<String, Object>(); // パラメタ設定用マップ
		HashMap<String, Object> inputMap = new HashMap<String, Object>(); // 検索条件格納用マップ
		HashMap<String, Object> outputMap = new HashMap<String, Object>(); // 結果格納用マップ

		// 引継ぎデータの取得
		JCCWebCommon.getScreenInfo(this);
		// 画面名を設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JKKScreenConst.SCREEN_NAME_KKW00187);
		
		// リクエストパラメータの設定
		paramBean[0].sendMessageString(KKW00187SFConst.IS_SOKUJI, X31CWebConst.DATABEAN_SET_VALUE,
				KKW00187SFConst.IS_SOKUJI_VALUE_FALSE);
		paramBean[0].sendMessageString(KKW00187SFConst.KINO_SKBT, X31CWebConst.DATABEAN_SET_VALUE,
				KKW00187SFConst.KINO_SKBT_VALUE_31);

		// 画面モードを取得
		String screenMode = paramBean[0]
				.sendMessageString(KKW00187SFConst.SCREEN_MODE, X31CWebConst.DATABEAN_GET_VALUE);

		// 審査モード
		if (SCREEN_MODE_JDG.equals(screenMode))
		{
			X31SDataBeanAccessArray arraybean = paramBean[0].getDataBeanArray(KKW00187SFConst.KK_T_SVC_KEI_LIST);
			for(int i = 0; i < arraybean.getCount(); i++)
			{
				X31SDataBeanAccess svcKeiBean = arraybean.getDataBean(i);
				
				KKSV0106_KKSV0106OPDBMapper mapper = new KKSV0106_KKSV0106OPDBMapper(); // DataBean-BPマッパー

				// パラメタ設定
				paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, JKKCommonConst.UCID_KKSV0106);
				paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, JKKCommonConst.OPID_KKSV0106OP);

				// 上りマッピング
				mapper.setKKSV010601CC(paramBean, inputMap, JKKCommonConst.FUNC_CODE_2, svcKeiBean);

				// DataBeanログ出力
				JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

				X31CMessageResult msgResult = null;
				try
				{
					// サービス実行
					msgResult = invokeService(paramMap, inputMap, outputMap);
				}
				catch (JCCWebServiceException webSvcException)
				{
					String exceptTargetMsgId = null;
					msgResult = webSvcException.getMessageList();
					if(msgResult != null){
						String[] msgIdList = msgResult.getMessageIdList();
						exceptTargetMsgId = msgIdList[0];
						
						if (!"EKB5470-KW".equals(exceptTargetMsgId))
						{
							X31CMessageMoreInfo[] msgMoreList = msgResult.getMessageMoreInfoList();
							String[] replaceStrArray = new String[]{""};
							if(0 < msgMoreList.length)
							{
								String replaceStr = msgMoreList[0].getReplaceStr();
								replaceStrArray = replaceStr.split(";");
							}
							
							if(0 < msgIdList.length)
							{
								JCCWebCommon.setMessageInfo(this, msgIdList[0], replaceStrArray);
							}
						}
					}
					
					if (!"EKB5470-KW".equals(exceptTargetMsgId))
					{
						X31SDataBeanAccessArray jdgCfmDslDataBeanList = paramBean[0].getDataBeanArray(KKW00187SFConst.RSLT_CHK_LIST);
						jdgCfmDslDataBeanList.clearArray();
						return true;
					}
				}

				// 下りマッピング
				mapper.getKKSV010601CC(paramBean, outputMap);
			}

			
			// 審査／照査確認画面ＤａｔａＢｅａｎリストを取得
			X31SDataBeanAccessArray jdgCfmDslDataBeanList = paramBean[0].getDataBeanArray(KKW00187SFConst.RSLT_CHK_LIST);
			
			// 審査／照査確認画面ＤａｔａＢｅａｎリストが１件以上の場合
			if(jdgCfmDslDataBeanList.getCount() > 0)
			{
				// 表示メッセージ作成処理を実施
				setDspMsg(paramBean);
				// メッセージ表示処理
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB7970__I, new String[]{""});
			}
			else
			{
				// メッセージ表示処理
				JCCWebCommon.setMessageInfo(this, JPCOnlineMessageConstant.EKB7960__I, new String[]{""});
			}
			
			// DataBeanログ出力
			JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
		}
		
// 2011/09/07 松山 DEL START 審査／照査確認画面は審査確認画面となり、この契機では照査は行わないため、コメント化
//		// 照査OKモード
//		else if (SCREEN_MODE_SHOSA_OK.equals(screenMode))
//		{
//			// パラメタ設定
//			paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "KKSV0283");
//			paramMap.put(X31CWebConst.TELEGRAM_INFO_OPERATION_ID, "KKSV0283OP");
//
//			// 上りマッピング
//			setTrgtData(paramBean, inputMap, JKKCommonConst.FUNC_CODE_1);
//
//			// DataBeanログ出力
//			JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);
//
//			try
//			{
//				// サービス実行
//				invokeService(paramMap, inputMap, outputMap);
//				// invokeDummyService(paramMap, inputMap, outputMap);
//			}
//			catch (JCCWebServiceException webSvcException)
//			{
//				// 共有フォームBeanからMESSAGE_LISTデータタイプBeanを取得する。
//				X31SDataBeanAccessArray commonBeanArray = commoninfoBean
//						.getDataBeanArray(CommonInfoCFConst.MESSAGES_LIST);
//				// メッセージ領域のクリア
//				commonBeanArray.clearArray();
//			}
//
//			// 下りマッピング
//			getTrgtData(paramBean, outputMap);
//		}
//
//		// 照査NGモード
//		else if (SCREEN_MODE_SHOSA_NG.equals(screenMode))
//		{
//
//		}
// 2011/09/07 松山 DEL END

		// DataBeanログ出力
		JSYwebLog.println(JSYwebLog.DataBean_Dump, getClass(), dumpDatabean(), null, null, null);

		return true;
	}

	/**
	 * 表示メッセージ作成処理
	 * 
	 * @param bean
	 *            サービスフォームビーン
	 */
	@SuppressWarnings("unchecked")
	private void setDspMsg(X31SDataBeanAccess[] bean)
	{
		X31SDataBeanAccessArray jdgCfmDslDataBeanList = bean[0].getDataBeanArray(KKW00187SFConst.RSLT_CHK_LIST);
		
		for(int i = 0; jdgCfmDslDataBeanList.getCount() > i; i++)
		{
			X31SDataBeanAccess subBean = jdgCfmDslDataBeanList.getDataBean(i);
			
			// メッセージ内容を取得
			String msgNaiyo = subBean.sendMessageString(KKW00187SFConst.RSLT_MSG_NAIYO_01, X31CWebConst.DATABEAN_GET_VALUE);
			// メッセージ埋込文字を取得
			String msgUmkmMoji = subBean.sendMessageString(KKW00187SFConst.RSLT_MSG_UMKM_MOJI_01, X31CWebConst.DATABEAN_GET_VALUE);
			// メッセージＩＤを取得
			String msgId = subBean.sendMessageString(KKW00187SFConst.RSLT_MSG_ID_01, X31CWebConst.DATABEAN_GET_VALUE);
			
			// メッセージの後にメッセージＩＤを付与
			msgNaiyo += "[" + msgId + "]";
			
			// メッセージ埋込文字がnull以外の場合
			if(msgUmkmMoji != null)
			{
				// メッセージに埋込文字を付与
				String[] msgUmkmMojiArray = msgUmkmMoji.split(",");
				
				for(int n = 0; n < msgUmkmMojiArray.length; n++)
				{
					msgNaiyo = msgNaiyo.replace("%"+(n+1)+"%", msgUmkmMojiArray[n]);
				}
			}
			
			// メッセージをＤａｔａＢｅａｎに設定
			subBean.sendMessageString(KKW00187SFConst.RSLT_MSG_01, X31CWebConst.DATABEAN_SET_VALUE, msgNaiyo);
		}
	}
	
	
	/**
	 * 照査ＯＫモードの上りマッピング
	 * 
	 * @param bean
	 *            サービスフォームビーン
	 * @param outputMap
	 *            サービスインプットマップ
	 * @param func_code
	 *            機能コード
	 */
	@SuppressWarnings("unchecked")
	private void setTrgtData(X31SDataBeanAccess[] bean, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> trgtDataListMap = new HashMap<String, Object>();
		if (bean == null)
		{
			return;
		}

		if (bean.length != 1)
		{
			return;
		}

		X31SDataBeanAccessArray arraybean = null;
		X31SDataBeanAccess beanTemp = null;
		ArrayList trgtDataList = new ArrayList();

		// 共通情報のマッピング
		outputMap.put("func_code", func_code);

		beanTemp = bean[0];
		arraybean = beanTemp.getDataBeanArray("照査サービスリスト");

		if (arraybean.getCount() > 0)
		{
			for (int i = 0; i < arraybean.getCount(); i++)
			{
				X31SDataBeanAccess subbean = arraybean.getDataBean(i);
				HashMap childMap = new HashMap();

				// 起動元機能識別を起動元コードに設定
				childMap.put("kido_cd", "01");

				childMap.put("sysid", subbean.sendMessageString("ｓｙｓｉｄ", X31CWebConst.DATABEAN_GET_VALUE));
				childMap.put("mskmsho_no", subbean.sendMessageString("申込書番号", X31CWebConst.DATABEAN_GET_VALUE));
				childMap.put("mskm_dtl_no", subbean.sendMessageString("申込明細番号", X31CWebConst.DATABEAN_GET_VALUE));
				childMap.put("svc_kei_no", subbean.sendMessageString("サービス契約番号", X31CWebConst.DATABEAN_GET_VALUE));

				trgtDataList.add(childMap);
			}
		}

		trgtDataListMap.put("trgt_data_list", trgtDataList);
		outputMap.put("trgt_data", trgtDataListMap);
	}

	/**
	 * 照査ＯＫモード時の下りマッピング
	 * 
	 * @param bean
	 *            サービスフォームビーン
	 * @param outputMap
	 *            サービスアプトプットマップ
	 */
	@SuppressWarnings("unchecked")
	private void getTrgtData(X31SDataBeanAccess[] bean, HashMap outputMap)
	{
		int errCnt = 0;
		HashMap parentMap = null;
		if (outputMap.containsKey("trgt_data"))
		{
			parentMap = (HashMap)outputMap.get("trgt_data");
		}

		ArrayList childList = null;

		X31SDataBeanAccessArray listKKSV010601CC_rslt_chk_list_KKW00187 = bean[0]
				.getDataBeanArray("審査／照査確認画面ＤａｔａＢｅａｎリスト");
		childList = null;
		if (parentMap.containsKey("trgt_data_list"))
		{
			childList = (ArrayList)parentMap.get("trgt_data_list");
			for (Iterator<Map<String, Object>> iter = childList.iterator(); iter.hasNext(); ) {
				Map<String, Object> trgtDataListMap = iter.next();
				List rsltShosaChkList = (ArrayList)trgtDataListMap.get("rslt_trgt_data_list");

				// 照査エラーを格納
				String errSbtCd = (String)trgtDataListMap.get("shosa_err_sbt_cd");
				String errMsgId = (String)trgtDataListMap.get("shosa_err_msg_id");
				String errMsg = getErrMsg(errMsgId);

				X31SDataBeanAccess subbean = null;

				// エラー種別ＣＤ、またはエラーメッセージＩＤが返却されている場合
				if ((errSbtCd != null && !"".equals(errSbtCd)) || (errMsgId != null && !"".equals(errMsgId)))
				{
					if (listKKSV010601CC_rslt_chk_list_KKW00187.getCount() == 0)
					{
						subbean = listKKSV010601CC_rslt_chk_list_KKW00187.addDataBean();
					}
					else
					{
						subbean = listKKSV010601CC_rslt_chk_list_KKW00187.getDataBean(errCnt);
					}

					// 審査／照査確認画面ＤａｔａＢｅａｎリスト.チェック種別 ←
					// 審査／照査確認マップ.審査／照査確認画面ＤａｔａＢｅａｎ.チェック種別
					subbean.sendMessageString("チェック種別", X31CWebConst.DATABEAN_SET_VALUE, errSbtCd);

					// 審査／照査確認画面ＤａｔａＢｅａｎリスト.メッセージＩＤ ←
					// 審査／照査確認マップ.審査／照査確認画面ＤａｔａＢｅａｎ.メッセージＩＤ
					subbean.sendMessageString("メッセージＩＤ", X31CWebConst.DATABEAN_SET_VALUE, errMsgId);

					// 審査／照査確認画面ＤａｔａＢｅａｎリスト.メッセージ ←
					// 審査／照査確認マップ.審査／照査確認画面ＤａｔａＢｅａｎ.メッセージ
					subbean.sendMessageString("メッセージ", X31CWebConst.DATABEAN_SET_VALUE, errMsg);
					errCnt++;
				}

				// 照査チェックでエラーがある場合
				if (rsltShosaChkList != null) {
					for (int i = 0; i < rsltShosaChkList.size(); i++)
					{
						subbean = null;
						if (listKKSV010601CC_rslt_chk_list_KKW00187.getCount() > errCnt)
						{
							subbean = listKKSV010601CC_rslt_chk_list_KKW00187.getDataBean(errCnt);
						}
						else
						{
							subbean = listKKSV010601CC_rslt_chk_list_KKW00187.addDataBean();
						}
						HashMap childMap = (HashMap)rsltShosaChkList.get(i);

						// メッセージＩＤ
						errMsgId = (String)childMap.get("err_msg_id");
						errMsg = getErrMsg(errMsgId);

						// 審査／照査確認画面ＤａｔａＢｅａｎリスト.チェック種別 ←
						// 審査／照査確認マップ.審査／照査確認画面ＤａｔａＢｅａｎ.チェック種別
						subbean.sendMessageString("チェック種別", X31CWebConst.DATABEAN_SET_VALUE, (String)childMap
										.get("err_sbt_cd"));

						// 審査／照査確認画面ＤａｔａＢｅａｎリスト.メッセージＩＤ ←
						// 審査／照査確認マップ.審査／照査確認画面ＤａｔａＢｅａｎ.メッセージＩＤ
						subbean.sendMessageString("メッセージＩＤ", X31CWebConst.DATABEAN_SET_VALUE, errMsgId);

						// 審査／照査確認画面ＤａｔａＢｅａｎリスト.メッセージ ←
						// 審査／照査確認マップ.審査／照査確認画面ＤａｔａＢｅａｎ.メッセージ
						subbean.sendMessageString("メッセージ", X31CWebConst.DATABEAN_SET_VALUE, errMsg);
						errCnt++;
					}
				}
			}
		}
	}

	/**
	 * エラーメッセージＩＤよりエラーメッセージを取得<br />
	 * 
	 * @param errMsgId
	 *            エラーメッセージＩＤ
	 * @return 共通部品で取得したエラーメッセージＩＤ
	 */
	private String getErrMsg(String errMsgId)
	{
		if (errMsgId == null || "".equals(errMsgId))
		{
			return "";
		}
		else
		{
			return JCCWebCommon.getMessage(errMsgId);
		}
	}
}