/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatFUWebDataShukFileMoveOut
*	ソースファイル名	：JBSbatFUWebDataShukFileMoveOut.java
*	作成者				：富士通
*	作成日				：2012年06月29日
*＜機能概要＞
*　ＷＥＢデータ集計結果ファイル（画面遷移）出力処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/06/29   富士通		新規作成
*	v4.00.00	2012/03/06   FJ)八坂	IT1-2013-0000523
*   v4.01.00	2013/03/16   FJ)高川	IT1-2013-0000523
*********************************************************************/
package eo.business.service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatDenshiFileUtil;
import eo.business.common.JFUBatCommon;
import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JKKCommonUtil;
import eo.common.util.JPCDateUtil;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatBusinessFileUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatFUWebDataShukFileMoveOut extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(Ｗｅｂ申込受付実績)*/
	private static final String D_TBL_NAME_FU_T_WEB_MSKM_UK_JSK = "FU_T_WEB_MSKM_UK_JSK";

	/** テーブル(Ｗｅｂ申込集計結果)*/
	private static final String D_TBL_NAME_FU_T_WEBMK_SRLT = "FU_T_WEBMK_SRLT";

	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";

	/** SQL定義キー(FU_SELECT_003)*/
	private static final String FU_T_WEB_MSKM_UK_JSK_FU_SELECT_003 = "FU_SELECT_003";

	/** SQL定義キー(FU_SELECT_002)*/
	private static final String FU_T_WEBMK_SRLT_FU_SELECT_002 = "FU_SELECT_002";

	/** SQL定義キー(FU_SELECT_001)*/
	private static final String ZM_M_CD_NM_KANRI_FU_SELECT_001 = "FU_SELECT_001";

	/** SQL定義キー(FU_SELECT_002)*/
	private static final String ZM_M_CD_NM_KANRI_FU_SELECT_002 = "FU_SELECT_002";

	/** SQL定義キー(FU_INSERT_001)*/
	private static final String ZM_T_DL_FILE_KANRI_FU_INSERT_001 = "FU_INSERT_001";

	/** SQL定義キー(FU_INSERT_001)*/
	private static final String ZM_T_DL_FILE_KANRI_FU_SELECT_001 = "FU_SELECT_001";

	/** テーブルアクセスクラス(Ｗｅｂ申込受付実績)*/
	private JBSbatSQLAccess db_FU_T_WEB_MSKM_UK_JSK = null;

	/** テーブルアクセスクラス(Ｗｅｂ申込集計結果)*/
	private JBSbatSQLAccess db_FU_T_WEBMK_SRLT = null;

	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;

	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** メッセージキー*/
	private static final String EFUB0120AI = JPCBatchMessageConstant.EFUB0120AI;

	/** メッセージキー*/
	private static final String EFUB0170KE = JPCBatchMessageConstant.EFUB0170KE;

	/** 処理管理番号 */
	private static final String TRN_KANRI_NO = "000000000062";

	/** ファイルコード */
	private static final String S_FILE_CD = "FU01";

	/** タイムスタンプ置換用文字列*/
	private static final String FILE_NM_TIMESTAMP = "yyyymmddhhmmss";

	/** タイムスタンプ置換用文字列*/
	private static final String FILE_NM_DTM = "yyyymm";

	/** 出力ファイル名称*/
	private static final String OUT_FILE_NM = "ＷＥＢデータ集計結果ファイル（申込）";

	// IT1-2013-0000523 2013/3/16 takagawa start
	/** ジョブID（下三桁） **/
	private static final String JOBID_SHIMO3 = "0J0";

	/** ジョブID **/
	private String jobId = null;

	/** ディレイド処理依頼番号 **/
	private String dlydTrnReqNo = null;
	// IT1-2013-0000523 2013/3/16 takagawa end

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_FU_T_WEB_MSKM_UK_JSK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_FU_T_WEB_MSKM_UK_JSK);
		db_FU_T_WEBMK_SRLT = new JBSbatSQLAccess(commonItem, D_TBL_NAME_FU_T_WEBMK_SRLT);
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		//JOBIDを取得する。
		jobId = commonItem.getJobid().substring(0, 8) + JOBID_SHIMO3;
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		int iCdNmCnt = 0;			// コード名称管理取得件数

		// システム日付取得
		String strSysDateTimeStamp = JFUBatCommon.getSysDateTimeStamp();
		String strSysDate = strSysDateTimeStamp.substring(0, 8);

		// 処理対象日付取得用arraylist
		ArrayList<String> dateList = new ArrayList<String>();

		// FREEパラメータ取得
		String strFreeParam = commonItem.getFreeItem();
		String[] lines = strFreeParam.split(JFUStrConst.S_PARAM_DELIM);
		if(lines.length != 9)
		{
			throw new JBSbatBusinessException(EFUB0170KE, new String[] {strFreeParam});
		}
		// パラメータ取得
		String strFreeParam1 = lines[0];	// 起動パラメータ(1:定期起動、2:随時起動)
		String strFreeParam2 = lines[1];	// 1:定期起動用_出力対象ファイル(ファイルパス込み)(申込完了)
		String strFreeParam3 = lines[2];	// 1:定期起動用_出力対象ファイル(申込完了)
		String strFreeParam4 = lines[3];	// 2:随時起動用_出力対象ファイル(ファイルパス込み)(申込完了)
		String strFreeParam5 = lines[4];	// 2:随時起動用_出力対象ファイル(申込完了)
		String strFreeParam6 = lines[5];	// 1:定期起動用_出力対象ファイル(ファイルパス込み)(申込離脱)
		String strFreeParam7 = lines[6];	// 1:定期起動用_出力対象ファイル(申込離脱)
		String strFreeParam8 = lines[7];	// 2:随時起動用_出力対象ファイル(ファイルパス込み)(申込離脱)
		String strFreeParam9 = lines[8];	// 2:随時起動用_出力対象ファイル(申込離脱)

		// コード名称管理より、帳票出力用の文言の件数を取得する
		// コード名称管理取得件数格納用領域作成
		JBSbatCommonDBInterface cd_nm_cnt_map = null;
		JBSbatCommonDBInterface cd_nm_cnt_dbList = new JBSbatCommonDBInterface();

		cd_nm_cnt_dbList. setValue(JFUStrConst.S_CD_SBT_NM_CDxxx2);
		executeZM_M_CD_NM_KANRI_FU_SELECT_002(cd_nm_cnt_dbList.getList().toArray());
		cd_nm_cnt_map = db_ZM_M_CD_NM_KANRI.selectNext();

		// 取得できた要素数をカウントする(配列の大きさを確定)
		iCdNmCnt = Integer.parseInt(cd_nm_cnt_map.getString("CNT"));

		// 取得した要素数を元に配列を定義
		String[][] tyohyo_nm_map = new String[iCdNmCnt][2];

		// コード名称管理より、帳票出力用の日本語名を取得する
		// コード名称管理取得結果格納用領域作成
		JBSbatCommonDBInterface cd_nm_map = null;
		JBSbatCommonDBInterface cd_nm_dbList = new JBSbatCommonDBInterface();

		cd_nm_dbList. setValue(JFUStrConst.S_CD_SBT_NM_CDxxx2);
		executeZM_M_CD_NM_KANRI_FU_SELECT_001(cd_nm_dbList.getList().toArray());

		int iCnt = 0;
		for(cd_nm_map = db_ZM_M_CD_NM_KANRI.selectNext(); null != cd_nm_map; cd_nm_map = db_ZM_M_CD_NM_KANRI.selectNext())
		{
			tyohyo_nm_map[iCnt][0] = cd_nm_map.getString("CD_DIV");
			tyohyo_nm_map[iCnt][1] = cd_nm_map.getString("CD_DIV_NM");
			iCnt++;
		}

		// 2013/03/07 【障害423】WEBデータ集計用コード定義情報を読み込んでHashMapにセットする
		String strFilePath = JFUBatCommon.getApplicationConst(JFUStrConst.FU_WEB_DATA_SHUK_CD_FILE_PATH);
		HashMap<String, String> webDataShukCdMap = new HashMap<String, String>();

		JBSbatInputFileUtil inFile = null;
		try
		{
			// WEBデータ集計コード定義ファイルパス
			inFile = new JBSbatInputFileUtil(strFilePath);
			inFile.setEncode("UTF-8");						// 文字コード
			inFile.createReader();

			while(true)
			{
				String line = inFile.readLine();
				if(line == null)
				{
					break;
				}
				String[] item = line.split(JFUStrConst.COMMA);
				webDataShukCdMap.put(item[0], item[1]);
			}
		}
		catch (IOException e)
		{
			// 例外処理
			throw new JBSbatBusinessException("EFUB0210KE", new String[]{strFilePath});
		} finally {
			if (null != inFile) {
				// ファイルオブジェクトをクローズ
				inFile.close();
			}
		}

		// 定期起動時の処理年月日(システム日付の前日)を取得
		String strTranYMD = JPCDateUtil.addDay(strSysDate, -1);

		// 随時起動か定期起動による処理分岐
		if(JFUStrConst.S_WEB_SHUK_KIDO_PARA_1.equals(strFreeParam1))
		{
			// 定期起動時はＷｅｂ申込受付実績より処理対象日のデータを抽出
			JBSbatCommonDBInterface dbList1 = new JBSbatCommonDBInterface();
			dbList1. setValue(strTranYMD);
			executeFU_T_WEB_MSKM_UK_JSK_FU_SELECT_003(dbList1.getList().toArray());

			// WEB申込受付実績SQL発行用領域作成
			JBSbatCommonDBInterface web_mskm_map = new JBSbatCommonDBInterface();

			// 取得した結果(処理対象日付)を取得結果レコードが読み終わるまで、ArrayListへ格納する。
			for(web_mskm_map = db_FU_T_WEB_MSKM_UK_JSK.selectNext(); null != web_mskm_map; web_mskm_map = db_FU_T_WEB_MSKM_UK_JSK.selectNext())
			{
				dateList.add(web_mskm_map.getString("SCREEN_DSP_YMD"));
			}
		}
		else
		{
			dateList.add(strSysDate);
		}

		//-------------------------申込完了ファイルの抽出-------------------------//
		// 処理対象日付取得用arraylistに存在する日付の分、ＷＥＢデータ集計結果ファイル（申込）ファイル出力及び電子ファイル管理登録処理を実行する
		int dateListCount = dateList.size();
		for(int i = 0; dateListCount > i; i++)
		{
			String strEndDay = "";		// 月末日格納用変数
			int intOutputCnt = 0;		// outputファイル件数

			String strFileNm = "";		// ダウンロード用ファイル名称
			String strFilePass = "";	// ファイルパス格納用
			String strEfileKanriNo = "";// 電子ファイル管理番号
			String[] strEFileReturn = null;	// 電子ファイル管理登録後戻り値格納用

			// 出力ファイル生成オブジェクト初期化(随時起動or定期起動でファイル名が変更)
			if(JFUStrConst.S_WEB_SHUK_KIDO_PARA_1.equals(strFreeParam1))
			{
				strFileNm = strFreeParam3.replace(FILE_NM_DTM, dateList.get(i));
				strFilePass = strFreeParam2.replace(FILE_NM_DTM, dateList.get(i));
			}
			else
			{
				strFileNm = strFreeParam5.replace(FILE_NM_TIMESTAMP, strSysDateTimeStamp);
				strFilePass = strFreeParam4.replace(FILE_NM_TIMESTAMP, strSysDateTimeStamp);
			}
			JBSbatBusinessFileUtil obj1 = JFUBatCommon.createBusinessFileUtil(strFilePass, JFUStrConst.SJIS,
			JFUStrConst.S_LINE_SEPARAOR_LF, JFUStrConst.S_SEP_CAM);

			// ＷＥＢデータ集計結果ファイル（申込）レコード格納領域初期化
			ArrayList<String> webMskmFileList = new ArrayList();

			// ヘッダー部編集処理を実施
			ArrayList<String> webHeadFileList = new ArrayList();
			webHeadFileList.add(JFUStrConst.S_WEB_DATA_WORD_1);
			webHeadFileList.add(JFUStrConst.S_WEB_DATA_WORD_18);
			webHeadFileList.add(JFUStrConst.S_WEB_DATA_WORD_19);
			webHeadFileList.add(JFUStrConst.S_WEB_DATA_WORD_20);
			webHeadFileList.add(JFUStrConst.S_WEB_DATA_WORD_21);

			// ファイルへ、ヘッダー部を出力
			JFUBatCommon.printBusinessFileUtil(obj1, webHeadFileList);
			webHeadFileList.clear();

			// 処理対象日を設定し、Ｗｅｂ申込集計結果よりデータを取得(随時起動用と定期起動用で分岐)
			JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
			if(JFUStrConst.S_WEB_SHUK_KIDO_PARA_1.equals(strFreeParam1))
			{
				dbList.setValue(dateList.get(i) + JFUStrConst.S_FIRST_DAY); // 取得対象月の初日を設定
				if (!(strTranYMD.substring(0, 6)).equals(dateList.get(i)))
				{
					strEndDay = JFUBatCommon.addDay(JFUBatCommon.addMonth(dateList.get(i) + JFUStrConst.S_FIRST_DAY, 1), -1);
					// 取得対象月が今月以外の場合は対象月の末日を設定
					dbList.setValue(strEndDay);
				}
				else
				{
					dbList.setValue(strTranYMD);		// 取得対象月が今月の場合はシステム日付を設定
				}
			}
			else
			{
				dbList. setValue(dateList.get(i));
				dbList. setValue(dateList.get(i));
			}

			dbList. setValue(JFUStrConst.S_WEB_MSKM_SHUK_CD_4);
			executeFU_T_WEBMK_SRLT_FU_SELECT_002(dbList.getList().toArray());

			JBSbatCommonDBInterface dbMap = new JBSbatCommonDBInterface();
			for(dbMap = db_FU_T_WEBMK_SRLT.selectNext(); null != dbMap; dbMap = db_FU_T_WEBMK_SRLT.selectNext())
			{

				// 2013/03/07 【障害423】ＷＥＢデータ集計結果ファイル（申込完了）ファイル出力データ編集
				String strDspNm = "";
				String strDspNmChk = "";
				String endDspNm = "";

				webMskmFileList.add(dbMap.getString("SHUK_TG_MSKM_YMD"));		// 集計対象年月日

				// Web申込集計対象値を取得し、名称変換して連結する
				String[] workValue = dbMap.getString("WEBMK_SHUK_TG_VALUE").split(",");
				for (int j = 0; j <= workValue.length - 1; j++)
				{
					if(webDataShukCdMap.containsKey(workValue[j]))
					{
						strDspNmChk = webDataShukCdMap.get(workValue[j]);				// 画面名称
					}
					else
					{
						strDspNmChk = workValue[j];										// 画面ID
					}

					if (j != workValue.length - 1)
					{
						strDspNm = strDspNm + strDspNmChk + JFUStrConst.S_SEP_CAM;		// 区切り文字用カンマ(最終遷移画面ID以外で設定)
					}
					else
					{
						strDspNm = strDspNm + strDspNmChk;
					}

				}

				if (webDataShukCdMap.containsKey(workValue[workValue.length - 1]))
				{
					endDspNm = webDataShukCdMap.get(workValue[workValue.length - 1]); // 最終遷移画面
				}
				else
				{
					endDspNm = workValue[workValue.length - 1]; // 最終遷移画面ID
				}
				webMskmFileList.add(endDspNm);											// 最終遷移画面
				webMskmFileList.add(workValue[workValue.length - 1]); // 最終遷移画面ID
				webMskmFileList.add(dbMap.getString("DSEN_BETU_RDT_CNT"));				// 導線別離脱件数
				webMskmFileList.add(strDspNm);											// 画面遷移情報

				// ファイルへデータ部を出力
				JFUBatCommon.printBusinessFileUtil(obj1, webMskmFileList);
				webMskmFileList.clear();
				intOutputCnt++;
			}

			if (null != obj1)
			{
				// ファイルオブジェクトをクローズ
				JFUBatCommon.closeBusinessFileUtil(obj1);
			}

			// ファイル削除年月日の算出
			String strFileDelYMD = JPCDateUtil.addDay(strSysDate, JFUStrConst.S_WEB_DATA_BK_TIME);

			// ダウンロードファイル管理を検索し、同名ファイルが存在するか確認する。
			JBSbatCommonDBInterface dbList3 = new JBSbatCommonDBInterface();
			dbList3. setValue(strFileNm);
			executeZM_T_DL_FILE_KANRI_FU_SELECT_001(dbList3.getList().toArray());

			JBSbatCommonDBInterface dbmap3 = new JBSbatCommonDBInterface();
			for(dbmap3 = db_ZM_T_DL_FILE_KANRI.selectNext(); null != dbmap3; dbmap3 = db_ZM_T_DL_FILE_KANRI.selectNext())
			{
				strEfileKanriNo = dbmap3.getString("EFILE_KANRI_NO");
				break;
			}

			// 取得結果が空の場合は電子ファイル管理にＷＥＢデータ集計結果ファイル（申込）を登録する
			if("".equals(strEfileKanriNo))
			{
				strEFileReturn = JCCbatDenshiFileUtil.createDenshiFile(commonItem, S_FILE_CD, strFilePass, strFileDelYMD);
			}
			// 取得結果が存在する場合は電子ファイル管理にＷＥＢデータ集計結果ファイル（申込）を更新する
			else
			{
				strEFileReturn = JCCbatDenshiFileUtil.updateDenshiFile(commonItem, strEfileKanriNo, strFilePass, strFileDelYMD);
			}

			// 電子ファイル管理番号取得
			String strEFileKanriNo = strEFileReturn[0];

			// 取得したデータをファイルとして出力し、ダウンロード管理テーブルへ登録
			String[] insertData = new String[7];
			insertData[0] = TRN_KANRI_NO;
			insertData[1] = strFileNm;
			insertData[2] = String.valueOf(intOutputCnt);
			insertData[3] = JFUBatCommon.getSysDateTimeStamp();
			insertData[4] = strFileDelYMD;
			insertData[5] = strEFileKanriNo;
			insertData[6] = strEFileReturn[1];
			executeZM_T_DL_FILE_KANRI_FU_INSERT_001(insertData);

			super.logPrint.printBusinessErrorLog(EFUB0120AI, new String[] { OUT_FILE_NM + strFileNm, String.valueOf(intOutputCnt) });
		}


		//-------------------------申込離脱ファイルの抽出-------------------------//
		// 処理対象日付取得用arraylistに存在する日付の分、ＷＥＢデータ集計結果ファイル（申込）ファイル出力及び電子ファイル管理登録処理を実行する
		for(int i = 0; dateListCount > i; i++)
		{
			String strEndDay = "";		// 月末日格納用変数
			int intOutputCnt = 0;		// outputファイル件数

			String strFileNm = "";		// ダウンロード用ファイル名称
			String strFilePass = "";	// ファイルパス格納用
			String strEfileKanriNo = "";// 電子ファイル管理番号
			String[] strEFileReturn = null;	// 電子ファイル管理登録後戻り値格納用

			// 出力ファイル生成オブジェクト初期化(随時起動or定期起動でファイル名が変更)
			if(JFUStrConst.S_WEB_SHUK_KIDO_PARA_1.equals(strFreeParam1))
			{
				strFileNm = strFreeParam7.replace(FILE_NM_DTM, dateList.get(i));
				strFilePass = strFreeParam6.replace(FILE_NM_DTM, dateList.get(i));
			}
			else
			{
				strFileNm = strFreeParam9.replace(FILE_NM_TIMESTAMP, strSysDateTimeStamp);
				strFilePass = strFreeParam8.replace(FILE_NM_TIMESTAMP, strSysDateTimeStamp);
			}
			JBSbatBusinessFileUtil obj1 = JFUBatCommon.createBusinessFileUtil(strFilePass, JFUStrConst.SJIS,
			JFUStrConst.S_LINE_SEPARAOR_LF, JFUStrConst.S_SEP_CAM);

			// ＷＥＢデータ集計結果ファイル（申込）レコード格納領域初期化
			ArrayList<String> webMskmFileList = new ArrayList();

			// ヘッダー部編集処理を実施
			ArrayList<String> webHeadFileList = new ArrayList();
			webHeadFileList.add(JFUStrConst.S_WEB_DATA_WORD_1);
			webHeadFileList.add(JFUStrConst.S_WEB_DATA_WORD_18);
			webHeadFileList.add(JFUStrConst.S_WEB_DATA_WORD_19);
			webHeadFileList.add(JFUStrConst.S_WEB_DATA_WORD_20);
			webHeadFileList.add(JFUStrConst.S_WEB_DATA_WORD_21);

			// ファイルへ、ヘッダー部を出力
			JFUBatCommon.printBusinessFileUtil(obj1, webHeadFileList);
			webHeadFileList.clear();

			// 処理対象日を設定し、Ｗｅｂ申込集計結果よりデータを取得(随時起動用と定期起動用で分岐)
			JBSbatCommonDBInterface dbList = new JBSbatCommonDBInterface();
			if(JFUStrConst.S_WEB_SHUK_KIDO_PARA_1.equals(strFreeParam1))
			{
				dbList.setValue(dateList.get(i) + JFUStrConst.S_FIRST_DAY); // 取得対象月の初日を設定
				if (!(strTranYMD.substring(0, 6)).equals(dateList.get(i)))
				{
					strEndDay = JFUBatCommon.addDay(JFUBatCommon.addMonth(dateList.get(i) + JFUStrConst.S_FIRST_DAY, 1), -1);
					// 取得対象月が今月以外の場合は対象月の末日を設定
					dbList.setValue(strEndDay);
				}
				else
				{
					dbList.setValue(strTranYMD);		// 取得対象月が今月の場合はシステム日付を設定
				}
			}
			else
			{
				dbList. setValue(dateList.get(i));
				dbList. setValue(dateList.get(i));
			}

			dbList. setValue(JFUStrConst.S_WEB_MSKM_SHUK_CD_5);
			executeFU_T_WEBMK_SRLT_FU_SELECT_002(dbList.getList().toArray());

			JBSbatCommonDBInterface dbMap = new JBSbatCommonDBInterface();
			for(dbMap = db_FU_T_WEBMK_SRLT.selectNext(); null != dbMap; dbMap = db_FU_T_WEBMK_SRLT.selectNext())
			{
				// 2013/03/07 【障害423】ＷＥＢデータ集計結果ファイル（申込完了）ファイル出力データ編集
				String strDspNm = "";
				String strDspNmChk = "";
				String endDspNm = "";

				webMskmFileList.add(dbMap.getString("SHUK_TG_MSKM_YMD"));		// 集計対象年月日

				// Web申込集計対象値を取得し、名称変換して連結する
				String[] workValue = dbMap.getString("WEBMK_SHUK_TG_VALUE").split(",");
				for (int j = 0; j <= workValue.length - 1; j++)
				{
					if(webDataShukCdMap.containsKey(workValue[j]))
					{
						strDspNmChk = webDataShukCdMap.get(workValue[j]);				// 画面名称
					}
					else
					{
						strDspNmChk = workValue[j];										// 画面ID
					}

					if (j != workValue.length - 1)
					{
						strDspNm = strDspNm + strDspNmChk + JFUStrConst.S_SEP_CAM;		// 区切り文字用カンマ(最終遷移画面ID以外で設定)
					}
					else
					{
						strDspNm = strDspNm + strDspNmChk;
					}

				}

				if (webDataShukCdMap.containsKey(workValue[workValue.length - 1]))
				{
					endDspNm = webDataShukCdMap.get(workValue[workValue.length - 1]); // 最終遷移画面
				}
				else
				{
					endDspNm = workValue[workValue.length - 1];							// 最終遷移画面ID
				}
				webMskmFileList.add(endDspNm);											// 最終遷移画面
				webMskmFileList.add(workValue[workValue.length - 1]);					// 最終遷移画面ID
				webMskmFileList.add(dbMap.getString("DSEN_BETU_RDT_CNT"));				// 導線別離脱件数
				webMskmFileList.add(strDspNm);											// 画面遷移情報

				// ファイルへデータ部を出力
				JFUBatCommon.printBusinessFileUtil(obj1, webMskmFileList);
				webMskmFileList.clear();
				intOutputCnt++;
			}

			if (null != obj1)
			{
				// ファイルオブジェクトをクローズ
				JFUBatCommon.closeBusinessFileUtil(obj1);
			}

			// ファイル削除年月日の算出
			String strFileDelYMD = JPCDateUtil.addDay(strSysDate, JFUStrConst.S_WEB_DATA_BK_TIME);

			// ダウンロードファイル管理を検索し、同名ファイルが存在するか確認する。
			JBSbatCommonDBInterface dbList3 = new JBSbatCommonDBInterface();
			dbList3. setValue(strFileNm);
			executeZM_T_DL_FILE_KANRI_FU_SELECT_001(dbList3.getList().toArray());

			JBSbatCommonDBInterface dbmap3 = new JBSbatCommonDBInterface();
			for(dbmap3 = db_ZM_T_DL_FILE_KANRI.selectNext(); null != dbmap3; dbmap3 = db_ZM_T_DL_FILE_KANRI.selectNext())
			{
				strEfileKanriNo = dbmap3.getString("EFILE_KANRI_NO");
				break;
			}

			// 取得結果が空の場合は電子ファイル管理にＷＥＢデータ集計結果ファイル（申込）を登録する
			if("".equals(strEfileKanriNo))
			{
				strEFileReturn = JCCbatDenshiFileUtil.createDenshiFile(commonItem, S_FILE_CD, strFilePass, strFileDelYMD);
			}
			// 取得結果が存在する場合は電子ファイル管理にＷＥＢデータ集計結果ファイル（申込）を更新する
			else
			{
				strEFileReturn = JCCbatDenshiFileUtil.updateDenshiFile(commonItem, strEfileKanriNo, strFilePass, strFileDelYMD);
			}

			// 電子ファイル管理番号取得
			String strEFileKanriNo = strEFileReturn[0];

			// 取得したデータをファイルとして出力し、ダウンロード管理テーブルへ登録
			String[] insertData = new String[7];
			insertData[0] = TRN_KANRI_NO;
			insertData[1] = strFileNm;
			insertData[2] = String.valueOf(intOutputCnt);
			insertData[3] = JFUBatCommon.getSysDateTimeStamp();
			insertData[4] = strFileDelYMD;
			insertData[5] = strEFileKanriNo;
			insertData[6] = strEFileReturn[1];
			executeZM_T_DL_FILE_KANRI_FU_INSERT_001(insertData);

			super.logPrint.printBusinessErrorLog(EFUB0120AI, new String[] { OUT_FILE_NM + strFileNm, String.valueOf(intOutputCnt) });
		}

		// IT1-2013-0000523 2013/3/16 takagawa start
		// 随時起動の場合はディレイド処理依頼を更新する
		if(JFUStrConst.S_WEB_SHUK_KIDO_PARA_2.equals(strFreeParam1))
		{
			// ディレイド処理依頼取得
			ArrayList<HashMap<String, Object>> dlydShoriIraiList
						= JCCBatCommon.getShoriIraiInfo(commonItem, jobId);

			// ディレイド処理依頼が存在しなかった場合
			if (JKKCommonUtil.isNull(dlydShoriIraiList))
			{
				return null;
			}

			// ディレイド処理依頼情報から最後のHashMapを取得する。
			HashMap<String, Object> dlydMap = dlydShoriIraiList.get(dlydShoriIraiList.size() - 1);

			// ディレイド処理依頼番号の取得
			dlydTrnReqNo = dlydMap.get("DLYD_TRN_REQ_NO").toString();

			//ディレイド処理依頼結果更新を行う。
			JCCBatCommon.updateShoriIraiResult(commonItem, dlydTrnReqNo, JFUStrConst.DLYD_TRN_RSLT_CD_COMPLETE, null);
		}
		// IT1-2013-0000523 2013/3/16 takagawa end

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_FU_T_WEB_MSKM_UK_JSK.close();
		db_FU_T_WEBMK_SRLT.close();
		db_ZM_M_CD_NM_KANRI.close();
		db_ZM_T_DL_FILE_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * SQLKEY(FU_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	画面表示年月日時分秒
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeFU_T_WEB_MSKM_UK_JSK_FU_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_FU_T_WEB_MSKM_UK_JSK.selectBySqlDefine(paramList, FU_T_WEB_MSKM_UK_JSK_FU_SELECT_003);
	}

	/**
	 * SQLKEY(FU_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	集計対象年月日
	 *		 	集計対象年月日
	 *		 	Web申込集計種別コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeFU_T_WEBMK_SRLT_FU_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_FU_T_WEBMK_SRLT.selectBySqlDefine(paramList, FU_T_WEBMK_SRLT_FU_SELECT_002);
	}

	/**
	 * SQLKEY(FU_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	コード種別コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_CD_NM_KANRI_FU_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_FU_SELECT_001);
	}

	/**
	 * SQLKEY(FU_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	コード種別コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_CD_NM_KANRI_FU_SELECT_002(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_FU_SELECT_002);
	}

	/**
	 * SQLKEY(FU_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	処理管理番号
	 *		 	電子ファイル管理番号
	 *		 	件数
	 *		 	ファイル登録年月日時分秒
	 *		 	ファイル削除年月日
	 *		 	電子ファイル管理番号
	 *		 	世代登録年月日時分秒
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_FU_INSERT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());

		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.executeBySqlDefine(paramList, ZM_T_DL_FILE_KANRI_FU_INSERT_001);
	}

	/**
	 * SQLKEY(FU_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	コード種別コード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_FU_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.selectBySqlDefine(paramList, ZM_T_DL_FILE_KANRI_FU_SELECT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
