/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JCHbatTaiorrkDataAdd
 *	ソースファイル名	：JCHbatTaiorrkDataAdd.java
 *	作成者				：富士通　
 *	作成日				：2012年12月17日
 *＜機能概要＞
 *　対応記録関連データ登録部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2012/12/17	富士通		新規作成
*	v6.00.00	2013/12/20   FJ) 早崎	【ANK-1749-00-00】料金対応記録一括登録処理の場合問合せタイトルをカテゴリ名として登録するように修正
 *  v13.00.00   2015/02/24   FJ)寺園     ANK-2416-00-00_請求書のハガキ化対応
 *  v13.00.01   2015/03/31   FJ)寺園     ST4-2015-0000001　性能改善対応
 *  v19.00.00   2015/09/15   FJ)中嶋     OM-2015-0000931　ユーザーがnull表示対応
 *********************************************************************/
package eo.business.common;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import eo.business.util.file.JBSbatCHIFM096;
import eo.business.util.table.JBSbatCR_T_TAIOKRK_DTL;
import eo.business.util.table.JBSbatCR_T_TAIO_KIROK;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JZM0171Constant;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
 * 対応記録関連データ登録部品です。
 * （対応履歴チーム主管テーブルへの登録関連）
 * <p>
 *<BR>
 * @author 富士通
 */
public class JCHbatTaiorrkDataAdd
{
	/** マップからのタイトル取得キー */
	public static final String KEY_TITLE = "TITLE";

	/** １番目の対応記録明細番号 */
	private static final String TAIO_KIROK_DTL_NO_FIRST = "0000000001";

	/** ２番目の対応記録明細番号 */
	private static final String TAIO_KIROK_DTL_NO_SECOND = "0000000002";

	/** ３番目の対応記録明細番号 */
	private static final String TAIO_KIROK_DTL_NO_THIRD = "0000000003";

	/** 対応記録番号のシーケンス名 */
	private static final String SEQ_TAIO_KIROK_NO = "SEQ_TAIO_KIROK_NO";

	/** 対応記録番号の桁数 */
	private static final int KETA_TAIO_KIROK_NO = 10;

	/** 対応記録ステータス　クローズ　"212" */
	private static final String TAIO_KIROK_STAT_CLOSE = "212";

	/** 問合せ状態コード　クローズ　"103" */
	private static final String TOIAWASE_STAT_CD_CLOSE = "103";

	/** アクションタイプコード　新規　"01" */
	private static final String ACTION_TYPE_CD_SHINKI = "01";

	/** アクションタイプコード　コール　"02" */
	private static final String ACTION_TYPE_CD_CALL = "02";

	/** アクションタイプコード　クローズ　"10" */
	private static final String ACTION_TYPE_CD_CLOSE = "10";

	/** データ種別コード　クローズデータ　"2" */
	private static final String DATA_SBT_CD_CLOSE = "2";

	/** 問合せ受付種別コード　他システム　"004" */
	private static final String TIAWS_UKTKSBT_CD_TA_SYSTEM = "004";

	/** 問合せ受付種別コード　当処理用 */
	private static final String TIAWS_UKTKSBT_CD = TIAWS_UKTKSBT_CD_TA_SYSTEM;

	/** 対応記録履歴　項目分割線 */
	private static final String RIREKI_SEPARATE_LINE = "------------------------------------------------------------";

	/** 改行コード */
	private static final String KAIGYO_CD = "\r\n";

	/** YYYYMMDDHHmmの桁数 */
	private static final int KETA_YYYYMMDDHHMM = 12;

	/** テーブル(対応記録)*/
	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_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";
	/** SQL定義キー(CH_SELECT_001)*/
	private static final String ZM_M_CD_NM_KANRI_CH_SELECT_001 = "CH_SELECT_001";
	/** SQL定義キー(CH_SELECT_007)*/
	private static final String ZM_M_CD_NM_KANRI_CH_SELECT_007 = "CH_SELECT_007";

	/** バッチ共通パラメータ */
	private JBSbatCommonItem commonItem;

	/** テーブルアクセスクラス(対応記録)*/
	private JBSbatSQLAccess db_CR_T_TAIO_KIROK;
	/** テーブルアクセスクラス(対応記録明細)*/
	private JBSbatSQLAccess db_CR_T_TAIOKRK_DTL;
	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI;

