/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCRHnkMskmsJuryoInfToroku
*	ソースファイル名	：JBSbatCRHnkMskmsJuryoInfToroku.java
*	作成者				：富士通　
*	作成日				：2012年06月20日
*＜機能概要＞
*　変更申込書受領情報登録処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/06/20   富士通		新規作成
*				2013/01/17	富士通		ANK-1245-00-00 機種依存文字対応
*	v6.00.00	2013/11/26	FJ）斉藤(諭)	ANK-1637-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_QUE_BOX;
import eo.common.constant.JCRStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCRUtilCommon;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;

/**
* 変更申込書受領情報登録処理<p>
*<BR>
* @author 富士通
*/
public class JBSbatCRHnkMskmsJuryoInfToroku extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(キューＢＯＸ)*/
	private static final String D_TBL_NAME_CR_T_QUE_BOX = "CR_T_QUE_BOX";

	/** テーブル(対応記録)*/
	private static final String D_TBL_NAME_CR_T_TAIO_KIROK = "CR_T_TAIO_KIROK";

	/** テーブル(対応記録明細)*/
	private static final String D_TBL_NAME_CR_T_TAIOKRK_DTL = "CR_T_TAIOKRK_DTL";

	/** テーブル(キューＢＯＸ別問合せモニタワーク)*/
	private static final String D_TBL_NAME_CR_T_QBOX_TOIAWSMNTW = "CR_T_QBOX_TOIAWSMNTW";

	/** テーブル(エスカレーション先別問合せモニタワーク)*/
	private static final String D_TBL_NAME_CR_T_ESCL_TOIAWSMNTW = "CR_T_ESCL_TOIAWSMNTW";

	/** SQL定義キー(CR_SELECT_007)*/
	private static final String CR_T_QUE_BOX_CR_SELECT_007 = "CR_SELECT_007";

	/** SQL定義キー(CR_UPDATE_001)*/
	private static final String CR_T_QUE_BOX_CR_UPDATE_001 = "CR_UPDATE_001";

	/** テーブルアクセスクラス(キューＢＯＸ)*/
	private JBSbatSQLAccess db_CR_T_QUE_BOX = null;

	/** テーブルアクセスクラス(対応記録)*/
	private JBSbatSQLAccess db_CR_T_TAIO_KIROK = null;

	/** テーブルアクセスクラス(対応記録明細)*/
	private JBSbatSQLAccess db_CR_T_TAIOKRK_DTL = null;

	/** テーブルアクセスクラス(キューＢＯＸ別問合せモニタワーク)*/
	private JBSbatSQLAccess db_CR_T_QBOX_TOIAWSMNTW = null;

	/** テーブルアクセスクラス(エスカレーション先別問合せモニタワーク)*/
	private JBSbatSQLAccess db_CR_T_ESCL_TOIAWSMNTW = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** ディレクトリー区切り文字 */
	private static final String DIR_SPLIT_STR = ";";

	/** ファイル名の先頭文字 */
	private static final String FILE_NM_FRONT = "CRIFE030_";

	/** インデックス:お客様ID */
	private static final int IDX_CUST_ID = 0;
	/** インデックス:申込書番号 */
	private static final int IDX_MSKM_NO = 1;
	/** インデックス:担当ユーザーID */
	private static final int IDX_USER_ID = 2;
	/** インデックス:キューBOX番号 */
	private static final int IDX_QBOX_NO= 3;
	/** インデックス:タイトル */
	private static final int IDX_TITLE = 4;

	/** バイト数:お客様ID */
	private static final int BYTE_CUST_ID = 10;
	/** バイト数:申込書番号 */
	private static final int BYTE_MSKM_NO = 10;
	/** バイト数:担当ユーザーID */
	private static final int BYTE_USER_ID = 10;
	/** バイト数:キューBOX番号 */
	private static final int BYTE_QBOX_NO = 10;
	/** バイト数:タイトル */
	private static final int BYTE_TITLE = 510;

	/** システム日時(YYYYMMDDhhmmssSSS) */
	private String sysDtYMDhmsS = null;
	/** システム日時(YYYYMMDDhhmmss) */
	private String sysDtYMDhms = null;
	/** システム日時(YYYYMMDDhhmm) */
	private String sysDtYMDhm = null;
	/** システム日時(YYYYMMDD) */
	private String sysDtYMD = null;

	/** 取込元のCSVファイルが配置されるディレクトリーパス */
	private File csvPath = null;
	/** 異常終了したデータを格納したファイルを配置するディレクトリーパス */
	private File abnormalDataPath = null;
	/** 取込元のCSVファイルのバックアップが配置されるディレクトリーパス */
	private File bkPath = null;

	/**
	 * 付属ファイル情報
	 */
	private static final String[][] FUZOKU_FILE = 
	{
		{".CNT", "CNT_FILE"},
		{".FLG", "FLG_FILE"}
	};

	/**
	 * NGワードのリスト
	 */
	private List<String> ngWordList = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CR_T_QUE_BOX = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_QUE_BOX);
		db_CR_T_TAIO_KIROK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TAIO_KIROK);
		db_CR_T_TAIOKRK_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_TAIOKRK_DTL);
		db_CR_T_QBOX_TOIAWSMNTW = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_QBOX_TOIAWSMNTW);
		db_CR_T_ESCL_TOIAWSMNTW = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_ESCL_TOIAWSMNTW);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		// システム日時取得
		sysDtYMDhmsS = JCRBatCommon.getSysDateTimeStamp();
		sysDtYMDhms = sysDtYMDhmsS.substring(0, 14);
		sysDtYMDhm = sysDtYMDhmsS.substring(0, 12);
		sysDtYMD = sysDtYMDhmsS.substring(0, 8);

		// 共通電文よりfree項目を取得
		String freeItem = super.commonItem.getFreeItem();

		// ディレクトリーチェック
		checkDir(freeItem);

		// NGワードリスト生成
		ngWordList = JCRBatCommon.getNGWord(commonItem);

		/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * ディレクトリーチェック
	 * @param freeItem フリー項目
	 * @throws Exception 例外
	 */
	private void checkDir(String freeItem) throws Exception
	{
		// freeItemがnull場合
		if (freeItem == null)
		{
			// ECRB0190KW:%1%の内容が正しくありません。（%2%）
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0190KW, 
					new String[]{"シェル引数", "変更申込書受領情報用配置ディレクトリーパス定義不正"});
		}

		// フリー項目を区切り文字で分割し、ディレクトリーパスを取得
		String[] path = freeItem.split(DIR_SPLIT_STR);

		// ディレクトリーパスの設定が2件でない場合
		if (path.length != 2)
		{
			// ECRB0190KW:%1%の内容が正しくありません。（%2%）
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0190KW, 
					new String[]{"シェル引数", "変更申込書受領情報用配置ディレクトリーパス定義不正"});
		}

		commonItem.getLogPrint().printDebugLog("変更申込書受領情報ファイル配置ディレクトリーパス:" + path[0]);

		// 取込元のCSVファイルが配置されるディレクトリーパス
		if (path[0] == null || "".equals(path[0]))
		{
			// ECRB0190KW:%1%の内容が正しくありません。（%2%）
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0190KW, 
					new String[]{"シェル引数", "変更申込書受領情報用配置ディレクトリーパス定義不正"});
		}
		else
		{
			csvPath = JCRUtilCommon.checkDirExist(path[0]);
			if (csvPath == null)
			{
				// 存在しない場合
				// ECRB0160KW:指定されたパスが存在しません。(%1%)
				throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0160KW, new String[]{path[0]});
			}
			super.logPrint.printDebugLog("取込元のCSVファイルが配置されるディレクトリーパス:" + csvPath);
		}

		commonItem.getLogPrint().printDebugLog("変更申込書受領情報取込異常データ配置ディレクトリーパス:" + path[1]);

		// 異常終了したデータを格納したファイルを配置するディレクトリーパス
		if (path[1] == null || "".equals(path[1]))
		{
			// ECRB0190KW:%1%の内容が正しくありません。（%2%）
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0190KW, 
					new String[]{"シェル引数", "変更申込書受領情報用配置ディレクトリーパス定義不正"});
		}
		else
		{
			abnormalDataPath = JCRUtilCommon.checkDirExist(path[1]);
			if (abnormalDataPath == null)
			{
				// 存在しない場合
				// ECRB0160KW:指定されたパスが存在しません。(%1%)
				throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0160KW, new String[]{path[1]});
			}
			super.logPrint.printDebugLog("異常終了したデータを格納したファイルを配置するディレクトリーパス:" + abnormalDataPath);
		}

		String bkDir = path[0] + "/bk";
		commonItem.getLogPrint().printDebugLog("変更申込書受領情報ファイルバックアップ配置ディレクトリーパス:" + bkDir);

		// 取込元のCSVファイルが配置されるディレクトリーパス
		bkPath = JCRUtilCommon.checkDirExist(bkDir);
		if (bkPath == null)
		{
			// 存在しない場合
			// ECRB0160KW:指定されたパスが存在しません。(%1%)
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECRB0160KW, new String[]{bkDir});
		}
		super.logPrint.printDebugLog("バックアップファイルが配置されるディレクトリーパス:" + bkPath);
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		// ファイル一覧取得
		File[] csvFiles = csvPath.listFiles();

		int tgtFileCount = 0;

		for (int i = 0; i < csvFiles.length; i++)
		{
			File csvFile = csvFiles[i];
			String csvFileName = csvFile.getName().toUpperCase();

			if (csvFileName.startsWith(FILE_NM_FRONT) && csvFileName.endsWith(JCRStrConst.EXT_CSV))
			{
				// ファイル名が、「CRIFE030_」で始まり「.CSV」で終わっているものが対象
				super.logPrint.printDebugLog("対象ファイル名:" + csvFile.getName());

				// 付属ファイル確認(件数ファイル、フラグファイルの存在確認)
				commonItem.getLogPrint().printDebugLog("共通部品:付属ファイル確認呼出(JCRBatCommon.getHuzokuFileTypeShitei())");
				Map<String, File> huzokuFileMap = JCRBatCommon.getHuzokuFileTypeShitei(commonItem, csvFile, csvPath, FUZOKU_FILE);
				if (huzokuFileMap.size() < FUZOKU_FILE.length)
				{
					commonItem.getLogPrint().printDebugLog("付属ファイルなし:" + csvFile.getName());
					continue;
				}

				File countFile = huzokuFileMap.get(FUZOKU_FILE[0][1]);	// 件数ファイル
				File flgFile = huzokuFileMap.get(FUZOKU_FILE[1][1]);	// フラグファイル

				List<List<String>> dataList = getFileData(csvFile);
				int dataCount = dataList.size();	// レコード件数

				// 処理件数ログ出力
				commonItem.getLogPrint().printDebugLog("データ件数:" + dataCount);
				JCRBatCommon.printShoriCountLog(commonItem, "データ件数", dataCount);

				// 件数ファイルチェック
				commonItem.getLogPrint().printDebugLog("共通部品:件数ファイルチェック呼出(JCRBatCommon.isCountFileCheckOK())");
				if (!JCRBatCommon.isCountFileCheckOK(commonItem, csvFile, dataCount, countFile))
				{
					// ECRB0170KW:データ件数が件数ファイルの件数と一致しません。（%1%）
					commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0170KW, new String[] {csvFile.getName()});

					// エラーファイルの移動
					moveErrorFile(csvFile, countFile, flgFile);

					continue;
				}

				// データチェック
				if (!checkFile(dataList, csvFile.getName()))
				{
					// エラーファイルの移動
					moveErrorFile(csvFile, countFile, flgFile);

					continue;
				}

				// データ登録
				boolean insFlg = insertData(dataList, csvFile.getName());

				// データ登録でエラーが発生した場合
				if (!insFlg)
				{
					// エラーファイルの移動
					moveErrorFile(csvFile, countFile, flgFile);

					// ロールバック
					commonItem.getConnection().rollback();

					continue;
				}

				// コミット
				super.commit();

				File[] moveFiles = new File[] {csvFile, countFile, flgFile};	// 移動するファイル
				File[] deleteFiles = new File[] {};								// 削除するファイル

				// 処理の終わったファイルをバックアップディレクトリーに移動
				commonItem.getLogPrint().printDebugLog("共通部品:ファイル移動・削除呼出(JCRUtilCommon.moveAndDeleteFile())");
				JCRUtilCommon.moveAndDeleteFile(moveFiles, deleteFiles, bkPath);

				tgtFileCount++;
			}
		}

		// 処理件数ログ出力
		JCRBatCommon.printShoriCountLog(commonItem, "対象ファイル数", tgtFileCount);

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * エラーファイル移動処理
	 * @param csvFile CSVファイル
	 * @param countFile 件数ファイル
	 * @param flgFile フラグファイル
	 * @throws Exception 例外
	 */
	private void moveErrorFile(File csvFile, File countFile, File flgFile) throws Exception
	{
		// エラーのあったファイルをバックアップディレクトリーにコピー
		commonItem.getLogPrint().printDebugLog("共通部品:ファイル複写呼出(JCRUtilCommon.copyFile())");
		JCRUtilCommon.copyFile(csvFile, bkPath);
		JCRUtilCommon.copyFile(countFile, bkPath);
		JCRUtilCommon.copyFile(flgFile, bkPath);

		File[] moveFiles = new File[] {csvFile, countFile, flgFile};	// 移動するファイル
		File[] deleteFiles = new File[] {};								// 削除するファイル

		// エラーのあったファイルをバックアップディレクトリーに移動
		commonItem.getLogPrint().printDebugLog("共通部品:ファイル移動・削除呼出(JCRUtilCommon.moveAndDeleteFile())");
		JCRUtilCommon.moveAndDeleteFile(moveFiles, deleteFiles, abnormalDataPath);
	}

	/**
	 * ファイルデータ取得
	 * @param file ファイル
	 * @return リスト化したファイルデータ
	 * @throws Exception 例外
	 */
	private List<List<String>> getFileData(File file) throws Exception
	{
		BufferedReader br = null;
		List<List<String>> dataList = new ArrayList<List<String>>();

		try
		{
			// 読込みファイル
			br = new BufferedReader(new InputStreamReader(new FileInputStream(file), JCRStrConst.DEFAULT_ENCODE));
			String data = br.readLine();

			while (data != null)
			{
				List<String> list = JCRUtilCommon.convStringToList(data);
				dataList.add(list);

				// 1行読込み
				data = br.readLine();
			}
		}
		catch (Exception e)
		{
			commonItem.getLogPrint().printDebugLog(e.getMessage());
			throw e;
		}
		finally
		{
			// 読込みファイルクローズ
			if (br != null)
			{
				try
				{
					br.close();
				}
				catch (IOException ioe)
				{
					commonItem.getLogPrint().printDebugLog("br close error");
				}
			}
		}

		return dataList;
	}

	/**
	 * ファイルチェック
	 * @param dataList ファイルデータが格納されたリスト
	 * @param fileName ファイル名
	 * @return 異常時：false 正常時：true
	 * @throws Exception 例外
	 */
	private boolean checkFile(List<List<String>> dataList, String fileName) throws Exception
	{
		int line = 0;	// 行番号
		for (int i = 0; i < dataList.size(); i++)
		{
			line = i + 1;

			// 1レコードのデータ取得
			List<String> list = dataList.get(i);

			// 項目数チェック
			if (list == null || list.size() != 5)
			{
				// ECRB0180KW:項目数が正しくありません。（%1%）
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0180KW, new String[] {fileName + "　" + (i + 1) + "行目"});
				return false;
			}

			// お客様IDチェック
			if (!checkCustId(line, fileName, list.get(IDX_CUST_ID)))
			{
				return false;
			}

			// 申込書番号チェック
			if (!checkMskmNo(line, fileName, list.get(IDX_MSKM_NO)))
			{
				return false;
			}

			// 担当ユーザーIDチェック
			if (!checkUserId(line, fileName, list.get(IDX_USER_ID)))
			{
				return false;
			}

			// キューBOX番号チェック
			if (!checkQboxNo(line, fileName, list.get(IDX_QBOX_NO)))
			{
				return false;
			}

			// タイトルチェック
			if (!checkTitle(line, fileName, list.get(IDX_TITLE)))
			{
				return false;
			}
		}

		return true;
	}

	/**
	 * お客様IDチェック
	 * @param line 行番号
	 * @param fileName ファイル名
	 * @param custId お客様ID
	 * @return 異常時：false 正常時：true
	 * @throws Exception 例外
	 */
	private boolean checkCustId(int line, String fileName, String custId) throws Exception
	{
		if (custId == null || "".equals(custId))
		{
			// 必須チェック
			// ECRB0370TW:%1%の必須チェックエラー
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0370TW,
					new String[] {"（" + fileName + "　" + line + "行目）" + "お客様ID"});
			return false;
		}
		else
		{
			int byteLength = JCRUtilCommon.getByteLength(custId);
			if (byteLength != BYTE_CUST_ID)
			{
				// 桁数チェック
				// ECRB0200TW:%1%のバイト数が正しくありません。(条件:%2% 値:%3%)
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0200TW,
						new String[] {"（" + fileName + "　" + line + "行目）" + "お客様ID", BYTE_CUST_ID + "byte", String.valueOf(byteLength)});
				return false;
			}
			if (JCRBatCommon.isHannkakuESuuji1(custId) == false)
			{
				// ECRB0230TW	%1%の属性が正しくありません。(属性:%2% 値:%3%)
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0230TW,
						new String[] {"（" + fileName + "　" + line + "行目）" + "お客様ID", "半角英数字", custId});
				return false;
			}
		}

		return true;
	}

	/**
	 * 申込書番号チェック
	 * @param line 行番号
	 * @param fileName ファイル名
	 * @param mskmNo 申込書番号
	 * @return 異常時：false 正常時：true
	 * @throws Exception 例外
	 */
	private boolean checkMskmNo(int line, String fileName, String mskmNo) throws Exception
	{
		if (mskmNo == null || "".equals(mskmNo))
		{
			// 必須チェック
			// ECRB0370TW:%1%の必須チェックエラー
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0370TW,
					new String[] {"（" + fileName + "　" + line + "行目）" + "受付番号"});
			return false;
		}
		else
		{
			int byteLength = JCRUtilCommon.getByteLength(mskmNo);
			if (byteLength != BYTE_MSKM_NO)
			{
				// 桁数チェック
				// ECRB0200TW:%1%のバイト数が正しくありません。(条件:%2% 値:%3%)
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0200TW,
						new String[] {"（" + fileName + "　" + line + "行目）" + "受付番号", BYTE_MSKM_NO + "byte", String.valueOf(byteLength)});
				return false;
			}
			if (JCRBatCommon.isHannkakuESuuji8(mskmNo) == false)
			{
				// ECRB0230TW	%1%の属性が正しくありません。(属性:%2% 値:%3%)
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0230TW,
						new String[] {"（" + fileName + "　" + line + "行目）" + "受付番号", "半角英数字(英小文字不可)", mskmNo});
				return false;
			}
		}

		return true;
	}

	/**
	 * 担当ユーザーIDチェック
	 * @param line 行番号
	 * @param fileName ファイル名
	 * @param userId 担当ユーザーID
	 * @return 異常時：false 正常時：true
	 * @throws Exception 例外
	 */
	private boolean checkUserId(int line, String fileName, String userId) throws Exception
	{
		if (userId == null || "".equals(userId))
		{
			// 必須チェック
			// ECRB0370TW:%1%の必須チェックエラー
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0370TW,
					new String[] {"（" + fileName + "　" + line + "行目）" + "担当ユーザーID"});
			return false;
		}
		else
		{
			int byteLength = JCRUtilCommon.getByteLength(userId);
			if (byteLength > BYTE_USER_ID)
			{
				// 桁数チェック
				// ECRB0200TW:%1%のバイト数が正しくありません。(条件:%2% 値:%3%)
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0200TW,
						new String[] {"（" + fileName + "　" + line + "行目）" + "担当ユーザーID", BYTE_USER_ID + "byte以内", String.valueOf(byteLength)});
				return false;
			}
			if (JCRBatCommon.isHannkakuESuuji1(userId) == false)
			{
				// ECRB0230TW	%1%の属性が正しくありません。(属性:%2% 値:%3%)
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0230TW,
						new String[] {"（" + fileName + "　" + line + "行目）" + "担当ユーザーID", "半角英数字", userId});
				return false;
			}
		}

		return true;
	}

	/**
	 * キューBOX番号チェック
	 * @param line 行番号
	 * @param fileName ファイル名
	 * @param qboxNo キューBOX番号
	 * @return 異常時：false 正常時：true
	 * @throws Exception 例外
	 */
	private boolean checkQboxNo(int line, String fileName, String qboxNo) throws Exception
	{
		if (qboxNo == null || "".equals(qboxNo))
		{
			// 必須チェック
			// ECRB0370TW:%1%の必須チェックエラー
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0370TW,
					new String[] {"（" + fileName + "　" + line + "行目）" + "キューBOX番号"});
			return false;
		}
		else
		{
			int byteLength = JCRUtilCommon.getByteLength(qboxNo);
			if (byteLength != BYTE_QBOX_NO)
			{
				// 桁数チェック
				// ECRB0200TW:%1%のバイト数が正しくありません。(条件:%2% 値:%3%)
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0200TW,
						new String[] {"（" + fileName + "　" + line + "行目）" + "キューBOX番号", BYTE_QBOX_NO + "byte", String.valueOf(byteLength)});
				return false;
			}
			if (JCRBatCommon.isHannkakuESuuji1(qboxNo) == false)
			{
				// ECRB0230TW	%1%の属性が正しくありません。(属性:%2% 値:%3%)
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0230TW,
						new String[] {"（" + fileName + "　" + line + "行目）" + "キューBOX番号", "半角英数字", qboxNo});
				return false;
			}
		}

		return true;
	}

	/**
	 * タイトルチェック
	 * @param line 行番号
	 * @param fileName ファイル名
	 * @param title タイトル
	 * @return 異常時：false 正常時：true
	 * @throws Exception 例外
	 */
	private boolean checkTitle(int line, String fileName, String title) throws Exception
	{
		if (title == null || "".equals(title))
		{
			// 必須チェック
			// ECRB0370TW:%1%の必須チェックエラー
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0370TW,
					new String[] {"（" + fileName + "　" + line + "行目）" + "タイトル"});
			return false;
		}
		else
		{
			int byteLength = JCRUtilCommon.getByteLength(title);
			if (byteLength > BYTE_TITLE)
			{
				// 桁数チェック
				// ECRB0200TW:%1%のバイト数が正しくありません。(条件:%2% 値:%3%)
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0200TW,
						new String[] {"（" + fileName + "　" + line + "行目）" + "タイトル", BYTE_TITLE + "byte以内", String.valueOf(byteLength)});
				return false;
			}

			if (JCRBatCommon.isMailTitle(title) == false)
			{
				// ECRB0230TW	%1%の属性が正しくありません。(属性:%2% 値:%3%)
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0230TW,
						new String[] {"（" + fileName + "　" + line + "行目）" + "タイトル", "メールタイトル", title});
				return false;
			}
		}

		return true;
	}

	/**
	 * データ登録
	 * @param dataList ファイルデータが格納されたリスト
	 * @param fileName ファイル名
	 * @return 処理結果
	 * @throws Exception 例外
	 */
	private boolean insertData(List<List<String>> dataList, String fileName) throws Exception
	{
		for (int i = 0; i < dataList.size(); i++)
		{
			// 1レコードのデータ取得
			List<String> list = dataList.get(i);

			String qboxNo = list.get(IDX_QBOX_NO);
			String qboxNm = null;
			String wkkbtOrgCd = null;

			commonItem.getLogPrint().printDebugLog("キューBOX番号:" + qboxNo);

			// ファイルのキューBOX番号が空白でない場合、キューBOX検索
			executeCR_T_QUE_BOX_CR_SELECT_007(new String[]{qboxNo, sysDtYMD, sysDtYMD});
			List<JBSbatCommonDBInterface> selectedDataList = JCRBatCommon.getSelectedDataList(db_CR_T_QUE_BOX);

			if (selectedDataList != null && selectedDataList.size() != 0)
			{
				// 検索結果が0件でない場合、キューBOX情報の取得
				JBSbatCommonDBInterface selectedData = selectedDataList.get(0);
				qboxNm = selectedData.getString(JBSbatCR_T_QUE_BOX.QUE_BOX_NM);
				wkkbtOrgCd = selectedData.getString(JBSbatCR_T_QUE_BOX.WKKBT_ORG_CD);
			}
			else
			{
				// 検索結果が0件の場合、エラー
				// ECRB0190KW	%1%の内容が正しくありません。（%2%）
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.ECRB0190KW,
						new String[] {"（" + fileName + "　" + (i + 1) + "行目）" + "指定されたキューBOX", "キューBOXマスタ未登録、キューBOX番号:" + qboxNo});

				return false;
			}

			// 対応記録番号の採番
			String taioKirokNo = JCRBatCommon.getFormatedNextSeq(commonItem, JCRStrConst.SEQ_TAIO_KIROK_NO, "", 10);
			commonItem.getLogPrint().printDebugLog("対応記録番号:" + taioKirokNo);

			// 対応記録登録
			insertTaioKirok(list, taioKirokNo, qboxNo, qboxNm);

			// 対応記録明細登録
			insertTaioKirokDtl(list, taioKirokNo, 1, JCRStrConst.CD_DIV_ACTION_TYPE_CD_SHINKI);
			insertTaioKirokDtl(list, taioKirokNo, 2, JCRStrConst.CD_DIV_ACTION_TYPE_CD_ESCL);

			// キューBOX更新
			executeCR_T_QUE_BOX_CR_UPDATE_001(new String[]{"1", sysDtYMDhmsS, sysDtYMDhmsS, batchUserId, qboxNo});

			// NGワードチェック
			super.logPrint.printDebugLog("■■■　NGワードチェック");
			boolean existNGWord = false;
			Map<String, List<Map<String, String>>> ngWordData = checkNgWord(taioKirokNo, list.get(IDX_TITLE));

			// タイトルにNGワードが含まれていた場合
			if (ngWordData != null && ngWordData.size() > 0)
			{
				existNGWord = true;
			}

			// 問合せモニター集計用データ登録
			commonItem.getLogPrint().printDebugLog("共通部品:問合せモニター集計用データ登録呼出(JCRBatCommon.entryRrkInfoInportTiawsMntData())");
			JCRBatCommon.entryRrkInfoInportTiawsMntData(
					commonItem, qboxNo, JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_ESCL, taioKirokNo, list.get(IDX_USER_ID), wkkbtOrgCd, existNGWord);

			// タイトルにNGワードが含まれていた場合
			if (ngWordData != null && ngWordData.size() > 0)
			{
				// 問合せNGワード検知メール送信
				commonItem.getLogPrint().printDebugLog("共通部品:問合せNGワード検知メール送信呼出(JCRBatCommon.sendNGWordMail())");
				JCRBatCommon.sendNGWordMail(commonItem, ngWordData, commonItem.getBatchUserId());
			}
		}

		return true;
	}

	/**
	 * 対応記録登録
	 * @param list 1レコードのデータが格納されたリスト
	 * @param taioKirokNo 対応記録番号
	 * @param qboxNo キューBOX番号
	 * @param qboxNm キューBOX名
	 */
	private void insertTaioKirok(List<String> list, String taioKirokNo, String qboxNo, String qboxNm) throws Exception
	{
		// 対応履歴の生成
		String rireki = makeRireki(qboxNm);

		String[] setParam = new String[42];
		int index = 0;
		setParam[index++] = taioKirokNo;									// 対応記録番号
		setParam[index++] = JCRStrConst.CD_DIV_TAIO_KIROK_STAT_ESCL;		// 対応記録ステータス
		setParam[index++] = list.get(IDX_USER_ID);							// 対応ユーザーＩＤ
		setParam[index++] = list.get(IDX_CUST_ID);							// サービス契約番号
		setParam[index++] = null;											// 問合せ客番号
		setParam[index++] = null;											// ＭＹＢＯＸ番号
		setParam[index++] = qboxNo;											// キューＢＯＸ番号
		setParam[index++] = null;											// ＭＹＢＯＸ格納年月日時分秒
		setParam[index++] = sysDtYMDhms;									// キューＢＯＸ格納年月日時分秒
		setParam[index++] = sysDtYMDhms;									// 対応開始年月日時分秒
		setParam[index++] = null;											// 対応完了年月日時分秒
		setParam[index++] = null;											// 対応キャンセル年月日時分秒
		setParam[index++] = null;											// 対応キャンセル再開年月日時分秒
		setParam[index++] = null;											// 対応クローズ年月日時分秒
		setParam[index++] = null;											// 対応クローズ再開年月日時分秒
		setParam[index++] = "0";											// トータル処理時間
		setParam[index++] = JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_ESCL;		// 問合せ状態コード
		setParam[index++] = JCRStrConst.CD_DIV_CLOSE_FAIL_CD_KANOU;			// クローズ不可コード
		setParam[index++] = JCRStrConst.CD_DIV_TIAWS_UKTKSBT_CD_TA_SYSTEM;	// 問合せ受付種別コード
		setParam[index++] = null;											// 簡易メモ
		setParam[index++] = list.get(IDX_TITLE);							// タイトル
		setParam[index++] = rireki;											// 対応記録履歴
		setParam[index++] = sysDtYMDhms;									// 受付年月日時分秒
		setParam[index++] = JCRStrConst.TEMP_SAVE_OFF;						// 一時保存有無
		setParam[index++] = null;											// コールバック希望年月日
		setParam[index++] = null;											// コールバック希望時間
		setParam[index++] = null;											// コールバック時間指定タイプコード
		setParam[index++] = null;											// 申込契機コード
		setParam[index++] = list.get(IDX_MSKM_NO);							// 契約変更申込書番号
		setParam[index++] = sysDtYMDhmsS;									// 登録年月日時分秒
		setParam[index++] = batchUserId;									// 登録オペレータアカウント
		setParam[index++] = sysDtYMDhmsS;									// 更新年月日時分秒
		setParam[index++] = batchUserId;									// 更新オペレータアカウント
		setParam[index++] = null;											// 削除年月日時分秒
		setParam[index++] = null;											// 削除オペレータアカウント
		setParam[index++] = JCRStrConst.CD_DIV_MK_FLG_YUKO;					// 無効フラグ
		setParam[index++] = null;											// 登録運用年月日
		setParam[index++] = null;											// 登録処理ＩＤ
		setParam[index++] = null;											// 更新運用年月日
		setParam[index++] = null;											// 更新処理ＩＤ
		setParam[index++] = null;											// 削除運用年月日
		setParam[index++] = null;											// 削除処理ＩＤ

		// 対応記録登録
		executeCR_T_TAIO_KIROK_PKINSERT(setParam);
	}

	/**
	 * 対応記録履歴生成
	 * @param qboxNm キューBOX名
	 * @return 生成された対応記録履歴
	 * @throws Exception 例外
	 */
	private String makeRireki(String qboxNm) throws Exception
	{
		StringBuilder sb = new StringBuilder();

		String sysYYYYMMDDHHMM = JCRBatCommon.formatDatetimeMM(sysDtYMDhm);
		String separateLine = "------------------------------------------------------------";

		sb.append(separateLine).append(JCRStrConst.KAIGYO_CD);
		sb.append("◇新規作成：　（変更申込書受領情報登録） ").append(sysYYYYMMDDHHMM).append(JCRStrConst.KAIGYO_CD);
		sb.append(separateLine).append(JCRStrConst.KAIGYO_CD);
		sb.append("□エスカレーション：　（変更申込書受領情報登録） ").append(sysYYYYMMDDHHMM).append(JCRStrConst.KAIGYO_CD);
		sb.append("　エスカレーション先：　「").append(qboxNm).append("」キュー").append(JCRStrConst.KAIGYO_CD);
		sb.append(separateLine).append(JCRStrConst.KAIGYO_CD);

		return sb.toString();
	}

	/**
	 * 対応記録明細登録
	 * @param list 1レコードのデータが格納されたリスト
	 * @param taioKirokNo 対応記録番号
	 * @param taioKirokNoDtlNo 対応記録明細番号
	 * @param actTypeCd アクションタイプコード
	 */
	private void insertTaioKirokDtl(List<String> list, String taioKirokNo, int taioKirokNoDtlNo, String actTypeCd) throws Exception
	{
		String newMeisaiNo = JCRBatCommon.fillZero(String.valueOf(taioKirokNoDtlNo), 10, false);

		String[] setParam = new String[50];
		int index = 0;
		setParam[index++] = taioKirokNo;								// 対応記録番号
		setParam[index++] = newMeisaiNo;								// 対応記録明細番号
		setParam[index++] = actTypeCd;									// アクションタイプコード
		setParam[index++] = sysDtYMDhms;								// アクション開始年月日時分秒
		setParam[index++] = sysDtYMDhms;								// アクション完了年月日時分秒
		setParam[index++] = list.get(IDX_USER_ID);						// 対応ユーザーID
		setParam[index++] = null;										// 問合せ内容
		setParam[index++] = null;										// 問合せ元名
		setParam[index++] = null;										// 回答内容
		setParam[index++] = null;										// コンタクト先コード
		setParam[index++] = null;										// メモ内容
		setParam[index++] = null;										// メモタイプコード
		setParam[index++] = JCRStrConst.CD_DIV_HENSHU_STAT_FLG_KANRYO;	// 編集状態フラグ
		setParam[index++] = null;										// メール受信番号
		setParam[index++] = null;										// メールヘッダー内タイトル
		setParam[index++] = null;										// メールヘッダー内送信者メールアドレス
		setParam[index++] = null;										// メールヘッダー内宛先メールアドレス
		setParam[index++] = null;										// メールヘッダー内CCメールアドレス
		setParam[index++] = null;										// メールヘッダー内メッセージID
		setParam[index++] = null;										// メールヘッダー内送信年月日時分秒
		setParam[index++] = null;										// メールヘッダー内受信年月日時分秒
		setParam[index++] = null;										// メール送信番号
		setParam[index++] = null;										// メールタイトル
		setParam[index++] = null;										// メール受信本文
		setParam[index++] = null;										// 元メールアドレス
		setParam[index++] = null;										// メールヘッダー
		setParam[index++] = null;										// メールフッター
		setParam[index++] = null;										// メール本文
		setParam[index++] = null;										// 送信先メールアドレス
		setParam[index++] = null;										// 送信元メールアドレス
		setParam[index++] = null;										// CCメールアドレス
		setParam[index++] = null;										// 送信メールタイプコード
		setParam[index++] = null;										// メール送信年月日時分秒
		setParam[index++] = null;										// 送信ユーザーID
		setParam[index++] = null;										// 送信状態コード
		setParam[index++] = null;										// 返信転送記号コード
		setParam[index++] = sysDtYMDhmsS;								// 登録年月日時分秒
		setParam[index++] = batchUserId;								// 登録オペレータアカウント
		setParam[index++] = sysDtYMDhmsS;								// 更新年月日時分秒
		setParam[index++] = batchUserId;								// 更新オペレータアカウント
		setParam[index++] = null;										// 削除年月日時分秒
		setParam[index++] = null;										// 削除オペレータアカウント
		setParam[index++] = JCRStrConst.CD_DIV_MK_FLG_YUKO;				// 無効フラグ
		setParam[index++] = null;										// 登録運用年月日
		setParam[index++] = null;										// 登録処理ＩＤ
		setParam[index++] = null;										// 更新運用年月日
		setParam[index++] = null;										// 更新処理ＩＤ
		setParam[index++] = null;										// 削除運用年月日
		setParam[index++] = null;										// 削除処理ＩＤ
		setParam[index++] = null;										// 業務個別設定組織コード

		// 対応記録明細登録
		executeCR_T_TAIOKRK_DTL_PKINSERT(setParam);
	}

	/**
	 * NGワードチェック
	 * @param taioKirokNo 対応記録番号
	 * @param title タイトル
	 * @return NGワードが存在する場合、NGワードのList
	 * @throws Exception 例外
	 */
	private Map<String, List<Map<String, String>>> checkNgWord(String taioKirokNo, String title) throws Exception
	{
		Map<String, List<Map<String, String>>> ngWordData = new HashMap<String, List<Map<String, String>>>();
		Map<String, String> ngwdDtlMapData = new HashMap<String, String>();
		List<Map<String, String>> ngwdList = new ArrayList<Map<String, String>>();

		if (title != null)
		{
			// NGワードチェック
			for (int i = 0; i < ngWordList.size(); i++)
			{
				String ngword = ngWordList.get(i);
				if (title.contains(ngword))
				{
					ngwdDtlMapData.put(taioKirokNo, title);
					ngwdList.add(ngwdDtlMapData);
					ngWordData.put(ngword, ngwdList);
				}
			}
		}

		return ngWordData;
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CR_T_QUE_BOX.close();
		db_CR_T_TAIO_KIROK.close();
		db_CR_T_TAIOKRK_DTL.close();
		db_CR_T_QBOX_TOIAWSMNTW.close();
		db_CR_T_ESCL_TOIAWSMNTW.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/

		// データアクセスオブジェクトクローズ
		JCRBatCommon.closeDataAccessObj(commonItem);

	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(CR_SELECT_007)で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_SELECT_007(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_CR_T_QUE_BOX.selectBySqlDefine(paramList, CR_T_QUE_BOX_CR_SELECT_007);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	対応記録番号				TAIO_KIROK_NO
	 *		 	対応記録ステータス				TAIO_KIROK_STAT
	 *		 	対応ユーザーＩＤ				TAIO_USER_ID
	 *		 	サービス契約番号				SVC_KEI_NO
	 *		 	問合せ客番号				PROSCST_NO
	 *		 	ＭＹＢＯＸ番号				MYBOX_NO
	 *		 	キューＢＯＸ番号				QUE_BOX_NO
	 *		 	ＭＹＢＯＸ格納年月日時分秒				MYBOX_KAKNO_DTM
	 *		 	キューＢＯＸ格納年月日時分秒				QUE_BOX_KAKNO_DTM
	 *		 	対応開始年月日時分秒				TAIO_STA_DTM
	 *		 	対応完了年月日時分秒				TAIO_FIN_DTM
	 *		 	対応キャンセル年月日時分秒				TAIO_CANCEL_DTM
	 *		 	対応キャンセル再開年月日時分秒				TAIO_CANCEL_SKAI_DTM
	 *		 	対応クローズ年月日時分秒				LAST_END_DTM
	 *		 	対応クローズ再開年月日時分秒				LAST_SKAI_DTM
	 *		 	トータル処理時間				TOTAL_TRAN_TIME
	 *		 	問合せ状態コード				TOIAWASE_STAT_CD
	 *		 	クローズ不可コード				CLOSE_FAIL_CD
	 *		 	問合せ受付種別コード				TOIAWASE_UK_SBT_CD
	 *		 	簡易メモ				EASY_MEMO
	 *		 	タイトル				TITLE
	 *		 	対応記録履歴				TAIO_KIROK_RIREKI
	 *		 	受付年月日時分秒				UK_DTM
	 *		 	一時保存有無				TMP_SAVE_UM
	 *		 	コールバック希望年月日				CALLBK_KIBO_YMD
	 *		 	コールバック希望時間				CALLBK_KIBO_TIME
	 *		 	コールバック時間指定タイプコード				CALLBK_SHITEI_TYPE_CD
	 *		 	申込契機コード				MSKM_OPTNTY_CD
	 *		 	契約変更申込書番号				KEI_CHGE_MSKMSHO_NO
	 *		 	登録年月日時分秒				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
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCR_T_TAIO_KIROK_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("TAIO_KIROK_NO", setParam[0]);
		setMap.setValue("TAIO_KIROK_STAT", setParam[1]);
		setMap.setValue("TAIO_USER_ID", setParam[2]);
		setMap.setValue("SVC_KEI_NO", setParam[3]);
		setMap.setValue("PROSCST_NO", setParam[4]);
		setMap.setValue("MYBOX_NO", setParam[5]);
		setMap.setValue("QUE_BOX_NO", setParam[6]);
		setMap.setValue("MYBOX_KAKNO_DTM", setParam[7]);
		setMap.setValue("QUE_BOX_KAKNO_DTM", setParam[8]);
		setMap.setValue("TAIO_STA_DTM", setParam[9]);
		setMap.setValue("TAIO_FIN_DTM", setParam[10]);
		setMap.setValue("TAIO_CANCEL_DTM", setParam[11]);
		setMap.setValue("TAIO_CANCEL_SKAI_DTM", setParam[12]);
		setMap.setValue("LAST_END_DTM", setParam[13]);
		setMap.setValue("LAST_SKAI_DTM", setParam[14]);
		setMap.setValue("TOTAL_TRAN_TIME", setParam[15]);
		setMap.setValue("TOIAWASE_STAT_CD", setParam[16]);
		setMap.setValue("CLOSE_FAIL_CD", setParam[17]);
		setMap.setValue("TOIAWASE_UK_SBT_CD", setParam[18]);
		setMap.setValue("EASY_MEMO", setParam[19]);
		setMap.setValue("TITLE", setParam[20]);
		setMap.setValue("TAIO_KIROK_RIREKI", setParam[21]);
		setMap.setValue("UK_DTM", setParam[22]);
		setMap.setValue("TMP_SAVE_UM", setParam[23]);
		setMap.setValue("CALLBK_KIBO_YMD", setParam[24]);
		setMap.setValue("CALLBK_KIBO_TIME", setParam[25]);
		setMap.setValue("CALLBK_SHITEI_TYPE_CD", setParam[26]);
		setMap.setValue("MSKM_OPTNTY_CD", setParam[27]);
		setMap.setValue("KEI_CHGE_MSKMSHO_NO", setParam[28]);
		setMap.setValue("ADD_DTM", setParam[29]);
		setMap.setValue("ADD_OPEACNT", setParam[30]);
		setMap.setValue("UPD_DTM", setParam[31]);
		setMap.setValue("UPD_OPEACNT", setParam[32]);
		setMap.setValue("DEL_DTM", setParam[33]);
		setMap.setValue("DEL_OPEACNT", setParam[34]);
		setMap.setValue("MK_FLG", setParam[35]);
		setMap.setValue("ADD_UNYO_YMD", setParam[36]);
		setMap.setValue("ADD_TRN_ID", setParam[37]);
		setMap.setValue("UPD_UNYO_YMD", setParam[38]);
		setMap.setValue("UPD_TRN_ID", setParam[39]);
		setMap.setValue("DEL_UNYO_YMD", setParam[40]);
		setMap.setValue("DEL_TRN_ID", setParam[41]);
	
		// DBアクセスを実行します
		db_CR_T_TAIO_KIROK.insertByPrimaryKeys(setMap);
	}

	/**
	 * 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_001)で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_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());

		// DBアクセスを実行します
		db_CR_T_QUE_BOX.executeBySqlDefine(paramList, CR_T_QUE_BOX_CR_UPDATE_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
