/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：ACW01301SFLogic
*   ソースファイル名：ACW01301SFLogic.java
*   作成者          ：富士通
*   日付            ：2012年01月17日
*＜機能概要＞
*   コンテンツ事業者間精算照会のビューロジック部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/01/17	富士通		新規作成
*	v4.00.00	2013/01/23	FJ) 垣内	【ST4-2013-0000002】対応
*	v4.00.00	2013/02/14	FJ)垣内		【ST2-2013-0000853】文字化け対応
*	v5.00.00	2013/08/06	FJ)高川		【IT1-2013-0001576】対応
*	v6.00.00	2013/12/09	FJ)早崎		【OM-2013-0004912】電子ファイル登録内容文字化け対応
*	v14.00.00	2015/06/01  FJ)寺村		【OM-2015-0001129】コンテンツ事業者間精算照会:ACW01301 （暫定対応）  
*	v15.00.00	2015/07/22  FJ)岡田		【OM-2015-0001129】コンテンツ事業者間精算照会:ACW01301 （暫定対応）  
**********************************************************************/
package eo.web.webview.ACW01301SF;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
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.JACStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.util.JCCFileUtil;
import eo.common.util.JCCFrameworkException;
import eo.web.webview.JCCWebBusinessLogic;
import eo.web.webview.CommonInfoCF.CommonInfoCFConst;
import eo.web.webview.common.JACScreenConst;
import eo.web.webview.common.JACWebCommon;
import eo.web.webview.common.JCCWebCommon;
import eo.web.webview.common.JCHCsvDataUtil;
import eo.web.webview.common.JZMWebCommon;
import eo.web.webview.mapping.ACSV0019_ACSV0019OPDBMapper;
import eo.web.webview.mapping.ACSV0020_ACSV0020OPDBMapper;


/**
 * コンテンツ事業者間精算照会のビューロジックを提供します。<p>
 * <BR>
 * @author 富士通
 */
public class ACW01301SFLogic extends JCCWebBusinessLogic {
	
	/** ユースケースＩＤ(コンテンツ事業者間精算画面情報取得) */
	private static final String USECASE_ID_ACSV0019 = "ACSV0019";
	
	/** ユースケースＩＤ(コンテンツ事業者間精算照会) */
	private static final String USECASE_ID_ACSV0020 = "ACSV0020";
	
	/** メッセージＩＤ(利用明細なし) */
	private static final String MESSAGE_ID_USE_DTL_NONE = "EKB0330--I";
	
	/** メッセージＩＤ(最大検索数超過) */
	private static final String MESSAGE_ID_OVER_MAX_SEARCH_NUM = "EKB4800-KW";
	
	/** メッセージＩＤ(ダウンロード画面案内) */
	private static final String MESSAGE_ID_DL_INFO = "EKBD860--I";
	
	/** システムコード  */
	private static final String SYS_CD = "AC";
	
