/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCRMemoTorokuIkt
*	ソースファイル名	：JBSbatCRMemoTorokuIkt.java
*	作成者				：富士通　
*	作成日				：2011年11月21日
*＜機能概要＞
*　メモ登録一括処理部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/11/21   富士通		新規作成
*	v5.00.01	2013/08/31	FJ）斉藤(諭)	OM-2013-0001243対応
*	v6.00.00	2013/11/26	FJ）斉藤(諭)	ANK-1637-00-00対応
*	v10.00.00	2014/07/18	FJ）斉藤(諭)	ANK-2048-00-00 【ＮＯ．８２２】簡易メモ一括入力機能
*********************************************************************/
package eo.business.service;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.math.BigDecimal;
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.JBSbatCC_T_DLYD_TRN_REQ;
import eo.business.util.table.JBSbatCR_T_MYBOX;
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.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;
import eo.framework.log.JBSbatLogPrintControl;

/**
* メモ登録一括処理 <p>
*<BR>
* @author 富士通
*/
public class JBSbatCRMemoTorokuIkt extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(ＭＹＢＯＸ)*/
	private static final String D_TBL_NAME_CR_T_MYBOX = "CR_T_MYBOX";

	/** テーブル(対応記録)*/
	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";

	/** SQL定義キー(CR_SELECT_001)*/
	private static final String CR_T_MYBOX_CR_SELECT_001 = "CR_SELECT_001";

	/** SQL定義キー(CR_SELECT_016)*/
	private static final String CR_T_TAIO_KIROK_CR_SELECT_016 = "CR_SELECT_016";

	/** 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_TAIOKRK_DTL_CR_UPDATE_002 = "CR_UPDATE_002";

	/** SQL定義キー(CR_UPDATE_002)*/
	private static final String CR_T_MYBOX_CR_UPDATE_002 = "CR_UPDATE_002";

	/** テーブルアクセスクラス(ＭＹＢＯＸ)*/
	private JBSbatSQLAccess db_CR_T_MYBOX = null;

	/** テーブルアクセスクラス(対応記録)*/
	private JBSbatSQLAccess db_CR_T_TAIO_KIROK = null;

	/** テーブルアクセスクラス(対応記録明細)*/
	private JBSbatSQLAccess db_CR_T_TAIOKRK_DTL = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 対応履歴一時ファイル保存先パス */
	private String tmpFileDir = null;

	/** システム日時　17桁 */
	private String sysDtms = null;

	/** システム日時　14桁 */
	private String sysDtm = null;

	/** 初期処理エラーメッセージ */
	private String initErrMessage = null;

	/** クローズ有無区分　'0'(無) */
	private static final String CLOSE_NASHI = "0";

	/** クローズ有無区分　'1'(有) */
	private static final String CLOSE_ARI = "1";

	/** 1行目の項目数 */
	private static final int KOMOKUSU_1GYOME = 6;

	/** 項目数 */
	private static final int KOMOKUSU = 2;

	/** YYYYMMDDHHmmの桁数 */
	private static final int KETA_YYYYMMDDHHMM = 12;

	/** 対応記録明細番号の桁数 */
	private static final int LENGTH_TAIO_KIROK_DTL_NO = 10;

	/** エラーメッセージ 取得キー */
	private static final String ERR_MESSAGE = "ERR_MESSAGE";

	/** クローズ有無区分 取得キー */
	private static final String CLOSE_UMU_KBN = "CLOSE_UMU_KBN";

	/** メモ追記内容 取得キー */
	private static final String MEMO = "MEMO";

	/** 簡易メモ 取得キー */
	private static final String EASY_MEMO = "EASY_MEMO";

	/** 問合せ状態コード 取得キー */
	private static final String TIAWS_JOTAI_CD = "TIAWS_JOTAI_CD";

	/** ログインユーザーID 取得キー */
	private static final String LOGIN_USER_ID = "LOGIN_USER_ID";

	/** ログインユーザー名 取得キー */
	private static final String LOGIN_USER_NM = "LOGIN_USER_NM";

	/** ログインユーザーのMYBOX番号 取得キー */
	private static final String LOGIN_USER_MYBOX_NO = "LOGIN_USER_MYBOX_NO";

	/** ログインユーザーの業務個別設定組織コード 取得キー */
	private static final String LOGIN_USER_WKKBT_ORG_CD = "LOGIN_USER_WKKBT_ORG_CD";

	/** ログインユーザーの業務個別設定組織名 取得キー */
	private static final String LOGIN_USER_WKKBT_ORG_NM = "LOGIN_USER_WKKBT_ORG_NM";

	/** 対応記録番号 取得キー */
	private static final String TAIO_KRK_NO = "TAIO_KRK_NO";

	/** 対応記録履歴 取得キー */
	private static final String TAIO_KIROK_RIREKI = "TAIO_KIROK_RIREKI";

	/** MYBOX番号 取得キー */
	private static final String MYBOX_NO = "MYBOX_NO";

	/** 対応開始年月日時分秒 取得キー */
	private static final String TAIO_STA_DTM = "TAIO_STA_DTM";

	/** 一時保存有無 取得キー */
	private static final String TMP_SAVE_UM = "TMP_SAVE_UM";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CR_T_MYBOX = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CR_T_MYBOX);
		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);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		// プロパティーチェック
		initErrMessage = checkProperty();

	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * プロパティーチェック
	 * @return エラーメッセージ
	 */
	private String checkProperty()
	{
		// プロパティーチェック
		String errMessage = null;

		try
		{
			// 対応履歴一時ファイル保存先パス
			tmpFileDir = JCRBatCommon.getApplicationConst("CR_TEMP_FILE_DIR");
			if (tmpFileDir == null || "".equals(tmpFileDir.trim()))
			{
				// ECRB0010KW:プロパティーファイルの設定が正しくありません。(項目名:%1%)
				errMessage = JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0010KW, new String[] {"CR_TEMP_FILE_DIR"});
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0010KW, new String[] {"CR_TEMP_FILE_DIR"});
			}
			else if (JCRUtilCommon.checkDirExist(tmpFileDir) == null)
			{
				// 存在しない場合
				// ECRB0160KW:指定されたパスが存在しません。(%1%)
				errMessage = JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0160KW, new String[] {tmpFileDir});
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0160KW, new String[] {tmpFileDir});
			}
			super.logPrint.printDebugLog("対応履歴一時ファイル保存先パス:" + tmpFileDir);
		}
		catch (Exception e)
		{
			// ECRB0260KW:%1%処理中に予期せぬエラーが発生しました。　%2%
			errMessage = JBSbatLogPrintControl.getMessage(JPCBatchMessageConstant.ECRB0260KW, new String[] {"メモ登録一括", e.toString()});
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0260KW, new String[] {"メモ登録一括", e.toString()});
			super.logPrint.printDebugLog("例外発生:" + e.toString());
			super.logPrint.printDebugLog("　　　　:" + e.getMessage());
		}

		return errMessage;
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/

		// 2-(1) ディレイド処理依頼情報取得
		ArrayList<HashMap<String, Object>> shoriIraiInfoList = JCRBatCommon.getShoriIraiInfo(commonItem, super.jobid);

		if (shoriIraiInfoList != null)
		{
			// 処理件数ログ出力
			JCRBatCommon.printShoriCountLog(commonItem, "ディレイド処理依頼件数", shoriIraiInfoList.size());

			for (int i = 0; i < shoriIraiInfoList.size(); i++)
			{
				// ディレイド処理結果コード
				String shoriKekkaCd = JCRStrConst.DLYD_SYSTEM_ERR;		// 一旦システムエラーのコードを設定

				String shoriIraiNo = null;			// ディレイド処理依頼番号
				List<String> errInfoList = null;	// エラー情報List

				try
				{
					// 2-(2) ディレイド処理依頼情報1件読込
					HashMap<String, Object> shoriIraiInfoMap = shoriIraiInfoList.get(i);

					// ディレイド処理依頼番号
					shoriIraiNo = shoriIraiInfoMap.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO).toString();

					if (initErrMessage == null)
					{
						// 初期処理チェックでエラーがない場合

						// システム日時 17桁
						sysDtms = JCRBatCommon.getSysDateTimeStamp();
						// システム日時 14桁
						sysDtm = sysDtms.substring(0, 14);

						// 2-(3) 画面入力情報ファイル取得
						byte[] gamenData = (byte[])shoriIraiInfoMap.get("INPUT_EFILE");

						// メモ登録処理実行
						errInfoList = executeMemo(gamenData);

						// 処理結果コード設定
						if (errInfoList.isEmpty())
						{
							shoriKekkaCd = JCRStrConst.DLYD_OK;
						}
						else
						{
							shoriKekkaCd = JCRStrConst.DLYD_GYOMU_ERR;
						}
					}
				}
				catch (JBSbatBusinessException ex)
				{
					// システムエラーフラグを設定する
					shoriKekkaCd = JCRStrConst.DLYD_SYSTEM_ERR;
					super.logPrint.printDebugLog("システムエラー発生:" + ex.toString());
					super.logPrint.printDebugLog("　　　　　　　　　:" + ex.getMessage());
				}
				finally
				{
					// 2-(8) 終了処理
					end(shoriIraiNo, shoriKekkaCd, errInfoList);
				}
			}
		}
		else
		{
			// 処理件数ログ出力
			JCRBatCommon.printShoriCountLog(commonItem, "ディレイド処理依頼件数", 0);
		}
		return null;

	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * メモ登録一括処理実行
	 * @param gamenData 画面入力情報ファイルデータ
	 * @return エラー情報List
	 * @throws Exception 例外
	 */
	private List<String> executeMemo(byte[] gamenData) throws Exception
	{
		List<String> errInfoList = new ArrayList<String>();		// エラー情報
		BufferedReader gamenDataFile = null;
		int rowNum = 0;											// 行番号

		try
		{
			// 2-(3) 画面入力情報ファイル取得

			// (a) メモ追記内容取得
			String gamenDataString = new String(gamenData, JCRStrConst.DEFAULT_ENCODE);
			int memoIndex = gamenDataString.indexOf(JCRStrConst.MEMO_START_MOJI);	// メモ追記内容開始位置取得

			if (memoIndex == -1)
			{
				// ECRB0190KW:%1%の内容が正しくありません。（%2%）
				String messageId = JPCBatchMessageConstant.ECRB0190KW;
				String[] logParam = new String[]{"画面入力情報", "追記内容無し"};
				super.logPrint.printBusinessErrorLog(messageId, logParam);
				String errMessage = JBSbatLogPrintControl.getMessage(messageId, logParam);
				errInfoList.add(errMessage);
				return errInfoList;
			}

			String memo = gamenDataString.substring(memoIndex).replaceFirst(JCRStrConst.MEMO_START_MOJI, "");

			// (b) 処理対象情報取得
			gamenDataFile = new BufferedReader(new StringReader(gamenDataString.substring(0, memoIndex)));

			// 2-(4) 行読込
			String gamenData1Gyo = gamenDataFile.readLine();

			// 1行目の情報
			String closeUmu = 				null;		// クローズ有無
			String loginUserId = 			null;		// 画面のログインユーザーID
			String loginUserNm = 			null;		// 画面のログインユーザー名
			String loginUserWkKbtOrgCd = 	null;		// 画面の業務個別設定組織コード
			String loginUserWkKbtOrgNm = 	null;		// 画面の業務個別設定組織名
			String loginUserMyboxNo = 		null;		// 画面のログインユーザーのMYBOX番号
			String easyMemo = 				null;		// 簡易メモ

			// 2行目以降の情報
			String taioKrkNo = 				null;		// 対応記録番号
			String updateDtm = 				null;		// 対応記録．更新年月日時分秒

			String myboxNo = 				null;		// MYBOX番号
			String taioKaishiDtm = 			null;		// 対応開始年月日時分秒
			String tiawsJotaiCd = 			null;		// 問合せ状態コード
			String rireki = 				null;		// 対応記録履歴
			String ichijiHozonUmu = 		null;		// 一時保存有無

			while (gamenData1Gyo != null)
			{
				++rowNum;

				// 2-(5) 画面入力情報取得

				// (a) 画面入力項目取得
				List<String> oneLineKomokuList = JCRUtilCommon.convStringToList(gamenData1Gyo);

				// (b) 項目数チェック
				String errMessage = checkKomokuSu(rowNum, oneLineKomokuList.size());
				if (errMessage != null)
				{
					errInfoList.add(errMessage);
					return errInfoList;
				}

				if (rowNum == 1)
				{
					// 1行目の場合

					// (c) クローズ有無取得

					// (c)-1 クローズ有無取得
					closeUmu = oneLineKomokuList.get(0);

					// (c)-2 クローズ有無チェック
					if (CLOSE_NASHI.equals(closeUmu) == false && CLOSE_ARI.equals(closeUmu) == false)
					{
						// ECRB0190KW:%1%の内容が正しくありません。（%2%）
						String messageId = JPCBatchMessageConstant.ECRB0190KW;
						String[] logParam = new String[]{"画面入力情報", "クローズ有無不正"};
						super.logPrint.printBusinessErrorLog(messageId, logParam);
						errMessage = JBSbatLogPrintControl.getMessage(messageId, logParam);
						errInfoList.add(errMessage);
						return errInfoList;
					}

					loginUserId = 			oneLineKomokuList.get(1);	// 画面のログインユーザーID
					loginUserNm = 			oneLineKomokuList.get(2);	// 画面のログインユーザー名
					loginUserWkKbtOrgCd = 	oneLineKomokuList.get(3);	// 画面の業務個別設定組織コード
					loginUserWkKbtOrgNm = 	oneLineKomokuList.get(4);	// 画面の業務個別設定組織名
					easyMemo = 				oneLineKomokuList.get(5);	// 簡易メモ

					// (c)-3 画面ログインユーザーのMYBOX情報取得
					if (CLOSE_ARI.equals(closeUmu))
					{
						Map<String, String> myboxInfoMap = getMybox(loginUserId);
						errMessage = myboxInfoMap.get(ERR_MESSAGE);
						if (errMessage != null)
						{
							errInfoList.add(errMessage);
							return errInfoList;
						}
						else
						{
							loginUserMyboxNo = myboxInfoMap.get(JBSbatCR_T_MYBOX.MYBOX_NO);	// MYBOX番号(エスカレーション先)
						}
					}
				}
				else
				{
					// 2行目以降の場合

					// (d) 対応記録情報取得
					taioKrkNo = oneLineKomokuList.get(0);				// 対応記録番号
					updateDtm = oneLineKomokuList.get(1);				// 対応記録．更新年月日時分秒
					Map<String, String> taioKrkDataMap = getTaioKrkInfo(taioKrkNo, updateDtm);
					errMessage = taioKrkDataMap.get(ERR_MESSAGE);
					if (errMessage != null)
					{
						errInfoList.add(errMessage);
						return errInfoList;
					}
					else
					{
						myboxNo = 			taioKrkDataMap.get(JBSbatCR_T_TAIO_KIROK.MYBOX_NO);				// MYBOX番号
						taioKaishiDtm = 	taioKrkDataMap.get(JBSbatCR_T_TAIO_KIROK.TAIO_STA_DTM);			// 対応開始年月日時分秒
						tiawsJotaiCd = 		taioKrkDataMap.get(JBSbatCR_T_TAIO_KIROK.TOIAWASE_STAT_CD);		// 問合せ状態コード
						rireki = 			taioKrkDataMap.get(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_RIREKI);	// 対応記録履歴
						ichijiHozonUmu = 	taioKrkDataMap.get(JBSbatCR_T_TAIO_KIROK.TMP_SAVE_UM);			// 一時保存有無
					}
				}

				// 2-(6) データチェック処理
				if (rowNum >= 2)
				{
					// 2行目以降の場合

					if (CLOSE_ARI.equals(closeUmu) || (memo != null && !("".equals(memo))))
					{
						// クローズ有りの場合、または「メモ追記内容」が空白でない場合

						// 問合せ状態チェック
						errMessage = checkToiawaseJotai(closeUmu, tiawsJotaiCd, taioKrkNo);
						if (errMessage != null)
						{
							errInfoList.add(errMessage);
							return errInfoList;
						}
					}
				}

				// 2-(7) データ更新・登録処理
				if (rowNum >= 2)
				{
					// 2行目以降の場合

					Map<String, String> paramMap = new HashMap<String, String>();
					paramMap.put(CLOSE_UMU_KBN, 			closeUmu);				// クローズ有無区分
					paramMap.put(MEMO, 						memo);					// メモ追記内容
					paramMap.put(EASY_MEMO, 				easyMemo);				// 簡易メモ
					paramMap.put(LOGIN_USER_MYBOX_NO, 		loginUserMyboxNo);		// ログインユーザーのMYBOX番号
					paramMap.put(TIAWS_JOTAI_CD, 			tiawsJotaiCd);			// 問合せ状態コード
					paramMap.put(LOGIN_USER_ID, 			loginUserId);			// 画面のログインユーザーID
					paramMap.put(LOGIN_USER_NM, 			loginUserNm);			// 画面のログインユーザー名
					paramMap.put(LOGIN_USER_WKKBT_ORG_CD, 	loginUserWkKbtOrgCd);	// 画面ログインユーザーの業務個別設定組織コード
					paramMap.put(LOGIN_USER_WKKBT_ORG_NM, 	loginUserWkKbtOrgNm);	// 画面ログインユーザーの業務個別設定組織名
					paramMap.put(TAIO_KRK_NO, 				taioKrkNo);				// 対応記録番号
					paramMap.put(MYBOX_NO, 					myboxNo);				// MYBOX番号
					paramMap.put(TAIO_KIROK_RIREKI, 		rireki);				// 対応記録履歴
					paramMap.put(TAIO_STA_DTM, 				taioKaishiDtm);			// 対応開始年月日時分秒
					paramMap.put(TMP_SAVE_UM, 				ichijiHozonUmu);		// 一時保存有無

					// 登録更新処理
					entry(paramMap);
				}
				gamenData1Gyo = gamenDataFile.readLine();
			}
		}
		finally
		{
			// 処理件数ログ出力
			JCRBatCommon.printShoriCountLog(commonItem, "メモ登録処理行数", rowNum);

			if (gamenDataFile != null)
			{
				try
				{
					gamenDataFile.close();
				}
				catch (IOException ioe)
				{
					// ECRB0260KW %1%処理中に予期せぬエラーが発生しました。　%2%
					super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECRB0260KW, new String[]{"画面入力情報ファイルクローズ", "(処理は続行します)"});
				}
			}
		}
		return errInfoList;
	}

	/**
	 * 項目数チェック
	 * @param rowNum 行番号
	 * @param komokuSu 項目数
	 * @return エラーメッセージ
	 */
	private String checkKomokuSu(int rowNum, int komokuSu)
	{
		String errMessage = null;
		if (rowNum == 1)
		{
			// 1行目の場合
			if (komokuSu != KOMOKUSU_1GYOME)
			{
				// ECRB0180KW:項目数が正しくありません。（%1%）
				String messageId = JPCBatchMessageConstant.ECRB0180KW;
				String[] logParam = new String[]{"1行目"};
				errMessage = JBSbatLogPrintControl.getMessage(messageId, logParam);
				super.logPrint.printBusinessErrorLog(messageId, logParam);
			}
		}
		else
		{
			// 2行目以降の場合
			if (komokuSu != KOMOKUSU)
			{
				// ECRB0180KW:項目数が正しくありません。（%1%）
				String messageId = JPCBatchMessageConstant.ECRB0180KW;
				String[] logParam = new String[]{rowNum + "行目"};
				errMessage = JBSbatLogPrintControl.getMessage(messageId, logParam);
				super.logPrint.printBusinessErrorLog(messageId, logParam);
			}
		}
		return errMessage;
	}

	/**
	 * MYBOX情報取得
	 * @param userId ユーザーID
	 * @return キューBOX情報Map
	 * 			キー				値
	 * 			KEY_ERR_MESSAGE		エラーメッセージ
	 * 			MYBOX_NO			MYBOX番号
	 * @throws Exception 例外
	 */
	private Map<String, String> getMybox(String userId) throws Exception
	{
		Map<String, String> resultMap = new HashMap<String, String>();
		String errMessage = null;

		// MYBOX情報取得
		executeCR_T_MYBOX_CR_SELECT_001(new String[]{userId});
		JBSbatCommonDBInterface myboxData = db_CR_T_MYBOX.selectNext();
		if (myboxData != null)
		{
			resultMap.put(JBSbatCR_T_MYBOX.MYBOX_NO, myboxData.getString(JBSbatCR_T_MYBOX.MYBOX_NO));
		}
		else
		{
			// ECRB0250KW:データが登録されていません。（%1%）
			String messageId = JPCBatchMessageConstant.ECRB0250KW;
			String[] logParam = new String[]{"[MYBOXテーブル] ユーザーID:" + userId};
			errMessage = JBSbatLogPrintControl.getMessage(messageId, logParam);
			super.logPrint.printBusinessErrorLog(messageId, logParam);
		}

		resultMap.put(ERR_MESSAGE, errMessage);

		return resultMap;
	}

	/**
	 * 対応記録情報取得
	 * @param taioKrkNo 対応記録番号
	 * @param updateDtm 対応記録．更新年月日時分秒
	 * @return 対応記録情報Map
	 * 			キー				値
	 * 			KEY_ERR_MESSAGE		エラーメッセージ
	 * 			MYBOX_NO			MYBOX番号
	 * 			TAIO_STA_DTM		対応開始年月日時分秒
	 * 			TOIAWASE_STAT_CD	問合せ状態コード
	 * 			TAIO_KIROK_RIREKI	対応記録履歴
	 * 			TMP_SAVE_UM			一時保存有無
	 * @throws Exception 例外
	 */
	private Map<String, String> getTaioKrkInfo(String taioKrkNo, String updateDtm) throws Exception
	{
		Map<String, String> resultMap = new HashMap<String, String>();
		String errMessage = null;

		executeCR_T_TAIO_KIROK_CR_SELECT_016(new String[]{taioKrkNo, updateDtm});
		JBSbatCommonDBInterface taioKrkData = db_CR_T_TAIO_KIROK.selectNext();
		if (taioKrkData != null)
		{
			resultMap.put(JBSbatCR_T_TAIO_KIROK.MYBOX_NO, 			taioKrkData.getString(JBSbatCR_T_TAIO_KIROK.MYBOX_NO));				// MYBOX番号
			resultMap.put(JBSbatCR_T_TAIO_KIROK.TAIO_STA_DTM, 		taioKrkData.getString(JBSbatCR_T_TAIO_KIROK.TAIO_STA_DTM));			// 対応開始年月日時分秒
			resultMap.put(JBSbatCR_T_TAIO_KIROK.TOIAWASE_STAT_CD, 	taioKrkData.getString(JBSbatCR_T_TAIO_KIROK.TOIAWASE_STAT_CD));		// 問合せ状態コード
			resultMap.put(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_RIREKI, 	taioKrkData.getString(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_RIREKI));	// 対応記録履歴
			resultMap.put(JBSbatCR_T_TAIO_KIROK.TMP_SAVE_UM, 		taioKrkData.getString(JBSbatCR_T_TAIO_KIROK.TMP_SAVE_UM));			// 一時保存有無
		}
		else
		{
			// ECRB0250KW:データが登録されていません。（%1%）
			String messageId = JPCBatchMessageConstant.ECRB0250KW;
			String[] logParam = new String[]{"[対応記録テーブル] 対応記録番号:" + taioKrkNo + " 更新年月日時分秒:" + updateDtm};
			errMessage = JBSbatLogPrintControl.getMessage(messageId, logParam);
			super.logPrint.printBusinessErrorLog(messageId, logParam);
		}

		resultMap.put(ERR_MESSAGE, errMessage);

		return resultMap;
	}

	/**
	 * 問合せ状態チェック
	 * クローズ有無区分と問合せ状態の関連チェックを行う
	 * @param closeUmu クローズ有無
	 * @param jotaiCd 問合せ状態コード
	 * @param taioKrkNo 対応記録番号
	 * @return エラーメッセージ
	 */
	private String checkToiawaseJotai(String closeUmu, String jotaiCd, String taioKrkNo)
	{
		String errMessage = null;
		if (CLOSE_NASHI.equals(closeUmu))
		{
			// クローズ有無が'0'(無)の場合
			if (JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_OPEN.equals(jotaiCd) == false
				&& JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_ESCL.equals(jotaiCd) == false)
			{
				// 問合せ状態が「オープン」「エスカレーション」でない場合
				// ECRB0190KW:%1%の内容が正しくありません。（%2%）
				String messageId = JPCBatchMessageConstant.ECRB0190KW;
				String[] logParam = new String[]{"問合せ状態", "問合せID:" + taioKrkNo};
				errMessage = JBSbatLogPrintControl.getMessage(messageId, logParam);
				super.logPrint.printBusinessErrorLog(messageId, logParam);
			}
		}
		else
		{
			// クローズ有無が'1'(有)の場合
			if (JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_OPEN.equals(jotaiCd) == false)
			{
				// 問合せ状態が「オープン」でない場合
				// ECRB0190KW:%1%の内容が正しくありません。（%2%）
				String messageId = JPCBatchMessageConstant.ECRB0190KW;
				String[] logParam = new String[]{"問合せ状態", "問合せID:" + taioKrkNo};
				errMessage = JBSbatLogPrintControl.getMessage(messageId, logParam);
				super.logPrint.printBusinessErrorLog(messageId, logParam);
			}
		}
		return errMessage;
	}

	/**
	 * 登録更新処理
	 * @param paramMap 引数格納Map
	 * @throws Exception 例外
	 */
	private void entry(Map<String, String> paramMap) throws Exception
	{
		// 2-(7) データ更新・登録処理

		String closeUmu = 				paramMap.get(CLOSE_UMU_KBN);			// クローズ有無区分
		String loginUserId = 			paramMap.get(LOGIN_USER_ID);			// ログインユーザーID
		String loginUserNm = 			paramMap.get(LOGIN_USER_NM);			// ログインユーザー名
		String loginUserWkKbtOrgCd = 	paramMap.get(LOGIN_USER_WKKBT_ORG_CD);	// ログインユーザーの業務個別設定組織コード
		String taioKrkNo = 				paramMap.get(TAIO_KRK_NO);				// 対応記録番号
		String myboxNo = 				paramMap.get(MYBOX_NO);					// MYBOX番号
		String ichijiHozonUmu = 		paramMap.get(TMP_SAVE_UM);				// 一時保存有無
		String memo = 					paramMap.get(MEMO);						// メモ追記内容

		// (a) 対応記録更新
		updateTaioKrk(paramMap);

		if (CLOSE_ARI.equals(closeUmu) || (memo != null && !("".equals(memo))))
		{
			// クローズ有りの場合、または「メモ追記内容」が空白でない場合

			// (b) 対応記録明細登録・更新

			// (b)-1 最大対応記録明細番号取得
			executeCR_T_TAIOKRK_DTL_CR_SELECT_006(new String[]{taioKrkNo});
			JBSbatCommonDBInterface taioKrkMeisaiData = db_CR_T_TAIOKRK_DTL.selectNext();

			int maxTaioKrkDtlNo = 0;
			if (taioKrkMeisaiData != null)
			{
				BigDecimal bDmaxTaioKrkDtlNo = taioKrkMeisaiData.getBigDecimal(JBSbatCR_T_TAIOKRK_DTL.TAIO_KIROK_DTL_NO);
				if (bDmaxTaioKrkDtlNo != null)
				{
					maxTaioKrkDtlNo = bDmaxTaioKrkDtlNo.intValue();
				}
			}

			String newMeisaiNo = null;

			// (b)-2 対応記録明細登録(メモ登録)
			if (memo != null && !("".equals(memo)))
			{
				// 「メモ追記内容」が空白でない場合
				newMeisaiNo = JCRBatCommon.fillZero(String.valueOf(++maxTaioKrkDtlNo), LENGTH_TAIO_KIROK_DTL_NO, false);
				entryTaioKirkDtlForMemo(taioKrkNo, newMeisaiNo, loginUserId, loginUserWkKbtOrgCd, memo);
			}

			// (b)-3 対応記録明細登録(クローズ)
			if (CLOSE_ARI.equals(closeUmu))
			{
				// クローズ有無が'1'(有)の場合

				newMeisaiNo = JCRBatCommon.fillZero(String.valueOf(++maxTaioKrkDtlNo), LENGTH_TAIO_KIROK_DTL_NO, false);
				entryTaioKirkDtlForClose(taioKrkNo, newMeisaiNo, loginUserId, loginUserWkKbtOrgCd);

				// (b)-4 対応記録明細編集状態フラグ更新
				if (JCRStrConst.TEMP_SAVE_ON.equals(ichijiHozonUmu))
				{
					// クローズ有無が'1'(有)かつ一時保存有無が'1'(一時保存中)の場合
					updateTaioKirkDtl(taioKrkNo);
				}

				// (c) MYBOX更新	(現在格納数 - 1)
				String[] param = new String[]{"-1", sysDtms, batchUserId, myboxNo};
				executeCR_T_MYBOX_CR_UPDATE_002(param);

				// (d) ユーザー別問合せモニタワーク登録	(クローズデータ)
				JCRBatCommon.entryTiawsMonitorData(commonItem,
												JCRStrConst.DATA_SBT_CD_CLOSE,
												taioKrkNo,
												loginUserId,
												loginUserNm,
												loginUserWkKbtOrgCd);
			}
		}
	}

	/**
	 * 対応記録更新
	 * @param paramMap 引数格納Map
	 * @throws Exception 例外
	 */
	private void updateTaioKrk(Map<String, String> paramMap) throws Exception
	{
		String closeUmu = 				paramMap.get(CLOSE_UMU_KBN);						// クローズ有無区分
		String memo = 					paramMap.get(MEMO);									// メモ追記内容
		String easyMemo = 				paramMap.get(EASY_MEMO);							// 簡易メモ
		String loginUserMyBoxNo = 		paramMap.get(LOGIN_USER_MYBOX_NO);					// ログインユーザーのMYBOX番号
		String loginUserId = 			paramMap.get(LOGIN_USER_ID);						// 画面のログインユーザーID
		String loginUserNm = 			paramMap.get(LOGIN_USER_NM);						// 画面のログインユーザー名
		String loginUserWkKbtOrgNm = 	paramMap.get(LOGIN_USER_WKKBT_ORG_NM);				// 画面の業務個別設定組織名
		String taioKrkNo = 				paramMap.get(TAIO_KRK_NO);							// 対応記録番号
		String taioKaishiDtm = 			paramMap.get(TAIO_STA_DTM);							// 対応開始年月日時分秒
		String rireki = 				paramMap.get(TAIO_KIROK_RIREKI);					// 対応記録履歴

		boolean execUpdate = false;

		// 設定値マップ
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();

		if (CLOSE_ARI.equals(closeUmu) || (memo != null && !("".equals(memo))))
		{
			// クローズ有りの場合、または「メモ追記内容」が空白でない場合

			if (CLOSE_ARI.equals(closeUmu))
			{
				// クローズ有りの場合
				setMap.setValue(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_STAT, JCRStrConst.CD_DIV_TAIO_KIROK_STAT_CLOSE);	// 対応記録ステータス　212(クローズ)
				setMap.setValue(JBSbatCR_T_TAIO_KIROK.TAIO_USER_ID, loginUserId);									// 対応ユーザーID
				setMap.setValue(JBSbatCR_T_TAIO_KIROK.MYBOX_NO, loginUserMyBoxNo);									// MYBOX番号
				setMap.setValue(JBSbatCR_T_TAIO_KIROK.QUE_BOX_NO, "");												// キューBOX番号　クリア
				setMap.setValue(JBSbatCR_T_TAIO_KIROK.MYBOX_KAKNO_DTM, sysDtm);										// MYBOX番号格納年月日時分秒
				setMap.setValue(JBSbatCR_T_TAIO_KIROK.QUE_BOX_KAKNO_DTM, "");										// キューBOX番号格納年月日時分秒　クリア
				setMap.setValue(JBSbatCR_T_TAIO_KIROK.TAIO_FIN_DTM, sysDtm);										// 対応完了年月日時分秒
				setMap.setValue(JBSbatCR_T_TAIO_KIROK.LAST_END_DTM, sysDtm);										// 対応クローズ年月日時分秒
				setMap.setValue(JBSbatCR_T_TAIO_KIROK.TOTAL_TRAN_TIME, JCRBatCommon.calcTotalTranTime(taioKaishiDtm, sysDtm));	// トータル処理時間
				setMap.setValue(JBSbatCR_T_TAIO_KIROK.TOIAWASE_STAT_CD, JCRStrConst.CD_DIV_TOIAWASE_STAT_CD_CLOSE);	// 問合せ状態コード　103(クローズ)
				setMap.setValue(JBSbatCR_T_TAIO_KIROK.TMP_SAVE_UM, JCRStrConst.TEMP_SAVE_OFF);						// 一時保存有無
			}

			// 対応記録履歴の終端改行コード付加処理
			rireki = JCRUtilCommon.addCRLF(rireki);

			// 対応記録履歴
			rireki = rireki + makeRireki(closeUmu, memo, loginUserNm, loginUserWkKbtOrgNm);

			setMap.setValue(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_RIREKI, rireki);

			execUpdate = true;
		}

		if (easyMemo != null && !("".equals(easyMemo)))
		{
			// 簡易メモが空白でない場合
			setMap.setValue(JBSbatCR_T_TAIO_KIROK.EASY_MEMO, easyMemo);				// 簡易メモ

			execUpdate = true;
		}

		if (execUpdate)
		{
			setMap.setValue(JBSbatCR_T_TAIO_KIROK.UPD_DTM, sysDtms);				// 更新年月日時分秒
			setMap.setValue(JBSbatCR_T_TAIO_KIROK.UPD_OPEACNT, batchUserId);		// 更新オペレータアカウント

			// 条件
			JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
			whereMap.setValue(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_NO, taioKrkNo);		// 対応記録番号

			db_CR_T_TAIO_KIROK.updateByPrimaryKeys(whereMap, setMap);
		}
	}

	/**
	 * 対応記録履歴生成
	 * @param closeUmuKbn クローズ有無区分
	 * @param memo メモ追記内容
	 * @param loginUserNm ログインユーザー名
	 * @param loginUserWkKbtOrgNm ログインユーザーの業務個別設定組織名
	 * @return 生成された対応記録履歴
	 * @throws Exception 例外
	 */
	private String makeRireki(String closeUmuKbn,
							String memo,
							String loginUserNm,
							String loginUserWkKbtOrgNm) throws Exception
	{
		StringBuilder sb = new StringBuilder();
		if (CLOSE_ARI.equals(closeUmuKbn))
		{
			sb.append("◇一括クローズ：　").append(loginUserWkKbtOrgNm).append("(").append(loginUserNm).append(") ");
			sb.append(JCRBatCommon.formatDatetimeMM(sysDtm.substring(0, KETA_YYYYMMDDHHMM))).append(JCRStrConst.KAIGYO_CD);
		}
		else
		{
			if (memo != null && !("".equals(memo)))
			{
				// 「メモ追記内容」が空白でない場合
				sb.append("◆対応箇所：　").append(loginUserWkKbtOrgNm).append("(").append(loginUserNm).append(") ").append(JCRStrConst.KAIGYO_CD);
				sb.append("　対応日時：　").append(JCRBatCommon.formatDatetimeMM(sysDtm.substring(0, KETA_YYYYMMDDHHMM))).append(JCRStrConst.KAIGYO_CD);
				sb.append("　対応種別：　一括入力").append(JCRStrConst.KAIGYO_CD);
			}
		}

		if (memo != null && !("".equals(memo)))
		{
			// 「メモ追記内容」が空白でない場合
			sb.append(JCRStrConst.KAIGYO_CD);
			sb.append("■一括入力").append(JCRStrConst.KAIGYO_CD);
			sb.append(memo).append(JCRStrConst.KAIGYO_CD);
		}

		if (sb.length() > 0)
		{
			sb.append("------------------------------------------------------------").append(JCRStrConst.KAIGYO_CD);
		}

		commonItem.getLogPrint().printDebugLog("一括メモ登録情報：" + JCRStrConst.KAIGYO_CD + sb);

		return sb.toString();
	}

	/**
	 * 対応記録明細登録(メモ登録)
	 * @param taioKrkNo 対応記録番号
	 * @param taioKrkDtlNo 対応記録明細番号
	 * @param taioUserId 対応ユーザーID
	 * @param wkKbtOrgCd 業務個別設定組織コード
	 * @param memo メモ
	 * @throws Exception 例外
	 */
	private void entryTaioKirkDtlForMemo(String taioKrkNo,
										String taioKrkDtlNo,
										String taioUserId,
										String wkKbtOrgCd,
										String memo) throws Exception
	{
		String[] param = new String[]{
				taioKrkNo,										// 対応記録番号
				taioKrkDtlNo,									// 対応記録明細番号
				JCRStrConst.CD_DIV_ACTION_TYPE_CD_MEMO,			// アクションタイプコード(メモ登録)
				sysDtm,											// アクション開始年月日時分秒
				sysDtm,											// アクション完了年月日時分秒
				taioUserId,										// 対応ユーザーID
				null,											// 問合せ内容
				null,											// 問合せ元名
				null,											// 回答内容
				null,											// コンタクト先コード
				memo,											// メモ内容
				JCRStrConst.CD_DIV_MEMO_TYPE_CD_MEMO,			// メモタイプコード
				JCRStrConst.CD_DIV_HENSHU_STAT_FLG_KANRYO,		// 編集中フラグ
				null,											// メール受信番号
				null,											// メールヘッダー内タイトル
				null,											// メールヘッダー内送信者メールアドレス
				null,											// メールヘッダー内宛先メールアドレス
				null,											// メールヘッダー内CCメールアドレス
				null,											// メールヘッダー内メッセージＩＤ
				null,											// メールヘッダー内送信年月日時分秒
				null,											// メールヘッダー内受信年月日時分秒
				null,											// メール送信番号
				null,											// メールタイトル
				null,											// メール受信本文
				null,											// 元メールアドレス
				null,											// メールヘッダー
				null,											// メールフッター
				null,											// メール本文
				null,											// 送信先メールアドレス
				null,											// 送信元メールアドレス
				null,											// CCメールアドレス
				null,											// 送信メールタイプコード
				null,											// メール送信年月日時分秒
				null,											// 送信ユーザーID
				null,											// 送信状態コード
				null,											// 返信記号コード
				sysDtms,										// 登録年月日時分秒
				batchUserId,									// 登録オペレータアカウント
				sysDtms,										// 更新年月日時分秒
				batchUserId,									// 更新オペレータアカウント
				null,											// 削除年月日時分秒
				null,											// 削除オペレータアカウント
				JCRStrConst.CD_DIV_MK_FLG_YUKO,					// 無効フラグ
				null,											// 登録運用年月日
				null,											// 登録処理ＩＤ
				null,											// 更新運用年月日
				null,											// 更新処理ＩＤ
				null,											// 削除運用年月日
				null,											// 削除処理ＩＤ
				wkKbtOrgCd										// 業務個別設定組織コード
		};
		// 対応記録明細登録
		executeCR_T_TAIOKRK_DTL_PKINSERT(param);
	}

	/**
	 * 対応記録明細登録(クローズ)
	 * @param taioKrkNo 対応記録番号
	 * @param taioKrkDtlNo 対応記録明細番号
	 * @param taioUserId 対応ユーザーID
	 * @param wkKbtOrgCd 業務個別設定組織コード
	 * @throws Exception 例外
	 */
	private void entryTaioKirkDtlForClose(String taioKrkNo, String taioKrkDtlNo, String taioUserId, String wkKbtOrgCd) throws Exception
	{
		String[] param = new String[]{
				taioKrkNo,										// 対応記録番号
				taioKrkDtlNo,									// 対応記録明細番号
				JCRStrConst.CD_DIV_ACTION_TYPE_CD_CLOSE,		// アクションタイプコード(メモ登録)
				sysDtm,											// アクション開始年月日時分秒
				sysDtm,											// アクション完了年月日時分秒
				taioUserId,										// 対応ユーザーID
				null,											// 問合せ内容
				null,											// 問合せ元名
				null,											// 回答内容
				null,											// コンタクト先コード
				null,											// メモ内容
				null,											// メモタイプコード
				JCRStrConst.CD_DIV_HENSHU_STAT_FLG_KANRYO,		// 編集中フラグ
				null,											// メール受信番号
				null,											// メールヘッダー内タイトル
				null,											// メールヘッダー内送信者メールアドレス
				null,											// メールヘッダー内宛先メールアドレス
				null,											// メールヘッダー内CCメールアドレス
				null,											// メールヘッダー内メッセージID
				null,											// メールヘッダー内送信年月日時分秒
				null,											// メールヘッダー内受信年月日時分秒
				null,											// メール送信番号
				null,											// メールタイトル
				null,											// メール受信本文
				null,											// 元メールアドレス
				null,											// メールヘッダー
				null,											// メールフッター
				null,											// メール本文
				null,											// 送信先メールアドレス
				null,											// 送信元メールアドレス
				null,											// CCメールアドレス
				null,											// 送信メールタイプコード
				null,											// メール送信年月日時分秒
				null,											// 送信ユーザーＩＤ
				null,											// 送信状態コード
				null,											// 返信記号コード
				sysDtms,										// 登録年月日時分秒
				batchUserId,									// 登録オペレータアカウント
				sysDtms,										// 更新年月日時分秒
				batchUserId,									// 更新オペレータアカウント
				null,											// 削除年月日時分秒
				null,											// 削除オペレータアカウント
				JCRStrConst.CD_DIV_MK_FLG_YUKO,					// 無効フラグ
				null,											// 登録運用年月日
				null,											// 登録処理ＩＤ
				null,											// 更新運用年月日
				null,											// 更新処理ＩＤ
				null,											// 削除運用年月日
				null,											// 削除処理ＩＤ
				wkKbtOrgCd										// 業務個別設定組織コード
		};
		// 対応記録明細登録
		executeCR_T_TAIOKRK_DTL_PKINSERT(param);
	}

	/**
	 * 対応記録明細　編集状態フラグ更新
	 * @param taioKrkNo 対応記録番号
	 * @throws Exception 例外
	 */
	private void updateTaioKirkDtl(String taioKrkNo) throws Exception
	{
		executeCR_T_TAIOKRK_DTL_CR_UPDATE_002(new String[]{sysDtms, batchUserId, taioKrkNo});
	}

	/**
	 * (8) 終了処理
	 * @param shoriiraiNo ディレイド処理依頼番号
	 * @param shoriKekkaCd ディレイド処理結果コード
	 * @param errList エラー情報List
	 * @throws Exception 例外
	 */
	private void end(String shoriiraiNo, String shoriKekkaCd, List<String> errList) throws Exception
	{
		// (8) 終了処理

		// (a) 更新処理コミット
		commitOrRollback(shoriKekkaCd);

		// (b) エラー情報ファイル出力
		String errFilePath = null;
		if (errList != null && (errList.isEmpty() == false))
		{
			errFilePath = entryErrFile(errList);
		}

		// (c) ディレイド処理依頼結果更新処理
		entryShoriKekka(shoriiraiNo, shoriKekkaCd, errFilePath);

		// (d) 一時ファイル削除
		JCRUtilCommon.deleteTempFile(errFilePath);
	}

	/**
	 * エラーファイル作成
	 * @param errList	エラーリスト
	 * @return エラーファイル名
	 * @throws Exception 例外
	 */
	private String entryErrFile(List<String> errList) throws Exception
	{
		String errFilePath = tmpFileDir + File.separator + super.jobid + "_" + sysDtms + ".TXT";
		JCRBatCommon.entryErrFileData(commonItem, errFilePath, errList);

		return errFilePath;
	}

	/**
	 * 更新処理コミット(またはロールバック)
	 * @param shoriKekkaCd ディレイド処理結果コード
	 * @throws Exception 例外
	 */
	private void commitOrRollback(String shoriKekkaCd) throws Exception
	{
		if (JCRStrConst.DLYD_OK.equals(shoriKekkaCd))
		{
			// 正常終了の場合
			// 更新処理コミット
			super.commit();
		}
		else
		{
			// ロールバック
			commonItem.getConnection().rollback();
		}
	}

	/**
	 * (8)-(c) 処理依頼結果登録
	 * @param shoriIraiNo ディレイド処理依頼番号
	 * @param shoriKekkaCd ディレイド処理結果コード
	 * @param errFilePath エラーファイルパス(エラーが無い場合はnull)
	 * @throws Exception 例外
	 */
	private void entryShoriKekka(String shoriIraiNo, String shoriKekkaCd, String errFilePath) throws Exception
	{
		// (8)-(c) 処理依頼結果登録

		// 1 ディレイド処理依頼結果更新処理
		JCRBatCommon.updateShoriIraiResult(commonItem, shoriIraiNo, shoriKekkaCd, errFilePath);

		// 2 ディレイド処理結果登録コミット
		super.commit();
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CR_T_MYBOX.close();
		db_CR_T_TAIO_KIROK.close();
		db_CR_T_TAIOKRK_DTL.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/

		// データアクセスオブジェクトクローズ
		JCRBatCommon.closeDataAccessObj(commonItem);

	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(CR_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	ユーザーID
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCR_T_MYBOX_CR_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CR_T_MYBOX.selectBySqlDefine(paramList, CR_T_MYBOX_CR_SELECT_001);
	}

	/**
	 * SQLKEY(CR_SELECT_016)で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_TAIO_KIROK_CR_SELECT_016(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CR_T_TAIO_KIROK.selectBySqlDefine(paramList, CR_T_TAIO_KIROK_CR_SELECT_016);
	}

	/**
	 * 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配列に入れます。バイント変数は以下に説明します。
	 *		 	更新年月日時分秒
	 *		 	更新オペレータアカウント
	 *		 	対応記録番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCR_T_TAIOKRK_DTL_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());

		// DBアクセスを実行します
		db_CR_T_TAIOKRK_DTL.executeBySqlDefine(paramList, CR_T_TAIOKRK_DTL_CR_UPDATE_002);
	}

	/**
	 * 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);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