	/** 問合せ受付種別名 */
	private String toiawaseUkSbtNm;

	/** ユーザーID */
	private String userId;
	/** ユーザー名 */
	private String userNm;
// OM-2015-0000931 ADD STA
	/** 対応記録ユーザー名 */
	private String taiokrkUserNm;
// OM-2015-0000931 ADD END
	/** 業務個別設定組織コード */
	private String wkkbtOrgCd;
	/** 業務個別設定組織名 */
	private String wkkbtOrgNm;

	/**
	 * コンストラクタ
	 * @param item バッチ共通パラメータ
	 * @throws Exception
	 */
	private JCHbatTaiorrkDataAdd(JBSbatCommonItem item) throws Exception
	{
		// (1) バッチ共通パラメータの取得
		commonItem = item;

		// (2) テーブルアクセスクラスを生成する。
		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_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);

		// (3) 問合せ受付種別名取得
		toiawaseUkSbtNm = getToiawaseUkSbtNm(TIAWS_UKTKSBT_CD);
	}

	/**
	 * コンストラクタ
	 * @param item バッチ共通パラメータ
	 * @param prmUserId ユーザーID
	 * @throws Exception
	 */
	public JCHbatTaiorrkDataAdd(JBSbatCommonItem item, String prmUserId) throws Exception
	{
		this(item);

		// ユーザーIDの設定
		userId = prmUserId;

		// (4) ユーザー名の取得
		userNm = JACBatCommon.getUserNm(commonItem, userId);
		
// OM-2015-0000931 ADD STA
		// ユーザー名がnullの場合
		if (userNm == null)
		{
			// 対応記録ユーザー名に「空文字」を代入
			taiokrkUserNm = "";
		} else {
			// 対応記録ユーザー名に「ユーザー名」を代入
			taiokrkUserNm = userNm;
		}
// OM-2015-0000931 ADD END

		// (5) 業務個別設定組織コードの取得
		wkkbtOrgCd = JACBatCommon.getWorkGroupCd(commonItem, userId);

		// (6) 業務個別設定組織名の取得
		wkkbtOrgNm = JACBatCommon.getWkkbtOrgNm(commonItem, wkkbtOrgCd);
	}

	/**
	 * 問合せ受付種別名設定
	 * @param toiawaseUkSbtCd 問合せ受付種別コード
	 * @return 問合せ受付種別名
	 * @throws Exception 例外
	 */
	private String getToiawaseUkSbtNm(String toiawaseUkSbtCd) throws Exception
	{
		String retToiawaseUkSbtNm = "";

		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(JZM0171Constant.CD00233);	// 問合せ受付種別コード
		paramList.setValue(toiawaseUkSbtCd);
		paramList.setValue(commonItem.getOpeDate());
		paramList.setValue(commonItem.getOpeDate());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_CH_SELECT_001);

		// データ1行の取得
		JBSbatCommonDBInterface selectedData = db_ZM_M_CD_NM_KANRI.selectNext();
		if (selectedData != null)
		{
			retToiawaseUkSbtNm = selectedData.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM);
		}

		return retToiawaseUkSbtNm;
	}

	/**
	 * 対応記録関連データ登録
	 * @param inMap 入力電文
	 * @param svcKeiNoList サービス契約番号リスト
	 * @return taiokrkNo 対応記録番号（最初に採番したもの）
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	public String taiorrkDataAdd(JBSbatServiceInterfaceMap inMap, List<String> svcKeiNoList) throws Exception
	{
		// 対応記録番号（返却用）
		String retTaioKirokNo = null;

		// (1) 対応記録関連データ登録
		for (int i = 0; i < svcKeiNoList.size(); i++)
		{
			// (a) 対応記録登録
			String taioKirokNo = entryTaioKirok(svcKeiNoList.get(i), inMap);

			if (i == 0)
			{
				// 最初に採番した「対応記録番号」を退避
				retTaioKirokNo = taioKirokNo;
			}

			// 対応年月日時分秒の先頭14桁取得
			String taioDtm = inMap.getString(JBSbatCHIFM096.TAIO_DTM).substring(0, 14);

			// (b) 対応記録明細登録(新規作成分)
			entryTaioKrkDtlNew(taioKirokNo, taioDtm, taioDtm, userId);

			// (c) 対応記録明細登録(コール対応記録分)
			entryTaioKrkDtlCall(taioKirokNo, TAIO_KIROK_DTL_NO_SECOND, taioDtm, taioDtm, userId, inMap.getString(JBSbatCHIFM096.KIJI));

			// (d) 対応記録明細登録(クローズ分)
			entryTaioKrkDtlClose(taioKirokNo, TAIO_KIROK_DTL_NO_THIRD, taioDtm, taioDtm, userId);

			// (e) カテゴリー取得
			String[] ctgrs = getCtgr(inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_CD),
									inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_DTL_CD),
									inMap.getString(JBSbatCHIFM096.TOKUSOKU_STAT_CHAF));

			// 料金対応記録一括登録処理の場合
			if(JACStrConst.TKRK_SBT_KIJI_ADD.equals(inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_CD))
							&& JACStrConst.TKRK_SBTD_KIJI_ADD_BATCH.equals(inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_DTL_CD))
							&& null != inMap.getString(JACStrConst.TAIO_KRK_TITLE))
			{
				ctgrs[2] = inMap.getString(JACStrConst.TAIO_KRK_TITLE);
			}
			
			if (ctgrs != null && ctgrs.length > 0)
			{
				// (f) 対応記録内訳登録
				JACBatCommon.entryTaiokirkUcwk(commonItem, taioKirokNo);

				// (g) 対応記録内訳カテゴリー登録
				JACBatCommon.entryTaiokirkUwCtgr(commonItem, ctgrs, taioKirokNo);

				// (h) 対応記録内訳抽出ワーク登録
				JACBatCommon.entryTiokrUwCstWkForNew(commonItem, taioKirokNo);
			}

			// (i) 問合せモニターワーク登録
			JACBatCommon.entryTiawsMonitorData(commonItem, DATA_SBT_CD_CLOSE, taioKirokNo, userId, userNm, wkkbtOrgCd);
		}

		// (2) 対応記録番号返却
		return retTaioKirokNo;
	}

	/**
	 * 対応記録登録
	 * @param svcKeiNo サービス契約番号
	 * @param inMap 入力電文
	 * @return 対応記録番号
	 * @throws Exception 例外
	 */
	private String entryTaioKirok(String svcKeiNo, JBSbatServiceInterfaceMap inMap) throws Exception
	{
		JBSbatCommonDBInterface paramMap = new JBSbatCommonDBInterface();

		// 対応記録番号
		String taioKirokNo = JCCBatCommon.getFormatedNextSeq(commonItem, SEQ_TAIO_KIROK_NO, "", KETA_TAIO_KIROK_NO);
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_NO, taioKirokNo);

		// 対応記録ステータス
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_STAT, TAIO_KIROK_STAT_CLOSE);
		// 対応ユーザーID
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.TAIO_USER_ID, userId);
		// サービス契約番号
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.SVC_KEI_NO, svcKeiNo);

		// 対応年月日時分秒の先頭14桁取得
		String taioDtm = inMap.getString(JBSbatCHIFM096.TAIO_DTM).substring(0, 14);

		// 対応開始年月日時分秒
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.TAIO_STA_DTM, taioDtm);
		// 対応完了年月日時分秒
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.TAIO_FIN_DTM, taioDtm);
		// 対応クローズ年月日時分秒
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.LAST_END_DTM, taioDtm);
		// トータル処理時間
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.TOTAL_TRAN_TIME, 0);
		// 問合せ状態コード
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.TOIAWASE_STAT_CD, TOIAWASE_STAT_CD_CLOSE);
		// クローズ不可コード
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.CLOSE_FAIL_CD, "0");
		// 問合せ受付種別コード
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.TOIAWASE_UK_SBT_CD, TIAWS_UKTKSBT_CD);
		// v13.00.00 ADD START
		// 料金対応記録種別コードが請求書印刷結果作成（バッチ）の場合
		if(JACStrConst.TKRK_SBT_SEIKY_OUTPUT_CRE_BATCH.equals(inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_CD)))
		{
			// 簡易メモ
			paramMap.setValue(JBSbatCR_T_TAIO_KIROK.EASY_MEMO, inMap.getString(JBSbatCHIFM096.KIJI));
		}
		// v13.00.00 ADD END
		// タイトル
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.TITLE, inMap.getString(KEY_TITLE));

		// 対応記録履歴生成
