/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCRChgMskmshoSohuFin
*	ソースファイル名	：JBSbatCRChgMskmshoSohuFin.java
*	作成者				：富士通　
*	作成日				：2012年07月10日
*＜機能概要＞
*　変更申込書類送付完了処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/07/10   富士通		新規作成
*	v6.00.00	2013/11/26   FJ）斉藤(諭)	ANK-1637-00-00対応
*	v7.00.00	2014/02/14   FJ）斉藤(諭)	ANK-1940-00-00対応
*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCRBatCommon;
import eo.business.util.table.JBSbatCR_T_TAIOKRK_DTL;
import eo.business.util.table.JBSbatCR_T_TAIO_KIROK;
import eo.common.constant.JCRStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCCFrameworkException;
import eo.common.util.JCRUtilCommon;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.application.JCCbatFrameworkException;
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;

/**
* 変更申込書類送付完了処理 <p>
*<BR>
* @author 富士通
*/
public class JBSbatCRChgMskmshoSohuFin extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(対応記録)*/
	private static final String D_TBL_NAME_CR_T_TAIO_KIROK = "CR_T_TAIO_KIROK";

	/** テーブル(資料送付記録)*/
	private static final String D_TBL_NAME_CR_T_ATICLE_SOHU_KRK = "CR_T_ATICLE_SOHU_KRK";

	/** テーブル(対応記録明細)*/
	private static final String D_TBL_NAME_CR_T_TAIOKRK_DTL = "CR_T_TAIOKRK_DTL";

	/** テーブル(ＭＹＢＯＸ)*/
	private static final String D_TBL_NAME_CR_T_MYBOX = "CR_T_MYBOX";

	/** テーブル(キューＢＯＸ)*/
	private static final String D_TBL_NAME_CR_T_QUE_BOX = "CR_T_QUE_BOX";

	/** SQL定義キー(CR_UPDATE_005)*/
	private static final String CR_T_ATICLE_SOHU_KRK_CR_UPDATE_005 = "CR_UPDATE_005";

	/** SQL定義キー(CR_UPDATE_010)*/
	private static final String CR_T_TAIO_KIROK_CR_UPDATE_010 = "CR_UPDATE_010";

	/** SQL定義キー(CR_SELECT_006)*/
	private static final String CR_T_TAIOKRK_DTL_CR_SELECT_006 = "CR_SELECT_006";

	/** SQL定義キー(CR_UPDATE_002)*/
	private static final String CR_T_MYBOX_CR_UPDATE_002 = "CR_UPDATE_002";

	/** SQL定義キー(CR_UPDATE_002)*/
	private static final String CR_T_QUE_BOX_CR_UPDATE_002 = "CR_UPDATE_002";

	/** テーブルアクセスクラス(対応記録)*/
	private JBSbatSQLAccess db_CR_T_TAIO_KIROK = null;

	/** テーブルアクセスクラス(資料送付記録)*/
	private JBSbatSQLAccess db_CR_T_ATICLE_SOHU_KRK = null;

	/** テーブルアクセスクラス(対応記録明細)*/
	private JBSbatSQLAccess db_CR_T_TAIOKRK_DTL = null;

	/** テーブルアクセスクラス(ＭＹＢＯＸ)*/
	private JBSbatSQLAccess db_CR_T_MYBOX = null;

	/** テーブルアクセスクラス(キューＢＯＸ)*/
	private JBSbatSQLAccess db_CR_T_QUE_BOX = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 変更申込書類送付完了ファイル名の先頭文字 */
	private static final String FILENAME_PRE_FIX = "CRIFE029_";

	/** 変更申込書類送付完了分キャンセルリスト名の先頭文字 */
	private static final String CANCEL_FILENAME_PRE_FIX = "CRIFE041_";

	/** バックアップファイル配置先 */
	private static final String BK_PATH = "/bk";

	/** 件数ファイル名の後部文字列 */
	private static final String CNT_FILE_POST_FIX = ".CNT";

	/** フラグファイル名の後部文字列 */
	private static final String FLG_FILE_POST_FIX = ".FLG";

	/** 問合せIDの桁数　10 */
	private static final int TOIAWASE_ID_BYTE_SU = 10;

	/** 資料送付番号の桁数　10 */
	private static final int ATICLE_SOHU_NO_ID_BYTE_SU = 10;

	/** 資料送付記録番号の桁数　10 */
	private static final int ATICLE_SOHU_KIROK_NO_ID_BYTE_SU = 10;

	/** 対応記録明細番号の桁数 */
	private static final int KETA_TAIO_KIROK_DTL_NO = 10;

	/** YYYYMMDDHHmmの桁数 */
	private static final int KETA_YYYYMMDDHHMM = 12;

	/**
	 * 付属ファイル情報
	 * 共通部品:JCRBatCommon.getHuzokuFileTypeShitei()で使用
	 */
	private static final String[][] HUZOKU_FILE_INFO_ARRAY =
	{
		{CNT_FILE_POST_FIX, JCRBatCommon.KEY_KENSU_FILE},
		{FLG_FILE_POST_FIX, JCRBatCommon.KEY_FLAG_FILE}
	};

	private static String CANCEL_LIST_PATH = null;

	/** 外部システムインターフェースID　変更申込書類送付完了分キャンセルリスト　CRIFE041 */
	private static final String IF_ID = "CRIFE041";

	/** 指定拡張子　データファイル用 */
	private static final String EXT_DATA_FILE = ".csv";

	/** 指定拡張子　件数ファイル用 */
	private static final String EXT_COUNT_FILE = ".cnt";

	/** 指定拡張子　フラグファイル用 */
	private static final String EXT_FLG_FILE = ".flg";

	/** FTPエラー区分 */
	public static final String FTP_ERR_KBN = "ERR_KBN";

	/** FTPエラー区分（接続エラー） */
	public static final String FTP_ERR_KBN_CONNECT_ERR = "1";

	/** FTPエラー区分（ファイルエラー） */
	public static final String FTP_ERR_KBN_FILE_ERR = "2";

	/** FTP接続エラー（HashMap） */
	public static final String FTP_CONNECT_ERR = "CONNECT_ERR";

	/** FTPファイルエラー（HashMap） */
	public static final String FTP_FILE_ERR = "FILE_ERR";

	/** FTP接続エラーフラグ */
	public static final String FTP_CONNECT_ERR_FLG = "ERR_FLG";

	/** FTP接続エラーメッセージ */
	public static final String FTP_CONNECT_ERR_MESSAGE = "ERR_MESSAGE";

	/** FTPファイルエラーフラグ */
	public static final String FTP_FILE_ERR_FLG = "ERR_FLG";

	/** FTPファイルエラーメッセージ */
	public static final String FTP_FILE_ERR_MESSAGE = "ERR_MESSAGE";

	/** ファイル名に付けるタイムスタンプ（前回タイムスタンプ保持用） */
	public String svSysYYYYMMDDHHMMSS;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CR_T_TAIO_KIROK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TAIO_KIROK);
		db_CR_T_ATICLE_SOHU_KRK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_ATICLE_SOHU_KRK);
		db_CR_T_TAIOKRK_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TAIOKRK_DTL);
		db_CR_T_MYBOX = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_MYBOX);
		db_CR_T_QUE_BOX = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_QUE_BOX);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		// (1) シェル引数取得
		File[] filePathArray = getFilePathFromShellParam();

		// 変更申込書類送付完了ファイル配置パス
		File filePath = filePathArray[0];

		// バックアップファイル配置パス
		File bkPath = filePathArray[1];

		// 変更申込書類送付完了取込異常データファイル配置パス
		File abnormalPath = filePathArray[2];

		// (2) ファイル読込処理
		// 対象ディレクトリー内の全ファイル取得
		File[] csvFiles = filePath.listFiles();

		int tgtFileCount = 0;

		for (int i = 0; i < csvFiles.length; i++)
		{
			File csvFile = csvFiles[i];
			String csvFileName = csvFile.getName().toUpperCase();

			if (csvFileName.startsWith(FILENAME_PRE_FIX) && csvFileName.endsWith(JCRStrConst.EXT_CSV))
			{
				// (a) 変更申込書類送付完了ファイル読込
				// ファイル名が、「CRIFE029_」で始まり「.CSV」で終わっているものが対象
				super.logPrint.printDebugLog("対象ファイル名:" + csvFile.getName());

				// (b) チェックファイル読込
				// 付属ファイル確認(件数ファイル、フラグファイルの存在確認)
				Map<String, File> huzokuFileMap = JCRBatCommon.getHuzokuFileTypeShitei(commonItem, csvFile, filePath, HUZOKU_FILE_INFO_ARRAY);

				File countFile = null;		// 件数ファイル
				File flgFile = null;		// フラグファイル

				if (huzokuFileMap.size() < HUZOKU_FILE_INFO_ARRAY.length)
				{
					continue;
				}
				else
				{
					countFile = huzokuFileMap.get(JCRBatCommon.KEY_KENSU_FILE);
					flgFile = huzokuFileMap.get(JCRBatCommon.KEY_FLAG_FILE);
					++tgtFileCount;
				}

				// ファイル内容をListに格納
				List<String> dataList = getDataListFromFile(commonItem, csvFile);

				commonItem.getLogPrint().printDebugLog("データ件数:" + dataList.size());

				// 処理件数ログ出力
				JCRBatCommon.printShoriCountLog(commonItem, "データ件数(" + csvFile.getName() + ")", dataList.size());

				boolean isErrorFile = false;

				// (c) 件数ファイルチェック
				if (JCRBatCommon.isCountFileCheckOK(commonItem, csvFile, dataList.size(), countFile) == false)
				{
					// ログ出力
					isErrorFile = true;
					commonItem.getLogPrint().printDebugLog("データ件数不一致:" + csvFile.getName());
				}

				// (3) データチェック
				if (isErrorFile == false)
				{
					if (checkData(dataList) == false)
					{
						isErrorFile = true;
					}
				}

				if (isErrorFile)
				{
					// エラーがある場合
					// ファイルを変更申込書類送付完了取込異常データファイル配置パスに複写
					JCRUtilCommon.copyFile(csvFile, abnormalPath);
					JCRUtilCommon.copyFile(countFile, abnormalPath);
					JCRUtilCommon.copyFile(flgFile, abnormalPath);

					// ファイルをバックアップファイル配置パスに複写
					JCRUtilCommon.moveFile(csvFile, bkPath);
					JCRUtilCommon.moveFile(countFile, bkPath);
					JCRUtilCommon.moveFile(flgFile, bkPath);

					continue;
				}

				// (4) データ更新
				ArrayList<ArrayList<String>> cancelDataList = updateData(dataList);

				// (5) ファイル送信
				boolean ftpRes = true;
				if (cancelDataList != null && cancelDataList.size() > 0)
				{
					ftpRes = sendFile(CANCEL_LIST_PATH, cancelDataList);
				}

				if (ftpRes == true)
				{
					// (6) コミット
					super.commit();
				}
				else
				{
					// FTP転送エラーの場合
					commonItem.getConnection().rollback();
					super.commonItem.setErrorCount(1);
					throw new JBSbatBusinessError();
				}

				// (7) ファイル移動
				JCRUtilCommon.moveFile(csvFile, bkPath);
				JCRUtilCommon.moveFile(countFile, bkPath);
				JCRUtilCommon.moveFile(flgFile, bkPath);
			}
		}

		// 処理件数ログ出力
		JCRBatCommon.printShoriCountLog(commonItem, "対象ファイル数", tgtFileCount);

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * シェル引数から関連ファイルパス取得
	 * @return シェル引数から取得したファイル情報を格納した配列
	 * 		１：変更申込書類送付完了ファイル配置パス
	 * 		２：変更申込書類送付完了取込異常データファイル配置パス
	 * 		３：変更申込書類送付完了分キャンセルリスト配置パス
	 * @throws Exception 例外
	 */
	private File[] getFilePathFromShellParam() throws Exception
	{
		// シェルで${GAIBU_RECEIVE_DIR_CR}/CRIFE029;${MID_DIR_CR}/CRIFE029/abnormal;${GAIBU_SEND_DIR_CR}/CRIFE041を設定

		// シェル引数に;(セミコロン)区切りで３つのパスがあること
		String freeParam = super.commonItem.getFreeItem();
		if (freeParam == null)
		{
			// シェル引数がnullの場合
			// ECRB0190KW	%1%の内容が正しくありません。（%2%）
			String messageId = JPCBatchMessageConstant.ECRB0190KW;
			String[] logParam = new String[]{"シェル引数", "変更申込書類送付完了ファイル配置パス未定義"};
			super.logPrint.printBusinessErrorLog(messageId, logParam);
			super.commonItem.setErrorCount(1);
			throw new JBSbatBusinessError();
		}

		String[] freeParams = freeParam.split(";");
		if (freeParams == null || freeParams.length != 3)
		{
			// シェル引数をカンマ区切りで分割した項目数が３でない場合
			// ECRB0190KW	%1%の内容が正しくありません。（%2%）
			String messageId = JPCBatchMessageConstant.ECRB0190KW;
			String[] logParam = new String[]{"シェル引数", "変更申込書類送付完了ファイル配置パス"};
			super.logPrint.printBusinessErrorLog(messageId, logParam);
			super.commonItem.setErrorCount(1);
			throw new JBSbatBusinessError();
		}

		// 変更申込書類送付完了ファイル配置パスチェック
		String filePath = freeParams[0];
		File dataFilePath = null;

		super.logPrint.printDebugLog("変更申込書類送付完了ファイル配置パス:" + filePath);

		if (filePath == null || "".equals(filePath))
		{
			// ECRB0190KW	%1%の内容が正しくありません。（%2%）
			String messageId = JPCBatchMessageConstant.ECRB0190KW;
			String[] logParam = new String[]{"シェル引数", "変更申込書類送付完了ファイル配置パス未定義"};
			super.logPrint.printBusinessErrorLog(messageId, logParam);
			super.commonItem.setErrorCount(1);
			throw new JBSbatBusinessError();
		}
		else
		{
			dataFilePath = JCRUtilCommon.checkDirExist(filePath);
			if (dataFilePath == null)
			{
				// 存在しない場合
				// ECRB0160KW:指定されたパスが存在しません。(%1%)
				String messageId = JPCBatchMessageConstant.ECRB0160KW;
				String[] logParam = new String[]{filePath};
				super.logPrint.printBusinessErrorLog(messageId, logParam);
				super.commonItem.setErrorCount(1);
				throw new JBSbatBusinessError();
			}
		}

		// バックアップファイル配置パスチェック
		String bkPath = freeParams[0] + BK_PATH;
		File bkFilePath = null;

		super.logPrint.printDebugLog("バックアップファイル配置パス:" + bkPath);

		bkFilePath = JCRUtilCommon.checkDirExist(bkPath);
		if (bkFilePath == null)
		{
			// 存在しない場合
			// ECRB0160KW:指定されたパスが存在しません。(%1%)
			String messageId = JPCBatchMessageConstant.ECRB0160KW;
			String[] logParam = new String[]{bkPath};
			super.logPrint.printBusinessErrorLog(messageId, logParam);
			super.commonItem.setErrorCount(1);
			throw new JBSbatBusinessError();
		}

		// 変更申込書類送付完了取込異常データファイル配置パスチェック
		String abnormalPath = freeParams[1];
		File abnormalFilePath = null;

		super.logPrint.printDebugLog("変更申込書類送付完了取込異常データファイル配置パス:" + abnormalPath);

		if (abnormalPath == null || "".equals(abnormalPath))
		{
			// ECRB0190KW	%1%の内容が正しくありません。（%2%）
			String messageId = JPCBatchMessageConstant.ECRB0190KW;
			String[] logParam = new String[]{"シェル引数", "変更申込書類送付完了取込異常データファイル配置パス未定義"};
			super.logPrint.printBusinessErrorLog(messageId, logParam);
			super.commonItem.setErrorCount(1);
			throw new JBSbatBusinessError();
		}
		else
		{
			abnormalFilePath = JCRUtilCommon.checkDirExist(abnormalPath);
			if (abnormalFilePath == null)
			{
				// 存在しない場合
				// ECRB0160KW:指定されたパスが存在しません。(%1%)
				String messageId = JPCBatchMessageConstant.ECRB0160KW;
				String[] logParam = new String[]{abnormalPath};
				super.logPrint.printBusinessErrorLog(messageId, logParam);
				super.commonItem.setErrorCount(1);
				throw new JBSbatBusinessError();
			}
		}

		// 変更申込書類送付完了分キャンセルリスト配置パスチェック
		String cancelListPath = freeParams[2];
		File cancelListFilePath = null;

		super.logPrint.printDebugLog("変更申込書類送付完了分キャンセルリスト配置パス:" + cancelListPath);

		if (cancelListPath == null || "".equals(cancelListPath))
		{
			// ECRB0190KW	%1%の内容が正しくありません。（%2%）
			String messageId = JPCBatchMessageConstant.ECRB0190KW;
			String[] logParam = new String[]{"シェル引数", "変更申込書類送付完了分キャンセルリスト配置パス未定義"};
			super.logPrint.printBusinessErrorLog(messageId, logParam);
			super.commonItem.setErrorCount(1);
			throw new JBSbatBusinessError();
		}
		else
		{
			cancelListFilePath = JCRUtilCommon.checkDirExist(cancelListPath);
			if (cancelListFilePath == null)
			{
				// 存在しない場合
				// ECRB0160KW:指定されたパスが存在しません。(%1%)
				String messageId = JPCBatchMessageConstant.ECRB0160KW;
				String[] logParam = new String[]{cancelListPath};
				super.logPrint.printBusinessErrorLog(messageId, logParam);
				super.commonItem.setErrorCount(1);
				throw new JBSbatBusinessError();
			}
		}
		CANCEL_LIST_PATH = cancelListPath;

		return new File[] {dataFilePath, bkFilePath, abnormalFilePath, cancelListFilePath};
	}

	/**
	 * ファイル内容を格納したListを取得する<P>
	 * 空白行は除く
	 * @param commonItem 共通情報
	 * @param file 対象ファイル
	 * @return ファイル内容を格納したList
	 * @throws IOException 例外
	 */
	private List<String> getDataListFromFile(JBSbatCommonItem commonItem, File file) throws IOException
	{
		BufferedReader br = null;
		List<String> dataList = new ArrayList<String>();

		try
		{
			// 読込みファイル
			br = new BufferedReader(new InputStreamReader(new FileInputStream(file), JCRStrConst.DEFAULT_ENCODE));

			// ファイル内容を全行読込
			String data = br.readLine();				// 1行読込み

			while (data != null)
			{
				if (!("".equals(data.trim())))
				{
					dataList.add(data);
				}

				data = br.readLine();					// 1行読込み
			}

			return dataList;

		}
		catch (IOException ioe)
		{
			super.logPrint.printDebugLog(ioe.getMessage());
			throw ioe;
		}
		finally
		{
			// 読込みファイルクローズ
			if (br != null)
			{
				try
				{
					br.close();
				}
				catch (IOException ioe)
				{
					super.logPrint.printDebugLog("br close error");
				}
			}
		}
	}

	/**
	 * データチェック
	 * @param dataList 対象データのList
	 * @return チェック結果 エラーがある場合:false
	 * @throws IOException 例外
	 */
	private boolean checkData(List<String> dataList) throws Exception
	{
		boolean isOK = true;

		for (int i = 0; i < dataList.size(); i++)
		{
			// (a) 行読込
			String oneLineData = dataList.get(i);
			String[] datas = oneLineData.split(",");

			// (b) 読込データチェック
			if (datas.length != 3)
			{
				// 項目数エラー
				// ECRB0180KW	項目数が正しくありません。（%1%）
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0180KW, new String[] {(i + 1) + "行目"});
				isOK = false;
			}
			else
			{
				// 問合せIDチェック
				if (checkToiawaseId(i + 1, datas[0]) == false)
				{
					isOK = false;
				}

				// 資料送付番号チェック
				if (checkAticleSohuNo(i + 1, datas[1]) == false)
				{
					isOK = false;
				}

				// 資料送付記録番号チェック
				if (checkAticleSohuKirokNo(i + 1, datas[2]) == false)
				{
					isOK = false;
				}
			}
		}
		return isOK;
	}

	/**
	 * 問合せIDチェック
	 * @param rowCount 行数
	 * @param toiawaseId 問合せID
	 * @return チェック結果 エラーがある場合:false
	 * @throws Exception 例外
	 */
	private boolean checkToiawaseId(int rowCount, String toiawaseId) throws Exception
	{
		return checkId(rowCount, toiawaseId, TOIAWASE_ID_BYTE_SU, "問合せID");
	}

	/**
	 * 資料送付番号チェック
	 * @param rowCount 行数
	 * @param aticleSohuNo 資料送付番号
	 * @return チェック結果 エラーがある場合:false
	 * @throws Exception 例外
	 */
	private boolean checkAticleSohuNo(int rowCount, String aticleSohuNo) throws Exception
	{
		return checkId(rowCount, aticleSohuNo, ATICLE_SOHU_NO_ID_BYTE_SU, "資料送付番号");
	}

	/**
	 * 資料送付記録番号チェック
	 * @param rowCount 行数
	 * @param aticleSohuKirokNo 資料送付記録番号
	 * @return チェック結果 エラーがある場合:false
	 * @throws Exception 例外
	 */
	private boolean checkAticleSohuKirokNo(int rowCount, String aticleSohuKirokNo) throws Exception
	{
		return checkId(rowCount, aticleSohuKirokNo, ATICLE_SOHU_KIROK_NO_ID_BYTE_SU, "資料送付記録番号");
	}

	/**
	 * 問合せID、資料送付番号、資料送付記録番号の共通チェック
	 * @param rowCount 行数
	 * @param id 対象項目の値
	 * @param checkByteSu チェックするバイト数
	 * @param komokuNm 項目名
	 * @return チェック結果 エラーがある場合:false
	 * @throws Exception 例外
	 */
	private boolean checkId(int rowCount, String id, int checkByteSu, String komokuNm) throws Exception
	{
		boolean isOK = true;

		if (id == null)
		{
			// 必須チェックエラー
			// ECRB0370TW	%1%の必須チェックエラー
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0370TW, new String[] {rowCount + "行目:" + komokuNm});
			isOK = false;
		}
		else
		{
			String idWk = id.replaceAll("\"", "");
			if ("".equals(idWk))
			{
				// 必須チェックエラー
				// ECRB0370TW	%1%の必須チェックエラー
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0370TW, new String[] {rowCount + "行目:" + komokuNm});
				isOK = false;
			}
			else
			{
				int byteLength = JCRUtilCommon.getByteLength(idWk);
				if (byteLength != checkByteSu)
				{
					// 桁数チェック
					// ECRB0200TW	%1%のバイト数が正しくありません。(条件:%2% 値:%3%)
					super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0200TW,
														new String[] {rowCount + "行目:" + komokuNm, checkByteSu + "byte", String.valueOf(byteLength)});
					isOK = false;
				}
			}
		}
		return isOK;
	}

	/**
	 * データ更新
	 * @param dataList 対象データのList
	 * @return キャンセルデータList（変更申込書類送付完了分キャンセルリスト出力用）
	 * @throws Exception 例外
	 */
	private ArrayList<ArrayList<String>> updateData(List<String> dataList) throws Exception
	{
		ArrayList<ArrayList<String>> cancelDataList = new ArrayList<ArrayList<String>>();

		String sysDtms = JCRBatCommon.getSysDateTimeStamp();

		for (int i = 0; i < dataList.size(); i++)
		{
			// (a) 行読込
			String oneLineData = dataList.get(i);
			String[] datas = oneLineData.split(",");

			String toiawaseId = datas[0].replaceAll("\"", "");
			String aticleSohuNo = datas[1].replaceAll("\"", "");
			String aticleSohuKirokNo = datas[2].replaceAll("\"", "");

			// (b) 対応記録検索
			String[] whereParam = new String[] {toiawaseId};
			JBSbatCommonDBInterface selectedData = executeCR_T_TAIO_KIROK_PKSELECT(whereParam);

			String myboxNo = null;			// MYBOX番号
			String queboxNo = null;			// キューBOX番号
			String toiawaseStatCd = null;	// 問合せ状態コード
			String taioStaDtm = null;		// 対応開始年月日時分秒
			if (selectedData != null)
			{
				myboxNo = selectedData.getString(JBSbatCR_T_TAIO_KIROK.MYBOX_NO);
				queboxNo = selectedData.getString(JBSbatCR_T_TAIO_KIROK.QUE_BOX_NO);
				toiawaseStatCd = selectedData.getString(JBSbatCR_T_TAIO_KIROK.TOIAWASE_STAT_CD);
				taioStaDtm = selectedData.getString(JBSbatCR_T_TAIO_KIROK.TAIO_STA_DTM);
			}

			if (JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_CNCL.equals(toiawaseStatCd) == true)
			{
				// 問合せ状態コードが「キャンセル」の場合

				// ファイル出力情報退避
				// 出力レコード1行生成
				ArrayList<String> wkCancelDataList = new ArrayList<String>();
				wkCancelDataList.add(JCRUtilCommon.addDblQut(toiawaseId));				// 問合せID(対応記録番号)
				wkCancelDataList.add(JCRUtilCommon.addDblQut(aticleSohuNo));			// 資料送付番号
				wkCancelDataList.add(JCRUtilCommon.addDblQut(aticleSohuKirokNo));		// 資料送付記録番号

				cancelDataList.add(wkCancelDataList);

				// ログ出力
				// ECRB0190KW	%1%の内容が正しくありません。（%2%）
				String messageId = JPCBatchMessageConstant.ECRB0190KW;
				String[] logParam = new String[]{"変更申込書類送付完了データ", "問合せキャンセル済−問合せID:" + toiawaseId
																			+ " 資料送付番号:" + aticleSohuNo
																			+ " 資料送付記録番号:" + aticleSohuKirokNo};
				super.logPrint.printBusinessErrorLog(messageId, logParam);
			}
			else
			{
				// 問合せ状態コードが「キャンセル」でない場合

				// (c) 資料送付記録更新
				String[] params = new String[] {sysDtms, batchUserId, toiawaseId, aticleSohuNo, aticleSohuKirokNo};
				executeCR_T_ATICLE_SOHU_KRK_CR_UPDATE_005(params);

				// (d) 対応記録更新
				int updateCount = 0;
				if (JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_CLOSE.equals(toiawaseStatCd) == false)
				{
					// 問合せ状態コードが「クローズ」でない場合、対応記録を更新する。
					updateCount = updateTaioKirok(toiawaseId, toiawaseStatCd, taioStaDtm, sysDtms);
				}

				// (e) 対応記録明細登録
				if (updateCount > 0)
				{
					// 対応記録更新件数が0件より大きい場合、対応記録明細を登録する。
					entryTaiokrkDtl(toiawaseId, toiawaseStatCd, sysDtms);
				}

				// (f) MYBOX更新
				if (JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_OPEN.equals(toiawaseStatCd)
					&& myboxNo != null
					&& updateCount > 0)
				{
					// 問合せ状態コードが「オープン」かつ、MYBOXがnullでない、かつ更新対象データがある場合
					// 現在格納数 - 1
					String[] param = new String[]{"-1", sysDtms, batchUserId, myboxNo};
					executeCR_T_MYBOX_CR_UPDATE_002(param);
				}

				// (g) キューBOX更新
				if (JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_ESCL.equals(toiawaseStatCd)
					&& queboxNo != null
					&& updateCount > 0)
				{
					// 問合せ状態コードが「エスカレーション」かつ、キューBOXがnullでない、かつ更新対象データがある場合
					// 現在格納数 - 1
					String[] param = new String[]{"-1", sysDtms, batchUserId, queboxNo};
					executeCR_T_QUE_BOX_CR_UPDATE_002(param);
				}

				// (h) ユーザー別問合せモニタワーク登録		(クローズデータ)
				if (updateCount > 0)
				{
					JCRBatCommon.entryTiawsMonitorData(commonItem,
													JCRStrConst.DATA_SBT_CD_CLOSE,
													toiawaseId,
													batchUserId,
													null,
													null);
				}

				// (i) キューBOX別問合せモニタワーク登録	(アクセプトデータ)
				if (JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_ESCL.equals(toiawaseStatCd)
					&& queboxNo != null
					&& updateCount > 0)
				{
					// 問合せ状態コードが「エスカレーション」かつ、キューBOXがnullでない、かつ更新対象データがある場合
					JCRBatCommon.entryTiawsMontQueMvData(commonItem,
														JCRStrConst.DATA_SBT_CD_ACCEPT,
														toiawaseId,
														queboxNo,
														null,
														batchUserId);
				}
			}
		}
		return cancelDataList;
	}

	/**
	 * 対応記録更新
	 * @param toiawaseId 問合せID(対応記録番号)
	 * @param toiawaseStatCd 問合せ状態コード
	 * @param taioStaDtm 対応開始年月日時分秒
	 * @param sysDtms システム日時(17桁)
	 * @return 更新件数
	 * @throws Exception 例外
	 */
	private int updateTaioKirok(String toiawaseId, String toiawaseStatCd, String taioStaDtm, String sysDtms) throws Exception
	{
		String sysDtm = sysDtms.substring(0, 14);

		// 対応記録履歴編集
		String rireki = makeRireki(toiawaseStatCd, sysDtm);

		String[] params = new String[]{
			batchUserId,											// 対応ユーザーID
			sysDtm,													// 対応完了年月日時分秒
			sysDtm,													// 対応キャンセル再開年月日時分秒
			sysDtm,													// 対応クローズ年月日時分秒
			JCRBatCommon.calcTotalTranTime(taioStaDtm, sysDtm),		// トータル処理時間
			rireki,	 												// 対応記録履歴
			sysDtms,												// 更新年月日時分秒
			batchUserId,											// 更新オペレータアカウント
			toiawaseId												// 対応記録番号
		};
		return executeCR_T_TAIO_KIROK_CR_UPDATE_010(params);
	}

	/**
	 * 対応記録履歴生成
	 * @param toiawaseStatCd 問合せ状態コード
	 * @param sysDtm システム日時(14桁)
	 * @return 生成された対応記録履歴
	 */
	private String makeRireki(String toiawaseStatCd, String sysDtm)
	{
		StringBuilder sb = new StringBuilder();
		String dtm = JCRBatCommon.formatDatetimeMM(sysDtm.substring(0, KETA_YYYYMMDDHHMM));

		if (JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_ESCL.equals(toiawaseStatCd))
		{
			// 問合せ状態コードが「エスカレーション」の場合
			sb.append("□アクセプト：　（変更申込書類送付完了） ").append(dtm).append(JCRStrConst.KAIGYO_CD);
			sb.append("------------------------------------------------------------").append(JCRStrConst.KAIGYO_CD);
		}

		if (JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_CNCL.equals(toiawaseStatCd))
		{
			// 問合せ状態コードが「キャンセル」の場合
			sb.append("□再開：　（変更申込書類送付完了） ").append(dtm).append(JCRStrConst.KAIGYO_CD);
			sb.append("------------------------------------------------------------").append(JCRStrConst.KAIGYO_CD);
		}

		sb.append("◇クローズ：　（変更申込書類送付完了） ").append(dtm).append(JCRStrConst.KAIGYO_CD);
		sb.append("------------------------------------------------------------").append(JCRStrConst.KAIGYO_CD);

		super.logPrint.printDebugLog("変更申込書類送付完了　履歴情報：" + JCRStrConst.KAIGYO_CD + sb);

		return sb.toString();
	}

	/**
	 * SQLKEY(CR_UPDATE_010)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	対応ユーザーID
	 *		 	対応完了年月日時分秒
	 *		 	対応キャンセル再開年月日時分秒
	 *		 	対応クローズ年月日時分秒
	 *		 	トータル処理時間
	 *		 	対応記録履歴
	 *		 	更新年月日時分秒
	 *		 	更新オペレータアカウント
	 *		 	対応記録番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @return 更新件数
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private int executeCR_T_TAIO_KIROK_CR_UPDATE_010(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());

		// DBアクセスを実行します
		return db_CR_T_TAIO_KIROK.executeBySqlDefine(paramList, CR_T_TAIO_KIROK_CR_UPDATE_010);
	}

	/**
	 * 対応記録明細登録
	 * @param taioKrkNo 対応記録番号
	 * @param toiawaseStatCd 問合せ状態コード
	 * @param sysDtms システム日時(17桁)
	 * @throws Exception 例外
	 */
	private void entryTaiokrkDtl(String taioKrkNo, String toiawaseStatCd, String sysDtms) throws Exception
	{
		executeCR_T_TAIOKRK_DTL_CR_SELECT_006(new String[]{taioKrkNo});
		JBSbatCommonDBInterface taioKrkMeisaiData = db_CR_T_TAIOKRK_DTL.selectNext();
		int maxTaioKrkDtlNo = taioKrkMeisaiData.getBigDecimal(JBSbatCR_T_TAIOKRK_DTL.TAIO_KIROK_DTL_NO).intValue();

		if (JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_ESCL.equals(toiawaseStatCd))
		{
			// 問合せ状態コードが「エスカレーション」の場合
			// 対応記録明細登録(アクセプト)
			String acceptMeisaiNo = JCRBatCommon.fillZero(String.valueOf(++maxTaioKrkDtlNo), KETA_TAIO_KIROK_DTL_NO, false);
			entryTaiokrkDtlSub(taioKrkNo, acceptMeisaiNo, JCRStrConst.CD_DIV_ACTION_TYPE_CD_ACCEPT, sysDtms);
		}

		if (JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_CNCL.equals(toiawaseStatCd))
		{
			// 問合せ状態コードが「キャンセル」の場合
			// 対応記録明細登録(再開)
			String saikaiMeisaiNo = JCRBatCommon.fillZero(String.valueOf(++maxTaioKrkDtlNo), KETA_TAIO_KIROK_DTL_NO, false);
			entryTaiokrkDtlSub(taioKrkNo, saikaiMeisaiNo, JCRStrConst.CD_DIV_ACTION_TYPE_CD_SAIKAI, sysDtms);
		}

		// 対応記録明細登録(クローズ)
		String closeMeisaiNo = JCRBatCommon.fillZero(String.valueOf(++maxTaioKrkDtlNo), KETA_TAIO_KIROK_DTL_NO, false);
		entryTaiokrkDtlSub(taioKrkNo, closeMeisaiNo, JCRStrConst.CD_DIV_ACTION_TYPE_CD_CLOSE, sysDtms);
	}

	/**
	 * 対応記録明細登録(アクセプト)
	 * @param taioKrkNo 対応記録番号
	 * @param taioKrkDtlNo 対応記録明細番号
	 * @param actionTypeCd アクションタイプコード
	 * @param sysDtms システム日時(17桁)
	 * @throws Exception 例外
	 */
	private void entryTaiokrkDtlSub(String taioKrkNo, String taioKrkDtlNo, String actionTypeCd, String sysDtms) throws Exception
	{
		String sysDtm = sysDtms.substring(0, 14);

		String[] param = new String[]{
				taioKrkNo,										// 対応記録番号
				taioKrkDtlNo,									// 対応記録明細番号
				actionTypeCd,									// アクションタイプコード
				sysDtm,											// アクション開始年月日時分秒
				sysDtm,											// アクション完了年月日時分秒
				batchUserId,									// 対応ユーザーＩＤ
				null,											// 問合せ内容
				null,											// 問合せ元名
				null,											// 回答内容
				null,											// コンタクト先コード
				null,											// メモ内容
				null,											// メモタイプコード
				JCRStrConst.CD_DIV_HENSHU_STAT_FLG_KANRYO ,		// 編集中フラグ
				null,											// メール受信番号
				null,											// メールヘッダー内タイトル
				null,											// メールヘッダー内送信者メールアドレス
				null,											// メールヘッダー内宛先メールアドレス
				null,											// メールヘッダー内ＣＣメールアドレス
				null,											// メールヘッダー内メッセージＩＤ
				null,											// メールヘッダー内送信年月日時分秒
				null,											// メールヘッダー内受信年月日時分秒
				null,											// メール送信番号
				null,											// メールタイトル
				null,											// メール受信本文
				null,											// 元メールアドレス
				null,											// メールヘッダー
				null,											// メールフッター
				null,											// メール本文
				null,											// 送信先メールアドレス
				null,											// 送信元メールアドレス
				null,											// ＣＣメールアドレス
				null,											// 送信メールタイプコード
				null,											// メール送信年月日時分秒
				null,											// 送信ユーザーＩＤ
				null,											// 送信状態コード
				null,											// 返信記号コード
				sysDtms,										// 登録年月日時分秒
				batchUserId,									// 登録オペレータアカウント
				sysDtms,										// 更新年月日時分秒
				batchUserId,									// 更新オペレータアカウント
				null,											// 削除年月日時分秒
				null,											// 削除オペレータアカウント
				JCRStrConst.CD_DIV_MK_FLG_YUKO,					// 無効フラグ
				null,											// 登録運用年月日
				null,											// 登録処理ＩＤ
				null,											// 更新運用年月日
				null,											// 更新処理ＩＤ
				null,											// 削除運用年月日
				null,											// 削除処理ＩＤ
				null											// 業務個別設定組織コード
		};
		// 対応記録明細登録
		executeCR_T_TAIOKRK_DTL_PKINSERT(param);
	}

	/**
	 * ファイル送信
	 * @param outputFilePath 送信するファイルパス
	 * @param outputDataList 出力データのリスト
	 * @return 送信結果
	 * @throws Exception 例外
	 */
	private boolean sendFile(String outputFilePath, ArrayList<ArrayList<String>> outputDataList) throws Exception
	{
		boolean ftpRes = true;

		// ファイル出力オブジェクト
		JBSbatBusinessFileUtil dataFileObj = null;		// データファイル
		JBSbatBusinessFileUtil countFileObj = null;		// 件数ファイル
		JBSbatBusinessFileUtil flgFileObj = null;		// フラグファイル

		String dataFilePath = null;
		String countFilePath = null;
		String flgFilePath = null;

		try
		{
			// 出力ファイル生成
			String sysYYYYMMDDHHMMSS = JCRBatCommon.getSysDateTime();		// ファイル名に付けるタイムスタンプ

			while (true)
			{
				if (sysYYYYMMDDHHMMSS.equals(svSysYYYYMMDDHHMMSS))
				{
					sysYYYYMMDDHHMMSS = JCRBatCommon.getSysDateTime();
				}
				else
				{
					svSysYYYYMMDDHHMMSS = sysYYYYMMDDHHMMSS;				// 前回取得したタイムスタンプを退避
					break;
				}
			}

			// データファイル
			dataFilePath = outputFilePath + JCRStrConst.FILE_KUGIRI  + CANCEL_FILENAME_PRE_FIX + sysYYYYMMDDHHMMSS +  EXT_DATA_FILE;
			dataFileObj = JCRBatCommon.createBusinessFileUtil(dataFilePath, JCRStrConst.DEFAULT_ENCODE, JCRStrConst.KAIGYO_CD, JCRStrConst.STR_HALF_COMMA);

			// 件数ファイル
			countFilePath = outputFilePath + JCRStrConst.FILE_KUGIRI  + CANCEL_FILENAME_PRE_FIX + sysYYYYMMDDHHMMSS +  EXT_COUNT_FILE;
			countFileObj = JCRBatCommon.createBusinessFileUtil(countFilePath, JCRStrConst.DEFAULT_ENCODE, JCRStrConst.KAIGYO_CD, JCRStrConst.STR_HALF_COMMA);

			// フラグファイル
			flgFilePath = outputFilePath + JCRStrConst.FILE_KUGIRI  + CANCEL_FILENAME_PRE_FIX + sysYYYYMMDDHHMMSS +  EXT_FLG_FILE;
			flgFileObj = JCRBatCommon.createBusinessFileUtil(flgFilePath, JCRStrConst.DEFAULT_ENCODE, JCRStrConst.KAIGYO_CD, JCRStrConst.STR_HALF_COMMA);

			for (ArrayList<String> cancelData : outputDataList)
			{
				// データファイル書き込み
				JCRBatCommon.printBusinessFileUtil(dataFileObj, cancelData);
			}

			// 件数ファイル出力
			ArrayList<String> countDataList = new ArrayList<String>();
			countDataList.add(JCRUtilCommon.addDblQut(Integer.toString(outputDataList.size())));	// 件数
			JCRBatCommon.printBusinessFileUtil(countFileObj, countDataList);

			// ファイルクローズ
			JCRBatCommon.closeBusinessFileUtil(dataFileObj);	// データファイル
			JCRBatCommon.closeBusinessFileUtil(countFileObj);	// 件数ファイル
			JCRBatCommon.closeBusinessFileUtil(flgFileObj);		// フラグファイル

			ArrayList<String> fileList = new ArrayList<String>();
			fileList.add(dataFilePath);		// データファイル
			fileList.add(countFilePath);	// 件数ファイル
			fileList.add(flgFilePath);		// フラグファイル
			// FTP
			ftpRes = putFtp(fileList);
		}
		catch (JCCbatFrameworkException bfe)
		{
			// 想定外の例外発生
			commonItem.getConnection().rollback();
			throw bfe;
		}
		catch (JCCFrameworkException fe)
		{
			// 想定外の例外発生
			commonItem.getConnection().rollback();
			throw fe;
		}
		finally
		{
			ArrayList<String> fileList = new ArrayList<String>();

			// データファイル
			if (dataFileObj != null)
			{
				JCRBatCommon.closeBusinessFileUtil(dataFileObj);
			}
			if (dataFilePath != null)
			{
				fileList.add(dataFilePath);
			}

			// 件数ファイル
			if (countFileObj != null)
			{
				JCRBatCommon.closeBusinessFileUtil(countFileObj);
			}
			if (countFilePath != null)
			{
				fileList.add(countFilePath);
			}

			// フラグファイル
			if (flgFileObj != null)
			{
				JCRBatCommon.closeBusinessFileUtil(flgFileObj);
			}
			if (flgFilePath != null)
			{
				fileList.add(flgFilePath);
			}

			// ファイル削除
			deleteFile(fileList);
		}

		return ftpRes;

	}

	/**
	 * FTP送信
	 * @param fileList 転送するファイルパスのリスト
	 * @return 転送結果
	 */
	private boolean putFtp(ArrayList<String> fileList)
	{
		HashMap<String, Object> ftpResMap = new HashMap<String, Object>();
		// ファイル送信
		boolean ftpRes = JCRBatCommon.putFTP(commonItem, fileList, IF_ID, ftpResMap);
		if (ftpRes != true)
		{
			// FTP失敗

			// エラー区分の取得
			String errKbn = ftpResMap.get(FTP_ERR_KBN).toString();

			// 接続エラーの場合
			if(FTP_ERR_KBN_CONNECT_ERR.equals(errKbn))
			{
				HashMap<?, ?> connectErrMap = (HashMap<?, ?>)ftpResMap.get(FTP_CONNECT_ERR);
				if(!Boolean.valueOf(connectErrMap.get(FTP_CONNECT_ERR_FLG).toString()))
				{
					// EKKB0200CE	%1%のファイル転送に失敗しました。(%2%)
					super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0200CE,
						new String[]{"変更申込書類送付完了分キャンセルリスト", connectErrMap.get(FTP_CONNECT_ERR_MESSAGE).toString()});
				}
			}
			// ファイルエラーの場合
			else if(FTP_ERR_KBN_FILE_ERR.equals(errKbn))
			{
				ArrayList<?> fileErrList = (ArrayList<?>)ftpResMap.get(FTP_FILE_ERR);
				for(int i = 0; i < fileErrList.size(); i++)
				{
					HashMap<?, ?> fileErrMap = (HashMap<?, ?>)fileErrList.get(i);
					if(!Boolean.valueOf(fileErrMap.get(FTP_FILE_ERR_FLG).toString()))
					{
						// EKKB0200CE	%1%のファイル転送に失敗しました。(%2%)
						super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0200CE,
							new String[]{"変更申込書類送付完了分キャンセルリスト", fileErrMap.get(FTP_FILE_ERR_MESSAGE).toString()});
					}
				}
			}
		}
		return ftpRes;
	}

	/**
	 * ファイル削除
	 * @param pathList 削除対象ファイルパスのリスト
	 */
	private void deleteFile(List<String> pathList)
	{
		if (pathList != null)
		{
			for (int i = 0; i < pathList.size(); i++)
			{
				new File(JCRUtilCommon.inspection(pathList.get(i))).delete();
			}
		}
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CR_T_TAIO_KIROK.close();
		db_CR_T_ATICLE_SOHU_KRK.close();
		db_CR_T_TAIOKRK_DTL.close();
		db_CR_T_MYBOX.close();
		db_CR_T_QUE_BOX.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/

		// データアクセスオブジェクトクローズ
		JCRBatCommon.closeDataAccessObj(commonItem);

	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	TAIO_KIROK_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeCR_T_TAIO_KIROK_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("TAIO_KIROK_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_CR_T_TAIO_KIROK.selectByPrimaryKeys(whereMap);
	}

	/**
	 * SQLKEY(CR_UPDATE_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 executeCR_T_ATICLE_SOHU_KRK_CR_UPDATE_005(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());

		// DBアクセスを実行します
		db_CR_T_ATICLE_SOHU_KRK.executeBySqlDefine(paramList, CR_T_ATICLE_SOHU_KRK_CR_UPDATE_005);
	}

	/**
	 * SQLKEY(CR_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 executeCR_T_TAIOKRK_DTL_CR_SELECT_006(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CR_T_TAIOKRK_DTL.selectBySqlDefine(paramList, CR_T_TAIOKRK_DTL_CR_SELECT_006);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	対応記録番号				TAIO_KIROK_NO
	 *		 	対応記録明細番号				TAIO_KIROK_DTL_NO
	 *		 	アクションタイプコード				ACTION_TYPE_CD
	 *		 	アクション開始年月日時分秒				ACTION_STA_DTM
	 *		 	アクション完了年月日時分秒				ACTION_FIN_DTM
	 *		 	対応ユーザーＩＤ				TAIO_USER_ID
	 *		 	問合せ内容				TOIAWASE_NAIYO
	 *		 	問合せ元名				TOIAWASE_MOTO_NM
	 *		 	回答内容				ANS_NAIYO
	 *		 	コンタクト先コード				CONTACT_SAKI_CD
	 *		 	メモ内容				MEMO_NAIYO
	 *		 	メモタイプコード				MEMO_TYPE_CD
	 *		 	編集状態フラグ				HENSHU_STAT_FLG
	 *		 	メール受信番号				MAIL_RCV_NO
	 *		 	メールヘッダー内タイトル				ML_HEADER_NAI_TITLE
	 *		 	メールヘッダー内送信者メールアドレス				ML_HEADER_NAI_SENDER_MLAD
	 *		 	メールヘッダー内宛先メールアドレス				ML_HEADER_NAI_AD_MLAD
	 *		 	メールヘッダー内ＣＣメールアドレス				ML_HEADER_NAI_CC_MLAD
	 *		 	メールヘッダー内メッセージＩＤ				MAIL_HEADER_NAI_MSG_ID
	 *		 	メールヘッダー内送信年月日時分秒				MAIL_HEADER_NAI_SEND_DTM
	 *		 	メールヘッダー内受信年月日時分秒				MAIL_HEADER_NAI_RCV_DTM
	 *		 	メール送信番号				MAIL_SEND_NO
	 *		 	メールタイトル				MAIL_TITLE
	 *		 	メール受信本文				ML_RCV_TEXT
	 *		 	元メールアドレス				MOTO_MLAD
	 *		 	メールヘッダー				MAIL_HEADER
	 *		 	メールフッター				MAIL_FOOTER
	 *		 	メール本文				MAIL_TEXT
	 *		 	送信先メールアドレス				SENDS_MLAD
	 *		 	送信元メールアドレス				SENDM_MLAD
	 *		 	ＣＣメールアドレス				CC_MLAD
	 *		 	送信メールタイプコード				SEND_MAIL_TYPE_CD
	 *		 	メール送信年月日時分秒				MAIL_SEND_DTM
	 *		 	送信ユーザーＩＤ				SEND_USER_ID
	 *		 	送信状態コード				SEND_STAT_CD
	 *		 	返信転送記号コード				HNSIN_TENSO_SYMBOL_CD
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 *		 	登録運用年月日				ADD_UNYO_YMD
	 *		 	登録処理ＩＤ				ADD_TRN_ID
	 *		 	更新運用年月日				UPD_UNYO_YMD
	 *		 	更新処理ＩＤ				UPD_TRN_ID
	 *		 	削除運用年月日				DEL_UNYO_YMD
	 *		 	削除処理ＩＤ				DEL_TRN_ID
	 *		 	業務個別設定組織コード				WKKBT_ORG_CD
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCR_T_TAIOKRK_DTL_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("TAIO_KIROK_NO", setParam[0]);
		setMap.setValue("TAIO_KIROK_DTL_NO", setParam[1]);
		setMap.setValue("ACTION_TYPE_CD", setParam[2]);
		setMap.setValue("ACTION_STA_DTM", setParam[3]);
		setMap.setValue("ACTION_FIN_DTM", setParam[4]);
		setMap.setValue("TAIO_USER_ID", setParam[5]);
		setMap.setValue("TOIAWASE_NAIYO", setParam[6]);
		setMap.setValue("TOIAWASE_MOTO_NM", setParam[7]);
		setMap.setValue("ANS_NAIYO", setParam[8]);
		setMap.setValue("CONTACT_SAKI_CD", setParam[9]);
		setMap.setValue("MEMO_NAIYO", setParam[10]);
		setMap.setValue("MEMO_TYPE_CD", setParam[11]);
		setMap.setValue("HENSHU_STAT_FLG", setParam[12]);
		setMap.setValue("MAIL_RCV_NO", setParam[13]);
		setMap.setValue("ML_HEADER_NAI_TITLE", setParam[14]);
		setMap.setValue("ML_HEADER_NAI_SENDER_MLAD", setParam[15]);
		setMap.setValue("ML_HEADER_NAI_AD_MLAD", setParam[16]);
		setMap.setValue("ML_HEADER_NAI_CC_MLAD", setParam[17]);
		setMap.setValue("MAIL_HEADER_NAI_MSG_ID", setParam[18]);
		setMap.setValue("MAIL_HEADER_NAI_SEND_DTM", setParam[19]);
		setMap.setValue("MAIL_HEADER_NAI_RCV_DTM", setParam[20]);
		setMap.setValue("MAIL_SEND_NO", setParam[21]);
		setMap.setValue("MAIL_TITLE", setParam[22]);
		setMap.setValue("ML_RCV_TEXT", setParam[23]);
		setMap.setValue("MOTO_MLAD", setParam[24]);
		setMap.setValue("MAIL_HEADER", setParam[25]);
		setMap.setValue("MAIL_FOOTER", setParam[26]);
		setMap.setValue("MAIL_TEXT", setParam[27]);
		setMap.setValue("SENDS_MLAD", setParam[28]);
		setMap.setValue("SENDM_MLAD", setParam[29]);
		setMap.setValue("CC_MLAD", setParam[30]);
		setMap.setValue("SEND_MAIL_TYPE_CD", setParam[31]);
		setMap.setValue("MAIL_SEND_DTM", setParam[32]);
		setMap.setValue("SEND_USER_ID", setParam[33]);
		setMap.setValue("SEND_STAT_CD", setParam[34]);
		setMap.setValue("HNSIN_TENSO_SYMBOL_CD", setParam[35]);
		setMap.setValue("ADD_DTM", setParam[36]);
		setMap.setValue("ADD_OPEACNT", setParam[37]);
		setMap.setValue("UPD_DTM", setParam[38]);
		setMap.setValue("UPD_OPEACNT", setParam[39]);
		setMap.setValue("DEL_DTM", setParam[40]);
		setMap.setValue("DEL_OPEACNT", setParam[41]);
		setMap.setValue("MK_FLG", setParam[42]);
		setMap.setValue("ADD_UNYO_YMD", setParam[43]);
		setMap.setValue("ADD_TRN_ID", setParam[44]);
		setMap.setValue("UPD_UNYO_YMD", setParam[45]);
		setMap.setValue("UPD_TRN_ID", setParam[46]);
		setMap.setValue("DEL_UNYO_YMD", setParam[47]);
		setMap.setValue("DEL_TRN_ID", setParam[48]);
		setMap.setValue("WKKBT_ORG_CD", setParam[49]);
	
		// DBアクセスを実行します
		db_CR_T_TAIOKRK_DTL.insertByPrimaryKeys(setMap);
	}

	/**
	 * SQLKEY(CR_UPDATE_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	現在格納数
	 *		 	更新年月日時分秒
	 *		 	更新オペレータアカウント
	 *		 	MYBOX番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCR_T_MYBOX_CR_UPDATE_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());

		// DBアクセスを実行します
		db_CR_T_MYBOX.executeBySqlDefine(paramList, CR_T_MYBOX_CR_UPDATE_002);
	}

	/**
	 * SQLKEY(CR_UPDATE_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	現在格納数
	 *		 	更新年月日時分秒
	 *		 	更新オペレータアカウント
	 *		 	キューBOX番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCR_T_QUE_BOX_CR_UPDATE_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());

		// DBアクセスを実行します
		db_CR_T_QUE_BOX.executeBySqlDefine(paramList, CR_T_QUE_BOX_CR_UPDATE_002);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