	/** ファイル削除年月日  */
	private static final String DELYMD = "20991231";
	
	
	/**
	 * コンテンツ事業者間精算照会の初期表示処理を行います。
	 * <br>
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean init() throws Exception {

		// 共有フォームBeanのアクセサを取得する
		X31SDataBeanAccess commoninfoBean = super.getCommonInfoBean();
		
		// 遷移先画面IDを判定して画面IDに対応する初期表示処理を呼び出す
		String screenId = commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_GET_VALUE);
		if (screenId.equals(JACScreenConst.SCREEN_ID_ACW01301))
		{
			// メニューからの遷移時は画面定数クラスの値を指定する
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_ID, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_ID_ACW01301);
			commoninfoBean.sendMessageString(CommonInfoCFConst.NEXT_SCREEN_NAME, X31CWebConst.DATABEAN_SET_VALUE, JACScreenConst.SCREEN_NAME_ACW01301);

			initShokaiScreen();
		}
		
		return true;
	}
	
	/**
	 * コンテンツ事業者間精算照会の検索処理を行います。
	 * <br>
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean search() throws Exception {
		
		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = {bean};
		
		// 件数超過判定フラグ初期化
		bean.sendMessageString(ACW01301SFConst.CNT_OVER_JDG_FLG, X31CWebConst.DATABEAN_SET_VALUE, "false");

		// 検索条件を退避項目に格納
		this.setSearch(bean);
		
// v14.00.00 2015/06/1 MOD START  
//		// サービス実行
//		this.execACSV0020(paramBeans, JPCModelConstant.FUNC_CD_1);
		//
		// 暫定対応のため、検索サービス呼び出しをコメントアウトしています。
		// 件数超過フラグＯＮを行って、かつ、ダウンロードボタンを活性することで、
		// ディレイドバッチによるＣＳＶダウンロードボタンに強制設定します。
		//
		// 検索件数が最大検索件数を超えた扱いとして、エラーフラグに"2"を設定
		// 制御値(ボタン)
		this.setDisabledCntrlValueOfBtn(paramBeans, "2");
		// 検索件数が最大検索件数を超えた扱いとして、エラーフラグに"2"を設定
		// 制御値(件数超過判定フラグ)
		this.setCntOverJdgFlg(paramBeans, "2");
		// 検索件数が最大検索件数を超えた扱いとして、エラーメッセージを表示
		// メッセージ設定
		// v15.00.00 2015/07/22 DEL START  
		//this.setErrorMessage(paramBeans, "2", JPCModelConstant.FUNC_CD_1, false);
		// v15.00.00 2015/07/22 DEL END
// v14.00.00 2015/06/1 MOD END  
		
		return true;
	}

	/**
	 * ダウンロードボタン押下.<br>
	 * <br>
	 * @return 実行結果
	 * @throws Exception 例外が発生した場合
	 */
	public boolean contJgshakssnDOWNLOAD() throws Exception
	{
		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();
		
		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = {bean};
		
		// 件数超過判定フラグ取得
		Boolean cntOverJdgFlg = Boolean.valueOf(paramBeans[0].sendMessageString(ACW01301SFConst.CNT_OVER_JDG_FLG, X31CWebConst.DATABEAN_GET_VALUE));

		// 検索結果を用いてダウンロード処理をするため、退避項目で再検索
		this.getSearch(bean);
		
		// サービス実行
		this.execACSV0020(paramBeans, JPCModelConstant.FUNC_CD_2);
		
		// 件数超過判定フラグがfalseの場合
		if (!cntOverJdgFlg)
		{
			// ◇CSVデータ作成
			JCHCsvDataUtil util = JCHCsvDataUtil.createInstance(bean.getDataBeanArray(ACW01301SFConst.USE_DTL_INFO));
			//フィルタ設定
			String[] header = new String[]{
					ACW01301SFConst.SVC_KEI_NO_02,		ACW01301SFConst.SEIKY_KEI_NO_02,	ACW01301SFConst.EOID_02,			ACW01301SFConst.SYSID_02,
					"テストID",							ACW01301SFConst.CONT_SVC_CD_02,		ACW01301SFConst.CONT_SVC_NM_02,		"コンテンツコード",
					ACW01301SFConst.CONT_NM_02,			ACW01301SFConst.KEI_STA_DATE_02,	"契約解除日時",						ACW01301SFConst.KSSAI_WAY_02,
					ACW01301SFConst.SUPPLIER_02,		ACW01301SFConst.CONT_TANKA_02,		ACW01301SFConst.CONT_BUY_CNT_02,	ACW01301SFConst.AMNT_02,
					ACW01301SFConst.TEISE_KINGAKU_02,	ACW01301SFConst.SVC_STA_YMD_02,		ACW01301SFConst.KEI_CNC_YMD_02,		ACW01301SFConst.VIRUSBUSTER_ID_02,
					ACW01301SFConst.TRENDMICRO_CEREAL_NO_02	};
			String[] items = new String[]{
					ACW01301SFConst.SVC_KEI_NO_02,		ACW01301SFConst.SEIKY_KEI_NO_02,	ACW01301SFConst.EOID_02,			ACW01301SFConst.SYSID_02,
					ACW01301SFConst.TEST_ID_FLG_02,		ACW01301SFConst.CONT_SVC_CD_02,		ACW01301SFConst.CONT_SVC_NM_02,		ACW01301SFConst.CONT_ID_02,
					ACW01301SFConst.CONT_NM_02,			ACW01301SFConst.KEI_STA_DATE_02,	ACW01301SFConst.KEI_END_DATE_02,	ACW01301SFConst.KSSAI_WAY_02,
					ACW01301SFConst.SUPPLIER_02,		ACW01301SFConst.CONT_TANKA_02,		ACW01301SFConst.CONT_BUY_CNT_02,	ACW01301SFConst.AMNT_02,
					ACW01301SFConst.TEISE_KINGAKU_02,	ACW01301SFConst.SVC_STA_YMD_02,		ACW01301SFConst.KEI_CNC_YMD_02,		ACW01301SFConst.VIRUSBUSTER_ID_02,
					ACW01301SFConst.TRENDMICRO_CEREAL_NO_02	};
			util.setFilterColumnsDblQuoate(new String[][]{header, items});

			//コード変換設定
			util.addCodeConvertor(ACW01301SFConst.TEST_ID_FLG_02, "0", JACStrConst.SPACE_1);
			util.addCodeConvertor(ACW01301SFConst.TEST_ID_FLG_02, "1", "*");
			//フォーマット変換設定
			util.addDateFormatter(ACW01301SFConst.KEI_STA_DATE_02, "yyyy/MM/dd HH:mm:ss", "yyyyMMddHHmmss");
			util.addDateFormatter(ACW01301SFConst.KEI_END_DATE_02, "yyyy/MM/dd HH:mm:ss", "yyyyMMddHHmmss");
			util.addDateFormatter(ACW01301SFConst.SVC_STA_YMD_02, "yyyy/MM/dd", "yyyyMMdd");
			util.addDateFormatter(ACW01301SFConst.KEI_CNC_YMD_02, "yyyy/MM/dd", "yyyyMMdd");
			util.setItemKakomiOn();
			util.addAmntFormatterNoSpace(ACW01301SFConst.CONT_TANKA_02);
			util.addAmntFormatterNoSpace(ACW01301SFConst.CONT_BUY_CNT_02);
			util.addAmntFormatterNoSpace(ACW01301SFConst.AMNT_02);
			util.addAmntFormatterNoSpace(ACW01301SFConst.TEISE_KINGAKU_02);
			
			//バイトデータ作成
			byte[] downloadData = util.createData();
			
			// ファイル圧縮
			createZipFile(downloadData);
		}
		
		return true;
	}

