/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKWebMskmInfoOput
*	ソースファイル名	：JBSbatKKWebMskmInfoOput.java
*	作成者				：富士通　
*	作成日				：2012年06月16日
*＜機能概要＞
*　ＷＥＢ申込情報出力処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/06/16   富士通		新規作成
*	v5.00.00	2013/09/05   FJ)高川	【OM-2013-0001685】同名ファイル作成防止対応
*	v5.00.01	2013/09/19   FJ)高川	【OM-2013-0002330】ファイル出力不備対応
*	v10.00.00	2014/07/24   FJ)宇野	【ANK-2137-00-00】提携住宅会社用WEB受付画面配置
*	v49.00.00	2020/04/09	 FJ)美濃原	【ANK-3781-00-00】文書管理サブシステムリプレイスに伴うURL変更およびバッチ改修
*	v72.00.07	2024/10/15	 FJ)森下	【ANK-4577-07-00】eo光ネット「シンプルプラン」追加対応(Step2) 仕変7
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCRBatCommon;
import eo.business.common.JKKBatCommon;
import eo.business.util.table.JBSbatKK_M_AGNT;
import eo.business.util.table.JBSbatKK_T_MSKM_DMEN;
import eo.business.util.table.JBSbatKK_T_MSKM_DMEN_DTL;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JKKStringUtil;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JBSbatBusinessFileUtil;

/**
* WEB申込情報出力 <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKWebMskmInfoOput extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(申込断面)*/
	private static final String D_TBL_NAME_KK_T_MSKM_DMEN = "KK_T_MSKM_DMEN";

	/** テーブル(申込断面明細)*/
	private static final String D_TBL_NAME_KK_T_MSKM_DMEN_DTL = "KK_T_MSKM_DMEN_DTL";

	// ANK-4577-07-00 ADD START
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";
	// ANK-4577-07-00 ADD END

	/** SQL定義キー(KK_SELECT_002)*/
	private static final String KK_T_MSKM_DMEN_KK_SELECT_002 = "KK_SELECT_002";

	/** SQL定義キー(KK_UPDATE_001)*/
	private static final String KK_T_MSKM_DMEN_DTL_KK_UPDATE_001 = "KK_UPDATE_001";

	// ANK-4577-07-00 ADD START
	/** SQL定義キー(KK_SELECT_390)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_390 = "KK_SELECT_390";
	// ANK-4577-07-00 ADD END

	/** テーブルアクセスクラス(申込断面)*/
	private JBSbatSQLAccess db_KK_T_MSKM_DMEN = null;

	/** テーブルアクセスクラス(申込断面明細)*/
	private JBSbatSQLAccess db_KK_T_MSKM_DMEN_DTL = null;

	// ANK-4577-07-00 ADD START
	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
	// ANK-4577-07-00 ADD END
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * ファイル区切り文字
	 */
	private static final String FILE_KUGIRI = System.getProperty("file.separator");

	/**
	 * 指定エンコード
	 */
	private static final String DEFAULT_ENCODE = "MS932";

	/**
	 * 1行内の各項目を区別するための区切り文字
	 */
	private static final String KUGIRIMOJI = ",";

	/**
	 * 改行コード
	 */
	private static final String KAIGYO = "\r\n";

	/**
	 * ファイル名のプレフィックス
	 */
	private static final String PREFIX_FILE_NM = "WEB_";

	/**
	 * 指定拡張子　データファイル用
	 */
	private static final String EXT_DATA_FILE = ".csv";

