/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：KKW12802SFLogic
*   ソースファイル名：KKW12802SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年06月13日
*＜機能概要＞
*   日報ダウンロード画面のビューロジックです。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v1.00.00    2012/06/22   FJ）高川    新規作成
*   v4.00.00    2012/09/19   FJ）高川    【ANK-1219-00-00】Ｋ社対応
*   v4.01.00    2012/11/15   FJ）川西    【ANK-1350-00-00】権限パターンQR対応
*   v7.00.00	2014/01/14   FJ) 北浦    【ANK-1873-00-00】KC社追加対応
**********************************************************************/
package eo.web.webview.KKW12802SF;

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.common.JCCAuthorityCtrlStatus;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JKKWebCommon;
import eo.web.webview.common.JZMWebCommon;
import eo.web.webview.mapping.KKSV0586_KKSV0586OPDBMapper;
import eo.web.webview.mapping.KKSV0587_KKSV0587OPDBMapper;
import eo.web.webview.mapping.KKSV0588_KKSV0588OPDBMapper;


/**
 * 日報ダウンロードを行います。
 * <BR>
 * @author 富士通
 */
public class KKW12802SFLogic extends JCCWebBusinessLogic
{
	
	/** 他社取扱権限判定 M社他社権限あり */
	public static final String M_AU_U = "M_AU_U";
	
	/** 他社取扱権限判定 I社他社権限あり */
	public static final String I_AU_U = "I_AU_U";
	
	/** 他社取扱権限判定 KC社他社権限あり */
	public static final String KC_AU_U = "KC_AU_U";
	
	/** 他社取扱権限判定 T社他社権限あり */
	public static final String T_AU_U = "T_AU_U";
	
	/** 他社取扱権限判定 B社他社権限あり */
	public static final String B_AU_U = "B_AU_U";
	
	/** 他社取扱権限判定 K社他社権限あり */
	public static final String K_AU_U = "K_AU_U";
	
	/** 他社取扱権限判定 M社他社権限なし */
	public static final String M_AU_M = "M_AU_M";
	
	/** 他社取扱権限判定 I社他社権限なし */
	public static final String I_AU_M = "I_AU_M";

	/** 他社取扱権限判定 KC社他社権限なし */
	public static final String KC_AU_M = "KC_AU_M";
		
	/** 他社取扱権限判定 T社他社権限なし */
	public static final String T_AU_M = "T_AU_M";
	
	/** 他社取扱権限判定 B社他社権限なし */
	public static final String B_AU_M = "B_AU_M";
	
	/** 他社取扱権限判定 K社他社権限なし */
	public static final String K_AU_M = "K_AU_M";
	
	/** 他社取扱権限判定 全社権限あり */
	public static final String ALL_AU_U = "ALL_AU_U";
	
	/** ボタン区分 CSV作成 */
	public static final String B_CSV_CREATE = "1";
	
	/**  ボタン区分 集計&CSV作成 */
	public static final String B_SHUK_CSV_CREATE = "2";
	
	/** 他社取扱権限有無フラグ 他社取扱権限有り */
	public static final String TASYA_TRAT_AUTHORITY_FLG_U = "1";
	
	/** 他社取扱権限有無フラグ 他社取扱権限無し */
	public static final String TASYA_TRAT_AUTHORITY_FLG_M = "2";
	
	/** ファイル削除年月日  */
	private static final String DELYMD = "20991231";
	
	/** 日報・月報初期設定用 日報  */
	private static final String NIPO = "1";
	
	/** 最終集計日時（ダミー時分秒）  */
	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>();
		