// OM-2015-0000931 MOD STA
//		String rireki = makeRirekiNew(taioDtm, wkkbtOrgNm, userNm)
//					+ makeRirekiCall(taioDtm, wkkbtOrgNm, userNm, toiawaseUkSbtNm, null, null, inMap.getString(JBSbatCHIFM096.KIJI))
//					+ makeRirekiClose(taioDtm, wkkbtOrgNm, userNm);
		String rireki = makeRirekiNew(taioDtm, wkkbtOrgNm, taiokrkUserNm)
					+ makeRirekiCall(taioDtm, wkkbtOrgNm, taiokrkUserNm, toiawaseUkSbtNm, null, null, inMap.getString(JBSbatCHIFM096.KIJI))
					+ makeRirekiClose(taioDtm, wkkbtOrgNm, taiokrkUserNm);
// OM-2015-0000931 MOD END
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.TAIO_KIROK_RIREKI, rireki);

		// 受付年月日時分秒
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.UK_DTM, taioDtm);
		// 一時保存有無
		paramMap.setValue(JBSbatCR_T_TAIO_KIROK.TMP_SAVE_UM, "0");

		// ◆ 登録
		// v13.00.01 MOD START
//		db_CR_T_TAIO_KIROK.insertByPrimaryKeys(paramMap);
		db_CR_T_TAIO_KIROK.insertByPrimaryKeysBatch(paramMap);
		// v13.00.01 MOD END

		return taioKirokNo;
	}

	/**
	 * 対応記録履歴生成(新規作成用)
	 * @param prmTaioDtm 対応年月日時分秒　YYYYMMDDHHMMSS　14バイト
	 * @param prmWkkbtOrgNm 業務個別設定組織名
	 * @param prmUserNm ユーザー名
	 * @return 生成された対応記録履歴
	 * @throws Exception 例外
	 */
	private String makeRirekiNew(String prmTaioDtm, String prmWkkbtOrgNm, String prmUserNm) throws Exception
	{
		StringBuilder sb = new StringBuilder();

		String sysYYYYMMDDHHMM = JCCBatCommon.formatDatetimeMM(prmTaioDtm.substring(0, KETA_YYYYMMDDHHMM));

		sb.append(RIREKI_SEPARATE_LINE).append(KAIGYO_CD);
		sb.append("◇新規作成：").append(prmWkkbtOrgNm).append("(").append(prmUserNm).append(") ").append(sysYYYYMMDDHHMM).append(KAIGYO_CD);
		sb.append(RIREKI_SEPARATE_LINE).append(KAIGYO_CD);

		return sb.toString();
	}

	/**
	 * 対応記録履歴生成(コール対応記録用)
	 * 「料金対応記録登録処理」以外から呼び出す場合は、
	 * 「UIA28_CR_01_対応記録履歴フォーマット.xlsx」を確認の上
	 * 必要であればカスタマイズする。
	 * @param prmTaioDtm 対応年月日時分秒　YYYYMMDDHHMMSS　14バイト
	 * @param prmWkkbtOrgNm 業務個別設定組織名
	 * @param prmUserNm ユーザー名
	 * @param prmToiawaseUkSbtNm 問合せ受付種別名
	 * @param prmContactSakiNm コンタクト先名
	 * @param prmOkyakusamaNm お客様名
	 * @param prmToiawaseNaoyo 問合せ内容
	 * @return 生成された対応記録履歴
	 * @throws Exception 例外
	 */
	private String makeRirekiCall(String prmTaioDtm,
								String prmWkkbtOrgNm,
								String prmUserNm,
								String prmToiawaseUkSbtNm,
								String prmContactSakiNm,
								String prmOkyakusamaNm,
								String prmToiawaseNaoyo) throws Exception
	{
		StringBuilder sb = new StringBuilder();

		String sysYYYYMMDDHHMMSS = JCCBatCommon.formatDatetimeSS(prmTaioDtm);

		sb.append("◆対応箇所：").append(prmWkkbtOrgNm).append("(").append(prmUserNm).append(")").append(KAIGYO_CD);
		sb.append("　対応日時：").append(sysYYYYMMDDHHMMSS).append(" - ").append(sysYYYYMMDDHHMMSS).append(KAIGYO_CD);
		sb.append("　対応種別：").append(prmToiawaseUkSbtNm).append(KAIGYO_CD);

		sb.append("　お客様　：");

		if (JACBatCommon.isNull(prmContactSakiNm) == false)
		{
			// コンタクト先名を設定する場合
			sb.append(prmContactSakiNm);
		}
		if (JACBatCommon.isNull(prmOkyakusamaNm) == false)
		{
			// お客様名を設定する場合
			sb.append("(").append(prmOkyakusamaNm).append(")");
		}

		sb.append(KAIGYO_CD);

		if (JACBatCommon.isNull(prmToiawaseNaoyo) == false)
		{
			sb.append(KAIGYO_CD);
			sb.append("■問合せ内容").append(KAIGYO_CD);
			sb.append(prmToiawaseNaoyo).append(KAIGYO_CD);
		}

		sb.append(RIREKI_SEPARATE_LINE).append(KAIGYO_CD);

		return sb.toString();
	}

	/**
	 * 対応記録履歴生成(クローズ用)
	 * @param prmTaioDtm 対応年月日時分秒　YYYYMMDDHHMMSS　14バイト
	 * @param prmWkkbtOrgNm 業務個別設定組織名
	 * @param prmUserNm ユーザー名
	 * @return 生成された対応記録履歴
	 * @throws Exception 例外
	 */
	private String makeRirekiClose(String prmTaioDtm, String prmWkkbtOrgNm, String prmUserNm) throws Exception
	{
		StringBuilder sb = new StringBuilder();

		String sysYYYYMMDDHHMM = JCCBatCommon.formatDatetimeMM(prmTaioDtm.substring(0, KETA_YYYYMMDDHHMM));

		sb.append("◇クローズ：").append(prmWkkbtOrgNm).append("(").append(prmUserNm).append(") ").append(sysYYYYMMDDHHMM).append(KAIGYO_CD);
		sb.append(RIREKI_SEPARATE_LINE).append(KAIGYO_CD);

		return sb.toString();
	}

	/**
	 * 対応記録明細登録(新規作成用)
	 * @param taioKirokNo 対応記録番号
	 * @param actionStaDtm アクション開始年月日時分秒
	 * @param actionFinDtm アクション終了年月日時分秒
	 * @param taioUserId 対応ユーザーID
	 * @throws Exception 例外
	 */
	public void entryTaioKrkDtlNew(String taioKirokNo,
									String actionStaDtm,
									String actionFinDtm,
									String taioUserId) throws Exception
	{
		entryTaioKrkDtl(taioKirokNo, TAIO_KIROK_DTL_NO_FIRST, ACTION_TYPE_CD_SHINKI, actionStaDtm, actionFinDtm, taioUserId, null);
	}

	/**
	 * 対応記録明細登録(コール対応記録用)
	 * 「料金対応記録登録処理」以外から呼び出す場合は、
	 * 設定内容を確認の上、必要であればカスタマイズする。
	 * @param taioKirokNo 対応記録番号
	 * @param taioKirokDtlNo 対応記録明細番号
	 * @param actionStaDtm アクション開始年月日時分秒
	 * @param actionFinDtm アクション終了年月日時分秒
	 * @param taioUserId 対応ユーザーID
	 * @param toiawaseNaoyo 問合せ内容
	 * @throws Exception 例外
	 */
	public void entryTaioKrkDtlCall(String taioKirokNo,
									String taioKirokDtlNo,
									String actionStaDtm,
									String actionFinDtm,
									String taioUserId,
									String toiawaseNaoyo) throws Exception
	{
		entryTaioKrkDtl(taioKirokNo, taioKirokDtlNo, ACTION_TYPE_CD_CALL, actionStaDtm, actionFinDtm, taioUserId, toiawaseNaoyo);
	}

	/**
	 * 対応記録明細登録(クローズ用)
	 * @param taioKirokNo 対応記録番号
	 * @param taioKirokDtlNo 対応記録明細番号
	 * @param actionStaDtm アクション開始年月日時分秒
	 * @param actionFinDtm アクション終了年月日時分秒
	 * @param taioUserId 対応ユーザーID
	 * @throws Exception 例外
	 */
	public void entryTaioKrkDtlClose(String taioKirokNo,
									String taioKirokDtlNo,
									String actionStaDtm,
									String actionFinDtm,
									String taioUserId) throws Exception
	{
		entryTaioKrkDtl(taioKirokNo, taioKirokDtlNo, ACTION_TYPE_CD_CLOSE, actionStaDtm, actionFinDtm, taioUserId, null);
	}

	/**
	 * 対応記録明細登録
	 * 「料金対応記録登録処理」以外から呼び出す場合は、
	 * 設定内容を確認の上、必要であればカスタマイズする。
	 * @param taioKirokNo 対応記録番号
	 * @param taioKirokDtlNo 対応記録明細番号
	 * @param actionTypeCd アクションタイプコード
	 * @param actionStaDtm アクション開始年月日時分秒
	 * @param actionFinDtm アクション終了年月日時分秒
	 * @param taioUserId 対応ユーザーID
	 * @param toiawaseNaoyo 問合せ内容
	 * @throws Exception 例外
	 */
	private void entryTaioKrkDtl(String taioKirokNo,
									String taioKirokDtlNo,
									String actionTypeCd,
									String actionStaDtm,
									String actionFinDtm,
									String taioUserId,
									String toiawaseNaoyo) throws Exception
	{
		JBSbatCommonDBInterface inMap = new JBSbatCommonDBInterface();

		// 対応記録番号
		inMap.setValue(JBSbatCR_T_TAIOKRK_DTL.TAIO_KIROK_NO, taioKirokNo);
		// 対応記録明細番号
		inMap.setValue(JBSbatCR_T_TAIOKRK_DTL.TAIO_KIROK_DTL_NO, taioKirokDtlNo);
		// アクションタイプコード
		inMap.setValue(JBSbatCR_T_TAIOKRK_DTL.ACTION_TYPE_CD, actionTypeCd);
		// アクション開始年月日時分秒
		inMap.setValue(JBSbatCR_T_TAIOKRK_DTL.ACTION_STA_DTM, actionStaDtm);
		// アクション完了年月日時分秒
		inMap.setValue(JBSbatCR_T_TAIOKRK_DTL.ACTION_FIN_DTM, actionFinDtm);
		// 対応ユーザーID
		inMap.setValue(JBSbatCR_T_TAIOKRK_DTL.TAIO_USER_ID, taioUserId);

		if (JACBatCommon.isNull(toiawaseNaoyo) == false)
		{
			// 問合せ内容
			inMap.setValue(JBSbatCR_T_TAIOKRK_DTL.TOIAWASE_NAIYO, toiawaseNaoyo);
		}

		// 編集状態フラグ
		inMap.setValue(JBSbatCR_T_TAIOKRK_DTL.HENSHU_STAT_FLG, "0");

		// ◆ 登録
		// v13.00.01 MOD START
//		db_CR_T_TAIOKRK_DTL.insertByPrimaryKeys(inMap);
		db_CR_T_TAIOKRK_DTL.insertByPrimaryKeysBatch(inMap);
		// v13.00.01 MOD END
	}

	/**
	 * カテゴリー取得
	 * 「料金対応記録種別コード」「料金対応記録種別詳細コード」「変更後督促ステータス」を使用して、
	 * 料金対応記録カテゴリレベルコード先頭９桁でコード名称管理をLIKE検索する。
	 * SQLKEY(CH_SELECT_007)でDBアクセスを行います。<br>
	 * @param prcTaioKirokSbtCd 料金対応記録種別コード
	 * @param prcTaioKirokSbtDtlCd 料金対応記録種別詳細コード
	 * @param tokusokuStat 変更後督促ステータス
	 * @return カテゴリー名の配列
	 * @throws Exception 例外
	 */
	private String[] getCtgr(String prcTaioKirokSbtCd, String prcTaioKirokSbtDtlCd, String tokusokuStat) throws Exception
	{
		// 料金対応記録カテゴリレベルコード（検索条件用　先頭9桁のコード）
		String prcTaiokrkCtgrLvlCd = makePrcTaiokrkCtgrLvlCd(prcTaioKirokSbtCd, prcTaioKirokSbtDtlCd, tokusokuStat);

		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(JZM0171Constant.CD01255);	// 料金対応記録カテゴリレベルコード
		paramList.setValue(prcTaiokrkCtgrLvlCd + "%");
		paramList.setValue(commonItem.getOpeDate());
		paramList.setValue(commonItem.getOpeDate());

		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_CH_SELECT_007);

		// データ1行の取得
		JBSbatCommonDBInterface selectedData = db_ZM_M_CD_NM_KANRI.selectNext();
		List<String> nmList = new ArrayList<String>();
		while (selectedData != null)
		{
			String nm = selectedData.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM);
			nmList.add(nm);
			// データ1行の取得
			selectedData = db_ZM_M_CD_NM_KANRI.selectNext();
		}

		return nmList.toArray(new String[0]);
	}

	/**
	 * 料金対応記録カテゴリレベルコード取得
	 * （検索条件用　先頭9桁のコード）
	 * @param prcTaioKirokSbtCd 料金対応記録種別コード
	 * @param prcTaioKirokSbtDtlCd 料金対応記録種別詳細コード
	 * @param tokusokuStat 督促ステータス
	 * @return 料金対応記録カテゴリレベルコード
	 */
	private String makePrcTaiokrkCtgrLvlCd(String prcTaioKirokSbtCd, String prcTaioKirokSbtDtlCd, String tokusokuStat)
	{
		StringBuilder prcTaiokrkCtgrLvlCd = new StringBuilder(9);

		// 料金対応記録種別コード
		if (JACBatCommon.isNull(prcTaioKirokSbtCd))
		{
			prcTaiokrkCtgrLvlCd.append("ZZZ");
		}
		else
		{
			prcTaiokrkCtgrLvlCd.append(prcTaioKirokSbtCd);
		}

		// 料金対応記録種別詳細コード
		if (JACBatCommon.isNull(prcTaioKirokSbtDtlCd))
		{
			prcTaiokrkCtgrLvlCd.append("ZZZZ");
		}
		else
		{
			prcTaiokrkCtgrLvlCd.append(prcTaioKirokSbtDtlCd);
		}

		// 督促ステータス
		if (JACBatCommon.isNull(tokusokuStat))
		{
			prcTaiokrkCtgrLvlCd.append("ZZ");
		}
		else
		{
			prcTaiokrkCtgrLvlCd.append(tokusokuStat);
		}

		return prcTaiokrkCtgrLvlCd.toString();
	}

	/**
	 * ユーザーIDを返します。
	 */
	public String getUserId()
	{
		return userId;
	}

	/**
	 * ユーザー名を返します。
	 */
	public String getUserNm()
	{
		return userNm;
	}

	/**
	 * 業務個別設定組織コードを返します。
	 */
	public String getWkkbtOrgCd()
	{
		return wkkbtOrgCd;
	}

	/**
	 * 業務個別設定組織名を返します。
	 */
	public String getWkkbtOrgNm()
	{
		return wkkbtOrgNm;
	}

	/**
	 * テーブルアクセスクラスをクローズします。
	 * @throws Exception 例外が発生した場合
	 */
	// v13.00.01 MOD START
//	public void close() throws SQLException
	public void close() throws Exception
	// v13.00.01 MOD END
	{
		// 対応記録
		if (db_CR_T_TAIO_KIROK != null)
		{
			// v13.00.01 ADD START
			db_CR_T_TAIO_KIROK.clearBatch();
			// v13.00.01 ADD END
			db_CR_T_TAIO_KIROK.close();
		}

		// 対応記録明細
		if (db_CR_T_TAIOKRK_DTL != null)
		{
			// v13.00.01 ADD START
			db_CR_T_TAIOKRK_DTL.clearBatch();
			// v13.00.01 ADD END
			db_CR_T_TAIOKRK_DTL.close();
		}

		// コード名称管理
		if (db_ZM_M_CD_NM_KANRI != null)
		{
			db_ZM_M_CD_NM_KANRI.close();
		}

		// 対応履歴データアクセスオブジェクトクローズ
		JACBatCommon.closeDataAccessObj(commonItem);
	}

}
