/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKW12804SFLogic
*   ソースファイル名：KKW12804SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年06月13日
*＜機能概要＞
*   日報ダウンロード画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/06/22   FJ）高川    新規作成
*
**********************************************************************/
package eo.web.webview.KKW12804SF;

import static eo.web.webview.common.JKKKeiNewCmnLogicUtil.*;

import java.util.ArrayList;
import java.util.HashMap;

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.JKKStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JPCDateUtil;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.KKW12801SF.KKW12801SFConst;
import eo.web.webview.KKW12803SF.KKW12803SFConst;
import eo.web.webview.KKW12804SF.KKW12804SFConst;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKWebCommon;
import eo.web.webview.common.JZMWebCommon;
import eo.web.webview.mapping.KKSV0671_KKSV0671OPDBMapper;
import eo.web.webview.mapping.KKSV0672_KKSV0672OPDBMapper;
import eo.web.webview.mapping.KKSV0673_KKSV0673OPDBMapper;


/**
 * 日報ダウンロードを行います。
 * <BR>
 * @author 富士通
 */
public class KKW12804SFLogic extends JCCWebBusinessLogic
{
	/** ボタン区分 CSV作成 */
	public static final String B_CSV_CREATE = "1";
	
	/**  ボタン区分 集計&CSV作成 */
	public static final String B_SHUK_CSV_CREATE = "2";
	
	/** ファイル削除年月日  */
	private static final String DELYMD = "20991231";

	/** 最終集計日時（ダミー時分秒）  */
	private static final String LAST_SHUK_DATE_DUMMY = "000000";
	