		String hanChoiceStaYmd = dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD, X31CWebConst.DATABEAN_GET_VALUE);
		String hanChoiceEndYmd = dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_ENDYMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 取込開始日付がnullであれば運用日付の前日を取込開始日付（年・月・日）に設定
		if ((null == hanChoiceStaYmd || "".equals(hanChoiceStaYmd)) && (null == hanChoiceEndYmd || "".equals(hanChoiceEndYmd)))
		{
			// 運用日付を取得
			String opeDate = JCCWebCommon.getOpeDate(this, null);
			
			String endYmdY = opeDate.substring(0, 4);
			String endYmdM = opeDate.substring(4, 6);
			String endYmdD = opeDate.substring(6, 8);
			
			// 運用日付をサービスフォームBeanに設定
			dataBean.sendMessageString(KKW12802SFConst.OPE_DATE, X31CWebConst.DATABEAN_SET_VALUE, opeDate);
			dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_ENDYMD_Y, X31CWebConst.DATABEAN_SET_VALUE, endYmdY);
			dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_ENDYMD_M, X31CWebConst.DATABEAN_SET_VALUE, endYmdM);
			dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_ENDYMD_D, X31CWebConst.DATABEAN_SET_VALUE, endYmdD);
			
			// 運用日付の前日を取得
			String opeDatebf = JPCDateUtil.addDay(opeDate, -1);
			
			String staYmdY = opeDatebf.substring(0, 4);
			String staYmdM = opeDatebf.substring(4, 6);
			String staYmdD = opeDatebf.substring(6, 8);
			
			// 運用日付の前日をサービスフォームBeanに設定
			dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD_Y, X31CWebConst.DATABEAN_SET_VALUE, staYmdY);
			dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD_M, X31CWebConst.DATABEAN_SET_VALUE, staYmdM);
			dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD_D, X31CWebConst.DATABEAN_SET_VALUE, staYmdD);
			dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_DAY_Y, X31CWebConst.DATABEAN_SET_VALUE, staYmdY);
			dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_DAY_M, X31CWebConst.DATABEAN_SET_VALUE, staYmdM);
			
			// 日報・月報初期設定
			dataBean.sendMessageString(KKW12802SFConst.NIPO_GEPO_CHOICE, X31CWebConst.DATABEAN_SET_VALUE, NIPO);
		}
		
		// ユースケースIDの設定
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, KKSV0586);
		
		// マッピングクラスのインスタンスを生成
		KKSV0586_KKSV0586OPDBMapper mapper = new KKSV0586_KKSV0586OPDBMapper();
		mapper.setKKSV058601SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_3);
		mapper.setKKSV058602SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		
		// サービスの呼び出し
		invokeService(paramMap, dataMap, outputMap);
		
		// サービス実行結果の取得
		mapper.getKKSV058602SC(paramBean, outputMap);
		
		// 最終集計日時を取得
		X31SDataBeanAccessArray mdbtMkcSrltInfoList = dataBean.getDataBeanArray(KKW12802SFConst.MDBT_MKC_SRLT_INFO);
		X31SDataBeanAccess subbean = mdbtMkcSrltInfoList.getDataBean(0);
		String lastShukDate = subbean.sendMessageString(KKW12802SFConst.LAST_SHUK_DATE_02, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 最終集計日時が取得できない場合はバッチ運用日付を最終集計日時に設定する
		if (null == lastShukDate || "".equals(lastShukDate))
		{
			// バッチ運用日付を取得
			String batOpeDate = JCCWebCommon.getBatOpeDate(this, null);
			
			// バッチ運用日付の前日の日付を取得
			String batOpeDateBf = JPCDateUtil.addDay(batOpeDate, -1);

			// バッチ運用日付をサービスフォームBeanに設定
			subbean.sendMessageString(KKW12802SFConst.LAST_SHUK_DATE_02, X31CWebConst.DATABEAN_SET_VALUE, batOpeDateBf + LAST_SHUK_DATE_DUMMY);
			
			// 最終集計日時の3カ月前の日付を取得
			String lastShukDatebf = JPCDateUtil.addMonth(batOpeDateBf, -3);
			
			// 最終集計日時（3カ月前）をサービスフォームBeanに設定
			dataBean.sendMessageString(KKW12802SFConst.LAST_SHUK_DATE_BF, X31CWebConst.DATABEAN_SET_VALUE, lastShukDatebf);
		}
		else
		{
			// 最終集計日時の3カ月前の日付を取得
			String lastShukDatebf = JPCDateUtil.addMonth(lastShukDate.substring(0, 8), -3);
			
			// 最終集計日時（3カ月前）をサービスフォームBeanに設定
			dataBean.sendMessageString(KKW12802SFConst.LAST_SHUK_DATE_BF, X31CWebConst.DATABEAN_SET_VALUE, lastShukDatebf);
		}
		
		// グループの設定
		JCCAuthorityCtrlStatus.setAuthorityCtrl(this);
		X31SDataBeanAccess commoninfoBean = getCommonInfoBean();
		X31SDataBeanAccessArray authList = commoninfoBean.getDataBeanArray(CommonInfoCFConst.REQUEST_AUTHORITY_LIST);
		ArrayList<String> cdDivList = new ArrayList<String>();
		ArrayList<String> eventIdList = new ArrayList<String>();

		for(int i = 0; i <= authList.getCount() - 1; i++)
		{
			// リクエスト権限、リクエスト権限フラグの取得
			X31SDataBeanAccess authBean  = authList.getDataBean(i);
			String auth_cd = authBean.sendMessageString(CommonInfoCFConst.REQUEST_AUTHORITY_03, X31CWebConst.DATABEAN_GET_VALUE);
			String auth_flg = authBean.sendMessageString(CommonInfoCFConst.REQUEST_AUTHORITY_FLG_03, X31CWebConst.DATABEAN_GET_VALUE);
			
			if (ALL_AU_U.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(ALL_AU_U);
			}
			else if (M_AU_U.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(M_AU_U);
			}
			else if (I_AU_U.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(I_AU_U);
			}
			else if (KC_AU_U.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(KC_AU_U);
			}
			else if (T_AU_U.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(T_AU_U);
			}
			else if (B_AU_U.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(B_AU_U);
			}
			else if (K_AU_U.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(K_AU_U);
			}
			else if (M_AU_M.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(M_AU_M);
			}
			else if (I_AU_M.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(I_AU_M);
			}
			else if (KC_AU_M.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(KC_AU_M);
			}
			else if (T_AU_M.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(T_AU_M);
			}
			else if (B_AU_M.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(B_AU_M);
			}
			else if (K_AU_M.equals(auth_cd) && !"NG".equals(auth_flg))
			{
				eventIdList.add(K_AU_M);
			}
		}
		
		// ユーザー権限が全社権限ありの場合、、プルダウンに「指定なし」「M社」「I社」「KC社」「T社」「B社」「K社」を設定する
		if (eventIdList.contains(ALL_AU_U))
		{
			cdDivList.add(JKKStrConst.AGNT_SBT_CD_NON);
			cdDivList.add(JKKStrConst.AGNT_SBT_CD_M_SHA);
			cdDivList.add(JKKStrConst.AGNT_SBT_CD_I_SHA);
			cdDivList.add(JKKStrConst.AGNT_SBT_CD_KC_SHA);
			cdDivList.add(JKKStrConst.AGNT_SBT_CD_T_SHA);
			cdDivList.add(JKKStrConst.AGNT_SBT_CD_B_SHA);
			cdDivList.add(JKKStrConst.AGNT_SBT_CD_K_SHA);
			dataBean.sendMessageString(KKW12802SFConst.TASYA_TRAT_AUTHORITY_FLG, X31CWebConst.DATABEAN_SET_VALUE, TASYA_TRAT_AUTHORITY_FLG_U);
		}
		else
		{
			// ユーザー権限がM社もしくはI社もしくはKC社の他社取扱権限有りの場合は、プルダウンに「M社」「I社」「KC社」を設定する
			if (eventIdList.contains(M_AU_U) || eventIdList.contains(I_AU_U) || eventIdList.contains(KC_AU_U))
			{
				cdDivList.add(JKKStrConst.AGNT_SBT_CD_M_SHA);
				cdDivList.add(JKKStrConst.AGNT_SBT_CD_I_SHA);
				cdDivList.add(JKKStrConst.AGNT_SBT_CD_KC_SHA);
				dataBean.sendMessageString(KKW12802SFConst.TASYA_TRAT_AUTHORITY_FLG, X31CWebConst.DATABEAN_SET_VALUE, TASYA_TRAT_AUTHORITY_FLG_U);
			}

			// ユーザー権限がT社もしくはB社もしくはK社の他社取扱権限有りの場合は、プルダウンに「T社」「B社」「K社」を設定する
			if (eventIdList.contains(T_AU_U) || eventIdList.contains(B_AU_U) || eventIdList.contains(K_AU_U))
			{
				cdDivList.add(JKKStrConst.AGNT_SBT_CD_T_SHA);
				cdDivList.add(JKKStrConst.AGNT_SBT_CD_B_SHA);
				cdDivList.add(JKKStrConst.AGNT_SBT_CD_K_SHA);
				dataBean.sendMessageString(KKW12802SFConst.TASYA_TRAT_AUTHORITY_FLG, X31CWebConst.DATABEAN_SET_VALUE, TASYA_TRAT_AUTHORITY_FLG_U);
			}
			
			// ユーザー権限がM社の他社取扱権限無しの場合は、ラベルに「M社」を設定する
			if (eventIdList.contains(M_AU_M))
			{
				cdDivList.add(JKKStrConst.AGNT_SBT_CD_M_SHA);
				dataBean.sendMessageString(KKW12802SFConst.AGNT_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, JKKStrConst.AGNT_SBT_CD_M_SHA);
				dataBean.sendMessageString(KKW12802SFConst.TASYA_TRAT_AUTHORITY_FLG, X31CWebConst.DATABEAN_SET_VALUE, TASYA_TRAT_AUTHORITY_FLG_M);
			}
			// ユーザー権限がI社の他社取扱権限無しの場合は、ラベルに「I社」を設定する
			else if (eventIdList.contains(I_AU_M))
			{
				cdDivList.add(JKKStrConst.AGNT_SBT_CD_I_SHA);
				dataBean.sendMessageString(KKW12802SFConst.AGNT_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, JKKStrConst.AGNT_SBT_CD_I_SHA);
				dataBean.sendMessageString(KKW12802SFConst.TASYA_TRAT_AUTHORITY_FLG, X31CWebConst.DATABEAN_SET_VALUE, TASYA_TRAT_AUTHORITY_FLG_M);
			}
			// ユーザー権限がKC社の他社取扱権限無しの場合は、ラベルに「KC社」を設定する
			else if (eventIdList.contains(KC_AU_M))
			{
				cdDivList.add(JKKStrConst.AGNT_SBT_CD_KC_SHA);
				dataBean.sendMessageString(KKW12802SFConst.AGNT_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, JKKStrConst.AGNT_SBT_CD_KC_SHA);
				dataBean.sendMessageString(KKW12802SFConst.TASYA_TRAT_AUTHORITY_FLG, X31CWebConst.DATABEAN_SET_VALUE, TASYA_TRAT_AUTHORITY_FLG_M);
			}
			// ユーザー権限がT社の他社取扱権限無しの場合は、ラベルに「T社」を設定する
			else if (eventIdList.contains(T_AU_M))
			{
				cdDivList.add(JKKStrConst.AGNT_SBT_CD_T_SHA);
				dataBean.sendMessageString(KKW12802SFConst.AGNT_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, JKKStrConst.AGNT_SBT_CD_T_SHA);
				dataBean.sendMessageString(KKW12802SFConst.TASYA_TRAT_AUTHORITY_FLG, X31CWebConst.DATABEAN_SET_VALUE, TASYA_TRAT_AUTHORITY_FLG_M);
			}
			// ユーザー権限がB社の他社取扱権限無しの場合は、ラベルに「B社」を設定する
			else if (eventIdList.contains(B_AU_M))
			{
				cdDivList.add(JKKStrConst.AGNT_SBT_CD_B_SHA);
				dataBean.sendMessageString(KKW12802SFConst.AGNT_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, JKKStrConst.AGNT_SBT_CD_B_SHA);
				dataBean.sendMessageString(KKW12802SFConst.TASYA_TRAT_AUTHORITY_FLG, X31CWebConst.DATABEAN_SET_VALUE, TASYA_TRAT_AUTHORITY_FLG_M);
			}
			// ユーザー権限がK社の他社取扱権限無しの場合は、ラベルに「K社」を設定する
			else if (eventIdList.contains(K_AU_M))
			{
				cdDivList.add(JKKStrConst.AGNT_SBT_CD_K_SHA);
				dataBean.sendMessageString(KKW12802SFConst.AGNT_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, JKKStrConst.AGNT_SBT_CD_K_SHA);
				dataBean.sendMessageString(KKW12802SFConst.TASYA_TRAT_AUTHORITY_FLG, X31CWebConst.DATABEAN_SET_VALUE, TASYA_TRAT_AUTHORITY_FLG_M);
			}
		}

		// 他社取扱権限有りの場合は、プルダウンに「量販店」「訪販」を設定する
		String ttaFlg = dataBean.sendMessageString(KKW12802SFConst.TASYA_TRAT_AUTHORITY_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		if (ttaFlg.equals(TASYA_TRAT_AUTHORITY_FLG_U))
		{
			cdDivList.add(JKKStrConst.AGNT_SBT_CD_RYO);
			cdDivList.add(JKKStrConst.AGNT_SBT_CD_HOU);
		}
		
		// グループに出力する項目のマッピング
		mapper.getKKSV058601SC(paramBean, outputMap, cdDivList);
		
		// ディレイド処理依頼ステータスの初期化
		X31SDataBeanAccessArray beanList = dataBean.getDataBeanArray(KKW12802SFConst.DLYD_TRN_REQ_INFO);
		if (0 > beanList.getCount() - 1)
		{
			subbean = beanList.addDataBean();
			subbean.sendMessageString(KKW12802SFConst.DLYD_TRN_REQ_STAT_03, X31CWebConst.DATABEAN_SET_VALUE, new String());
		}
		
		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();
		String agntSbtCd = null;
		String ttaFlg = dataBean.sendMessageString(KKW12802SFConst.TASYA_TRAT_AUTHORITY_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		if (ttaFlg.equals(TASYA_TRAT_AUTHORITY_FLG_U))
		{
			// 他社取扱権限有りの場合、プルダウンの選択値を設定
			agntSbtCd = JKKWebCommon.getPullDownCode(dataBean, KKW12802SFConst.GRP_INFO, KKW12802SFConst.AGNT_SBT_CD_01, KKW12802SFConst.AGNT_SBT_CD_LIST_01);
		}
		else
		{
			// 他社取扱権限無しの場合、ラベルに対応する代理店種別コードを設定
			agntSbtCd = dataBean.sendMessageString(KKW12802SFConst.AGNT_SBT_CD, X31CWebConst.DATABEAN_GET_VALUE);
		}
		
		StringBuffer sb = new StringBuffer();
		sb.append(B_CSV_CREATE);
		sb.append(STR_CAMMA);
		sb.append(agntSbtCd);
		sb.append(STR_CAMMA);
		sb.append(dataBean.sendMessageString(KKW12802SFConst.NIPO_GEPO_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(STR_CAMMA);
		sb.append(dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(STR_CAMMA);
		sb.append(dataBean.sendMessageString(KKW12802SFConst.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, KKSV0587);
		
		// マッピングクラスのインスタンスを生成
		KKSV0587_KKSV0587OPDBMapper mapper = new KKSV0587_KKSV0587OPDBMapper();
		dataBean.sendMessageString(KKW12802SFConst.AGNT_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, agntSbtCd);
		mapper.setKKSV058701SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV058702SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV058703SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		
		HashMap<String, Object> inDataMap = (HashMap<String, Object>)dataMap.get("KKSV058702SC");
		inDataMap.put("dlyd_trn_jssi_unyo_dtm", JCCWebCommon.getOpeDateTimeStamp(this, null));
		inDataMap.put("file_del_ymd", DELYMD);

		inDataMap = (HashMap<String, Object>)dataMap.get("KKSV058703SC");
		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.getKKSV058701SC(paramBean, outputMap);
		
		// ボタン区分の設定
		dataBean.sendMessageString(KKW12802SFConst.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(KKW12802SFConst.HAN_CHOICE_STAYMD, X31CWebConst.DATABEAN_GET_VALUE);
		
		// 存在チェックフラグをtrueに設定
		Boolean check_flg = true;
		
		// 開始日付が運用日付と同じ場合は存在チェックフラグをfalseに設定
		if (opeDate.equals(staymd))
		{
			check_flg = false;
		}
		
		// 集計対象件数の初期化
		X31SDataBeanAccessArray mdbtMkcSrltInfoList = dataBean.getDataBeanArray(KKW12802SFConst.MDBT_MKC_SRLT_INFO);
		X31SDataBeanAccess subbean = mdbtMkcSrltInfoList.getDataBean(0);
		subbean.sendMessageString(KKW12802SFConst.SHUK_TG_CNT_02, 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();
		String agntSbtCd = null;
		String ttaFlg = dataBean.sendMessageString(KKW12802SFConst.TASYA_TRAT_AUTHORITY_FLG, X31CWebConst.DATABEAN_GET_VALUE);
		if (ttaFlg.equals(TASYA_TRAT_AUTHORITY_FLG_U))
		{
			// 他社取扱権限有りの場合、プルダウンの選択値を設定
			agntSbtCd = JKKWebCommon.getPullDownCode(dataBean, KKW12802SFConst.GRP_INFO, KKW12802SFConst.AGNT_SBT_CD_01, KKW12802SFConst.AGNT_SBT_CD_LIST_01);
		}
		else
		{
			// 他社取扱権限無しの場合、ラベルに対応する代理店種別コードを設定
			agntSbtCd = dataBean.sendMessageString(KKW12802SFConst.AGNT_SBT_CD, X31CWebConst.DATABEAN_GET_VALUE);
		}
		
		StringBuffer sb = new StringBuffer();
		sb.append(B_SHUK_CSV_CREATE);
		sb.append(STR_CAMMA);
		sb.append(agntSbtCd);
		sb.append(STR_CAMMA);
		sb.append(dataBean.sendMessageString(KKW12802SFConst.NIPO_GEPO_CHOICE, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(STR_CAMMA);
		sb.append(dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(STR_CAMMA);
		sb.append(dataBean.sendMessageString(KKW12802SFConst.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, KKSV0588);
		
		// マッピングクラスのインスタンスを生成
		dataBean.sendMessageString(KKW12802SFConst.AGNT_SBT_CD, X31CWebConst.DATABEAN_SET_VALUE, agntSbtCd);
		KKSV0588_KKSV0588OPDBMapper mapper = new KKSV0588_KKSV0588OPDBMapper();
		mapper.setKKSV058801SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV058802SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV058803SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		mapper.setKKSV058804SC(paramBean, dataMap, JPCModelConstant.FUNC_CD_1);
		
		HashMap<String, Object> inDataMap = (HashMap<String, Object>)dataMap.get("KKSV058801SC");
		inDataMap.put("check_flg", check_flg);
		
		inDataMap = (HashMap<String, Object>)dataMap.get("KKSV058803SC");
		inDataMap.put("dlyd_trn_jssi_unyo_dtm", JCCWebCommon.getOpeDateTimeStamp(this, null));
		inDataMap.put("file_del_ymd", DELYMD);

		inDataMap = (HashMap<String, Object>)dataMap.get("KKSV058804SC");
		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.getKKSV058801SC(paramBean, outputMap);
		mapper.getKKSV058802SC(paramBean, outputMap);
		mapper.getKKSV058803SC(paramBean, outputMap);
		
		// ボタン区分の設定
		dataBean.sendMessageString(KKW12802SFConst.BUTTON_KBN, X31CWebConst.DATABEAN_SET_VALUE, B_SHUK_CSV_CREATE);
		
		//入力情報のクリア
		resetInput(dataBean);
		
		return true;
	}

	/**
	 * 範囲選択-開始日付と範囲選択-終了日付を設定します。
	 * @param dataBean 日報ダウンロード画面
	 */
	private void setHanChoiceDay(X31SDataBeanAccess dataBean)
	{
		String nipoGepo = dataBean.sendMessageString(KKW12802SFConst.NIPO_GEPO_CHOICE, X31CWebConst.DATABEAN_GET_VALUE);
		String staYmd = null;
		String endYmd = null;
		
		if ("1".equals(nipoGepo))
		{
			// 開始年月日の設定
			String staYmdY = dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD_Y, X31CWebConst.DATABEAN_GET_VALUE);
			String staYmdM = dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD_M, X31CWebConst.DATABEAN_GET_VALUE);
			String staYmdD = dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD_D, X31CWebConst.DATABEAN_GET_VALUE);
			staYmd = staYmdY + staYmdM + staYmdD;
			dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD, X31CWebConst.DATABEAN_SET_VALUE, staYmd);
			
			// 終了年月日の設定
			String endYmdY = dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_ENDYMD_Y, X31CWebConst.DATABEAN_GET_VALUE);
			String endYmdM = dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_ENDYMD_M, X31CWebConst.DATABEAN_GET_VALUE);
			String endYmdD = dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_ENDYMD_D, X31CWebConst.DATABEAN_GET_VALUE);
			endYmd = endYmdY + endYmdM + endYmdD;
			dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_ENDYMD, X31CWebConst.DATABEAN_SET_VALUE, endYmd);
		}
		else if ("2".equals(nipoGepo))
		{
			// 開始年月日の設定
			String staYmdY = dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_DAY_Y, X31CWebConst.DATABEAN_GET_VALUE);
			String staYmdM = dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_DAY_M, X31CWebConst.DATABEAN_GET_VALUE);
			staYmd = staYmdY + staYmdM + "01";
			dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD, X31CWebConst.DATABEAN_SET_VALUE, staYmd);
			
			// 終了年月日の設定
			String endYm = staYmdY + staYmdM;
			String gtmtDay = JPCDateUtil.getEndOfMonth(endYm);
			endYmd = endYm + gtmtDay;
			dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_ENDYMD, X31CWebConst.DATABEAN_SET_VALUE, endYmd);
		}
	}
	
	/**
	 * 入力情報をクリアします。
	 * @param dataBean 日報ダウンロード画面
	 */
	private void resetInput(X31SDataBeanAccess dataBean)
	{
		dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD_Y, X31CWebConst.DATABEAN_SET_VALUE, "");
		dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD_M, X31CWebConst.DATABEAN_SET_VALUE, "");
		dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_STAYMD_D, X31CWebConst.DATABEAN_SET_VALUE, "");
		dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_ENDYMD_Y, X31CWebConst.DATABEAN_SET_VALUE, "");
		dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_ENDYMD_M, X31CWebConst.DATABEAN_SET_VALUE, "");
		dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_ENDYMD_D, X31CWebConst.DATABEAN_SET_VALUE, "");
		dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_DAY_Y, X31CWebConst.DATABEAN_SET_VALUE, "");
		dataBean.sendMessageString(KKW12802SFConst.HAN_CHOICE_DAY_M, X31CWebConst.DATABEAN_SET_VALUE, "");
	}
}
