/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：CKW00701SFLogic
 *   ソースファイル名：CKW00701SFLogic.java
 *   作成者          ：富士通
 *   日付            ：2012年01月25日
 *＜機能概要＞
 *   外部不良顧客情報入出力画面を表示します。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2012/01/25   FJ）	      新規作成
 *
 **********************************************************************/

package eo.web.webview.CKW00701SF;

import java.util.ArrayList;
import java.util.HashMap;

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 eo.common.constant.JPCOnlineMessageConstant;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JCCUploadRestrictionCache;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCKCommonConst;
import eo.web.webview.common.JCKScreenConst;
import eo.web.webview.mapping.CKSV0030_CKSV0030OPDBMapper;
import eo.web.webview.mapping.CKSV0031_CKSV0031OPDBMapper;
import eo.web.webview.mapping.CKSV0032_CKSV0032OPDBMapper;

/**
 * 
 * 外部不良顧客情報入出力を行います。
 * 
 * <BR>
 * @author 富士通
 */
public class CKW00701SFLogic extends JCCWebBusinessLogic 
{

	/**
	 * 初期表示処理
	 * <br>
	 * @return boolean 処理結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean init() throws Exception
	{
		// 引継情報の取得
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		//基準日にオンライン運用日付を設定
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		bean.sendMessageString(CKW00701SFConst.STDARDYMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate);

		// 共通情報の設定
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, String> paramMap = new HashMap<String, String>();

		// サービスの上りマッピング
		CKSV0030_CKSV0030OPDBMapper mapper = new CKSV0030_CKSV0030OPDBMapper();
		X31SDataBeanAccess[] paramBean = {super.getServiceFormBean()};
		mapper.setCKSV003001SC(paramBean, inputMap, JCKCommonConst.FUNC_CODE_1);
		mapper.setCKSV003002SC(paramBean, inputMap, JCKCommonConst.FUNC_CODE_1);

		// サービス呼び出し
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CKSV0030");
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);

		// エラー処理 
		if (msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}

		// サービス結果の下りマッピング
		mapper.getCKSV003001SC(paramBean, outputMap);
		mapper.getCKSV003002SC(paramBean, outputMap);

		// 遷移先画面情報を設定
		setForwardInfo(JCKScreenConst.SCREEN_ID_CKW00701, JCKScreenConst.SCREEN_NAME_CKW00701);

		return true;
	}

	/**
	 * アップロードボタン押下処理
	 * <br>
	 * @return boolean 処理結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean upload() throws Exception
	{
		// 共有フォームBean設定
		X31SDataBeanAccess commonBean = super.getCommonInfoBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();

		//アップロード一時ファイル情報取得部品を使用し、ファイル情報を取得する
		ArrayList<HashMap<String, Object>> fileInfoList = JCCWebCommon.getFileInfoArray(this, true);

		// コンボボックスの選択値を取得し表示用項目を設定
		getSelectValue(bean.getDataBeanArray(CKW00701SFConst.INOUT_CD));
		getSelectValue(bean.getDataBeanArray(CKW00701SFConst.JIGYOSHA_CD));

		String message_id = "";
		String[] stringArray = new String[1];

		// アップロード一時ファイル情報のエラー処理
		if(fileInfoList.size() == 0)  
		{
			message_id = JPCOnlineMessageConstant.EKB0680_KW;
			stringArray[0] = "";

			// 共有フォームBeanからMESSAGE_LISTデータタイプBeanを取得
			X31SDataBeanAccessArray commonBeanArray = commonBean.getDataBeanArray(CommonInfoCFConst.MESSAGES_LIST);
			// MESSAGE_LISTにメッセージを追加
			commonBeanArray.clearArray();
			JCCWebCommon.setMessageInfo(this, message_id, stringArray, "");

			return true;
		}

		HashMap<String, Object>  fileInfoMap = fileInfoList.get(0);
		if("FILE_INFO_OK".equals(fileInfoMap.get("resultCode")))
		{
			//アップロードファイル情報リストから一時ファイルキー、一時ファイル名を取得
			String fileKey = (String)fileInfoMap.get("fileKey");
			String fileName = (String)fileInfoMap.get("fileName");

			bean.sendMessageString(CKW00701SFConst.TMP_FILE_KEY, X31CWebConst.DATABEAN_SET_VALUE, fileKey);
			bean.sendMessageString(CKW00701SFConst.TMP_FILE_NM, X31CWebConst.DATABEAN_SET_VALUE, fileName);

			// メッセージの設定
			JCCWebCommon.setMessageInfo(this, "EKB0370--I", new String[]{"アップロード"});

			// 遷移先画面情報を設定
			setForwardInfo(JCKScreenConst.SCREEN_ID_CKW00702, JCKScreenConst.SCREEN_NAME_CKW00702);

		}
		else	
		{
			// アップロード一時ファイル情報のエラー処理
			if("FILE_EXTENSION_ERROR".equals(fileInfoMap.get("resultCode")))
			{
				message_id = JPCOnlineMessageConstant.EKB0680_KW;
				stringArray[0] = "";
			}
			else if("FILE_SIZE_ZERO".equals(fileInfoMap.get("resultCode")))
			{
				message_id = JPCOnlineMessageConstant.EKB0750_KW;
				stringArray[0] = "";
			}
			else if("FILE_SIZE_NG".equals(fileInfoMap.get("resultCode")))
			{
				//読出し中のアップロード定義ファイルのキー文字列（例外処理用）
				String keyProperties = null;
				//アップロードファイルサイズ個別制限値の取得
				keyProperties = "FILEUPLOAD_CUSTOM_SIZE";
				String uniSize = JCCUploadRestrictionCache.getValue(keyProperties);
				String tmpStrSize =  uniSize.substring(uniSize.lastIndexOf(";") + 1);
				
				if((null != tmpStrSize) || (!"".equals(tmpStrSize)))
				{
					message_id = JPCOnlineMessageConstant.EKB2120_KW;
					stringArray[0] = tmpStrSize + "MB";
				}
				else
				{
					// 設定値が無い場合はデフォルトの制限値5Mとする
					message_id = JPCOnlineMessageConstant.EKB2120_KW;
					stringArray[0] = "5MB";
				}
			}
			else if("FILE_NOT_EXIST".equals(fileInfoMap.get("resultCode")))
			{
				message_id = JPCOnlineMessageConstant.EKB0740_KW;
				stringArray[0] = "ファイル名";
			}
			else
			{
				message_id = JPCOnlineMessageConstant.EKB0680_KW;
				stringArray[0] = "";
			}
			// 共有フォームBeanからMESSAGE_LISTデータタイプBeanを取得
			X31SDataBeanAccessArray commonBeanArray = commonBean.getDataBeanArray(CommonInfoCFConst.MESSAGES_LIST);
			// MESSAGE_LISTをクリア
			commonBeanArray.clearArray();
			// MESSAGE_LISTにメッセージを追加
			JCCWebCommon.setMessageInfo(this, message_id, stringArray, "");
		}
		return true;
	}

	/**
	 * ダウンロードボタン押下処理
	 * <br>
	 * @return boolean 処理結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean download() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// 共通情報の設定
		HashMap<String, HashMap<String, Object>> inputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, String> paramMap = new HashMap<String, String>();

		// サービスの上りマッピング
		CKSV0032_CKSV0032OPDBMapper mapper = new CKSV0032_CKSV0032OPDBMapper();
		X31SDataBeanAccess[] paramBean = {super.getServiceFormBean()};
		mapper.setCKSV003201SC(paramBean, inputMap, JCKCommonConst.FUNC_CODE_1);
		
		// サービス呼び出し
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CKSV0032");
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap);

		// エラー処理 
		if (msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}

		// サービス結果の下りマッピング
		mapper.setCKSV0032WORK01(paramBean, outputMap);

		//ダウンロード対象の一時ファイルキー、一時ファイル名を取得
		String fileKey = null;
		String fileName = null;
		fileKey = bean.sendMessageString(CKW00701SFConst.TMP_FILE_KEY, X31CWebConst.DATABEAN_GET_VALUE);
		fileName = bean.sendMessageString(CKW00701SFConst.TMP_FILE_NM, X31CWebConst.DATABEAN_GET_VALUE);

		if((null != fileKey) && (!"".equals(fileName)))
		{	
			//一時ファイルキー、一時ファイル名を取得できた場合、ファイルダウンロード
			JCCWebCommon.setDownloadFile(this, fileKey, fileName);
		}

		// 電子管理ファイルダウンロードのエラーメッセージの設定
		JCCWebCommon.setMessageInfo(this, "EKB0740-KW", new String[]{"ファイル"});
		
		return true;
	}

	/**
	 * 修正ボタン押下処理
	 * <br>
	 * @return boolean 処理結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean returnAdd() throws Exception
	{
		// アップロード一時ファイルの削除
		JCCWebCommon.deleteCache(this);

		// 遷移先画面情報を設定
		setForwardInfo(JCKScreenConst.SCREEN_ID_CKW00701, JCKScreenConst.SCREEN_NAME_CKW00701);

		return true;
	}


	/**
	 * 確定ボタン押下処理
	 * <br>
	 * @return boolean 処理結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean addFix() throws Exception
	{
		// サービスフォームBeanのデータBeanアクセスクラスを取得
		X31SDataBeanAccess bean = super.getServiceFormBean();
		X31SDataBeanAccess[] paramBean = {super.getServiceFormBean()};

		// 共通情報の設定
		HashMap<String, HashMap<String, Object>> outputMap = new HashMap<String, HashMap<String, Object>>();
		HashMap<String, String> paramMap = new HashMap<String, String>();

		// 電子ファイル登録のマッピング処理に必要なリストを生成する。
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> attachMap = new HashMap<String, Object>();
		ArrayList<byte[]> byteList = new ArrayList<byte[]>();
		ArrayList<String> fileCodeList = new ArrayList<String>();
		ArrayList<String> delYmdList = new ArrayList<String>();

		//アップロード一時ファイルの取得
		String fileKey = bean.sendMessageString(CKW00701SFConst.TMP_FILE_KEY, X31CWebConst.DATABEAN_GET_VALUE);
		String fileName = bean.sendMessageString(CKW00701SFConst.TMP_FILE_NM, X31CWebConst.DATABEAN_GET_VALUE);
		byte[] fileByte = JCCWebCommon.getFile(this, fileKey);

		String sysCd = "CK"; //システムコード
		fileCodeList.add(""); //ファイルコード
		byteList.add(fileByte); //電子ファイル
		delYmdList.add(""); //ファイル削除年月日

		// 電子ファイル登録サービス用のマッピング処理
		JCCWebCommon.setDenshiFileService(inputMap, attachMap, sysCd, fileCodeList, byteList, delYmdList, JCKCommonConst.FUNC_CODE_1);

		// 業務サービス用の上りマッピング処理
		CKSV0031_CKSV0031OPDBMapper mapper = new CKSV0031_CKSV0031OPDBMapper();
		mapper.setCKSV003101SC(paramBean, inputMap, JCKCommonConst.FUNC_CODE_1, fileByte);
		mapper.setCKSV003102SC(paramBean, inputMap, JCKCommonConst.FUNC_CODE_1);
		mapper.setCKSV003103SC(paramBean, inputMap, JCKCommonConst.FUNC_CODE_1, fileName);

		// ユースケースIDを設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, "CKSV0031");
		// サービス呼び出し
		X31CMessageResult msgResult = invokeService(paramMap, inputMap, outputMap, attachMap);

		// エラー処理 
		if (msgResult != null)
		{
			JCCWebCommon.setMessageInfo(this, msgResult);
			return true;
		}

		// アップロード一時ファイルの削除
		JCCWebCommon.deleteCache(this);

		// メッセージの設定
		String[] msg = {"ファイルのアップロード"};
		JCCWebCommon.setMessageInfo(this, "EKB4390--I", msg);

		// 遷移先画面情報を設定します
		setForwardInfo(JCKScreenConst.SCREEN_ID_CKW00703, JCKScreenConst.SCREEN_NAME_CKW00703);

		return true;
	}	

	/**
	 * 完了ボタン押下処理
	 * <br>
	 * @return boolean 処理結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean addFin() throws Exception
	{
		// 遷移先画面情報を設定
		setForwardInfo(JCKScreenConst.SCREEN_ID_CKW00701, JCKScreenConst.SCREEN_NAME_CKW00701);

		return true;
	}

	/**
	 * 画面遷移情報の設定をします。<br>
	 * @param next_id 遷移先画面ＩＤ
	 * @param next_nm 遷移先画面名
	 */
	private void setForwardInfo(String next_id, String next_nm)
	{
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();

		// 遷移先の画面IDを共有フォームBeanの項目に設定
		commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, next_id);
		if (next_nm != null)
		{
			// 遷移先の画面名を共有フォームBeanの項目に設定
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, next_nm);
		}
	}

	/**
	 * コンボボックスで選択された名称を返却します。<br>
	 * @param comboBean
	 */
	private void getSelectValue(X31SDataBeanAccessArray comboBean)
	{
		X31SDataBeanAccess subbean = comboBean.getDataBean(0);
		String index = subbean.sendMessageString(CKW00701SFConst.SELECT_INDEX_01, X31CWebConst.DATABEAN_GET_VALUE);
		String value = subbean.sendMessageString(CKW00701SFConst.CD_DIV_NM_LIST_01, X31CWebConst.DATABEAN_GET_VALUE, Integer.parseInt(index));
		subbean.sendMessageString(CKW00701SFConst.CD_DIV_NM_01, X31CWebConst.DATABEAN_SET_VALUE, index + "." + value);
	}
}