// ANK-3781-00-00 DEL START
//	/**
//	 * 指定拡張子　件数ファイル用
//	 */
//	private static final String EXT_COUNT_FILE = ".cnt";
//
//	/**
//	 * 指定拡張子　フラグファイル用
//	 */
//	private static final String EXT_FLG_FILE = ".flg";
// ANK-3781-00-00 DEL END

	/**
	 * 業務パラメータ　申込中断判定用経過時間(分)のID
	 */
	private static final String MSKM_STP_JUDGE_TIME_ID = "KK_MKM_STP_JDG_TIME";

	/**
	 * 申込断面種別コード名　取得キー
	 */
	private static final String MSKM_DMEN_SBT_NM = "MSKM_DMEN_SBT_NM";

	/**
	 * 取扱コード用申込チャネルコード名　取得キー
	 */
	private static final String TRAT_CD_YO_MKM_CHANNEL_NM = "TRAT_CD_YO_MKM_CHANNEL_NM";

	/**
	 * 取扱コード分類コード名　取得キー
	 */
	private static final String TRAT_CD_BRI_NM = "TRAT_CD_BRI_NM";

	/**
	 * 取扱コード分類詳細コード名　取得キー
	 */
	private static final String TRAT_CD_BRI_DTL_NM = "TRAT_CD_BRI_DTL_NM";

	/**
	 * 申込受付種別コード名　取得キー
	 */
	private static final String MKM_UK_SBT_NM = "MKM_UK_SBT_NM";

	/**
	 * 申込書種別コード名　取得キー
	 */
	private static final String MSKMSHO_SBT_NM = "MSKMSHO_SBT_NM";

	/**
	 * 新規追加識別フラグ名　取得キー
	 */
	private static final String NEW_ADD_SKBT_FLG_NM = "NEW_ADD_SKBT_FLG_NM";

	/**
	 * オーダリングサービス選択コード　取得キー
	 */
	private static final String ORDERING_SVC_CHOICE_NM = "ORDERING_SVC_CHOICE_NM";

	/**
	 * 件数　取得キー
	 */
	private static final String CNT = "CNT";

	/**
	 * 申込断面種別コード　1:仮申込
	 */
	private static final String MSKM_DMEN_SBT_CD_KARIMSKM = "1";
	
	/**
	 * 申込断面種別コード　2:本申込
	 */
	private static final String MSKM_DMEN_SBT_CD_HONMSKM = "2";
	
	/**
	 * 申込断面明細番号　01
	 */
	private static final String MSKM_DMEN_DTL_NO_1 = "01";

	/**
	 * 申込本登録手続識別コード　1:本申込のみ
	 */
	private static final String MSKM_HON_ADD_TTDK_SKBT_CD_HON = "1";

	/**
	 * 申込本登録手続識別コード　2:仮申込＋本申込
	 */
	private static final String MSKM_HON_ADD_TTDK_SKBT_CD_KARIHON = "2";

	/**
	 * 申込本登録手続識別コード　3:仮申込
	 */
	private static final String MSKM_HON_ADD_TTDK_SKBT_CD_KARI = "3";

	/**
	 * コード種別　申込本登録手続識別コード
	 */
	private static final String CD_SBT_MSKM_HON_ADD_TTDK_SKBT_CD = "CD01419";

// ANK-3781-00-00 DEL START
//	/**
//	 * 外部システムインターフェースID　WEB申込情報　KKIFE205
//	 */
//	private static final String IF_ID = "KKIFE205";
// ANK-3781-00-00 DEL END
	
	/**
	 * 申込受付種別コード　0:住宅専用WEB
	 */
	private static final String MKM_UK_SBT_CD_HOUSWEB = "0";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_MSKM_DMEN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DMEN);
		db_KK_T_MSKM_DMEN_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DMEN_DTL);
		// ANK-4577-07-00 ADD START
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		// ANK-4577-07-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		// ANK-3781-00-00 ADD START
		int outputDataCount = 0;
		boolean isNormalEnd = false;
		// ANK-3781-00-00 ADD END

		// (1) WEB申込情報ファイル保存パス取得
		// シェルで${GAIBU_SEND_DIR_KK}/KKIFE205を設定
		String path = super.commonItem.getFreeItem();
		commonItem.getLogPrint().printDebugLog("WEB申込情報ファイル保存パス:" + path);

		if (path == null || "".equals(path))
		{
			// EKKB0310JW	%1%の%2%に不正があります。（%3%）
			String messageId = JPCBatchMessageConstant.EKKB0310JW;
			String[] logParam = new String[]{"シェル引数", "設定", "WEB申込情報ファイル保存パス未定義"};
			super.logPrint.printBusinessErrorLog(messageId, logParam);
			super.commonItem.setErrorCount(1);
			throw new JBSbatBusinessError();
		}
		else
		{
			File outputPath = checkDirExist(path);
			if (outputPath == null)
			{
				// 存在しない場合
				// EKKB0290AW	%1%が存在しませんでした。
				String messageId = JPCBatchMessageConstant.EKKB0290AW;
				String[] logParam = new String[]{"指定されたパス(" + path + ")"};
				super.logPrint.printBusinessErrorLog(messageId, logParam);
				super.commonItem.setErrorCount(1);
				throw new JBSbatBusinessError();
			}
			super.logPrint.printDebugLog("WEB申込情報ファイルが配置されるディレクトリーパス:" + outputPath);
		}

		// (2) 業務パラメータチェック
		// 申込中断判定用経過時間(分)
		String mskmStpJudgeTime = null;
		try
		{
			mskmStpJudgeTime = JKKBatCommon.getWorkParamSetteValue(commonItem, MSKM_STP_JUDGE_TIME_ID);
		}
		catch (Exception e)
		{
			// EKKB0210CE	%1%テーブルに%2%が存在しません。
			String messageId = JPCBatchMessageConstant.EKKB0210CE;
			String[] logParam = new String[]{"業務パラメータ管理", MSKM_STP_JUDGE_TIME_ID};
			super.logPrint.printBusinessErrorLog(messageId, logParam);
			super.commonItem.setErrorCount(1);
			throw new JBSbatBusinessError();
		}

		if (mskmStpJudgeTime == null || "".equals(mskmStpJudgeTime.trim()))
		{
			// EKKB0310JW	%1%の%2%に不正があります。（%3%）
			String messageId = JPCBatchMessageConstant.EKKB0310JW;
			String[] logParam = new String[]{"業務パラメータ", "申込中断判定用経過時間(分)", "値:" + mskmStpJudgeTime};
			super.logPrint.printBusinessErrorLog(messageId, logParam);
			super.commonItem.setErrorCount(1);
			throw new JBSbatBusinessError();
		}

		// 数値チェック
		if(!(JKKBatCommon.isHannkakuSuuji1(mskmStpJudgeTime)))
		{
			// EKKB0310JW	%1%の%2%に不正があります。（%3%）
			String messageId = JPCBatchMessageConstant.EKKB0310JW;
			String[] logParam = new String[]{"業務パラメータ", "申込中断判定用経過時間(分)", "値:" + mskmStpJudgeTime};
			super.logPrint.printBusinessErrorLog(messageId, logParam);
			super.commonItem.setErrorCount(1);
			throw new JBSbatBusinessError();
		}

		super.logPrint.printDebugLog("申込中断判定用経過時間(分):" + mskmStpJudgeTime);

		// ファイル出力オブジェクト
		JBSbatBusinessFileUtil dataFileObj = null;		// データファイル
