/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatFUWebMskmRidatuSunk
*	ソースファイル名	：JBSbatFUWebMskmRidatuSunk.java
*	作成者				：富士通
*	作成日				：2012年06月25日
*＜機能概要＞
*　ＷＥＢデータ申込離脱集計処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00      2012/06/25   富士通      新規作成
*   v4.00      2012/12/13   FJ)大塚     IT2-2012-0002011
*   v4.01      2013/03/01   FJ)高川     IT1-2013-0000523
*********************************************************************/
package eo.business.service;

import java.io.IOException;
import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JFUBatCommon;
import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCBatchMessageConstant;
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 JBSbatFUWebMskmRidatuSunk 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_M_WEBMK_SHUK_JKN = "FU_M_WEBMK_SHUK_JKN";

	/** テーブル(Ｗｅｂ申込集計結果)*/
	private static final String D_TBL_NAME_FU_T_WEBMK_SRLT = "FU_T_WEBMK_SRLT";

	/** SQL定義キー(FU_SELECT_003)*/
	private static final String FU_T_WEB_MSKM_UK_JSK_FU_SELECT_008 = "FU_SELECT_008";

	/** SQL定義キー(FU_SELECT_001)*/
	private static final String FU_T_WEB_MSKM_UK_JSK_FU_SELECT_004 = "FU_SELECT_004";

	/** SQL定義キー(FU_SELECT_003)*/
	private static final String FU_T_WEB_MSKM_UK_JSK_FU_SELECT_005 = "FU_SELECT_005";

	/** SQL定義キー(FU_SELECT_002)*/
	private static final String FU_T_WEB_MSKM_UK_JSK_FU_SELECT_006 = "FU_SELECT_006";

	/** SQL定義キー(FU_SELECT_004)*/
	private static final String FU_T_WEB_MSKM_UK_JSK_FU_SELECT_007 = "FU_SELECT_007";

	/** SQL定義キー(FU_SELECT_001)*/
	private static final String FU_T_WEBMK_SRLT_FU_SELECT_001 = "FU_SELECT_001";

	/** SQL定義キー(FU_INSERT_001)*/
	private static final String FU_T_WEBMK_SRLT_FU_INSERT_001 = "FU_INSERT_001";

	/** SQL定義キー(FU_UPDATE_001)*/
	private static final String FU_T_WEBMK_SRLT_FU_UPDATE_001 = "FU_UPDATE_001";

	/** テーブルアクセスクラス(Ｗｅｂ申込受付実績)*/
	private JBSbatSQLAccess db_FU_T_WEB_MSKM_UK_JSK = null;

	/** テーブルアクセスクラス(Ｗｅｂ申込集計条件)*/
	private JBSbatSQLAccess db_FU_M_WEBMK_SHUK_JKN = null;

	/** テーブルアクセスクラス(Ｗｅｂ申込集計結果)*/
	private JBSbatSQLAccess db_FU_T_WEBMK_SRLT = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** Web申込集計用定数*/
	private static final String S_W_NEW_KARI_MSKM = "WEB_新規仮申込";

	/** Web申込集計用定数*/
	private static final String S_W_NEW_HON_MSKM = "WEB_新規本申込";

	/** Web申込集計用定数*/
	private static final String S_W_ADD_KARI_MSKM = "WEB_追加仮申込";

	/** Web申込集計用定数*/
	private static final String S_W_ADD_HON_MSKM = "WEB_追加本申込";

	/** Web申込集計用定数*/
	private static final String S_R_NEW_KARI_MSKM = "量販店_新規仮申込";

	/** Web申込集計用定数*/
	private static final String S_R_NEW_HON_MSKM = "量販店_新規本申込";

	/** Web申込集計用定数*/
	private static final String S_H_NEW_KARI_MSKM = "訪問販売_新規仮申込";

	/** Web申込集計用定数*/
	private static final String S_H_NEW_HON_MSKM = "訪問販売_新規本申込";

	/** 初期化用0埋め固定値*/
	private static final String S_ZERO_NUM_ = "00000000";

	/** 代理店コード判別用固定値1*/
	private static final String S_AG_SKBT_1 = "_仮申込";

	/** 代理店コード判別用固定値2*/
	private static final String S_AG_SKBT_2 = "_本申込";

	// IT1-2013-0000523 2013/2/28 takagawa
	/** 代理店コード判別用固定値(紹介者キャンペーン用)*/
	private static final String S_INTR_CD = "introductionCP";

	/** Web申込集計用定数(申込フラグ:9 集計対象外)*/
	private static final String S_MSKM_FLG = "9";

	/** Web申込集計用定数(集計機能コード1:申込毎集計)*/
	private static final String S_FUNK_CD_1 = "1";

	/** Web申込集計用定数(集計機能コード3:アクション毎集計)*/
	private static final String S_FUNK_CD_2 = "2";

	/** Web申込集計用定数(集計機能コード3:画面離脱数集計)*/
	private static final String S_FUNK_CD_3 = "3";

	/**メッセージID */
	private static final String EFUB0030KE = JPCBatchMessageConstant.EFUB0030KE;

	/**メッセージID */
	private static final String EFUB0060AI = JPCBatchMessageConstant.EFUB0060AI;

	/**メッセージID */
	private static final String EFUB0210AI = JPCBatchMessageConstant.EFUB0070AI;

	/** メッセージキー */
	private static final String EFUB0210KE = JPCBatchMessageConstant.EFUB0210KE;

	/**スキーマ名称 */
	private static final String WEB_MSKM_SHUK_RESULT_1 = "Web申込集計結果(申込集計)";

	/**スキーマ名称 */
	private static final String WEB_MSKM_SHUK_RESULT_2 = "Web申込集計結果(アクション毎集計)";

	/**スキーマ名称 */
	private static final String WEB_MSKM_SHUK_RESULT_3 = "Web申込集計結果(画面ID毎集計)";

	/**YYYYMMDDhhmmssSSSのhhmmssSSSの桁埋め用定数 */
	private static final String HHMMSSSSS = "595959999"; // IT2-2012-0002011 2012/12/13 Otsuka



	/**
	 * 初期処理
	 * @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_M_WEBMK_SHUK_JKN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_FU_M_WEBMK_SHUK_JKN);
		db_FU_T_WEBMK_SRLT = new JBSbatSQLAccess(commonItem, D_TBL_NAME_FU_T_WEBMK_SRLT);

		// パラメータ読み出し
		String strFreeParam = commonItem.getFreeItem();

		// パラメータを区切り文字で分割する
		String[] lines = strFreeParam.split(JFUStrConst.S_PARAM_DELIM);
		// パラメータチェック
		if (lines.length != 3 || ("").equals(lines[0]))
		{
			throw new JBSbatBusinessException(EFUB0030KE);
		}
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		int iMskmInsCnt = 0; // 申込件数登録件数
		int iMskmUpdCnt = 0; // 申込件数更新件数
		int iActInsCnt = 0; // アクション毎件数登録件数
		int iActUpdCnt = 0; // アクション毎件数更新件数
		int iScrInsCnt = 0; // 画面ID毎登録件数
		int iScrUpdCnt = 0; // 画面ID毎更新件数
		int iAgentCnt = 0; // 代理店件数取得用
		int iScreenCnt = 0; // 画面ID件数取得用

		// FREEパラメータ取得(入出力中間ファイルパス)
		String strFreeParam = commonItem.getFreeItem();

		// パラメータを区切り文字で分割する
		String[] lines = strFreeParam.split(JFUStrConst.S_PARAM_DELIM);
		// パラメータ取得
		String strFreeParam1 = lines[0]; // 機能コード
		String strFreeParam2 = lines[1]; // ＷＥＢ申込実績データ抽出ファイル
		String strFreeParam3 = lines[2]; // 集計対象外セッションID一覧ファイル

		// 処理対象外セッションID取得用変数
		String ssidinput = "";

		// システム日付を取得
		String strSysDate = JFUBatCommon.getSysDate();
		String strSysDateZuiji = JFUBatCommon.getSysDateTimeStamp();

		int sumCnt = 0; // 件数カウンター

		// 処理対象日付取得用arraylist
		ArrayList<String> dateList = new ArrayList<String>();

		// 定期起動時の処理年月日(システム日付の前日)を取得
		String strTranYMD = JPCDateUtil.addDay(strSysDate, -1);

		// 随時起動か定期起動による処理分岐
		if (JFUStrConst.S_WEB_SHUK_KIDO_PARA_1.equals(strFreeParam1))
		{
			// 定期起動時はＷｅｂ申込受付実績より処理対象日のデータを抽出
			JBSbatCommonDBInterface dbList1 = new JBSbatCommonDBInterface();
			dbList1.setValue(strTranYMD + HHMMSSSSS); // IT2-2012-0002011 2012/12/13 Otsuka
			executeFU_T_WEB_MSKM_UK_JSK_FU_SELECT_008(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);
		}

		// WEB申込集計実績テーブルより、集計対象となる日付を取得し日付分集計処理のループを実施する。
		int dateListCount = dateList.size();
		for (int icount = 0; dateListCount > icount; icount++)
		{
			int iTranSsid = 0; // 処理対象外セッションIDカウント用
			int itaihiCnt = 0; // 退避レコード読込済カウンター
			String strNReadSsid = ""; // 読み飛ばしセッションID保持用
			String strTaihiScid = ""; // 退避用画面離脱件数集計時画面ID
			String strTaihiSsId = ""; // 退避用セッションID用変数
			String strTaihiMskmNo = ""; // 退避用申込番号
			String strTaihiMskmDoCd = ""; // 退避用申込導線種別コード
			String strTaihiSvcTypeCd = ""; // 退避用サービスタイプコード
			String strTaihiAgentCd = ""; // 退避用代理店コード
			String strTaihiAgentSbtCd = ""; // 退避用代理店種別コード
			String strTaihiNetMskmFlg = ""; // 退避用ネット申込フラグ
			String strTaihiTvMskmFlg = ""; // 退避用テレビ申込フラグ
			String strTaihiTelMskmFlg = ""; // 退避用電話申込フラグ
			String strTaihiMobMskmFlg = ""; // 退避用モバイル申込フラグ
			String strTaihiInterCamFlg = ""; // 退避用紹介キャンペーンフラグ
			String strShukGaiSsId = "";

			/////////////////////////////////////////////////
			//---------2次元配列の定義と初期化処理---------//
			/////////////////////////////////////////////////

			// 1.申込集計用2次元配列の作成と値の初期化
			String[][] mskm_shuk_map = mskmMapReset(dateList.get(icount));

			String[][] mskm_act_map = null;
			String[][] mskmScreenMap = null;

			if (JFUStrConst.S_WEB_SHUK_KIDO_PARA_1.equals(strFreeParam1))
			{
				// 2.アクション毎集計用2次元配列の作成
				mskm_act_map = actionMapReset(strSysDate, dateList.get(icount));
				iAgentCnt = mskm_act_map.length;

				// 3.離脱画面集計用2次元配列の作成
				mskmScreenMap = screenMapReset(strSysDate, dateList.get(icount));
				iScreenCnt = mskmScreenMap.length;
			}
			else
			{
				// 2.アクション毎集計用2次元配列の作成
				mskm_act_map = actionMapReset(strSysDateZuiji, dateList.get(icount));
				iAgentCnt = mskm_act_map.length;

				// 3.離脱画面集計用2次元配列の作成
				mskmScreenMap = screenMapReset(strSysDateZuiji, dateList.get(icount));
				iScreenCnt = mskmScreenMap.length;
			}

			////////////////////////////////////////////////
			//---------ファイル読込と各種集計処理---------//
			////////////////////////////////////////////////

			// 中間ファイル読み込み
			ArrayList<String> sContMstList = null;
			try {
				sContMstList = readFile(strFreeParam2);
			} catch (Exception e) {
				throw new JBSbatBusinessException(EFUB0210KE,
						new String[] { strFreeParam2 });
			}

			// 入力ファイルにレコードがない場合はそのまま終了。
			if (sContMstList.size() == 0)
			{
				return null;
			}

			// 中間ファイルの件数分処理を繰り返す
			for (int iFileCnt = 0; iFileCnt <= sContMstList.size(); iFileCnt++)
			{
				/* 入力ファイル最終行の場合、レコード出力する */
				if (iFileCnt == sContMstList.size())
				{
					// 1-1.申込集計処理メソッドを呼出
					mskm_shuk_map =
							mskmShuk(mskm_shuk_map, strTaihiScid, strTaihiMskmDoCd, strTaihiAgentSbtCd, strTaihiNetMskmFlg, strTaihiTvMskmFlg,
									strTaihiTelMskmFlg, strTaihiMobMskmFlg, strTaihiSvcTypeCd);

					if (!JFUStrConst.S_FUW00931.equals(strTaihiScid) && !JFUStrConst.S_FUW00932.equals(strTaihiScid))
					{
						// 2-1.アクション毎集計処理メソッドを呼出
						mskm_act_map =
								actShuk(mskm_act_map, iAgentCnt, strTaihiScid, strTaihiAgentCd, strTaihiNetMskmFlg, strTaihiTvMskmFlg,
										strTaihiTelMskmFlg, strTaihiMobMskmFlg, strTaihiSvcTypeCd, strTaihiInterCamFlg);
					}

					// カウンターリセット
					sumCnt = 0;
					continue;
				}

				// 読込ファイルのレコードを分割する。
				String[] filelines = sContMstList.get(iFileCnt).split(JFUStrConst.S_SEP_CAM);

				String strSsId = filelines[0]; // セッションID
				String strScreenId = filelines[1]; // 画面ＩＤ
				String strGamenDtm = filelines[2]; // 画面表示年月日時分秒
				String strMskmNo = filelines[3]; // 申込番号
				String strMskmDoCd = filelines[4]; // 申込導線識別コード
				String strSvcTypeCd = filelines[5]; // サービスタイプ識別コード
				String strAgentSbtCd = filelines[6]; // 代理店種別コード
				String strNetMskmFlg = filelines[7]; // ネット申込フラグ
				String strTvMskmFlg = filelines[8]; // テレビ申込フラグ
				String strTelMskmFlg = filelines[9]; // 電話申込フラグ
				String strMobMskmFlg = filelines[10]; // モバイル申込フラグ
				String strInterCamFlg = filelines[13]; // 紹介キャンペーンフラグ
				String strAgentCd = filelines[15]; // 代理店コード
				String strShukSkbtCd = filelines[20]; // 集計単位識別コード

				//---------0.集計前レコード読込み判定処理---------//
				// IT1-2013-0000523 2013/2/28 takagawa
				if (0 == icount)
				{
					if (JFUStrConst.S_WEB_SHUK_KIDO_PARA_1.equals(strFreeParam1) && strGamenDtm.startsWith(strSysDate))
					{
						if (!strTaihiSsId.equals(strSsId))
						{
							if (!strShukGaiSsId.equals(strSsId))
							{
								// 処理対象外セッションID一覧ファイル作成用変数へ追記
								if (iTranSsid > 0)
								{
									ssidinput = ssidinput + JFUStrConst.S_SEP_CAM; // 区切り文字用カンマ
								}
								ssidinput = ssidinput + strSsId; // セッションID
								strShukGaiSsId = strSsId;
							}
							iTranSsid++;
						}
					}
				}

				// セッションIDが読み飛ばし用のセッションIDの場合、レコードを読み飛ばす
				if (strNReadSsid.equals(strSsId))
				{
					continue;
				}

				// IT1-2013-0000523 2013/2/28 takagawa
				if (!strTaihiSsId.equals(strSsId))
				{
					/** 定期起動時、1レコード目が集計対象日付と一致しない画面表示年月日の場合は読み飛ばす。
				    以降、同様のセッションIDがブレークするまで全て読み飛ばす**/
					if (JFUStrConst.S_WEB_SHUK_KIDO_PARA_1.equals(strFreeParam1) && !strGamenDtm.startsWith(dateList.get(icount)))
					{
						// 読み飛ばし用セッションIDを保持
						strNReadSsid = strSsId;
						continue;
					}

					/** 随時起動時、システム日付と一致しない画面表示年月日の場合は読み飛ばす。
				    以降、同様のセッションIDがブレークするまで全て読み飛ばす **/
					if (JFUStrConst.S_WEB_SHUK_KIDO_PARA_2.equals(strFreeParam1) && !strGamenDtm.startsWith(strSysDate))
					{
						// 読み飛ばし用セッションIDを保持
						strNReadSsid = strSsId;
						continue;
					}
				}

				// 集計単位識別コードが「1:申込情報」以外の場合は読み飛ばす。
				if (!JFUStrConst.S_MSKM_SHUK_SBT_1.equals(strShukSkbtCd))
				{
					continue;
				}

				/* 前処理セッションIDと異なっている場合は各種集計を実施しカウンターをリセットする。 */
				if (itaihiCnt > 0)
				{
					// IT1-2013-0000523 2013/2/28 takagawa
					// 量販・訪販以外の場合は、セッション毎に集計を実行する
					// 量販・訪販の場合は、申込番号毎に集計を実行する
					if (!JFUStrConst.S_FUW00931.equals(strTaihiScid) && !JFUStrConst.S_FUW00932.equals(strTaihiScid))
					{
						if (!strTaihiSsId.equals(strSsId))
						{
							// 1-1.申込集計処理メソッドを呼出
							mskm_shuk_map =
									mskmShuk(mskm_shuk_map, strTaihiScid, strTaihiMskmDoCd, strTaihiAgentSbtCd, strTaihiNetMskmFlg, strTaihiTvMskmFlg,
											strTaihiTelMskmFlg, strTaihiMobMskmFlg, strTaihiSvcTypeCd);

							// 2-1.アクション毎集計処理メソッドを呼出
							mskm_act_map =
									actShuk(mskm_act_map, iAgentCnt, strTaihiScid, strTaihiAgentCd, strTaihiNetMskmFlg, strTaihiTvMskmFlg,
											strTaihiTelMskmFlg, strTaihiMobMskmFlg, strTaihiSvcTypeCd, strTaihiInterCamFlg);

							// カウンターリセット
							sumCnt = 0;
						}
					}
					else
					{
						 // 申込番号が前レコードと異なる場合
						if (!strTaihiMskmNo.equals(strMskmNo))
						{
								// 1-1.申込集計処理メソッドを呼出
								mskm_shuk_map =
										mskmShuk(mskm_shuk_map, strTaihiScid, strTaihiMskmDoCd, strTaihiAgentSbtCd, strTaihiNetMskmFlg, strTaihiTvMskmFlg,
												strTaihiTelMskmFlg, strTaihiMobMskmFlg, strTaihiSvcTypeCd);

							// カウンターリセット
							sumCnt = 0;
						}
					}
				}

				//-- 集計処理用設定値を退避する --//
				strTaihiSsId = strSsId; // 処理済みセッションIDを退避
				strTaihiScid = strScreenId; // 画面IDを退避
				strTaihiMskmNo = strMskmNo; // 申込番号を退避
				strTaihiMskmDoCd = strMskmDoCd; // 申込導線識別コード退避
				strTaihiAgentSbtCd = strAgentSbtCd; // 代理店種別コード
				strTaihiSvcTypeCd = strSvcTypeCd; // サービスタイプコード退避
				strTaihiAgentCd = strAgentCd; // 代理店コード退避
				strTaihiNetMskmFlg = strNetMskmFlg; // 光ネット申込フラグ退避
				strTaihiTvMskmFlg = strTvMskmFlg; // テレビ申込フラグ退避
				strTaihiTelMskmFlg = strTelMskmFlg; // 電話申込フラグ退避
				strTaihiMobMskmFlg = strMobMskmFlg; // モバイル申込フラグ退避
				strTaihiInterCamFlg = strInterCamFlg;// 照会キャンペーンフラグ退避

				sumCnt = sumCnt + 1;
				itaihiCnt++;
			}

			// IT1-2013-0000523 2013/2/28 takagawa
			itaihiCnt = 0; // 退避レコード読込済カウンター
			strNReadSsid = ""; // 読み飛ばしセッションID保持用
			strTaihiScid = ""; // 退避用画面離脱件数集計時画面ID
			strTaihiSsId = ""; // 退避用セッションID用変数
			strTaihiMskmNo = ""; // 退避用申込番号
			strTaihiMskmDoCd = ""; // 退避用申込導線種別コード
			strTaihiSvcTypeCd = ""; // 退避用サービスタイプコード
			strTaihiAgentCd = ""; // 退避用代理店コード
			strTaihiAgentSbtCd = ""; // 退避用代理店種別コード
			strTaihiNetMskmFlg = ""; // 退避用ネット申込フラグ
			strTaihiTvMskmFlg = ""; // 退避用テレビ申込フラグ
			strTaihiTelMskmFlg = ""; // 退避用電話申込フラグ
			strTaihiMobMskmFlg = ""; // 退避用モバイル申込フラグ
			strTaihiInterCamFlg = ""; // 退避用紹介キャンペーンフラグ

			// 中間ファイルの件数分処理を繰り返す
			for (int iFileCnt = 0; iFileCnt <= sContMstList.size(); iFileCnt++)
			{
				/* 入力ファイル最終行の場合、レコード出力する */
				if (iFileCnt == sContMstList.size())
				{
					// 3-1.画面離脱数集計メソッドを呼出
					mskmScreenMap = scidShuk(mskmScreenMap, strTaihiScid, iScreenCnt, dateList.get(icount).substring(0, 8));

					// カウンターリセット
					sumCnt = 0;
					continue;
				}

				// 読込ファイルのレコードを分割する。
				String[] filelines = sContMstList.get(iFileCnt).split(JFUStrConst.S_SEP_CAM);

				String strSsId = filelines[0]; // セッションID
				String strScreenId = filelines[1]; // 画面ＩＤ
				String strGamenDtm = filelines[2]; // 画面表示年月日時分秒
				String strMskmNo = filelines[3]; // 申込番号
				String strMskmDoCd = filelines[4]; // 申込導線識別コード
				String strSvcTypeCd = filelines[5]; // サービスタイプ識別コード
				String strAgentSbtCd = filelines[6]; // 代理店種別コード
				String strNetMskmFlg = filelines[7]; // ネット申込フラグ
				String strTvMskmFlg = filelines[8]; // テレビ申込フラグ
				String strTelMskmFlg = filelines[9]; // 電話申込フラグ
				String strMobMskmFlg = filelines[10]; // モバイル申込フラグ
				String strInterCamFlg = filelines[13]; // 紹介キャンペーンフラグ
				String strAgentCd = filelines[15]; // 代理店コード

				//---------0.集計前レコード読込み判定処理---------//
				// セッションIDが読み飛ばし用のセッションIDの場合、レコードを読み飛ばす
				if (strNReadSsid.equals(strSsId))
				{
					continue;
				}

				if (!strTaihiSsId.equals(strSsId))
				{
					/** 定期起動時、1レコード目が集計対象日と一致しない画面表示年月日の場合は読み飛ばす。
				    以降、同様のセッションIDがブレークするまで全て読み飛ばす**/
					if (JFUStrConst.S_WEB_SHUK_KIDO_PARA_1.equals(strFreeParam1) && !strGamenDtm.startsWith(dateList.get(icount)))
					{
						// 読み飛ばし用セッションIDを保持
						strNReadSsid = strSsId;
						continue;
					}

					/** 随時起動時、システム日付と一致しない画面表示年月日の場合は読み飛ばす。
				    以降、同様のセッションIDがブレークするまで全て読み飛ばす **/
					if (JFUStrConst.S_WEB_SHUK_KIDO_PARA_2.equals(strFreeParam1) && !strGamenDtm.startsWith(strSysDate))
					{
						// 読み飛ばし用セッションIDを保持
						strNReadSsid = strSsId;
						continue;
					}
				}

				/* 前処理セッションIDと異なっている場合は各種集計を実施しカウンターをリセットする。 */
				if (itaihiCnt > 0)
				{
					// 量販・訪販以外の場合は、集計を実行しない
					if (!JFUStrConst.S_FUW00931.equals(strTaihiScid) && !JFUStrConst.S_FUW00932.equals(strTaihiScid))
					{
						if (!strTaihiSsId.equals(strSsId))
						{
							// 3-1.画面離脱数集計処理メソッドを呼出
							mskmScreenMap = scidShuk(mskmScreenMap, strTaihiScid, iScreenCnt, dateList.get(icount).substring(0, 8));

							// カウンターリセット
							sumCnt = 0;
						}
					}
				}

				//-- 集計処理用設定値を退避する --//
				strTaihiSsId = strSsId; // 処理済みセッションIDを退避
				strTaihiScid = strScreenId; // 画面IDを退避
				strTaihiMskmNo = strMskmNo; // 申込番号を退避
				strTaihiMskmDoCd = strMskmDoCd; // 申込導線識別コード退避
				strTaihiAgentSbtCd = strAgentSbtCd; // 代理店種別コード
				strTaihiSvcTypeCd = strSvcTypeCd; // サービスタイプコード退避
				strTaihiAgentCd = strAgentCd; // 代理店コード退避
				strTaihiNetMskmFlg = strNetMskmFlg; // 光ネット申込フラグ退避
				strTaihiTvMskmFlg = strTvMskmFlg; // テレビ申込フラグ退避
				strTaihiTelMskmFlg = strTelMskmFlg; // 電話申込フラグ退避
				strTaihiMobMskmFlg = strMobMskmFlg; // モバイル申込フラグ退避
				strTaihiInterCamFlg = strInterCamFlg;// 照会キャンペーンフラグ退避

				sumCnt = sumCnt + 1;
				itaihiCnt++;
			}

			// Web申込集計結果テーブルに各種集計結果を登録する
			for (int imskmcnt = 0; imskmcnt < 8; imskmcnt++)
			{
				// 読込レコードの存在チェック(Web申込集計結果)
				String strCnt = selectFU_T_WEBMK_SRLT(mskm_shuk_map, imskmcnt);

				if (JFUStrConst.S_ZERO.equals(strCnt))
				{
					insertFU_T_WEBMK_SRLT(mskm_shuk_map, imskmcnt, S_FUNK_CD_1);
					iMskmInsCnt++;
				}
				else
				{
					updateFU_T_WEBMK_SRLT(mskm_shuk_map, imskmcnt, S_FUNK_CD_1);
					iMskmUpdCnt++;
				}
			}

			// Web申込集計結果テーブルにアクション毎集計結果を登録する
			for (int iagentcnt = 0; iagentcnt < iAgentCnt; iagentcnt++)
			{
				String strCnt = selectFU_T_WEBMK_SRLT(mskm_act_map, iagentcnt);

				// SELECT結果が取得できた場合は更新、取得できない場合は登録を行う。
				if (JFUStrConst.S_ZERO.equals(strCnt))
				{
					insertFU_T_WEBMK_SRLT(mskm_act_map, iagentcnt, S_FUNK_CD_2);
					iActInsCnt++;
				}
				else
				{
					updateFU_T_WEBMK_SRLT(mskm_act_map, iagentcnt, S_FUNK_CD_2);
					iActUpdCnt++;
				}
			}

			// Web申込集計結果テーブルに画面ID毎集計結果を登録する
			for (int iscreencnt = 0; iscreencnt < iScreenCnt; iscreencnt++)
			{
				// 読込レコードの存在チェック(Web申込集計結果)
				String strCnt = selectFU_T_WEBMK_SRLT(mskmScreenMap, iscreencnt);

				// SELECT結果が取得できた場合は更新、取得できない場合は登録を行う。
				if (JFUStrConst.S_ZERO.equals(strCnt))
				{
					insertFU_T_WEBMK_SRLT(mskmScreenMap, iscreencnt, S_FUNK_CD_3);
					iScrInsCnt++;
				}
				else
				{
					updateFU_T_WEBMK_SRLT(mskmScreenMap, iscreencnt, S_FUNK_CD_3);
					iScrUpdCnt++;
				}
			}

			// 中間ファイル読み込み(処理対象外セッションID一覧ファイル作成用)
			// 入力ファイルにレコードがない場合はそのまま終了。
			if (sContMstList.size() == 0)
			{
				// 定期起動の時のみ集計対象セッションID一覧ファイルを作成する
				if (JFUStrConst.S_WEB_SHUK_KIDO_PARA_1.equals(strFreeParam1))
				{
					// ファイル出力オブジェクト生成
					JBSbatBusinessFileUtil obj =
							JFUBatCommon.createBusinessFileUtil(strFreeParam3, JFUStrConst.SJIS, JFUStrConst.S_LINE_SEPARAOR_LF, "");
					if (null != obj)
					{
						// ファイルオブジェクトをクローズ
						JFUBatCommon.closeBusinessFileUtil(obj);
					}
				}

				return null;
			}
		}

		// 定期起動の時のみ集計対象セッションID一覧ファイルを作成する
		if (JFUStrConst.S_WEB_SHUK_KIDO_PARA_1.equals(strFreeParam1))
		{
			// ファイル出力オブジェクト生成
			JBSbatBusinessFileUtil obj = JFUBatCommon.createBusinessFileUtil(strFreeParam3, JFUStrConst.SJIS, JFUStrConst.S_LINE_SEPARAOR_LF, "");
			// ファイルへデータ部を出力
			JFUBatCommon.printBusinessFileUtil(obj, ssidinput);
			if (null != obj)
			{
				// ファイルオブジェクトをクローズ
				JFUBatCommon.closeBusinessFileUtil(obj);
			}
		}

		super.logPrint.printBusinessErrorLog(EFUB0060AI, new String[] { WEB_MSKM_SHUK_RESULT_1, String.valueOf(iMskmInsCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0210AI, new String[] { WEB_MSKM_SHUK_RESULT_1, String.valueOf(iMskmUpdCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0060AI, new String[] { WEB_MSKM_SHUK_RESULT_2, String.valueOf(iActInsCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0210AI, new String[] { WEB_MSKM_SHUK_RESULT_2, String.valueOf(iActUpdCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0060AI, new String[] { WEB_MSKM_SHUK_RESULT_3, String.valueOf(iScrInsCnt) });
		super.logPrint.printBusinessErrorLog(EFUB0210AI, new String[] { WEB_MSKM_SHUK_RESULT_3, String.valueOf(iScrUpdCnt) });

		return null;
		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_FU_T_WEB_MSKM_UK_JSK.close();
		db_FU_M_WEBMK_SHUK_JKN.close();
		db_FU_T_WEBMK_SRLT.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_008(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_008);
	}

	/**
	 * SQLKEY(FU_SELECT_004)で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_004(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_004);
	}

	/**
	 * SQLKEY(FU_SELECT_005)で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_005(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_005);
	}

	/**
	 * SQLKEY(FU_SELECT_006)で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_006(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_006);
	}

	/**
	 * SQLKEY(FU_SELECT_007)で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_007(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_007);
	}

	/**
	 * SQLKEY(FU_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	集計対象申込年月日
	 *		 	Web申込集計種別コード
	 *		 	Web申込集計対象値
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeFU_T_WEBMK_SRLT_FU_SELECT_001(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_001);
	}

	/**
	 * SQLKEY(FU_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	集計対象申込年月日
	 *		 	Web申込集計種別コード
	 *		 	Web申込集計対象値
	 *		 	申込件数(ホームネット)
	 *		 	申込件数(ホームテレビ)
	 *		 	申込件数(ホーム電話)
	 *		 	申込件数(マンションネット)
	 *		 	申込件数(マンションテレビ)
	 *		 	申込件数(マンション電話)
	 *		 	申込件数(メゾンネット)
	 *		 	申込件数(メゾンテレビ)
	 *		 	申込件数(メゾン電話)
	 *		 	申込件数(モバイル)
	 *		 	申込件数(合計)
	 *		 	割引対象申込件数
	 *		 	画面別離脱件数
	 *		 	導線別離脱件数
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeFU_T_WEBMK_SRLT_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());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());
		paramList.setValue(param[10].toString());
		paramList.setValue(param[11].toString());
		paramList.setValue(param[12].toString());
		paramList.setValue(param[13].toString());
		paramList.setValue(param[14].toString());
		paramList.setValue(param[15].toString());
		paramList.setValue(param[16].toString());

		// DBアクセスを実行します
		db_FU_T_WEBMK_SRLT.executeBySqlDefine(paramList, FU_T_WEBMK_SRLT_FU_INSERT_001);
	}

	/**
	 * SQLKEY(FU_UPDATE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	申込件数(ホームネット)
	 *		 	申込件数(ホームテレビ)
	 *		 	申込件数(ホーム電話)
	 *		 	申込件数(マンションネット)
	 *		 	申込件数(マンションテレビ)
	 *		 	申込件数(マンション電話)
	 *		 	申込件数(メゾンネット)
	 *		 	申込件数(メゾンテレビ)
	 *		 	申込件数(メゾン電話)
	 *		 	申込件数(モバイル)
	 *		 	申込件数(合計)
	 *		 	割引対象申込件数
	 *		 	画面別離脱件数
	 *		 	導線別離脱件数
	 *		 	集計対象申込年月日
	 *		 	Web申込集計種別コード
	 *		 	Web申込集計対象値
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeFU_T_WEBMK_SRLT_FU_UPDATE_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());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());
		paramList.setValue(param[10].toString());
		paramList.setValue(param[11].toString());
		paramList.setValue(param[12].toString());
		paramList.setValue(param[13].toString());
		paramList.setValue(param[14].toString());
		paramList.setValue(param[15].toString());
		paramList.setValue(param[16].toString());

		// DBアクセスを実行します
		db_FU_T_WEBMK_SRLT.executeBySqlDefine(paramList, FU_T_WEBMK_SRLT_FU_UPDATE_001);
	}

	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * ファイル読み込み処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で読込ファイルディレクトリ(フルパス)を設定します。<br>
	 *
	 * 2.引数を元にファイル読込を行い、行をListへ格納します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param strFileDir    出力ディレクトリ(フルパス)。
	 * @return resultList   返却用List
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private static ArrayList<String> readFile(String strFileDir) throws Exception
	{
		ArrayList<String> resultList = new ArrayList<String>();

		// 外部出力ファイルパス
		JBSbatInputFileUtil inFile = null;

		try
		{
			inFile = new JBSbatInputFileUtil(strFileDir);
			inFile.setEncode(JFUStrConst.SJIS); // 文字コード
			inFile.setLine(JFUStrConst.S_LINE_SEPARAOR_LF); // 改行コード
			inFile.createReader();

			while (true)
			{
				String line = inFile.readLine();
				if (line == null)
				{
					break;
				}
				resultList.add(line);
			}
			return resultList;
		}
		catch (IOException e)
		{
			throw e;
		}
		finally
		{
			if (null != inFile)
			{
				// ファイルオブジェクトをクローズ
				inFile.close();
			}
		}
	}

	/**
	 * 申込集計処理結果格納マップを作成します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数を元に申込集計結果格納マップを作成します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param strMskmDoCd    集計対象年月日。
	 * @return mskm_shuk_map 初期化した申込集計対象処理格納mapを返却
	 * @throws Exception     業務サービス内で発生した例外全般。
	 */
	private String[][] mskmMapReset(String strShukDay) throws Exception
	{
		String[][] mskm_shuk_map = new String[8][14];

		// Web申込集計対象値の設定と初期化
		mskm_shuk_map[0][2] = S_W_NEW_KARI_MSKM; // Web申込集計対象値(WEB_11)設定
		mskm_shuk_map[1][2] = S_W_NEW_HON_MSKM; // Web申込集計対象値(WEB_12)設定
		mskm_shuk_map[2][2] = S_W_ADD_KARI_MSKM; // Web申込集計対象値(WEB_21)設定
		mskm_shuk_map[3][2] = S_W_ADD_HON_MSKM; // Web申込集計対象値(WEB_22)設定
		mskm_shuk_map[4][2] = S_R_NEW_KARI_MSKM; // Web申込集計対象値(量販店_11)設定
		mskm_shuk_map[5][2] = S_R_NEW_HON_MSKM; // Web申込集計対象値(量販店_12)設定
		mskm_shuk_map[6][2] = S_H_NEW_KARI_MSKM; // Web申込集計対象値(訪問販売_11)設定
		mskm_shuk_map[7][2] = S_H_NEW_HON_MSKM; // Web申込集計対象値(訪問販売_12)設定
		for (int i = 0; i < 8; i++)
		{
			mskm_shuk_map[i][0] = strShukDay; // 集計対象年月日
			mskm_shuk_map[i][1] = JFUStrConst.S_MSKM_SHUK_SBT_1; // Web申込集計種別コード
			mskm_shuk_map[i][3] = JFUStrConst.S_ZERO; // Web申込件数(ホームネット)
			mskm_shuk_map[i][4] = JFUStrConst.S_ZERO; // Web申込件数(ホームテレビ)
			mskm_shuk_map[i][5] = JFUStrConst.S_ZERO; // Web申込件数(ホーム電話)
			mskm_shuk_map[i][6] = JFUStrConst.S_ZERO; // Web申込件数(マンションネット)
			mskm_shuk_map[i][7] = JFUStrConst.S_ZERO; // Web申込件数(マンションテレビ)
			mskm_shuk_map[i][8] = JFUStrConst.S_ZERO; // Web申込件数(マンション電話)
			mskm_shuk_map[i][9] = JFUStrConst.S_ZERO; // Web申込件数(メゾンネット)
			mskm_shuk_map[i][10] = JFUStrConst.S_ZERO; // Web申込件数(メゾンテレビ)
			mskm_shuk_map[i][11] = JFUStrConst.S_ZERO; // Web申込件数(メゾン電話)
			mskm_shuk_map[i][12] = JFUStrConst.S_ZERO; // Web申込件数(モバイル)
			mskm_shuk_map[i][13] = JFUStrConst.S_ZERO; // Web申込件数(合計)
		}

		return mskm_shuk_map;
	}

	/**
	 * アクション毎集計処理結果格納マップを作成します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数を元にアクション毎集計結果格納マップを作成します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param strSysDate    システム日付。
	 * @param strShukDay    集計対象年月日。
	 * @return mskm_shuk_map 初期化した申込集計対象処理格納mapを返却
	 * @throws Exception     業務サービス内で発生した例外全般。
	 */
	private String[][] actionMapReset(String strSysDate, String strShukDay) throws Exception
	{
		// 2.アクション毎集計用2次元配列の作成
		// Web申込受付実績から集計対象範囲内の代理店コードの件数を取得する。
		JBSbatCommonDBInterface agent_CntList = new JBSbatCommonDBInterface();

		agent_CntList.setValue(strSysDate); // 画面表示年月日時分秒
		executeFU_T_WEB_MSKM_UK_JSK_FU_SELECT_004(agent_CntList.getList().toArray());
		JBSbatCommonDBInterface agent_Cntmap = db_FU_T_WEB_MSKM_UK_JSK.selectNext();

		// 取得できた要素数をカウントする(配列の大きさを確定)
		// 取得した件数*2件(仮申込、本申込用)+2件(紹介者キャンペーン格納用)の2件
		int iAgentCnt = Integer.parseInt(agent_Cntmap.getString("CNT")) * 2 + 2;

		// アクション毎集計用2次元配列を作成
		String[][] mskm_Act_map = new String[iAgentCnt][14];

		// Web申込受付実績から集計対象範囲内の代理店コード一覧を取得し2次元配列へ格納する。
		JBSbatCommonDBInterface agent_dbList = new JBSbatCommonDBInterface();
		JBSbatCommonDBInterface agent_map = null;
		agent_dbList.setValue(strSysDate); // 画面表示年月日時分秒
		executeFU_T_WEB_MSKM_UK_JSK_FU_SELECT_005(agent_dbList.getList().toArray());

		// テーブルより取得した代理店コードを配列へ格納
		int iAgentMapCnt = 0;
		for (agent_map = db_FU_T_WEB_MSKM_UK_JSK.selectNext(); null != agent_map; agent_map = db_FU_T_WEB_MSKM_UK_JSK.selectNext())
		{
			String strAgentCd = agent_map.getString("AGNT_CD");
			mskm_Act_map[iAgentMapCnt][2] = strAgentCd + S_AG_SKBT_1;
			mskm_Act_map[iAgentMapCnt + 1][2] = strAgentCd + S_AG_SKBT_2;
			iAgentMapCnt = iAgentMapCnt + 2;
		}
		// 紹介者コードを配列へ格納
		mskm_Act_map[iAgentCnt - 2][2] = S_INTR_CD + S_AG_SKBT_1;
		mskm_Act_map[iAgentCnt - 1][2] = S_INTR_CD + S_AG_SKBT_2;

		for (int i = 0; i < iAgentCnt; i++)
		{
			mskm_Act_map[i][0] = strShukDay; // 集計対象年月日
			mskm_Act_map[i][1] = JFUStrConst.S_MSKM_SHUK_SBT_2; // Web申込集計種別コード
			mskm_Act_map[i][3] = JFUStrConst.S_ZERO; // Web申込件数(ホームネット)
			mskm_Act_map[i][4] = JFUStrConst.S_ZERO; // Web申込件数(ホームテレビ)
			mskm_Act_map[i][5] = JFUStrConst.S_ZERO; // Web申込件数(ホーム電話)
			mskm_Act_map[i][6] = JFUStrConst.S_ZERO; // Web申込件数(マンションネット)
			mskm_Act_map[i][7] = JFUStrConst.S_ZERO; // Web申込件数(マンションテレビ)
			mskm_Act_map[i][8] = JFUStrConst.S_ZERO; // Web申込件数(マンション電話)
			mskm_Act_map[i][9] = JFUStrConst.S_ZERO; // Web申込件数(メゾンネット)
			mskm_Act_map[i][10] = JFUStrConst.S_ZERO; // Web申込件数(メゾンテレビ)
			mskm_Act_map[i][11] = JFUStrConst.S_ZERO; // Web申込件数(メゾン電話)
			mskm_Act_map[i][12] = JFUStrConst.S_ZERO; // Web申込件数(モバイル)
			mskm_Act_map[i][13] = JFUStrConst.S_ZERO; // Web申込件数(合計)
		}

		return mskm_Act_map;
	}

	/**
	 * 画面離脱数集計処理結果格納マップを作成します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数を元に画面離脱数集計結果格納マップを作成します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param strSysDate    システム日付。
	 * @param strShukDay    集計対象年月日。
	 * @return mskm_shuk_map 初期化した申込集計対象処理格納mapを返却
	 * @throws Exception     業務サービス内で発生した例外全般。
	 */
	private String[][] screenMapReset(String strSysDate, String strShukDay) throws Exception
	{
		// Web申込受付実績から集計対象範囲内の画面IDの件数を取得する。
		JBSbatCommonDBInterface screen_CntList = new JBSbatCommonDBInterface();
		JBSbatCommonDBInterface screen_Cntmap = null;
		screen_CntList.setValue(strSysDate); // 画面表示年月日時分秒
		executeFU_T_WEB_MSKM_UK_JSK_FU_SELECT_006(screen_CntList.getList().toArray());
		screen_Cntmap = db_FU_T_WEB_MSKM_UK_JSK.selectNext();

		// 取得できた要素数をカウントする(配列の大きさを確定)
		int iScreenCnt = Integer.parseInt(screen_Cntmap.getString("CNT"));

		// 取得した件数を元に画面毎集計用2次元配列を作成
		String[][] mskmScreenMap = new String[iScreenCnt][4];

		// Web申込受付実績から集計対象範囲内の画面ID一覧を取得し2次元配列へ格納する。
		JBSbatCommonDBInterface screen_dbList = new JBSbatCommonDBInterface();
		JBSbatCommonDBInterface screen_map = null;
		screen_dbList.setValue(strSysDate); // 画面表示年月日時分秒
		executeFU_T_WEB_MSKM_UK_JSK_FU_SELECT_007(screen_dbList.getList().toArray());

		int iScreenMapCnt = 0;
		for (screen_map = db_FU_T_WEB_MSKM_UK_JSK.selectNext(); null != screen_map; screen_map = db_FU_T_WEB_MSKM_UK_JSK.selectNext())
		{
			mskmScreenMap[iScreenMapCnt][0] = strShukDay; // 集計対象年月日
			mskmScreenMap[iScreenMapCnt][1] = JFUStrConst.S_MSKM_SHUK_SBT_3; // 集計対象種別コード
			mskmScreenMap[iScreenMapCnt][2] = screen_map.getString("SCREEN_ID"); // 画面ID
			mskmScreenMap[iScreenMapCnt][3] = S_ZERO_NUM_; // 画面ID別離脱件数
			iScreenMapCnt++;
		}

		return mskmScreenMap;
	}

	/**
	 * 申込集計処理(メイン処理)を実施します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数を元に申込集計結果レコードを作成します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param shuk_map           申込集計結果を格納するマップ。
	 * @param strMskmFlg         申込フラグ。
	 * @param strTaihiScid       退避済画面ID。
	 * @param strTaihiMskmDoCd   退避済申込導線コード。
	 * @param strTaihiAgentSbtCd 退避済代理店種別コード。
	 * @param strTaihiNetMskmFlg 退避済光ネット申込フラグ。
	 * @param strTaihiTelMskmFlg 退避済電話申込フラグ。
	 * @param strTaihiTvMskmFlg  退避済TV申込フラグ。
	 * @param strTaihiMobMskmFlg 退避済モバイル申込フラグ
	 * @return mskm_shuk_map     集計後の申込集計結果マップを返却
	 * @throws Exception         業務サービス内で発生した例外全般。
	 */
	private static String[][] mskmShuk(String[][] mskm_shuk_map, String strTaihiScid, String strTaihiMskmDoCd, String strTaihiAgentSbtCd,
			String strTaihiNetMskmFlg, String strTaihiTvMskmFlg, String strTaihiTelMskmFlg, String strTaihiMobMskmFlg, String strTaihiSvcTypeCd)
			throws Exception
	{
		// 申込フラグ設定
		String strMskmFlg = "9";

		// 1-1.申込フラグチェック
		strMskmFlg = mskmflgCheck(strMskmFlg, strTaihiScid, strTaihiMskmDoCd, strTaihiAgentSbtCd);

		// 1-2.Web申込集計(集計処理)
		// 申込フラグが"9"のときは集計を実施しない
		if (!S_MSKM_FLG.equals(strMskmFlg))
		{
			// 申込毎集計処理(フラグチェックによる件数カウント処理)を実施
			ArrayList<String> mskmshukList = mskmshuk(strTaihiNetMskmFlg, strTaihiTvMskmFlg, strTaihiTelMskmFlg, strTaihiMobMskmFlg, strTaihiSvcTypeCd);

			// 集計結果リスト参照し、申込集計登録用配列の要素3番目から12番目に反映する
			int j = 0;
			for (int i1 = 3; i1 <= 12; i1++)
			{
				int iMskmFlg = Integer.parseInt(strMskmFlg);

				// 集計結果リストを順に取得し、フラグ1が立っていれば、申込集計登録用配列の要素を1カウントアップする。
				if (JFUStrConst.S_ONE.equals(mskmshukList.get(j)))
				{
					mskm_shuk_map[iMskmFlg][i1] = String.valueOf(Integer.parseInt(mskm_shuk_map[iMskmFlg][i1]) + 1);
				}
				j++;
			}
			// IT1-2013-0000523 2013/2/28 takagawa
			// 合計値の算出
			int iMskmFlg = Integer.parseInt(strMskmFlg);
			mskm_shuk_map[iMskmFlg][13] = String.valueOf(Integer.parseInt(mskm_shuk_map[iMskmFlg][13]) + 1);
		}

		return mskm_shuk_map;
	}

	/**
	 * 申込集計チェック(レコードの仮申込or本申込、新規or追加、代理店種別の判定)を実施します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数を元にファイル出力を行う1レコードを作成します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param strScreenId    画面ID。
	 * @param strMskmDoCd    申込導線コード。
	 * @param strAgentSbtCd  代理店種別コード
	 * @return strMskmFlg    申込フラグ。
	 * @throws Exception     業務サービス内で発生した例外全般。
	 */
	private static String mskmflgCheck(String strMskmFlg, String strScreenId, String strMskmDoCd, String strAgentSbtCd) throws Exception
	{
		// 1-1.Web申込集計(集計対象確定)
		// IT2-2012-0002011 Otsuka 2012/12/13 start
		if (JFUStrConst.S_FUW00117.equals(strScreenId) && JFUStrConst.S_MSKM_KBN_1.equals(strMskmDoCd)
				&& JFUStrConst.S_AGENT_WEB_00.equals(strAgentSbtCd))
		{
			strMskmFlg = "0";
		}
		else if (JFUStrConst.S_FUW00122.equals(strScreenId) && JFUStrConst.S_MSKM_KBN_1.equals(strMskmDoCd)
				&& JFUStrConst.S_AGENT_WEB_00.equals(strAgentSbtCd))
		{
			strMskmFlg = "1";
		}
		else if (JFUStrConst.S_FUW00126.equals(strScreenId) && JFUStrConst.S_MSKM_KBN_1.equals(strMskmDoCd)
				&& JFUStrConst.S_AGENT_WEB_00.equals(strAgentSbtCd))
		{
			strMskmFlg = "1";
		}
		else if (JFUStrConst.S_FUW00117.equals(strScreenId) && JFUStrConst.S_MSKM_KBN_2.equals(strMskmDoCd)
				&& JFUStrConst.S_AGENT_WEB_00.equals(strAgentSbtCd))
		{
			strMskmFlg = "2";
		}
		else if (JFUStrConst.S_FUW00122.equals(strScreenId) && JFUStrConst.S_MSKM_KBN_2.equals(strMskmDoCd)
				&& JFUStrConst.S_AGENT_WEB_00.equals(strAgentSbtCd))
		{
			strMskmFlg = "3";
		}
		else if (JFUStrConst.S_FUW00126.equals(strScreenId) && JFUStrConst.S_MSKM_KBN_2.equals(strMskmDoCd)
				&& JFUStrConst.S_AGENT_WEB_00.equals(strAgentSbtCd))
		{
			strMskmFlg = "3";
		}
		else if (JFUStrConst.S_FUW00931.equals(strScreenId) && JFUStrConst.S_MSKM_KBN_1.equals(strMskmDoCd)
				&& JFUStrConst.S_AGENT_WEB_01.equals(strAgentSbtCd))
		{
			strMskmFlg = "4";
		}
		else if (JFUStrConst.S_FUW00932.equals(strScreenId) && JFUStrConst.S_MSKM_KBN_1.equals(strMskmDoCd)
				&& JFUStrConst.S_AGENT_WEB_01.equals(strAgentSbtCd))
		{
			strMskmFlg = "5";
		}
		else if (JFUStrConst.S_FUW00931.equals(strScreenId) && JFUStrConst.S_MSKM_KBN_1.equals(strMskmDoCd)
				&& JFUStrConst.S_AGENT_WEB_02.equals(strAgentSbtCd))
		{
			strMskmFlg = "6";
		}
		else if (JFUStrConst.S_FUW00932.equals(strScreenId) && JFUStrConst.S_MSKM_KBN_1.equals(strMskmDoCd)
				&& JFUStrConst.S_AGENT_WEB_02.equals(strAgentSbtCd))
		{
			strMskmFlg = "7";
		}
		// IT2-2012-0002011 Otsuka 2012/12/13 end
		return strMskmFlg;
	}

	/**
	 * 申込毎集計処理(フラグチェックによる件数カウント処理)を実施します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数を元に申込毎集計結果を作成します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param strNetMskmFlg   ネット申込フラグ。
	 * @param strTvMskmFlg    テレビ申込フラグ。
	 * @param strTelMskmFlg   電話申込フラグ。
	 * @param strMobMskmFlg   モバイル申込フラグ。
	 * @param strSvcTypeCd    サービスタイプ識別コード
	 * @return resultList     各種申込フラグのON,OFFを判定した結果をリスト形式で返却する。
	 * @throws Exception      業務サービス内で発生した例外全般。
	 */
	private static ArrayList<String> mskmshuk(String strNetMskmFlg, String strTvMskmFlg, String strTelMskmFlg, String strMobMskmFlg,
			String strSvcTypeCd) throws Exception
	{
		ArrayList<String> resultList = new ArrayList<String>();

		// ネット申込フラグが"1"のときはカウントアップを実施(1:ホーム申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strNetMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_1.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// テレビ申込フラグが"1"のときはカウントアップを実施(2:ホーム申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strTvMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_1.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// 電話申込フラグが"1"のときはカウントアップを実施(3:ホーム申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strTelMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_1.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// ネット申込フラグが"1"のときはカウントアップを実施(4:マンション申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strNetMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_3.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// テレビ申込フラグが"1"のときはカウントアップを実施(5:マンション申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strTvMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_3.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// 電話申込フラグが"1"のときはカウントアップを実施(6:マンション申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strTelMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_3.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// ネット申込フラグが"1"のときはカウントアップを実施(7:メゾン申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strNetMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_2.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// テレビ申込フラグが"1"のときはカウントアップを実施(8:メゾン申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strTvMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_2.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// 電話申込フラグが"1"のときはカウントアップを実施(9:メゾン申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strTelMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_2.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// モバイル申込フラグが"1"のときはカウントアップを実施(10:モバイル申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strMobMskmFlg))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}

		return resultList;
	}

	/**
	 * アクション毎集計処理(メイン処理)を実施します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数を元に申込集計結果レコードを作成します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param mskm_Act_map       申込集計結果を格納するマップ。
	 * @param iAgentCnt          ファイル読込レコード数。
	 * @param strTaihiScid       退避済画面ID。
	 * @param strTaihiMskmDoCd   退避済申込導線コード。
	 * @param strTaihiAgentSbtCd 退避済代理店種別コード。
	 * @param strTaihiNetMskmFlg 退避済光ネット申込フラグ。
	 * @param strTaihiTelMskmFlg 退避済電話申込フラグ。
	 * @param strTaihiTvMskmFlg  退避済TV申込フラグ。
	 * @param strTaihiMobMskmFlg 退避済モバイル申込フラグ
	 * @param strTaihiSvcTypeCd
	 * @param strInterCamFlg
	 * @return mskm_shuk_map     集計後の申込集計結果マップを返却
	 * @throws Exception     業務サービス内で発生した例外全般。
	 */
	private static String[][] actShuk(String[][] mskm_Act_map, int iAgentCnt, String strTaihiScid, String strTaihiAgentCd, String strTaihiNetMskmFlg,
			String strTaihiTvMskmFlg, String strTaihiTelMskmFlg, String strTaihiMobMskmFlg, String strTaihiSvcTypeCd, String strInterCamFlg)
			throws Exception
	{
		// 本申込フラグ
		String strHonMskmFlg = "9";

		// 申込フラグチェック
		strHonMskmFlg = actflgCheck(strHonMskmFlg, strTaihiScid);

		// 回線申込フラグチェック
		ArrayList<String> agentshukList = agentshuk(strTaihiNetMskmFlg, strTaihiTvMskmFlg, strTaihiTelMskmFlg, strTaihiMobMskmFlg, strTaihiSvcTypeCd);

		// 代理店コードがNULLでないのときのみ集計を実施
		if (0 != strTaihiAgentCd.length())
		{
			for (int i2 = 0; iAgentCnt > i2; i2++)
			{
				// 内部テーブル、先頭データが代理店コードと同じである場合は集計を実施
				if (mskm_Act_map[i2][2].startsWith(strTaihiAgentCd))
				{
					int iActNum = 0; // 配列参照位置特定用
					if ("1".equals(strHonMskmFlg))
					{
						iActNum = i2 + 1; // 本申込である場合は2レコード目を参照する
					}
					else
					{
						iActNum = i2; // 仮申込である場合は1レコード目を参照する
					}

					// 集計結果リスト(光ネット、マンション、メゾンの集計結果)を読込み、
					// フラグ1が立っていれば、アクション毎集計登録用配列の要素を1カウントアップする。
					int i3 = 3;
					for (int j = 0; j < 10; j++)
					{
						if (JFUStrConst.S_ONE.equals(agentshukList.get(j)))
						{
							mskm_Act_map[iActNum][i3] = String.valueOf(Integer.parseInt(mskm_Act_map[iActNum][i3]) + 1);
						}
						i3++;
					}
					// IT1-2013-0000523 2013/2/28 takagawa
					// 合計値の算出
					mskm_Act_map[iActNum][13] = String.valueOf(Integer.parseInt(mskm_Act_map[iActNum][13]) + 1);

					break; // 1レコード分の集計を終了後、ループを抜ける
				}
			}
		}
		// 2-2.照会キャンペーンの集計
		if ("1".equals(strInterCamFlg))
		{
			int iIntrNum = 0; // 配列参照位置特定用(照会キャンペーン)
			if ("0".equals(strHonMskmFlg))
			{
				iIntrNum = iAgentCnt - 2; // 照会キャンペーンの集計格納配列位置は最後の2行(仮申込)
			}
			else
			{
				iIntrNum = iAgentCnt - 1; // 照会キャンペーンの集計格納配列位置は最後の2行(本申込)
			}

			// 集計結果リスト(光ネット、マンション、メゾンの集計結果)を読込み、
			// フラグ1が立っていれば、アクション毎集計登録用配列の要素を1カウントアップする。
			int i4 = 3;
			for (int j = 0; j < 10; j++)
			{
				if (JFUStrConst.S_ONE.equals(agentshukList.get(j)))
				{
					mskm_Act_map[iIntrNum][i4] = String.valueOf(Integer.parseInt(mskm_Act_map[iIntrNum][i4]) + 1);
				}
				i4++;
			}

			// IT1-2013-0000523 2013/2/28 takagawa
			// 合計値の算出
			mskm_Act_map[iIntrNum][13] = String.valueOf(Integer.parseInt(mskm_Act_map[iIntrNum][13]) + 1);

		}

		return mskm_Act_map;
	}

	/**
	 * アクション毎集計チェック(仮申込or本申込の判定)を実施します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数を元にファイル出力を行う1レコードを作成します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param strHonMskmFlg  本申込フラグ。
	 * @param strScreenId    画面ID。
	 * @return strHonMskmFlg 本申込フラグ(チェック結果)
	 * @throws Exception     業務サービス内で発生した例外全般。
	 */
	private static String actflgCheck(String strHonMskmFlg, String strScreenId) throws Exception
	{
		if (JFUStrConst.S_FUW00117.equals(strScreenId))
		{
			strHonMskmFlg = "0"; // 仮申込
		}
		else if (JFUStrConst.S_FUW00931.equals(strScreenId))
		{
			strHonMskmFlg = "0"; // 仮申込
		}
		else if (JFUStrConst.S_FUW00122.equals(strScreenId))
		{
			strHonMskmFlg = "1"; // 本申込
		}
		else if (JFUStrConst.S_FUW00126.equals(strScreenId))
		{
			strHonMskmFlg = "1"; // 本申込
		}
		else if (JFUStrConst.S_FUW00156.equals(strScreenId))
		{
			strHonMskmFlg = "1"; // 本申込
		}
		else if (JFUStrConst.S_FUW00932.equals(strScreenId))
		{
			strHonMskmFlg = "1"; // 本申込
		}
		else if (JFUStrConst.S_FUW00943.equals(strScreenId))
		{
			strHonMskmFlg = "1"; // 本申込
		}

		return strHonMskmFlg;
	}

	/**
	 * アクション毎集計処理(フラグチェックによる件数カウント処理)を実施します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数を元に申込毎集計結果を作成します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param strNetMskmFlg   ネット申込フラグ。
	 * @param strTvMskmFlg    テレビ申込フラグ。
	 * @param strTelMskmFlg   電話申込フラグ。
	 * @param strMobMskmFlg   モバイル申込フラグ。
	 * @param strSvcTypeCd    サービスタイプ識別コード
	 * @return resultList     各種申込フラグのON,OFFを判定した結果をリスト形式で返却する。
	 * @throws Exception      業務サービス内で発生した例外全般。
	 */
	private static ArrayList<String> agentshuk(String strNetMskmFlg, String strTvMskmFlg, String strTelMskmFlg, String strMobMskmFlg,
			String strSvcTypeCd) throws Exception
	{
		ArrayList<String> resultList = new ArrayList<String>();

		// ネット申込フラグが"1"のときはカウントアップを実施(ホーム申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strNetMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_1.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// テレビ申込フラグが"1"のときはカウントアップを実施(ホーム申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strTvMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_1.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// 電話申込フラグが"1"のときはカウントアップを実施(ホーム申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strTelMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_1.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// ネット申込フラグが"1"のときはカウントアップを実施(マンション申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strNetMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_3.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// テレビ申込フラグが"1"のときはカウントアップを実施(マンション申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strTvMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_3.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// 電話申込フラグが"1"のときはカウントアップを実施(マンション申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strTelMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_3.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// ネット申込フラグが"1"のときはカウントアップを実施(メゾン申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strNetMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_2.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// テレビ申込フラグが"1"のときはカウントアップを実施(メゾン申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strTvMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_2.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// 電話申込フラグが"1"のときはカウントアップを実施(メゾン申込)
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strTelMskmFlg) && JFUStrConst.S_WEB_SHUK_MSKM_SBT_2.equals(strSvcTypeCd))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}
		// モバイル申込フラグが"1"のときはカウントアップを実施
		if (JFUStrConst.S_WEB_SHUK_MSKM_FLG_1.equals(strMobMskmFlg))
		{
			resultList.add(JFUStrConst.S_ONE);
		}
		else
		{
			resultList.add(JFUStrConst.S_ZERO);
		}

		return resultList;
	}

	/**
	 * 画面ID別離脱集計処理を実施します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数を元に申込集計結果レコードを作成します。<br>
	 *
	 * </pre>
	 * <p>
	 * @param mskmScreenMap
	 * @param strTaihiScid       退避済画面ID。
	 * @param iScreenCnt
	 * @param strShukDay
	 * @return
	 */
	private static String[][] scidShuk(String[][] mskmScreenMap, String strTaihiScid, int iScreenCnt, String strShukDay)
	{
		for (int i3 = 0; iScreenCnt > i3; i3++)
		{
			if (mskmScreenMap[i3][2].equals(strTaihiScid))
			{
				mskmScreenMap[i3][0] = strShukDay;
				mskmScreenMap[i3][3] = String.valueOf(Integer.parseInt(mskmScreenMap[i3][3]) + 1); // 画面IDの集計値格納
			}
		}

		return mskmScreenMap;
	}

	/**
	 * WEB申込集計結果に登録します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数をリストに格納します。<br>
	 *
	 * 2.executeFU_T_WEBMK_SRLT_FU_INSERT_001を実行します。<br>
	 * </pre>
	 * <p>
	 * @param mskm_shuk_map		集計対象格納map。
	 * @param icnt		  		集計時の申込件数。
	 * @param sFunkCd		  	集計時の集計パターンを識別するコード。
	 * @throws Exception		業務サービス内で発生した例外全般。
	 */
	private void insertFU_T_WEBMK_SRLT(String[][] shuk_map, int icnt, String sFunkCd) throws Exception
	{
		JBSbatCommonDBInterface dbList2 = new JBSbatCommonDBInterface();

		// WEB申込集計結果へ登録
		dbList2.setValue(shuk_map[icnt][0]); // 集計対象申込年月日
		dbList2.setValue(shuk_map[icnt][1]); // Web申込集計種別コード
		dbList2.setValue(shuk_map[icnt][2]); // Web申込集計対象値
		if (S_FUNK_CD_1.equals(sFunkCd))
		{
			dbList2.setValue(shuk_map[icnt][3]); // 申込件数(ホームネット)
			dbList2.setValue(shuk_map[icnt][4]); // 申込件数(ホームテレビ)
			dbList2.setValue(shuk_map[icnt][5]); // 申込件数(ホーム電話)
			dbList2.setValue(shuk_map[icnt][6]); // 申込件数(マンションネット)
			dbList2.setValue(shuk_map[icnt][7]); // 申込件数(マンションテレビ)
			dbList2.setValue(shuk_map[icnt][8]); // 申込件数(マンション電話)
			dbList2.setValue(shuk_map[icnt][9]); // 申込件数(メゾンネット)
			dbList2.setValue(shuk_map[icnt][10]); // 申込件数(メゾンテレビ)
			dbList2.setValue(shuk_map[icnt][11]); // 申込件数(メゾン電話)
			dbList2.setValue(shuk_map[icnt][12]); // 申込件数(モバイル)
			dbList2.setValue(shuk_map[icnt][13]); // 申込件数(合計)
			dbList2.setValue(null); // 割引対象申込件数
			dbList2.setValue(null); // 画面別離脱件数
			dbList2.setValue(null); // 導線別離脱件数
		}
		else if (S_FUNK_CD_2.equals(sFunkCd))
		{
			dbList2.setValue(shuk_map[icnt][3]); // 申込件数(ホームネット)
			dbList2.setValue(shuk_map[icnt][4]); // 申込件数(ホームテレビ)
			dbList2.setValue(shuk_map[icnt][5]); // 申込件数(ホーム電話)
			dbList2.setValue(shuk_map[icnt][6]); // 申込件数(マンションネット)
			dbList2.setValue(shuk_map[icnt][7]); // 申込件数(マンションテレビ)
			dbList2.setValue(shuk_map[icnt][8]); // 申込件数(マンション電話)
			dbList2.setValue(shuk_map[icnt][9]); // 申込件数(メゾンネット)
			dbList2.setValue(shuk_map[icnt][10]); // 申込件数(メゾンテレビ)
			dbList2.setValue(shuk_map[icnt][11]); // 申込件数(メゾン電話)
			dbList2.setValue(shuk_map[icnt][12]); // 申込件数(モバイル)
			dbList2.setValue(null); // 申込件数(合計)
			dbList2.setValue(shuk_map[icnt][13]); // 割引対象申込件数
			dbList2.setValue(null); // 画面別離脱件数
			dbList2.setValue(null); // 導線別離脱件数
		}
		else if (S_FUNK_CD_3.equals(sFunkCd))
		{
			dbList2.setValue(null); // 申込件数(ホームネット)
			dbList2.setValue(null); // 申込件数(ホームテレビ)
			dbList2.setValue(null); // 申込件数(ホーム電話)
			dbList2.setValue(null); // 申込件数(マンションネット)
			dbList2.setValue(null); // 申込件数(マンションテレビ)
			dbList2.setValue(null); // 申込件数(マンション電話)
			dbList2.setValue(null); // 申込件数(メゾンネット)
			dbList2.setValue(null); // 申込件数(メゾンテレビ)
			dbList2.setValue(null); // 申込件数(メゾン電話)
			dbList2.setValue(null); // 申込件数(モバイル)
			dbList2.setValue(null); // 申込件数(合計)
			dbList2.setValue(null); // 割引対象申込件数
			dbList2.setValue(shuk_map[icnt][3]); // 画面別離脱件数
			dbList2.setValue(null); // 導線別離脱件数
		}
		executeFU_T_WEBMK_SRLT_FU_INSERT_001(dbList2.getList().toArray());
	}

	/**
	 * WEB申込集計結果を更新します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数をリストに格納します。<br>
	 *
	 * 2.executeFU_T_WEBMK_SRLT_FU_UPDATE_001を実行します。<br>
	 * </pre>
	 * <p>
	 * @param shuk_map			集計対象格納map。
	 * @param icnt  			集計時の申込件数。
	 * @param sFunkCd		  	集計時の集計パターンを識別するコード。
	 * @throws Exception		業務サービス内で発生した例外全般。
	 */
	private void updateFU_T_WEBMK_SRLT(String[][] shuk_map, int icnt, String sFunkCd) throws Exception
	{
		JBSbatCommonDBInterface dbList2 = new JBSbatCommonDBInterface();

		// WEB申込集計結果へ更新
		if (sFunkCd.equals(S_FUNK_CD_1))
		{
			dbList2.setValue(shuk_map[icnt][3]); // 申込件数(ホームネット)
			dbList2.setValue(shuk_map[icnt][4]); // 申込件数(ホームテレビ)
			dbList2.setValue(shuk_map[icnt][5]); // 申込件数(ホーム電話)
			dbList2.setValue(shuk_map[icnt][6]); // 申込件数(マンションネット)
			dbList2.setValue(shuk_map[icnt][7]); // 申込件数(マンションテレビ)
			dbList2.setValue(shuk_map[icnt][8]); // 申込件数(マンション電話)
			dbList2.setValue(shuk_map[icnt][9]); // 申込件数(メゾンネット)
			dbList2.setValue(shuk_map[icnt][10]); // 申込件数(メゾンテレビ)
			dbList2.setValue(shuk_map[icnt][11]); // 申込件数(メゾン電話)
			dbList2.setValue(shuk_map[icnt][12]); // 申込件数(合計)
			dbList2.setValue(shuk_map[icnt][13]); // 申込件数(合計)
			dbList2.setValue(null); // 割引対象申込件数
			dbList2.setValue(null); // 画面別離脱件数
			dbList2.setValue(null); // 導線別離脱件数
		}
		else if (sFunkCd.equals(S_FUNK_CD_2))
		{
			dbList2.setValue(shuk_map[icnt][3]); // 申込件数(ホームネット)
			dbList2.setValue(shuk_map[icnt][4]); // 申込件数(ホームテレビ)
			dbList2.setValue(shuk_map[icnt][5]); // 申込件数(ホーム電話)
			dbList2.setValue(shuk_map[icnt][6]); // 申込件数(マンションネット)
			dbList2.setValue(shuk_map[icnt][7]); // 申込件数(マンションテレビ)
			dbList2.setValue(shuk_map[icnt][8]); // 申込件数(マンション電話)
			dbList2.setValue(shuk_map[icnt][9]); // 申込件数(メゾンネット)
			dbList2.setValue(shuk_map[icnt][10]); // 申込件数(メゾンテレビ)
			dbList2.setValue(shuk_map[icnt][11]); // 申込件数(メゾン電話)
			dbList2.setValue(shuk_map[icnt][12]); // 申込件数(モバイル)
			dbList2.setValue(null); // 申込件数(合計)
			dbList2.setValue(shuk_map[icnt][13]); // 割引対象申込件数
			dbList2.setValue(null); // 画面別離脱件数
			dbList2.setValue(null); // 導線別離脱件数
		}
		else if (S_FUNK_CD_3.equals(sFunkCd))
		{
			dbList2.setValue(null); // 申込件数(ホームネット)
			dbList2.setValue(null); // 申込件数(ホームテレビ)
			dbList2.setValue(null); // 申込件数(ホーム電話)
			dbList2.setValue(null); // 申込件数(マンションネット)
			dbList2.setValue(null); // 申込件数(マンションテレビ)
			dbList2.setValue(null); // 申込件数(マンション電話)
			dbList2.setValue(null); // 申込件数(メゾンネット)
			dbList2.setValue(null); // 申込件数(メゾンテレビ)
			dbList2.setValue(null); // 申込件数(メゾン電話)
			dbList2.setValue(null); // 申込件数(モバイル)
			dbList2.setValue(null); // 申込件数(合計)
			dbList2.setValue(null); // 割引対象申込件数
			dbList2.setValue(shuk_map[icnt][3]); // 画面別離脱件数
			dbList2.setValue(null); // 導線別離脱件数
		}
		dbList2.setValue(shuk_map[icnt][0]); // 集計対象申込年月日
		dbList2.setValue(shuk_map[icnt][1]); // Web申込集計種別コード
		dbList2.setValue(shuk_map[icnt][2]); // Web申込集計対象値
		executeFU_T_WEBMK_SRLT_FU_UPDATE_001(dbList2.getList().toArray());
	}

	/**
	 * WEB申込集計結果を更新します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数をリストに格納します。<br>
	 *
	 * 2.executeFU_T_WEBMK_SRLT_FU_SELECT_001を実行します。<br>
	 * </pre>
	 * <p>
	 * @param shuk_map		集計対象格納map。
	 * @param icnt  		集計時の申込件数。
	 * @return strCnt  	集計時の申込件数。
	 * @throws Exception	業務サービス内で発生した例外全般。
	 */
	private String selectFU_T_WEBMK_SRLT(String[][] shuk_map, int icnt) throws Exception
	{
		JBSbatCommonDBInterface dbList1 = new JBSbatCommonDBInterface();
		dbList1.setValue(shuk_map[icnt][0]); // 集計対象申込年月日
		dbList1.setValue(shuk_map[icnt][1]); // Web申込実績集計種別コード
		dbList1.setValue(shuk_map[icnt][2]); // Web申込実績集計対象値
		executeFU_T_WEBMK_SRLT_FU_SELECT_001(dbList1.getList().toArray());
		String strCnt = db_FU_T_WEBMK_SRLT.selectNext().getString("CNT");

		return strCnt;
	}
}