	/**
	 * コンテンツ事業者間精算照会画面の初期表示処理を行います。
	 * <br>
	 * @throws Exception 例外が発生した場合
	 */
	private void initShokaiScreen() throws Exception {

		// 画面間引継情報を設定する
		JCCWebCommon.getScreenInfo(this);

		// サービスフォームBeanのアクセサを取得する
		X31SDataBeanAccess bean = super.getServiceFormBean();

		// サービスフォームBeanの初期値設定
		String unyoYm = JCCWebCommon.getOpeDate(this, null).substring(0, 6);
		String trgtPrdStaYmd = unyoYm + "01";
		String trgtPrdEndYmd = unyoYm + JCCWebCommon.getEndOfMonth(unyoYm);
		bean.sendMessageString(ACW01301SFConst.TRGT_PRD_STA_YMD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.toYearFromYmd(trgtPrdStaYmd));
		bean.sendMessageString(ACW01301SFConst.TRGT_PRD_STA_YMD_MON, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.toMonthFromYmd(trgtPrdStaYmd));
		bean.sendMessageString(ACW01301SFConst.TRGT_PRD_STA_YMD_DAY, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.toDayFromYmd(trgtPrdStaYmd));
		bean.sendMessageString(ACW01301SFConst.TRGT_PRD_END_YMD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.toYearFromYmd(trgtPrdEndYmd));
		bean.sendMessageString(ACW01301SFConst.TRGT_PRD_END_YMD_MON, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.toMonthFromYmd(trgtPrdEndYmd));
		bean.sendMessageString(ACW01301SFConst.TRGT_PRD_END_YMD_DAY, X31CWebConst.DATABEAN_SET_VALUE, JCCWebCommon.toDayFromYmd(trgtPrdEndYmd));
		
		// 退避項目のクリア
		bean.getDataBeanArray(ACW01301SFConst.BK_CONT_SVC_INFO).clearArray();
		bean.sendMessageString(ACW01301SFConst.BK_CONT_NM, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_STA_YMD_YEAR, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_STA_YMD_MON, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_STA_YMD_DAY, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_END_YMD_YEAR, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_END_YMD_MON, X31CWebConst.DATABEAN_CLEAR);
		bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_END_YMD_DAY, X31CWebConst.DATABEAN_CLEAR);

		// サービスフォームBeanのアクセサを配列化する
		X31SDataBeanAccess[] paramBeans = {bean};
		
		// コンテンツ事業者間精算照会画面情報取得サービス実行
		this.execACSV0019(paramBeans);
		