// ANK-3781-00-00 DEL START
//		JBSbatBusinessFileUtil countFileObj = null;		// 件数ファイル
//		JBSbatBusinessFileUtil flgFileObj = null;		// フラグファイル
// ANK-3781-00-00 DEL END

		String dataFilePath = null;
// ANK-3781-00-00 DEL START
//		String countFilePath = null;
//		String flgFilePath = null;
// ANK-3781-00-00 DEL END

		try
		{
			// 出力ファイル生成
			String sysYYMMDDHH = JKKBatCommon.getSysDateTime().substring(2, 14);	// ファイル名に付けるYYMMDDHHMMSS

			// データファイル
			dataFilePath = path + FILE_KUGIRI  + PREFIX_FILE_NM + sysYYMMDDHH +  EXT_DATA_FILE;
			dataFileObj = JKKBatCommon.createBusinessFileUtil(dataFilePath, DEFAULT_ENCODE, KAIGYO, KUGIRIMOJI);

// ANK-3781-00-00 DEL START
//			// 件数ファイル
//			countFilePath = path + FILE_KUGIRI  + PREFIX_FILE_NM + sysYYMMDDHH +  EXT_COUNT_FILE;
//			countFileObj = JKKBatCommon.createBusinessFileUtil(countFilePath, DEFAULT_ENCODE, KAIGYO, KUGIRIMOJI);
//
//			// フラグファイル
//			flgFilePath = path + FILE_KUGIRI  + PREFIX_FILE_NM + sysYYMMDDHH +  EXT_FLG_FILE;
//			flgFileObj = JKKBatCommon.createBusinessFileUtil(flgFilePath, DEFAULT_ENCODE, KAIGYO, KUGIRIMOJI);
// ANK-3781-00-00 DEL END

			// パラメータ用日時取得
			// (システム日時−「申込中断判定用経過時間(分)」で算出した日時14桁)
			String paramDtm = getParamDtm(mskmStpJudgeTime);

			// (3) 申込断面データ抽出
			String[] params1 = new String[] {
					opeDate, opeDate, opeDate, opeDate,
					opeDate, opeDate, opeDate, opeDate,
					opeDate, opeDate, opeDate, opeDate,
					opeDate, opeDate, opeDate, opeDate,
					paramDtm,
					opeDate, opeDate, opeDate
			};
			executeKK_T_MSKM_DMEN_KK_SELECT_002(params1);
			List<JBSbatCommonDBInterface> selectedDataList = getSelectedDataList(db_KK_T_MSKM_DMEN);

// ANK-3781-00-00 DEL START
//			int outputDataCount = 0;
// ANK-3781-00-00 DEL END
			Boolean honFlg = false;		// 本申込判定フラグ

			if (selectedDataList != null)
			{
// ANK-3781-00-00 MOD START
//				JCRBatCommon.printShoriCountLog(commonItem, "WEB申込情報出力　処理件数", selectedDataList.size());
				JCRBatCommon.printShoriCountLog(commonItem, "WEB申込情報出力　入力件数", selectedDataList.size());
// ANK-3781-00-00 MOD END

				for (int i = 0; i < selectedDataList.size(); i++)
				{
					// (4) データ1件読込
					JBSbatCommonDBInterface dnmnData = selectedDataList.get(i);
					String mskmDmenDtlNo = dnmnData.getString(JBSbatKK_T_MSKM_DMEN_DTL.MSKM_DMEN_DTL_NO);	// 申込断面明細番号
					String mskmDmenSbtCd = dnmnData.getString(JBSbatKK_T_MSKM_DMEN_DTL.MSKM_DMEN_SBT_CD);	// 申込断面種別コード
					BigDecimal cnt = dnmnData.getBigDecimal(CNT);											// 件数
					

					// (5) 出力対象判定
					// ANK-2137-00-00 20140724 ADD STRAT
					// 申込受付種別コードが「0:住宅専用WEB」の場合、次データの処理をする
					if (MKM_UK_SBT_CD_HOUSWEB.equals(dnmnData.getString(JBSbatKK_T_MSKM_DMEN.MKM_UK_SBT_CD)))
					{
						continue;
					}
					// ANK-2137-00-00 20140724 ADD END
					
					if (cnt != null && cnt.intValue() >= 2)
					{
						// 件数が2件であった場合
						if (MSKM_DMEN_DTL_NO_1.equals(mskmDmenDtlNo))
						{
							// 申込断面明細番号"01"のレコードであった場合
							if (MSKM_DMEN_SBT_CD_HONMSKM.equals(mskmDmenSbtCd))
							{
								// 本申込であった場合
								honFlg = true;
							}
							continue;
						}
					}

					// (6) 出力項目編集
					ArrayList<String> outputDataList = makeOneLineData(dnmnData, honFlg);
					
					honFlg = false;

					// データファイル書き込み
					JKKBatCommon.printBusinessFileUtil(dataFileObj, outputDataList);

					outputDataCount++;

					String mskmshoNo = dnmnData.getString(JBSbatKK_T_MSKM_DMEN_DTL.MSKMSHO_NO);		// 申込書番号

					// (7) 出力済フラグ更新
					String[] updParam = new String[] {JKKBatCommon.getSysDateTimeStamp(), batchUserId, mskmshoNo};
					executeKK_T_MSKM_DMEN_DTL_KK_UPDATE_001(updParam);
				}

// ANK-3781-00-00 DEL START
//				// (8) ファイル出力
//				// 件数ファイル出力
//				ArrayList<String> countDataList = new ArrayList<String>();
//				countDataList.add(addDblQut(Integer.toString(outputDataCount)));	// 件数
//				JKKBatCommon.printBusinessFileUtil(countFileObj, countDataList);
// ANK-3781-00-00 DEL END
// ANK-3781-00-00 ADD START
				JCRBatCommon.printShoriCountLog(commonItem, "WEB申込情報出力　処理件数", outputDataCount);
// ANK-3781-00-00 ADD END
			}
			else
			{
// ANK-3781-00-00 ADD START
				JCRBatCommon.printShoriCountLog(commonItem, "WEB申込情報出力　入力件数", 0);
// ANK-3781-00-00 ADD END
				JCRBatCommon.printShoriCountLog(commonItem, "WEB申込情報出力　処理件数", 0);
			}

			// ファイルクローズ
			JKKBatCommon.closeBusinessFileUtil(dataFileObj);	// データファイル
// ANK-3781-00-00 ADD START
			isNormalEnd = true;
// ANK-3781-00-00 ADD END

// ANK-3781-00-00 DEL START
//			JKKBatCommon.closeBusinessFileUtil(countFileObj);	// 件数ファイル
//			JKKBatCommon.closeBusinessFileUtil(flgFileObj);		// フラグファイル
//
//			// (9) ファイル送信
//			ArrayList<String> fileList = new ArrayList<String>();
//			fileList.add(dataFilePath);		// データファイル
//			fileList.add(countFilePath);	// 件数ファイル
//			fileList.add(flgFilePath);		// フラグファイル
//			// FTP
//			boolean ftpRes = putFtp(fileList);
//
//			if (ftpRes == true)
//			{
//				// コミット
//				super.commit();
//			}
//			else
//			{
//				// FTP転送エラーの場合
//				commonItem.getConnection().rollback();
//				super.commonItem.setErrorCount(1);
//				throw new JBSbatBusinessError();
//			}
// ANK-3781-00-00 DEL END
		}
		catch(Exception e)
		{
			// 想定外の例外発生
			commonItem.getConnection().rollback();
			throw e;
		}
		finally
		{
			ArrayList<String> fileList = new ArrayList<String>();

// ANK-3781-00-00 DEL START
//			// データファイル
//			if (dataFileObj != null)
//			{
//				JKKBatCommon.closeBusinessFileUtil(dataFileObj);
//			}
//			if (dataFilePath != null)
//			{
//				fileList.add(dataFilePath);
//			}
//
//			// 件数ファイル
//			if (countFileObj != null)
//			{
//				JKKBatCommon.closeBusinessFileUtil(countFileObj);
//			}
//			if (countFilePath != null)
//			{
//				fileList.add(countFilePath);
//			}
//
//			// フラグファイル
//			if (flgFileObj != null)
//			{
//				JKKBatCommon.closeBusinessFileUtil(flgFileObj);
//			}
//			if (flgFilePath != null)
//			{
//				fileList.add(flgFilePath);
//			}
//
//			// ファイル削除
//			deleteFile(fileList);
// ANK-3781-00-00 DEL END

// ANK-3781-00-00 ADD START
			// データファイル
			if (dataFileObj != null)
			{
				JKKBatCommon.closeBusinessFileUtil(dataFileObj);
			}
			if (dataFilePath != null)
			{
				// 「対象データ無し」又は「エラー」の場合は、ファイルを作成しない。
				if (outputDataCount == 0 || !isNormalEnd)
				{
					fileList.add(dataFilePath);
				}
				// ファイル削除
				deleteFile(fileList);
			}
// ANK-3781-00-00 ADD END
		}

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * ディレクトリー存在チェック
	 * @param path パス
	 * @throws Exception 例外
	 * @return ファイルオブジェクト(ディレクトリーでない場合はnullを返す)
	 */
	private static File checkDirExist(String path) throws Exception
	{
		File file = new File(path);
		if (!(file.isDirectory()))
		{
			file = null;
		}
		return file;
	}

	/**
	 * パラメータ用日時取得
	 * (システム日時−「申込中断判定用経過時間(分)」で算出した日時14桁)
	 * @param mskmStpJudgeTime 申込中断判定用経過時間(分)
	 * @return パラメータ用日時
	 * @throws ParseException 例外
	 */
	private static String getParamDtm(String mskmStpJudgeTime) throws ParseException
	{
		String sysDtm = JKKBatCommon.getSysDateTime();
		SimpleDateFormat form = new SimpleDateFormat("yyyyMMddHHmmss");
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(form.parse(sysDtm));
		calendar.add(Calendar.MINUTE, (-1 * Integer.parseInt(mskmStpJudgeTime)));
		return form.format(calendar.getTime());
	}

	/**
	 * SELECTされたデータのListを取得する。
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.JBSbatSQLAccessオブジェクトのselectNext()で1行分のデータを取得する。<br>
	 *
	 * 2.データが存在する場合、戻り値のListに追加する。<br>
	 * 
	 * ※ 1,2を繰り返して結果を返す。データが無ければnullを返す。<br>
	 * </pre>
	 * <p>
	 * @param tableObject JBSbatSQLAccessオブジェクト
	 * @return 取得結果データのList
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private static List<JBSbatCommonDBInterface> getSelectedDataList(JBSbatSQLAccess tableObject)  throws Exception
	{
		// 引数チェック
		if (tableObject == null)
		{
			return null;
		}

		// 戻り値のList
		List<JBSbatCommonDBInterface> selectedDataList = new ArrayList<JBSbatCommonDBInterface>();

		// データ1行の取得
		JBSbatCommonDBInterface selectedData = tableObject.selectNext();
		while (selectedData != null)
		{
			selectedDataList.add(selectedData);
			// データ1行の取得
			selectedData = tableObject.selectNext();
		}

		return selectedDataList.size() == 0 ? null : selectedDataList;
	}

	/**
	 * 出力データ1行生成
	 * @param dnmnData 断面データ
	 * @return 生成した1行分のリスト
	 * @throws Exception 例外
	 */
	private ArrayList<String> makeOneLineData(JBSbatCommonDBInterface dnmnData, Boolean honFlg) throws Exception
	{
		String mskmshoNo = dnmnData.getString(JBSbatKK_T_MSKM_DMEN_DTL.MSKMSHO_NO);							// 申込書番号
		String mskmDmenSbtCd = dnmnData.getString(JBSbatKK_T_MSKM_DMEN_DTL.MSKM_DMEN_SBT_CD);				// 申込断面種別コード
		String mskmDmenSbtNm = dnmnData.getString(MSKM_DMEN_SBT_NM);										// 申込断面種別名
		String mskmDmenDtlStkuDtm = dnmnData.getString(JBSbatKK_T_MSKM_DMEN_DTL.MSKM_DMEN_DTL_STKU_DTM);	// 申込断面明細取得年月日時分秒
		String mskmDmenDtlChgDtm = dnmnData.getString(JBSbatKK_T_MSKM_DMEN_DTL.MSKM_DMEN_DTL_CHG_DTM);		// 申込断面明細変更年月日時分秒

		String tratCdYoMkmChannelCd = dnmnData.getString(JBSbatKK_M_AGNT.TRAT_CD_YO_MKM_CHANNEL_CD);		// 取扱コード用申込チャネルコード
		String tratCdYoMkmChannelNm = dnmnData.getString(TRAT_CD_YO_MKM_CHANNEL_NM);						// 取扱コード用申込チャネルコード名
		String tratCdBriCd = dnmnData.getString(JBSbatKK_M_AGNT.TRAT_CD_BRI_CD);							// 取扱コード分類コード
		String tratCdBriNm = dnmnData.getString(TRAT_CD_BRI_NM);											// 取扱コード分類コード名
		String tratCdBriDtlCd = dnmnData.getString(JBSbatKK_M_AGNT.TRAT_CD_BRI_DTL_CD);						// 取扱コード分類詳細コード
		String tratCdBriDtlNm = dnmnData.getString(TRAT_CD_BRI_DTL_NM);										// 取扱コード分類詳細コード名

		String mkmUkSbtCd = dnmnData.getString(JBSbatKK_T_MSKM_DMEN.MKM_UK_SBT_CD);							// 申込受付種別コード
		String mkmUkSbtNm = dnmnData.getString(MKM_UK_SBT_NM);												// 申込受付種別名
		String mskmshoSbtCd = dnmnData.getString(JBSbatKK_T_MSKM_DMEN.MSKMSHO_SBT_CD);						// 申込書種別コード
		String mskmshoSbtNm = dnmnData.getString(MSKMSHO_SBT_NM);											// 申込書種別名
		String newAddSkbtFlg = dnmnData.getString(JBSbatKK_T_MSKM_DMEN.NEW_ADD_SKBT_FLG);					// 新規追加識別フラグ
		String newAddSkbtNm = dnmnData.getString(NEW_ADD_SKBT_FLG_NM);										// 新規追加識別フラグ名
		String orderingSvcChoiceCd = dnmnData.getString(JBSbatKK_T_MSKM_DMEN.ORDERING_SVC_CHOICE_CD);		// オーダリングサービス選択コード
		String orderingSvcChoiceNm = dnmnData.getString(ORDERING_SVC_CHOICE_NM);							// オーダリングサービス選択コード名
		BigDecimal cnt = dnmnData.getBigDecimal(CNT);														// 件数

		String mskmHonAddTtdkSkbtCd = null;		// 申込本登録手続識別コード

		// (a) 申込本登録手続識別コード判定
		if (MSKM_DMEN_SBT_CD_KARIMSKM.equals(mskmDmenSbtCd))
		{
			// 仮申込の場合
			mskmHonAddTtdkSkbtCd = MSKM_HON_ADD_TTDK_SKBT_CD_KARI;				// 仮申込
		}
		else
		{
			// 本申込の場合
			if (cnt != null && cnt.intValue() >= 2)
			{
				if (honFlg)
				{
					// 申込断面明細番号"01"のレコードが本申込であった場合
					mskmHonAddTtdkSkbtCd = MSKM_HON_ADD_TTDK_SKBT_CD_HON;			// 本申込
				}
				else
				{
					// 申込断面明細番号"01"のレコードが仮申込であった場合
					mskmHonAddTtdkSkbtCd = MSKM_HON_ADD_TTDK_SKBT_CD_KARIHON;		// 仮申込＋本申込
				}
			}
			else
			{
				mskmHonAddTtdkSkbtCd = MSKM_HON_ADD_TTDK_SKBT_CD_HON;			// 本申込
			}
		}

		// 申込本登録手続識別コードから名称取得
		// 申込本登録手続識別コード名
		String mskmHonAddTtdkSkbtNm = JKKBatCommon.getCdDivName(commonItem, CD_SBT_MSKM_HON_ADD_TTDK_SKBT_CD, mskmHonAddTtdkSkbtCd);

		// ANK-4577-07-00 ADD START
		// 料金コース取得
		String pcrsCd = getPcrsCd(mskmshoNo);
		// ANK-4577-07-00 ADD END

		// (b) 出力レコード1行生成
		ArrayList<String> outputDataList = new ArrayList<String>();

		outputDataList.add(addDblQut(mskmshoNo));				// 申込書番号
		outputDataList.add(addDblQut(mskmDmenSbtCd));			// 申込断面種別コード
		outputDataList.add(addDblQut(mskmDmenSbtNm));			// 申込断面種別名

		outputDataList.add(addDblQut(mskmHonAddTtdkSkbtCd));	// 申込本登録手続識別コード
		outputDataList.add(addDblQut(mskmHonAddTtdkSkbtNm));	// 申込本登録手続識別コード名
		outputDataList.add(addDblQut(mskmDmenDtlStkuDtm));		// 申込断面明細取得年月日時分秒
		outputDataList.add(addDblQut(mskmDmenDtlChgDtm));		// 申込断面明細変更年月日時分秒

		outputDataList.add(addDblQut(tratCdYoMkmChannelCd));	// 取扱コード用申込チャネルコード
		outputDataList.add(addDblQut(tratCdYoMkmChannelNm));	// 取扱コード用申込チャネルコード名
		outputDataList.add(addDblQut(tratCdBriCd));				// 取扱コード分類コード
		outputDataList.add(addDblQut(tratCdBriNm));				// 取扱コード分類コード名
		outputDataList.add(addDblQut(tratCdBriDtlCd));			// 取扱コード分類詳細コード
		outputDataList.add(addDblQut(tratCdBriDtlNm));			// 取扱コード分類詳細コード名

		outputDataList.add(addDblQut(mkmUkSbtCd));				// 申込受付種別コード
		outputDataList.add(addDblQut(mkmUkSbtNm));				// 申込受付種別名
		outputDataList.add(addDblQut(mskmshoSbtCd));			// 申込書種別コード
		outputDataList.add(addDblQut(mskmshoSbtNm));			// 申込書種別名
		outputDataList.add(addDblQut(newAddSkbtFlg));			// 新規追加識別フラグ
		outputDataList.add(addDblQut(newAddSkbtNm));			// 新規追加識別フラグ名
		outputDataList.add(addDblQut(orderingSvcChoiceCd));		// オーダリングサービス選択コード
		outputDataList.add(addDblQut(orderingSvcChoiceNm));		// オーダリングサービス選択コード名
		// ANK-4577-07-00 ADD START
		outputDataList.add(addDblQut(pcrsCd));					// 料金コースコード
		// ANK-4577-07-00 ADD END

		return outputDataList;
	}

	/**
	 * ダブルクォーテーション付加処理<br>
	 * @param targetData 対象文字列
	 * @return String 付加済み文字列
	 * @throws Exception 例外
	 */
	private static String addDblQut(String targetData) throws Exception
	{
		String resultStr = null;
		if(targetData == null)
		{
			resultStr = "\"\"";
		}
		else
		{
			resultStr = new StringBuilder().append("\"").append(targetData.trim()).append("\"").toString();
		}
		return resultStr;
	}