	/**
	 * 初期表示処理です。
	 * <br>
	 * @return 処理の成否
	 * @throws Exception エラーが発生した場合
	 */
	public boolean init() throws Exception
	{
		JKKWebCommon.setSelfScreenID(this);
		
		// サービスフォームBean
		X31SDataBeanAccess dataBean = getServiceFormBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess[] paramBean = {dataBean};

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// ユースケースIDの設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, KKSV0671);
		
		// マッピングクラスのインスタンスを生成
		KKSV0671_KKSV0671OPDBMapper mapper = new KKSV0671_KKSV0671OPDBMapper();
		mapper.setKKSV067101SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV067102SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		
		// サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap);
		
		// サービス実行結果の取得
		mapper.getKKSV067101SC(paramBean, outputMap);
		mapper.getKKSV067102SC(paramBean, outputMap);
		
		// 最終集計日時を取得
		X31SDataBeanAccessArray agntMskmSrltInfoList = dataBean.getDataBeanArray(KKW12804SFConst.AGNT_MSKM_SRLT_INFO);
		X31SDataBeanAccess subbean = agntMskmSrltInfoList.getDataBean(0);
		String lastShukDate = subbean.sendMessageString(KKW12804SFConst.LAST_SHUK_DATE_01, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 最終集計日時が取得できない場合はバッチ運用日付を最終集計日時に設定する
		if (null == lastShukDate || "".equals(lastShukDate))
		{
			// バッチ運用日付を取得
			String batOpeDate = JCCWebCommon.getBatOpeDate(this, null);
			
			// バッチ運用日付の前日の日付を取得
			String batOpeDateBf = JPCDateUtil.addDay(batOpeDate, - 1);

			// バッチ運用日付をサービスフォームBeanに設定
			subbean.sendMessageString(KKW12804SFConst.LAST_SHUK_DATE_01, X31CWebConst.DATABEAN_SET_VALUE, batOpeDateBf + LAST_SHUK_DATE_DUMMY);
		}
		
		// 集計結果削除日数を取得
		X31SDataBeanAccessArray workParamInfoList = dataBean.getDataBeanArray(KKW12804SFConst.WORK_PARAM_INFO);
		subbean = workParamInfoList.getDataBean(0);
		String srltDelNisu = subbean.sendMessageString(KKW12804SFConst.SRLT_DEL_NISU_03, X31CWebConst.DATABEAN_GET_VALUE);
		// 運用日付を取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		
		if (null != srltDelNisu && !"".equals(srltDelNisu))
		{
			// 運用日付から集計結果削除日数を引いた日付を取得
			String opeDateBf = JPCDateUtil.addDay(opeDate, - Integer.parseInt(srltDelNisu));
			
			// ダウンロード可能期間-開始日をサービスフォームBeanに設定
			dataBean.sendMessageString(KKW12804SFConst.DL_STAYMD, X31CWebConst.DATABEAN_SET_VALUE, opeDateBf);
			// ダウンロード可能期間-終了日をサービスフォームBeanに設定
			dataBean.sendMessageString(KKW12804SFConst.DL_ENDYMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate);
			// 運用日付（集計結果削除年月日前）をサービスフォームBeanに設定
			dataBean.sendMessageString(KKW12803SFConst.OPE_DATE_BF, X31CWebConst.DATABEAN_SET_VALUE, opeDateBf);
		}
		else
		{
			// ダウンロード可能期間-開始日をサービスフォームBeanに設定
			dataBean.sendMessageString(KKW12804SFConst.DL_STAYMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate);
			// ダウンロード可能期間-終了日をサービスフォームBeanに設定
			dataBean.sendMessageString(KKW12804SFConst.DL_ENDYMD, X31CWebConst.DATABEAN_SET_VALUE, opeDate);
			// 運用日付（集計結果削除年月日前）をサービスフォームBeanに設定
			dataBean.sendMessageString(KKW12804SFConst.OPE_DATE_BF, X31CWebConst.DATABEAN_SET_VALUE, opeDate);
		}
		
		// ディレイド処理依頼ステータスの初期化
		X31SDataBeanAccessArray beanList = dataBean.getDataBeanArray(KKW12801SFConst.DLYD_TRN_REQ_INFO);
		if (0 > beanList.getCount() -1)
		{
			subbean = beanList.addDataBean();
			subbean.sendMessageString(KKW12801SFConst.DLYD_TRN_REQ_STAT_02, X31CWebConst.DATABEAN_SET_VALUE, "");
		}
		
		return true;
	}
	
	/**
	 * CSV作成ボタン処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	@SuppressWarnings("unchecked")
	public boolean csvCreate()throws Exception
	{
		JKKWebCommon.setSelfScreenID(this);
		
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess dataBean = getServiceFormBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess[] paramBean = {dataBean};

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// 開始日付・終了日付の設定
		setHanChoiceDay(dataBean);
		
		// バイナリ用Mapの設定
		HashMap<String, Object> attachMap = new HashMap<String, Object>();
		HashMap<String, Object> fileMap = new HashMap<String, Object>();
		ArrayList fileList = new ArrayList();
		
		StringBuffer sb = new StringBuffer();
		sb.append(B_CSV_CREATE);
		sb.append(STR_CAMMA);
		sb.append(dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_STAYMD, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(STR_CAMMA);
		sb.append(dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_ENDYMD, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(JKKStrConst.LINE_SEPARATOR);
		fileMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE,  sb.toString().getBytes());
		fileList.add(fileMap);
		attachMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE_LIST, fileList);
		
		// ユースケースIDの設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, KKSV0672);
		
		// マッピングクラスのインスタンスを生成
		KKSV0672_KKSV0672OPDBMapper mapper = new KKSV0672_KKSV0672OPDBMapper();
		mapper.setKKSV067201SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV067202SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV067203SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		
		HashMap<String, Object> inDataMap = (HashMap<String, Object>)dataMap.get("KKSV067202SC");
		inDataMap.put("dlyd_trn_jssi_unyo_dtm", JCCWebCommon.getOpeDateTimeStamp(this, null));
		inDataMap.put("file_del_ymd", DELYMD);

		inDataMap = (HashMap<String, Object>)dataMap.get("KKSV067203SC");
		inDataMap.put("trn_req_dtm", JCCWebCommon.getOpeDateTimeStamp(this, null).substring(0, 12));
		inDataMap.put("file_del_ymd", DELYMD);
		inDataMap.put("trn_iraisha_opeacnt", JZMWebCommon.getSendMessageString(commonBean, CommonInfoCFConst.USER_ID));
		
		// サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap, attachMap);
		
		// サービス実行結果の取得
		mapper.getKKSV067201SC(paramBean, outputMap);
		
		// ボタン区分の設定
		dataBean.sendMessageString(KKW12804SFConst.BUTTON_KBN, X31CWebConst.DATABEAN_SET_VALUE, B_CSV_CREATE);
		
		//入力情報のクリア
		resetInput(dataBean);
		
		return true;
	}
	
	/**
	 * 集計&CSV作成ボタン処理を行います。
	 * <br>
	 * @return 処理結果 
	 * @throws Exception 予期せぬエラー
	 */
	@SuppressWarnings("unchecked")
	public boolean shukCsvCreate()throws Exception
	{
		JKKWebCommon.setSelfScreenID(this);
		
		// 共有フォームBean
		X31SDataBeanAccess commonBean = getCommonInfoBean();

		// サービスフォームBean
		X31SDataBeanAccess dataBean = getServiceFormBean();

		// サービスフォームBeanのデータBeanアクセスクラスを取得。
		X31SDataBeanAccess[] paramBean = {dataBean};

		// ユースケースID格納用マップ
		HashMap<String, Object> paramMap = new HashMap<String, Object>();

		// マッピング用Map
		HashMap<String, Object> dataMap = new HashMap<String, Object>();

		// サービス実行結果データ用Map
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// 開始日付・終了日付の設定
		setHanChoiceDay(dataBean);
		
		// 運用日付を取得
		String opeDate = JCCWebCommon.getOpeDate(this, null);
		
		// 開始日付を取得
		String staymd = dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_STAYMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 存在チェックフラグをtrueに設定
		Boolean check_flg = true;
		
		// 開始日付が運用日付と同じ場合は存在チェックフラグをfalseに設定
		if (opeDate.equals(staymd))
		{
			check_flg = false;
		}
		
		// 対象件数の初期化
		X31SDataBeanAccessArray agntMskmSrltInfoList = dataBean.getDataBeanArray(KKW12804SFConst.AGNT_MSKM_SRLT_INFO);
		X31SDataBeanAccess subbean = agntMskmSrltInfoList.getDataBean(0);
		subbean.sendMessageString(KKW12804SFConst.TG_CNT_01, X31CWebConst.DATABEAN_SET_VALUE, "");
		
		// バイナリ用Mapの設定
		HashMap<String, Object> attachMap = new HashMap<String, Object>();
		HashMap<String, Object> fileMap = new HashMap<String, Object>();
		ArrayList fileList = new ArrayList();
		
		StringBuffer sb = new StringBuffer();
		sb.append(B_SHUK_CSV_CREATE);
		sb.append(STR_CAMMA);
		sb.append(staymd);
		sb.append(STR_CAMMA);
		sb.append(dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_ENDYMD, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(JKKStrConst.LINE_SEPARATOR);
		fileMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE,  sb.toString().getBytes());
		fileList.add(fileMap);
		attachMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE_LIST, fileList);
		
		// ユースケースIDの設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, KKSV0673);
		
		// マッピングクラスのインスタンスを生成
		KKSV0673_KKSV0673OPDBMapper mapper = new KKSV0673_KKSV0673OPDBMapper();
		mapper.setKKSV067301SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV067302SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV067303SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV067304SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		
		HashMap<String, Object> inDataMap = (HashMap<String, Object>)dataMap.get("KKSV067301SC");
		inDataMap.put("check_flg", check_flg);
		
		inDataMap = (HashMap<String, Object>)dataMap.get("KKSV067303SC");
		inDataMap.put("dlyd_trn_jssi_unyo_dtm", JCCWebCommon.getOpeDateTimeStamp(this, null));
		inDataMap.put("file_del_ymd", DELYMD);

		inDataMap = (HashMap<String, Object>)dataMap.get("KKSV067304SC");
		inDataMap.put("trn_req_dtm", JCCWebCommon.getOpeDateTimeStamp(this, null).substring(0, 12));
		inDataMap.put("file_del_ymd", DELYMD);
		inDataMap.put("trn_iraisha_opeacnt", JZMWebCommon.getSendMessageString(commonBean, CommonInfoCFConst.USER_ID));
		
		// サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap, attachMap);
		
		// サービス実行結果の取得
		mapper.getKKSV067301SC(paramBean, outputMap);
		mapper.getKKSV067302SC(paramBean, outputMap);
		mapper.getKKSV067303SC(paramBean, outputMap);
		
		// ボタン区分の設定
		dataBean.sendMessageString(KKW12804SFConst.BUTTON_KBN, X31CWebConst.DATABEAN_SET_VALUE, B_SHUK_CSV_CREATE);
		
		//入力情報のクリア
		resetInput(dataBean);
		
		return true;
	}