		return;
	}
	
	/**
	 * コンテンツ事業者間精算照会画面情報取得サービスを実行します。
	 * <br>
	 * @param paramBeans コンテンツ事業者間精算照会サービスフォームBean
	 */
	@SuppressWarnings("unchecked")
	private void execACSV0019(X31SDataBeanAccess[] paramBeans) {
		
		// ユースケースID格納用マップを生成。
		HashMap paramMap = new HashMap();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_ACSV0019);

		// サービスに渡すMapを生成する
		HashMap inDataMap = new HashMap();
		ACSV0019_ACSV0019OPDBMapper mapper = new ACSV0019_ACSV0019OPDBMapper();
		mapper.setACSV001901SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);

		// 検索結果格納用マップを生成。
		HashMap outputMap = new HashMap();

		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap);

		// 下りマッピング
		mapper.getACSV001901SC(paramBeans, outputMap);
	}
	
	/**
	 * コンテンツ事業者間精算照会サービスを実行します。
	 * <br>
	 * @param paramBeans コンテンツ事業者間精算照会サービスフォームBean
	 * @param paramBeans 機能コード
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private void execACSV0020(X31SDataBeanAccess[] paramBeans, String funcCd) throws Exception {
		
		// 共有フォームBeanのアクセスクラスを取得
		X31SDataBeanAccess  commoninfoBean = super.getCommonInfoBean();
		
		// 検索エラーフラグ初期化
		String searchErrFlg = "";
		
		// バイナリ用Mapの設定
		HashMap<String, Object> attachMap = new HashMap<String, Object>();
		String gokeiCnt = "";
		Boolean cntOverJdgFlg = Boolean.valueOf(paramBeans[0].sendMessageString(ACW01301SFConst.CNT_OVER_JDG_FLG, X31CWebConst.DATABEAN_GET_VALUE));
		if (cntOverJdgFlg)
		{
			this.createEFile(paramBeans, attachMap);
			gokeiCnt = paramBeans[0].sendMessageString(ACW01301SFConst.GOKEI_CNT, X31CWebConst.DATABEAN_GET_VALUE);
		}
		
		// サービス実行前に検索結果項目をクリアする 
		clearServiceFormBeanResultItems(paramBeans);
		
		// ユースケースID格納用マップを生成。
		HashMap paramMap = new HashMap();
		paramMap.put(X31CWebConst.TELEGRAM_INFO_USECASE_ID, USECASE_ID_ACSV0020);

		// サービスに渡すMapを生成する
		HashMap inDataMap = new HashMap();
		ACSV0020_ACSV0020OPDBMapper mapper = new ACSV0020_ACSV0020OPDBMapper();
		mapper.setACSV002001SC(paramBeans, inDataMap, funcCd);
		if (cntOverJdgFlg)
		{
			mapper.setACSV002002SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);
		}
		else
		{
			mapper.setACSV002002SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_3);
		}
		mapper.setACSV002003SC(paramBeans, inDataMap, JPCModelConstant.FUNC_CD_1);
		
		HashMap<String, Object> dataMap = (HashMap<String, Object>)inDataMap.get("ACSV002002SC");
		dataMap.put("file_del_ymd", DELYMD);
		
		dataMap = (HashMap<String, Object>)inDataMap.get("ACSV002003SC");
		dataMap.put("trn_req_dtm", JACWebCommon.getSysDateTime().substring(0, 12));
		dataMap.put("file_del_ymd", DELYMD);
		dataMap.put("trn_iraisha_opeacnt", JZMWebCommon.getSendMessageString(commoninfoBean, CommonInfoCFConst.USER_ID));

		// 検索結果格納用マップを生成。
		HashMap outputMap = new HashMap();

		// サービスの呼び出し
		invokeService(paramMap, inDataMap, outputMap, attachMap);

		// 下りマッピング
		mapper.getACSV002001SC(paramBeans, outputMap);
		
		// 検索エラーフラグの取得
		searchErrFlg = JCCWebCommon.getSearchErrFlg("ACSV002001SC", outputMap); 
		
		// ディレイド処理依頼が実行された場合
		if (cntOverJdgFlg)
		{
			// 合計件数を再設定
			paramBeans[0].sendMessageString(ACW01301SFConst.GOKEI_CNT, X31CWebConst.DATABEAN_SET_VALUE, gokeiCnt);
		}

		// 制御値
		this.setCtrlValueInUseDtl(paramBeans);
		
		// 制御値(ボタン)
		this.setDisabledCntrlValueOfBtn(paramBeans, searchErrFlg);
		
		// 制御値(件数超過判定フラグ)
		this.setCntOverJdgFlg(paramBeans, searchErrFlg);
		
		// メッセージ設定
		this.setErrorMessage(paramBeans, searchErrFlg, funcCd, cntOverJdgFlg);
	}
	
	/**
	 * 利用明細情報の制御値を設定します。
	 * <br>
	 * @param bean コンテンツ事業者間精算照会サービスフォームBean
	 */
	private void setCtrlValueInUseDtl(X31SDataBeanAccess[] bean) {
		
		X31SDataBeanAccessArray useDtlInfo = bean[0].getDataBeanArray(ACW01301SFConst.USE_DTL_INFO);
		for (int idx = 0; idx < useDtlInfo.getCount().intValue(); idx++)
		{
			// 表示制御値
			String dspCntrlValue = JACStrConst.DSP_BG_COLOR_EVEN;
			if (idx % 2 == 0)
			{
				dspCntrlValue = JACStrConst.DSP_BG_COLOR_ODD;
			}

			useDtlInfo.getDataBean(idx).sendMessageString(ACW01301SFConst.DSP_CTRL_VALUE_02, X31CWebConst.DATABEAN_SET_VALUE, dspCntrlValue);
			
			// No
			useDtlInfo.getDataBean(idx).sendMessageString(ACW01301SFConst.NO_02, X31CWebConst.DATABEAN_SET_VALUE, String.valueOf(idx+1));
		}
	}
	
	/**
	 * ボタンの制御値を設定します。
	 * <br>
	 * @param bean コンテンツ事業者間精算照会サービスフォームBean
	 * @param searchErrFlg 検索エラーフラグ
	 */
	private void setDisabledCntrlValueOfBtn(X31SDataBeanAccess[] bean, String searchErrFlg) {
		// 検索エラーフラグの設定値に応じて制御
		String jsfDisabledCntrlValue = "true";
		if (!"1".equals(searchErrFlg))
		{
			jsfDisabledCntrlValue = "false";
		}
		
		/* ◇JSFボタン */
		// ダウンロードボタン
		bean[0].sendMessageString(ACW01301SFConst.DISABLED_CNTRL_VALUE_BTN_DOWNLOAD, X31CWebConst.DATABEAN_SET_VALUE, jsfDisabledCntrlValue);
	}
	
	/**
	 * 件数超過判定フラグの制御値を設定します。
	 * <br>
	 * @param bean コンテンツ事業者間精算照会サービスフォームBean
	 * @param searchErrFlg 検索エラーフラグ
	 */
	private void setCntOverJdgFlg(X31SDataBeanAccess[] bean, String searchErrFlg) {
		// 検索エラーフラグの設定値に応じて制御
		if ("2".equals(searchErrFlg))
		{
			bean[0].sendMessageString(ACW01301SFConst.CNT_OVER_JDG_FLG, X31CWebConst.DATABEAN_SET_VALUE, "true");
		}
	}

	/**
	 * サービスフォームBeanの検索結果項目をクリアします。
	 * <br>
	 * @param bean コンテンツ事業者間精算照会サービスフォームBean
	 */
	private void clearServiceFormBeanResultItems(X31SDataBeanAccess[] bean)
	{
		/* ◇利用明細情報 */
		bean[0].getDataBeanArray(ACW01301SFConst.USE_DTL_INFO).clearArray();
		/* ◇合計件数 */
		bean[0].sendMessageString(ACW01301SFConst.GOKEI_CNT, X31CWebConst.DATABEAN_SET_VALUE, "0");
	}
	
	/**
	 * エラーメッセージ設定処理。
	 * <br>
	 * @param bean コンテンツ事業者間精算照会サービスフォームBean
	 * @param searchErrFlg 検索エラーフラグ
	 * @param funcCd 機能コード
	 * @param cntOverJdgFlg 件数超過判定フラグ
	 */
	private void setErrorMessage(X31SDataBeanAccess[] bean, String searchErrFlg, String funcCd, Boolean cntOverJdgFlg)
	{
		if ("1".equals(searchErrFlg))
		{
			// 利用明細がない場合
			JCCWebCommon.setMessageInfo(this, MESSAGE_ID_USE_DTL_NONE);
		}
		else if ("2".equals(searchErrFlg))
		{
			// 最大検索件数を超過した場合
			JCCWebCommon.setMessageInfo(this, MESSAGE_ID_OVER_MAX_SEARCH_NUM);
		}
		else if (JPCModelConstant.FUNC_CD_2.equals(funcCd) && cntOverJdgFlg)
		{
			// ディレイド依頼処理が行われた場合
			JCCWebCommon.setMessageInfo(this, MESSAGE_ID_DL_INFO);
		}
	}
	
	/**
	 * ファイル圧縮処理
	 * <br>
	 * @param downloadDate ダウンロードCSV
	 * @throws Exception 
	 */
	private void createZipFile(byte[] downloadData) throws Exception
	{
		// オンライン運用日付
		String opeYmd = JCCWebCommon.getOpeDateTime(this, JACStrConst.SYS_CD_AC);

		// 圧縮ファイル格納作業ディレクトリ取得
		String dir_tmp = JCCWebCommon.getApplicationConst("DIR_COMP_TMP");

		// 圧縮ファイル格納作業ディレクトリ内でシステム一意となるディレクトリを（UIDにて）作成
		String dirUid = JCCFileUtil.createDirUid(dir_tmp);

		// ファイル名
		String fileNm = JACStrConst.FILE_NM_CONT_JGSHAKSSN + "_" + opeYmd + ".csv";
		
		// 作成したディレクトリおよびファイル名より、ファイルパスを作成する。
		String filePath = dirUid + File.separator + fileNm;

		// 作成したディレクトリおよびファイル名より、ファイルオブジェクトを作成
		File workDir = JCCFileUtil.createDir(filePath);

		// 作成したファイルに、電子ファイルオブジェクトの書き込み
		ByteArrayInputStream bis = null;
		FileOutputStream bos = null;
		OutputStream os = null;
		try
		{
			bis = new ByteArrayInputStream(downloadData);
			bos = new FileOutputStream(workDir);

			os = JCCFileUtil.writeOutputStream(bis, bos);
		}
		// 電子ファイルオブジェクトの書き込みに失敗した場合
		catch (IOException e)
		{
			JCCFileUtil.removeDir(dirUid);
			throw new JCCFrameworkException("圧縮前ファイルの生成に失敗しました。", e);
		}
		finally 
		{
			if ( null != bis ) 
			{
				bis.close();
			}
			if ( null != bos ) 
			{
				bos.close();
			}
			if ( null != os ) 
			{
				os.close();
			}
		}

		// ファイル圧縮処理
		downloadData = JCCWebCommon.createZipFile(filePath);
		
		// ZIPファイル名
		String zipFileNm = JACStrConst.FILE_NM_CONT_JGSHAKSSN + "_" + opeYmd + ".zip";

		// ダウンロード処理
		JCCWebCommon.setTempDownloadFile(this, downloadData, zipFileNm);
		
		// 作業用ディレクトリをファイルごと削除
		JCCFileUtil.removeDir(dirUid);
		
		return;
	}

	/**
	 * 検索条件保存処理
	 * <br>
	 * @param bean
	 * @throws Exception 
	 */
	private void setSearch(X31SDataBeanAccess bean) throws Exception
	{
		String bkContNm = bean.sendMessageString(ACW01301SFConst.CONT_NM, X31CWebConst.DATABEAN_GET_VALUE);
		String bkStaYmdYear = bean.sendMessageString(ACW01301SFConst.TRGT_PRD_STA_YMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		String bkStaYmdMon = bean.sendMessageString(ACW01301SFConst.TRGT_PRD_STA_YMD_MON, X31CWebConst.DATABEAN_GET_VALUE);
		String bkStaYmdDay = bean.sendMessageString(ACW01301SFConst.TRGT_PRD_STA_YMD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
		String bkEndYmdYear = bean.sendMessageString(ACW01301SFConst.TRGT_PRD_END_YMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		String bkEndYmdMon = bean.sendMessageString(ACW01301SFConst.TRGT_PRD_END_YMD_MON, X31CWebConst.DATABEAN_GET_VALUE);
		String bkEndYmdDay = bean.sendMessageString(ACW01301SFConst.TRGT_PRD_END_YMD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
		
		bean.sendMessageString(ACW01301SFConst.BK_CONT_NM, X31CWebConst.DATABEAN_SET_VALUE, bkContNm);
		bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_STA_YMD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, bkStaYmdYear);
		bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_STA_YMD_MON, X31CWebConst.DATABEAN_SET_VALUE, bkStaYmdMon);
		bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_STA_YMD_DAY, X31CWebConst.DATABEAN_SET_VALUE, bkStaYmdDay);
		bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_END_YMD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, bkEndYmdYear);
		bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_END_YMD_MON, X31CWebConst.DATABEAN_SET_VALUE, bkEndYmdMon);
		bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_END_YMD_DAY, X31CWebConst.DATABEAN_SET_VALUE, bkEndYmdDay);
		
		bean.getDataBeanArray(ACW01301SFConst.BK_CONT_SVC_INFO).clearArray();
		X31SDataBeanAccessArray bkContSvcCdList = bean.getDataBeanArray(ACW01301SFConst.BK_CONT_SVC_INFO);
		X31SDataBeanAccessArray ContSvcCdList = bean.getDataBeanArray(ACW01301SFConst.CONT_SVC_INFO);
		
		int allCount = ContSvcCdList.getCount();

		for (int i = 0; i < allCount; i++)
		{
			X31SDataBeanAccess svcCdBean = ContSvcCdList.getDataBean(i);
			String svcCd = svcCdBean.sendMessageString(ACW01301SFConst.CONT_SVC_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			String svcNm = svcCdBean.sendMessageString(ACW01301SFConst.CONT_SVC_NM_01, X31CWebConst.DATABEAN_GET_VALUE);
			Boolean checked = svcCdBean.sendMessageBoolean(ACW01301SFConst.CHOICE_01, X31CWebConst.DATABEAN_GET_VALUE);

			bkContSvcCdList.addDataBean();
			X31SDataBeanAccess svcBean = bkContSvcCdList.getDataBean(bkContSvcCdList.getCount() - 1);
			svcBean.sendMessageString(ACW01301SFConst.BK_CONT_SVC_CD_03, X31CWebConst.DATABEAN_SET_VALUE, svcCd);
			svcBean.sendMessageString(ACW01301SFConst.BK_CONT_SVC_NM_03, X31CWebConst.DATABEAN_SET_VALUE, svcNm);
			svcBean.sendMessageBoolean(ACW01301SFConst.BK_CHOICE_03, X31CWebConst.DATABEAN_SET_VALUE, checked);
		}
	}

	/**
	 * 検索条件取得処理
	 * <br>
	 * @param bean
	 * @throws Exception 
	 */
	private void getSearch(X31SDataBeanAccess bean) throws Exception
	{
		String bkContNm = bean.sendMessageString(ACW01301SFConst.BK_CONT_NM, X31CWebConst.DATABEAN_GET_VALUE);
		String bkStaYmdYear = bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_STA_YMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		String bkStaYmdMon = bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_STA_YMD_MON, X31CWebConst.DATABEAN_GET_VALUE);
		String bkStaYmdDay = bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_STA_YMD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
		String bkEndYmdYear = bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_END_YMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE);
		String bkEndYmdMon = bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_END_YMD_MON, X31CWebConst.DATABEAN_GET_VALUE);
		String bkEndYmdDay = bean.sendMessageString(ACW01301SFConst.BK_TRGT_PRD_END_YMD_DAY, X31CWebConst.DATABEAN_GET_VALUE);
		
		bean.sendMessageString(ACW01301SFConst.CONT_NM, X31CWebConst.DATABEAN_SET_VALUE, bkContNm);
		bean.sendMessageString(ACW01301SFConst.TRGT_PRD_STA_YMD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, bkStaYmdYear);
		bean.sendMessageString(ACW01301SFConst.TRGT_PRD_STA_YMD_MON, X31CWebConst.DATABEAN_SET_VALUE, bkStaYmdMon);
		bean.sendMessageString(ACW01301SFConst.TRGT_PRD_STA_YMD_DAY, X31CWebConst.DATABEAN_SET_VALUE, bkStaYmdDay);
		bean.sendMessageString(ACW01301SFConst.TRGT_PRD_END_YMD_YEAR, X31CWebConst.DATABEAN_SET_VALUE, bkEndYmdYear);
		bean.sendMessageString(ACW01301SFConst.TRGT_PRD_END_YMD_MON, X31CWebConst.DATABEAN_SET_VALUE, bkEndYmdMon);
		bean.sendMessageString(ACW01301SFConst.TRGT_PRD_END_YMD_DAY, X31CWebConst.DATABEAN_SET_VALUE, bkEndYmdDay);

		bean.getDataBeanArray(ACW01301SFConst.CONT_SVC_INFO).clearArray();
		X31SDataBeanAccessArray ContSvcCdList = bean.getDataBeanArray(ACW01301SFConst.CONT_SVC_INFO);
		X31SDataBeanAccessArray bkContSvcCdList = bean.getDataBeanArray(ACW01301SFConst.BK_CONT_SVC_INFO);
		
		int allCount = bkContSvcCdList.getCount();

		for (int i = 0; i < allCount; i++)
		{
			X31SDataBeanAccess svcCdBean = bkContSvcCdList.getDataBean(i);
			String svcCd = svcCdBean.sendMessageString(ACW01301SFConst.BK_CONT_SVC_CD_03, X31CWebConst.DATABEAN_GET_VALUE);
			String svcNm = svcCdBean.sendMessageString(ACW01301SFConst.BK_CONT_SVC_NM_03, X31CWebConst.DATABEAN_GET_VALUE);
			Boolean checked = svcCdBean.sendMessageBoolean(ACW01301SFConst.BK_CHOICE_03, X31CWebConst.DATABEAN_GET_VALUE);

			ContSvcCdList.addDataBean();
			X31SDataBeanAccess svcBean = ContSvcCdList.getDataBean(ContSvcCdList.getCount() - 1);
			svcBean.sendMessageString(ACW01301SFConst.CONT_SVC_CD_01, X31CWebConst.DATABEAN_SET_VALUE, svcCd);
			svcBean.sendMessageString(ACW01301SFConst.CONT_SVC_NM_01, X31CWebConst.DATABEAN_SET_VALUE, svcNm);
			svcBean.sendMessageBoolean(ACW01301SFConst.CHOICE_01, X31CWebConst.DATABEAN_SET_VALUE, checked);
		}
	}
	
	/**
	 * attachMap(バイナリデータMap)作成処理
	 * <br>
	 * @param bean
	 * @param attachMap バイナリデータMap
	 * @throws Exception 
	 */
	private void createEFile(X31SDataBeanAccess[] bean, HashMap<String, Object> attachMap) throws Exception
	{
		HashMap<String, Object> fileMap = new HashMap<String, Object>();
		ArrayList fileList = new ArrayList();
		StringBuffer sb = new StringBuffer();

		// コンテンツサービスコード(複数選択)
		StringBuffer keyContSvcCd = new StringBuffer();
		X31SDataBeanAccessArray contSvcInfo = bean[0].getDataBeanArray(ACW01301SFConst.CONT_SVC_INFO);
		for (int i = 0; i < contSvcInfo.getCount(); i++)
		{
			String contSvcCd = contSvcInfo.getDataBean(i).sendMessageString(ACW01301SFConst.CONT_SVC_CD_01, X31CWebConst.DATABEAN_GET_VALUE);
			Boolean checked = contSvcInfo.getDataBean(i).sendMessageBoolean(ACW01301SFConst.CHOICE_01, X31CWebConst.DATABEAN_GET_VALUE);
			if (checked)
			{
				if (keyContSvcCd.length() != 0)
				{
					keyContSvcCd.append(JACStrConst.SEMI_COLON);
				}
				keyContSvcCd.append(contSvcCd);
			}
		}
		sb.append(keyContSvcCd.toString());
		sb.append(JACStrConst.COMMA);
		
		// コンテンツ名
		sb.append(bean[0].sendMessageString(ACW01301SFConst.CONT_NM, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(JACStrConst.COMMA);
		
		// 対象期間開始日
		StringBuffer staYmd = new StringBuffer();
		staYmd.append(bean[0].sendMessageString(ACW01301SFConst.TRGT_PRD_STA_YMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
		staYmd.append(bean[0].sendMessageString(ACW01301SFConst.TRGT_PRD_STA_YMD_MON, X31CWebConst.DATABEAN_GET_VALUE));
		staYmd.append(bean[0].sendMessageString(ACW01301SFConst.TRGT_PRD_STA_YMD_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(staYmd.toString());
		sb.append(JACStrConst.COMMA);
		
		// 対象期間終了日
		StringBuffer endYmd = new StringBuffer();
		endYmd.append(bean[0].sendMessageString(ACW01301SFConst.TRGT_PRD_END_YMD_YEAR, X31CWebConst.DATABEAN_GET_VALUE));
		endYmd.append(bean[0].sendMessageString(ACW01301SFConst.TRGT_PRD_END_YMD_MON, X31CWebConst.DATABEAN_GET_VALUE));
		endYmd.append(bean[0].sendMessageString(ACW01301SFConst.TRGT_PRD_END_YMD_DAY, X31CWebConst.DATABEAN_GET_VALUE));
		sb.append(endYmd.toString());
		sb.append(JACStrConst.LINE_SEPARATOR);
		
		fileMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE,  sb.toString().getBytes(JACStrConst.ENCODE_MS932));
		fileList.add(fileMap);
		attachMap.put(X31CWebConst.TELEGRAM_INFO_ATTACH_FILE_LIST, fileList);
	}
}