// ANK-3781-00-00 DEL START
//	/**
//	 * FTP送信
//	 * @param fileList 転送するファイルパスのリスト
//	 * @return 転送結果
//	 */
//	private boolean putFtp(ArrayList<String> fileList)
//	{
//		HashMap<String, Object> ftpResMap = new HashMap<String, Object>();
//		// ファイル送信
//		boolean ftpRes = JKKBatCommon.putFTP(commonItem, fileList, IF_ID, ftpResMap);
//		if (ftpRes != true)
//		{
//			// FTP失敗
//
//			// エラー区分の取得
//			String errKbn = ftpResMap.get(JKKBatConst.FTP_ERR_KBN).toString();
//
//			// 接続エラーの場合
//			if(JKKBatConst.FTP_ERR_KBN_CONNECT_ERR.equals(errKbn))
//			{
//				HashMap<?, ?> connectErrMap = (HashMap<?, ?>)ftpResMap.get(JKKBatConst.FTP_CONNECT_ERR);
//				if(!Boolean.valueOf(connectErrMap.get(JKKBatConst.FTP_CONNECT_ERR_FLG).toString()))
//				{
//					// EKKB0200CE	%1%のファイル転送に失敗しました。(%2%)
//					super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0200CE,
//						new String[]{"WEB申込情報", connectErrMap.get(JKKBatConst.FTP_CONNECT_ERR_MESSAGE).toString()});
//				}
//			}
//			// ファイルエラーの場合
//			else if(JKKBatConst.FTP_ERR_KBN_FILE_ERR.equals(errKbn))
//			{
//				ArrayList<?> fileErrList = (ArrayList<?>)ftpResMap.get(JKKBatConst.FTP_FILE_ERR);
//				for(int i = 0; i < fileErrList.size(); i++)
//				{
//					HashMap<?, ?> fileErrMap = (HashMap<?, ?>)fileErrList.get(i);
//					if(!Boolean.valueOf(fileErrMap.get(JKKBatConst.FTP_FILE_ERR_FLG).toString()))
//					{
//						// EKKB0200CE	%1%のファイル転送に失敗しました。(%2%)
//						super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0200CE,
//							new String[]{"WEB申込情報", fileErrMap.get(JKKBatConst.FTP_FILE_ERR_MESSAGE).toString()});
//					}
//				}
//			}
//		}
//		return ftpRes;
//	}
// ANK-3781-00-00 DEL END

	/**
	 * ファイル削除
	 * @param pathList 削除対象ファイルパスのリスト
	 */
	private void deleteFile(List<String> pathList)
	{
		if (pathList != null)
		{
			for (int i = 0; i < pathList.size(); i++)
			{
				new File(pathList.get(i)).delete();
			}
		}
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_MSKM_DMEN.close();
		db_KK_T_MSKM_DMEN_DTL.close();
		// ANK-4577-07-00 ADD START
		db_KK_T_SVC_KEI.close();
		// ANK-4577-07-00 ADD END
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_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 executeKK_T_MSKM_DMEN_KK_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());
		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());
		paramList.setValue(param[17].toString());
		paramList.setValue(param[18].toString());
		paramList.setValue(param[19].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DMEN.selectBySqlDefine(paramList, KK_T_MSKM_DMEN_KK_SELECT_002);
	}

	/**
	 * SQLKEY(KK_UPDATE_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 executeKK_T_MSKM_DMEN_DTL_KK_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());

		// DBアクセスを実行します
		db_KK_T_MSKM_DMEN_DTL.executeBySqlDefine(paramList, KK_T_MSKM_DMEN_DTL_KK_UPDATE_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	// ANK-4577-07-00 ADD START
	/**
	 * 料金コースコード取得処理
	 * 
	 * @param mskmshoNo 申込書番号
	 * @return pcrsCd 料金コースコード
	 * @throws Exception
	 */
	private String getPcrsCd(String mskmshoNo) throws Exception
	{
		String pcrsCd = null;
		if (JKKStringUtil.isNullBlank(mskmshoNo))
		{
			mskmshoNo = new String();
		}
		
		String[] params1 = new String[] {mskmshoNo, opeDate};
		executeKK_T_SVC_KEI_KK_SELECT_390(params1);
		
		List<JBSbatCommonDBInterface> selectedDataList = getSelectedDataList(db_KK_T_SVC_KEI);
		
		if (selectedDataList != null &&  selectedDataList.size() > 0)
		{
			JBSbatCommonDBInterface svcKeiData = selectedDataList.get(0);
			pcrsCd = svcKeiData.getString(JBSbatKK_T_SVC_KEI.PCRS_CD);	// 料金コースコード
		}
		
		return pcrsCd;
	}

	/**
	 * SQLKEY(KK_SELECT_390)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	申込書番号
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KK_SELECT_390(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_390);
	}
	// ANK-4577-07-00 ADD END
}