	/**
	 * 開始日付と終了日付を設定します。
	 * @param bean 申込実績ダウンロード画面
	 */
	private void setHanChoiceDay(X31SDataBeanAccess dataBean)
	{
		String staYmd = null;
		String endYmd = null;
		
			// 開始日付の設定
			String staYmdY = dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_STAYMD_Y, X31CWebConst.DATABEAN_GET_VALUE);
			String staYmdM = dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_STAYMD_M, X31CWebConst.DATABEAN_GET_VALUE);
			String staYmdD = dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_STAYMD_D, X31CWebConst.DATABEAN_GET_VALUE);
			staYmd = staYmdY + staYmdM + staYmdD;
			dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_STAYMD, X31CWebConst.DATABEAN_SET_VALUE, staYmd);
			
			// 終了日付の設定
			String endYmdY = dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_ENDYMD_Y, X31CWebConst.DATABEAN_GET_VALUE);
			String endYmdM = dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_ENDYMD_M, X31CWebConst.DATABEAN_GET_VALUE);
			String endYmdD = dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_ENDYMD_D, X31CWebConst.DATABEAN_GET_VALUE);
			endYmd = endYmdY + endYmdM + endYmdD;
			dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_ENDYMD, X31CWebConst.DATABEAN_SET_VALUE, endYmd);
	}
	
	/**
	 * 入力情報をクリアします。
	 * @param bean 申込実績ダウンロード画面
	 */
	private void resetInput(X31SDataBeanAccess dataBean)
	{
		dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_STAYMD_Y, X31CWebConst.DATABEAN_SET_VALUE, "");
		dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_STAYMD_M, X31CWebConst.DATABEAN_SET_VALUE, "");
		dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_STAYMD_D, X31CWebConst.DATABEAN_SET_VALUE, "");
		dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_ENDYMD_Y, X31CWebConst.DATABEAN_SET_VALUE, "");
		dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_ENDYMD_M, X31CWebConst.DATABEAN_SET_VALUE, "");
		dataBean.sendMessageString(KKW12804SFConst.HAN_CHOICE_ENDYMD_D, X31CWebConst.DATABEAN_SET_VALUE, "");
	}
}
