/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom  					 *
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JCHbatPrcTaiokrkAdd
 *	ソースファイル名	：JCHbatPrcTaiokrkAdd.java
 *	作成者				：富士通　
 *	作成日				：2012年01月26日
 *＜機能概要＞
 *　対応記録登録部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2012/01/26   富士通		新規作成
 *	v3.00		2012/07/18   FJ）冨井	【IT2-2012-0001261】料金対応記録設定値修正（変更前料金グループコード、変更後料金グループコード）
 *	v4.00.00	2012/12/12   Fip)藤田	【IT4-2012-0000157】性能改善
 *										・タイトルの作成処理において、作成に必要なキーに変更がなければ前回保存していたタイトルを使用する。
 *										・料金対応記録テーブルのユニークキーの取得をInsert時に取得するようにする。
 *	v5.00.00	2012/12/18   Fip)斉藤諭(対応履歴Ｔ)　性能改善
 *										・対応記録関連データの登録をサービス呼出からバッチ部品呼出に変更
 *	v5.01.00	2013/02/09   FJ) 小柴	【内部管理番号-0000728】対応記録関連データの登録時、サービス番号の取得ができなかった場合にABENDさせず、処理を続行するように修正
 *	v5.02.00	2013/03/06	 富士通		性能障害対応(ST4-2013-0000096)
 *	v5.03.00	2013/03/15   Fip)指原	【ST3-2013-0000672】性能改善 サービス契約情報取得処理への分岐条件追加
 *	v5.04.00	2013/07/24   FJ)前田	【LT-2013-0000624】記事が料金対応記録に登録されるように修正
 *	v5.05.00	2013/07/25   FJ)前田	【LT-2013-0000624】対応履歴スキーマに記事が登録されるように修正
 *	v5.06.00	2013/07/25   FJ)前田	【LT-2013-0000624】対応履歴スキーマにユーザID、ユーザ名が登録されるように修正
 *	v6.00.00	2013/12/20   FJ)早崎	【ANK-1749-00-00】 タイトルがマッピングされている場合は、マッピングされて値を利用して登録処理を行うよう修正
 *	v7.00.00	2014/02/14   FJ)北端	【OM-2014-0000694】料金対応記録の名称取得時の不具合修正
 *  v13.00.00   2015/03/31   FJ)寺園     ST4-2015-0000001　性能改善対応
 *********************************************************************/
package eo.business.common;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.util.file.JBSbatCHIFM096;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatZM_M_CD_NM_KANRI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.constant.JZM0171Constant;
import eo.framework.application.JBSbatBusinessException;
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 JCHbatPrcTaiokrkAdd
{
	/** バッチ共通パラメータ */
	private JBSbatCommonItem commonItem = null;
	
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";
	/** テーブル(料金対応記録)*/
	private static final String D_TBL_NAME_CH_T_PRC_TAIOKRK = "CH_T_PRC_TAIOKRK";
	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** SQL定義キー(CH_SELECT_004)*/
	private static final String KK_T_SVC_KEI_CH_SELECT_004 = "CH_SELECT_004";
	/** SQL定義キー(CH_SELECT_001)*/
	private static final String ZM_M_CD_NM_KANRI_CH_SELECT_001 = "CH_SELECT_001";

	/** 料金対応記録種別詳細コード長さ */
	private static final int   PRCSBTDTL_CNT = 4;
	
	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
	/** テーブルアクセスクラス(料金対応記録)*/
	private JBSbatSQLAccess db_CH_T_PRC_TAIOKRK = null;
	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;

	/** ユーザーID */
	private String userId = null;

	/** ユーザーIDフラグ */
	private boolean userIdFlg = false;

	/** 処理名 */
	private String title = null;

	/** 前回のキーを保持する */
	private String preKey = null;
	
	/** 料金対応記録シーケンス */
	private static final String SEQ_PRC_TAIO_KIROK_NEXTVAL = "JBSbatSQLAccess.GET_NEXT_SEQ(" + JACStrConst.SEQ_PRC_TAIO_KIROK + ".NEXTVAL)";
//	private static final String SEQ_PRC_TAIO_KIROK_NEXTVAL = JACStrConst.SEQ_PRC_TAIO_KIROK ;

	/** 対応記録関連データ登録部品 */
	private JCHbatTaiorrkDataAdd taiorrkDataAdd;

	// 2013/03/06 性能障害対応[ST4-2013-0000096] start
	/** コード名称管理タイトル保存領域 */
	private HashMap<String, String> titleMap = new HashMap<String, String>();
	// 2013/03/06 性能障害対応[ST4-2013-0000096] end
	
	/**
	 * コンストラクタ（ユーザーIDなし）
	 * 
	 * @param item バッチ共通パラメータ
	 * @throws Exception
	 */
	public JCHbatPrcTaiokrkAdd(JBSbatCommonItem item) throws Exception
	{
		this.commonItem = item;
		// テーブルアクセスクラスを生成する。
		db_CH_T_PRC_TAIOKRK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_PRC_TAIOKRK);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_ZM_M_CD_NM_KANRI 	= new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		// ユーザーIDを取得します。
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		userId = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_TAIOKRK_USER_ID);
		paramUtil.close();

		// 対応記録関連データ登録部品オブジェクト生成
		taiorrkDataAdd = new JCHbatTaiorrkDataAdd(item, userId);
	}
	
	/**
	 * コンストラクタ（ユーザーIDあり）
	 * 
	 * @param item バッチ共通パラメータ
	 * @param tmpUserId ユーザーID
	 * @throws Exception
	 */
	public JCHbatPrcTaiokrkAdd(JBSbatCommonItem item, String tmpUserId) throws Exception
	{
		this.commonItem = item;
		// テーブルアクセスクラスを生成する。
		db_CH_T_PRC_TAIOKRK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_PRC_TAIOKRK);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_ZM_M_CD_NM_KANRI 	= new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);

		// ユーザーIDを取得します。
		userId = tmpUserId;
		userIdFlg = true;

		// 対応記録関連データ登録部品オブジェクト生成
		taiorrkDataAdd = new JCHbatTaiorrkDataAdd(item, userId);
	}

	/**
	 * 主処理
	 * 
	 * @param inMap
	 * @throws Exception
	 */
	public void prcTaiokrkAdd(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 問合せタイトル
		String toiawaseTitle = inMap.getString(JACStrConst.TAIO_KRK_TITLE);
		
		// タイトルが設定されている場合
		if(!JACStrConst.KARA_MOJI.equals(toiawaseTitle) && null != toiawaseTitle)
		{
			this.title = inMap.getString(JACStrConst.TAIO_KRK_TITLE);
		}
		// 上記以外の場合
		else
		{
			// タイトル作成
			this.title 		= makeTitle(inMap);
		}
		// サービス契約番号リスト
		ArrayList<String> svcKeiNoList = new ArrayList<String>();
		
		// コード格納リスト
		String[] cdList 	= new String[4];
		// コード設定
		cdList = setCdSbt(inMap);
		// 取得したリストより値を設定
		String afCdSbt = cdList[0]; // 変更後コード種別
		String afCdDiv = cdList[1]; // 変更後コード区分
		String bfCdSbt = cdList[2]; // 変更前コード種別
		String bfCdDiv = cdList[3]; // 変更前コード区分
		
		String taiokrkNo = null;
		// 入力.対応履歴連動フラグ＝"1"
		if(JACStrConst.TAIORRKI_RENDO_TG_FLG_HYOJI.equals(inMap.getString(JBSbatCHIFM096.TAIORRKI_RENDO_TG_FLG)))
		{
			// サービス契約番号取得
			String svc_kei_no = inMap.getString(JBSbatCHIFM096.SVC_KEI_NO);
			if (svc_kei_no != null && svc_kei_no.length() > 0)
			{
				// 料金履歴情報にサービス契約番号があれば、料金履歴情報．サービス契約番号で対応記録データを作成する
				svcKeiNoList.add(svc_kei_no);
			} else {
				// なければ、請求先配下のサービス契約番号を取得する
				svcKeiNoList = getSvcKeiNo(inMap.getString(JBSbatCHIFM096.SEIKY_KEI_NO));
			}

			// 取得結果がnullの場合、対応履歴連動フラグを"0"に変更し、次の処理に移動する
			if (svcKeiNoList == null)
			{
				inMap.setString(JBSbatCHIFM096.TAIORRKI_RENDO_TG_FLG, JACStrConst.TAIORRKI_RENDO_TG_FLG_HIHYOJI);
			}
			// 取得できた場合は対応記録関連データに登録する
			else
			{
			
				// 対応記録関連データ登録呼出の引数マップにタイトルを設定する。
				inMap.setString(JCHbatTaiorrkDataAdd.KEY_TITLE, this.title);
	
				// 対応記録関連データ登録
				taiokrkNo = taiorrkDataAdd.taiorrkDataAdd(inMap, svcKeiNoList);
				
			}
		}
		// 料金対応記録登録
		taiokrkAdd(inMap, bfCdSbt, bfCdDiv, afCdSbt, afCdDiv, taiokrkNo);
	}
	
	/**
	 * コード設定
	 * @param  inMap     入力電文
	 * @return cdList    コード格納リスト
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String[] setCdSbt(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// コード格納リスト
		String[] cdList = new String[4];
		
		// 入力.変更後督促ステータス≠nullの場合
		if(inMap.getString(JBSbatCHIFM096.TOKUSOKU_STAT_CHAF) != null
				&& !JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM096.TOKUSOKU_STAT_CHAF)))
		{
			cdList[0] = JZM0171Constant.CD00184;								// 変更後コード種別
			cdList[1] = inMap.getString(JBSbatCHIFM096.TOKUSOKU_STAT_CHAF);		// 変更後コード区分
			
			// 入力.変更前督促ステータス≠nullの場合
			if(inMap.getString(JBSbatCHIFM096.TOKUSOKU_STAT_CHBF) != null
					&& !JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM096.TOKUSOKU_STAT_CHBF)))
			{
				cdList[2] = JZM0171Constant.CD00184; 								// 変更前コード種別
				cdList[3] = inMap.getString(JBSbatCHIFM096.TOKUSOKU_STAT_CHBF); 	// 変更前コード区分
			}
		}
		// 入力.変更後補償費扱いフラグ≠nullの場合
		else if(inMap.getString(JBSbatCHIFM096.COMPENSATION_FLG_CHAF) != null
				&& !JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM096.COMPENSATION_FLG_CHAF)))
		{
			cdList[0] = JZM0171Constant.CD01325;								// 変更後コード種別
			cdList[1] = inMap.getString(JBSbatCHIFM096.COMPENSATION_FLG_CHAF); 	// 変更後コード区分
			
			// 入力.変更前補償費扱いフラグ≠nullの場合
			if(inMap.getString(JBSbatCHIFM096.COMPENSATION_FLG_CHBF) != null
					&& !JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM096.COMPENSATION_FLG_CHBF)))
			{
				cdList[2] = JZM0171Constant.CD01325; 								// 変更前コード種別
				cdList[3] = inMap.getString(JBSbatCHIFM096.COMPENSATION_FLG_CHBF); 	// 変更後コード区分
			}
		}
		// 入力.督促メールパターン≠nullの場合
		else if(inMap.getString(JBSbatCHIFM096.TOKUSOKU_ML_PTN_CD) != null
				&& !JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM096.TOKUSOKU_ML_PTN_CD)))
		{
			cdList[0] = JZM0171Constant.CD00925; 								// 変更後コード種別
			cdList[1] = inMap.getString(JBSbatCHIFM096.TOKUSOKU_ML_PTN_CD); 	// 変更後コード区分
		}
		// 入力に変更後引抜き種別コードをキーとする値が存在するか確認
		else if (inMap.getMap().containsKey(JBSbatCHIFM096.HKNK_SBT_CD_CHAF))
		{
			// 入力.変更後引抜き種別コード≠nullの場合
			if(inMap.getString(JBSbatCHIFM096.HKNK_SBT_CD_CHAF) != null
					&& !JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM096.HKNK_SBT_CD_CHAF)))
			{
				cdList[0] = JZM0171Constant.CD00903;							// 変更後コード種別
				cdList[1] = inMap.getString(JBSbatCHIFM096.HKNK_SBT_CD_CHAF); 	// 変更後コード区分
				
				// 入力に変更前引抜き種別コードをキーとする値が存在するか確認
				if(inMap.getMap().containsKey(JBSbatCHIFM096.HKNK_SBT_CD_CHBF))
				{
					// 入力.変更前引抜き種別コード≠nullの場合
					if(inMap.getString(JBSbatCHIFM096.HKNK_SBT_CD_CHBF) != null
							&& !JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM096.HKNK_SBT_CD_CHBF)))
					{
						cdList[2] = JZM0171Constant.CD00903; 							// 変更前コード種別
						cdList[3] = inMap.getString(JBSbatCHIFM096.HKNK_SBT_CD_CHBF); 	// 変更後コード区分
					}
				}
			}
		}
		return cdList;
	}

	/**
	 * タイトル作成
	 * @param  inMap 入力電文
	 * @return title タイトル
	 * @throws Exception
	 */
	private String makeTitle(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 「料金対応記録種別コード + 料金対応記録種別詳細コード」をキーとしてマップを検索する
		String keyString = inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_CD) 
						 + inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_DTL_CD);
		String tmpTitle = this.titleMap.get(keyString);
		if(null != tmpTitle)
		{
			// キャッシュ済み
			return tmpTitle;
		}

		// タイトル
		String title = null;
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		String codeKbn = inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_DTL_CD);
		
		paramList.setValue(JZM0171Constant.CD00917);									// コード種別コード
		paramList.setValue(codeKbn);													// コード区分
		paramList.setValue(commonItem.getOpeDate());									// 適用開始年月日
		paramList.setValue(commonItem.getOpeDate());									// 適用終了年月日
		
		// SQL実行
		executeZM_M_CD_NM_KANRI_CH_SELECT_001(paramList.getList().toArray());
		JBSbatCommonDBInterface dbMap = db_ZM_M_CD_NM_KANRI.selectNext(); 
		// 取得結果判定
		if (dbMap == null)
		{
			JBSbatCommonDBInterface paramList2 = new JBSbatCommonDBInterface();
			
			paramList2.setValue(JZM0171Constant.CD00916);								// コード種別コード
			paramList2.setValue(inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_CD));	// コード区分
			paramList2.setValue(commonItem.getOpeDate());								// 適用開始年月日
			paramList2.setValue(commonItem.getOpeDate());								// 適用終了年月日
			
			// SQL実行
			executeZM_M_CD_NM_KANRI_CH_SELECT_001(paramList2.getList().toArray());
			JBSbatCommonDBInterface dbMap2 = db_ZM_M_CD_NM_KANRI.selectNext(); 
			// 取得結果判定
			if(dbMap2 == null)
			{
				// マスタ未存在エラー
				String[] msgParam = new String[]
				{
					JBSbatZM_M_CD_NM_KANRI.TABLE_NAME,
					paramList.getList().toString()
				};
				throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0260CE, msgParam);
			}
			else
			{
				// 取得した値を設定
				title = dbMap2.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM);
			}
		}
		else
		{
			// 取得した値を設定
			title = dbMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM);
		}
		// 検索結果を「料金対応記録種別コード + 料金対応記録種別詳細コード」をキーとしてキャッシュする
		this.titleMap.put(keyString, title);
		return title;
	}

	/**
	 * 料金対応記録登録
	 * @param inMap      入力電文
	 * @param bfCdSbt    変更前
	 * @param bfCdDiv    変更前
	 * @param afCdSbt    変更後
	 * @param afCdDiv    変更後
	 * @param taiokmkNo  対応記録番号
	 * @throws Exception 
	 */
	private void taiokrkAdd(JBSbatServiceInterfaceMap inMap,
			String bfCdSbt, String bfCdDiv, String afCdSbt, String afCdDiv, String taiokmkNo)throws Exception
	{
		JBSbatCommonDBInterface setParam = new JBSbatCommonDBInterface();

		// 料金対応記録番号
		setParam.setValue(SEQ_PRC_TAIO_KIROK_NEXTVAL);
		
		// 料金対応ユーザＩＤ
		// ユーザーＩＤ連携なし かつ 入力.対応履歴連動フラグ＝"0"
		if(!userIdFlg && JACStrConst.TAIORRKI_RENDO_TG_FLG_HIHYOJI.equals(inMap.getString(JBSbatCHIFM096.TAIORRKI_RENDO_TG_FLG)))
		{
			// バッチ更新者ＩＤ
			setParam.setValue(commonItem.getBatchUserId());
		}
		else
		{
			// 連携されたユーザーＩＤ もしくは 業パラから取得したユーザーＩＤ
			setParam.setValue(this.userId);
		}
		// 請求契約番号
		setParam.setValue(inMap.getString(JBSbatCHIFM096.SEIKY_KEI_NO));
		// 対応年月日時分秒
		setParam.setValue(inMap.getString(JBSbatCHIFM096.TAIO_DTM));
		// 料金対応記録種別コード
		setParam.setValue(inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_CD));

		if(inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_DTL_CD) != null
				&& !JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_DTL_CD)))
		{
			// 料金対応記録種別詳細コード
			setParam.setValue(inMap.getString(JBSbatCHIFM096.PRC_TAIO_KIROK_SBT_DTL_CD));
		}
		else
		{
			// 料金対応記録種別詳細コード
			setParam.setValue(JACbatRknBusinessUtil.fillHalfSpace(JACStrConst.KARA_MOJI, PRCSBTDTL_CNT, true));
		}
		// タイトル 
		setParam.setValue(this.title);
		// 記事
		setParam.setValue(inMap.get(JBSbatCHIFM096.KIJI));
		// 変更前コード種別コード
		setParam.setValue(bfCdSbt);
		// 変更前コード区分
		setParam.setValue(bfCdDiv);
		// 変更後コード種別コード
		setParam.setValue(afCdSbt);
		// 変更後コード区分
		setParam.setValue(afCdDiv);
		// 入力に変更前料金グループコードをキーとする値が存在するか確認
		if(inMap.getMap().containsKey(JBSbatCHIFM096.PRC_GRP_CD_CHBF))
		{
			// 変更前料金グループコード
			setParam.setValue(inMap.get(JBSbatCHIFM096.PRC_GRP_CD_CHBF));
		}
		else
		{
			// 変更前料金グループコード
			setParam.setValue(null);
		}
		
		// 入力に変更前料金コースコードをキーとする値が存在するか確認
		if(inMap.getMap().containsKey(JBSbatCHIFM096.PCRS_CD_CHBF))
		{
			// 変更前料金コースコード
			setParam.setValue(inMap.get(JBSbatCHIFM096.PCRS_CD_CHBF));
		}
		else
		{
			// 変更前料金コースコード
			setParam.setValue(null);
		}
		
		// 入力に変更前料金サービスコードをキーとする値が存在するか確認
		if(inMap.getMap().containsKey(JBSbatCHIFM096.PRC_SVC_CD_CHBF))
		{
			// 変更前料金サービスコード
			setParam.setValue(inMap.get(JBSbatCHIFM096.PRC_SVC_CD_CHBF));
		}
		else
		{
			// 変更前料金サービスコード
			setParam.setValue(null);
		}
		// 変更前料金項目コード
		setParam.setValue(inMap.get(JBSbatCHIFM096.KNK_PRC_KMK_CD_CHBF));
		
		// 入力に変更後料金グループコードをキーとする値が存在するか確認
		if(inMap.getMap().containsKey(JBSbatCHIFM096.PRC_GRP_CD_CHAF))
		{
			// 変更後料金グループコード
			setParam.setValue(inMap.get(JBSbatCHIFM096.PRC_GRP_CD_CHAF));
		}
		else
		{
			// 変変更後料金グループコード
			setParam.setValue(null);
		}
		
		// 入力に変更後料金コースコードをキーとする値が存在するか確認
		if(inMap.getMap().containsKey(JBSbatCHIFM096.PCRS_CD_CHAF))
		{
			// 変更後料金コースコード
			setParam.setValue(inMap.get(JBSbatCHIFM096.PCRS_CD_CHAF));
		}
		else
		{
			// 変更後料金コースコード
			setParam.setValue(null);
		}
		
		// 入力に変更後料金サービスコードをキーとする値が存在するか確認
		if(inMap.getMap().containsKey(JBSbatCHIFM096.PRC_SVC_CD_CHAF))
		{
			// 変更後料金サービスコード
			setParam.setValue(inMap.get(JBSbatCHIFM096.PRC_SVC_CD_CHAF));
		}
		else
		{
			// 変更後料金サービスコード
			setParam.setValue(null);
		}

		// 変更後料金項目コード
		setParam.setValue(inMap.get(JBSbatCHIFM096.KNK_PRC_KMK_CD_CHAF));
		// 変更前年月日
		setParam.setValue(null);
		// 変更後年月日
		setParam.setValue(null);
		// 変更前金額
		setParam.setValue(inMap.getString(JBSbatCHIFM096.AMNT_CHBF));
		// 変更後金額
		setParam.setValue(inMap.getString(JBSbatCHIFM096.AMNT_CHAF));
		// 記録対象年月
		setParam.setValue(inMap.getString(JBSbatCHIFM096.KIROK_TG_YM));
		// 対応履歴連動対象フラグ
		setParam.setValue(inMap.get(JBSbatCHIFM096.TAIORRKI_RENDO_TG_FLG));
		// 対応記録番号 
		setParam.setValue(taiokmkNo);
		// サービス契約番号
		setParam.setValue(inMap.getString(JBSbatCHIFM096.SVC_KEI_NO));
		// 督促番号
		setParam.setValue(inMap.getString(JBSbatCHIFM096.TOKUSOKU_NO));
		// 督促異動番号
		setParam.setValue(inMap.getString(JBSbatCHIFM096.TOKUSOKU_IDO_NO));
		// 請求番号
		setParam.setValue(inMap.getString(JBSbatCHIFM096.SEIKY_NO));
		// 金庫番号
		setParam.setValue(inMap.getString(JBSbatCHIFM096.KNK_NO));
		// 債権番号
		setParam.setValue(inMap.getString(JBSbatCHIFM096.SAIKEN_NO));
		// 入金番号
		setParam.setValue(inMap.getString(JBSbatCHIFM096.NYUKIN_NO));
		// 電子ファイル管理番号
		setParam.setValue(inMap.getString(JBSbatCHIFM096.EFILE_KANRI_NO));
		// 登録年月日時分秒
		setParam.setValue(null);
		// 登録オペレータアカウント
		// ユーザーＩＤ連携なし かつ 入力.対応履歴連動フラグ＝"0"
		if(!userIdFlg && JACStrConst.TAIORRKI_RENDO_TG_FLG_HIHYOJI.equals(inMap.getString(JBSbatCHIFM096.TAIORRKI_RENDO_TG_FLG)))
		{
			// バッチ更新者ＩＤ
			setParam.setValue(commonItem.getBatchUserId());
		}
		else
		{
			// 連携されたユーザーＩＤ もしくは 業パラから取得したユーザーＩＤ
			setParam.setValue(this.userId);
		}
		
		// 更新年月日時分秒
		setParam.setValue(null);
		
		// 更新オペレータアカウント
		// 料金対応ユーザＩＤ
		// ユーザーＩＤ連携なし かつ 入力.対応履歴連動フラグ＝"0"
		if(!userIdFlg && JACStrConst.TAIORRKI_RENDO_TG_FLG_HIHYOJI.equals(inMap.getString(JBSbatCHIFM096.TAIORRKI_RENDO_TG_FLG)))
		{
			// バッチ更新者ＩＤ
			setParam.setValue(commonItem.getBatchUserId());
		}
		else
		{
			// 連携されたユーザーＩＤ もしくは 業パラから取得したユーザーＩＤ
			setParam.setValue(this.userId);
		}
		
		// 削除年月日時分秒
		setParam.setValue(null);
		// 削除オペレータアカウント
		setParam.setValue(null);
		// 無効フラグ
		setParam.setValue(null);

		executeCH_T_PRC_TAIOKRK_PKINSERT(setParam.getList().toArray());
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	料金対応記録番号			PRC_TAIO_KIROK_NO
	 *		 	料金対応ユーザＩＤ			PRC_TAIO_USER_ID
	 *		 	請求契約番号				SEIKY_KEI_NO
	 *		 	対応年月日時分秒			TAIO_DTM
	 *		 	料金対応記録種別コード		PRC_TAIO_KIROK_SBT_CD
	 *		 	料金対応記録種別詳細コード	PRC_TAIO_KIROK_SBT_DTL_CD
	 *		 	タイトル					TITLE
	 *			記事						KIJI
	 *		 	変更前コード種別コード		CHG_BF_CD_SBT_CD
	 *		 	変更前コード区分			CHG_BF_CD_DIV
	 *		 	変更後コード種別コード		CHG_AF_CD_SBT_CD
	 *		 	変更後コード区分			CHG_AF_CD_DIV
	 *		 	変更前料金グループコード	CHG_BF_PRC_GRP_CD
	 *		 	変更前料金コースコード		CHG_BF_PCRS_CD
	 *		 	変更前料金サービスコード	CHG_BF_PRC_SVC_CD
	 *		 	変更前料金項目コード		CHG_BF_PRC_KMK_CD
	 *			変更後料金グループコード	CHG_AF_PRC_GRP_CD
	 *		 	変更後料金コースコード		CHG_AF_PCRS_CD
	 *		 	変更後料金サービスコード	CHG_AF_PRC_SVC_CD
	 *		 	変更後料金項目コード		CHG_AF_PRC_KMK_CD
	 *		 	変更前年月日				CHG_BF_YMD
	 *		 	変更後年月日				CHG_AF_YMD
	 *		 	変更前金額					CHG_BF_AMNT
	 *		 	変更後金額					CHG_AF_AMNT
	 *		 	記録対象年月				KIROK_TG_YM
	 *		 	対応履歴連動対象フラグ		TAIORRKI_RENDO_TG_FLG
	 *		 	対応記録番号				TAIO_KIROK_NO
	 *		 	サービス契約番号			SVC_KEI_NO
	 *		 	督促番号					TOKUSOKU_NO
	 *		 	督促異動番号				TOKUSOKU_IDO_NO
	 *		 	請求番号					SEIKY_NO
	 *		 	金庫番号					KNK_NO
	 *		 	債権番号					SAIKEN_NO
	 *		 	入金番号					NYUKIN_NO
	 *		 	電子ファイル管理番号		EFILE_KANRI_NO
	 *		 	登録年月日時分秒			ADD_DTM
	 *		 	登録オペレータアカウント	ADD_OPEACNT
	 *		 	更新年月日時分秒			UPD_DTM
	 *		 	更新オペレータアカウント	UPD_OPEACNT
	 *		 	削除年月日時分秒			DEL_DTM
	 *		 	削除オペレータアカウント	DEL_OPEACNT
	 *		 	無効フラグ					MK_FLG
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_PRC_TAIOKRK_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("PRC_TAIO_KIROK_NO", setParam[0]);
		setMap.setValue("PRC_TAIO_USER_ID", setParam[1]);
		setMap.setValue("SEIKY_KEI_NO", setParam[2]);
		setMap.setValue("TAIO_DTM", setParam[3]);
		setMap.setValue("PRC_TAIO_KIROK_SBT_CD", setParam[4]);
		setMap.setValue("PRC_TAIO_KIROK_SBT_DTL_CD", setParam[5]);
		setMap.setValue("TITLE", setParam[6]);
		setMap.setValue("KIJI", setParam[7]);
		setMap.setValue("CHG_BF_CD_SBT_CD", setParam[8]);
		setMap.setValue("CHG_BF_CD_DIV", setParam[9]);
		setMap.setValue("CHG_AF_CD_SBT_CD", setParam[10]);
		setMap.setValue("CHG_AF_CD_DIV", setParam[11]);
		setMap.setValue("CHG_BF_PRC_GRP_CD", setParam[12]);
		setMap.setValue("CHG_BF_PCRS_CD", setParam[13]);
		setMap.setValue("CHG_BF_PRC_SVC_CD", setParam[14]);
		setMap.setValue("CHG_BF_PRC_KMK_CD", setParam[15]);
		setMap.setValue("CHG_AF_PRC_GRP_CD", setParam[16]);
		setMap.setValue("CHG_AF_PCRS_CD", setParam[17]);
		setMap.setValue("CHG_AF_PRC_SVC_CD", setParam[18]);
		setMap.setValue("CHG_AF_PRC_KMK_CD", setParam[19]);
		setMap.setValue("CHG_BF_YMD", setParam[20]);
		setMap.setValue("CHG_AF_YMD", setParam[21]);
		setMap.setValue("CHG_BF_AMNT", setParam[22]);
		setMap.setValue("CHG_AF_AMNT", setParam[23]);
		setMap.setValue("KIROK_TG_YM", setParam[24]);
		setMap.setValue("TAIORRKI_RENDO_TG_FLG", setParam[25]);
		setMap.setValue("TAIO_KIROK_NO", setParam[26]);
		setMap.setValue("SVC_KEI_NO", setParam[27]);
		setMap.setValue("TOKUSOKU_NO", setParam[28]);
		setMap.setValue("TOKUSOKU_IDO_NO", setParam[29]);
		setMap.setValue("SEIKY_NO", setParam[30]);
		setMap.setValue("KNK_NO", setParam[31]);
		setMap.setValue("SAIKEN_NO", setParam[32]);
		setMap.setValue("NYUKIN_NO", setParam[33]);
		setMap.setValue("EFILE_KANRI_NO", setParam[34]);
		setMap.setValue("ADD_DTM", setParam[35]);
		setMap.setValue("ADD_OPEACNT", setParam[36]);
		setMap.setValue("UPD_DTM", setParam[37]);
		setMap.setValue("UPD_OPEACNT", setParam[38]);
		setMap.setValue("DEL_DTM", setParam[39]);
		setMap.setValue("DEL_OPEACNT", setParam[40]);
		setMap.setValue("MK_FLG", setParam[41]);

		// DBアクセスを実行します
		// 2013/03/06 性能障害対応[ST4-2013-0000096] start
		//db_CH_T_PRC_TAIOKRK.insertByPrimaryKeys(setMap);
		db_CH_T_PRC_TAIOKRK.insertByPrimaryKeysBatch(setMap);
		// 2013/03/06 性能障害対応[ST4-2013-0000096] end
	}

	/**
	 * テーブルアクセスクラスをクローズします。
	 * @throws Exception 例外が発生した場合
	 */
	public void close() throws Exception
	{
		// 料金対応記録
		if (db_CH_T_PRC_TAIOKRK != null)
		{
			// 2013/03/06 性能障害対応[ST4-2013-0000096] start
			db_CH_T_PRC_TAIOKRK.clearBatch();
			// 2013/03/06 性能障害対応[ST4-2013-0000096] end
			db_CH_T_PRC_TAIOKRK.close();
		}
		
		if (db_KK_T_SVC_KEI != null)
		{
			db_KK_T_SVC_KEI.close();
		}
		if (db_ZM_M_CD_NM_KANRI != null)
		{
			db_ZM_M_CD_NM_KANRI.close();
		}

		// 対応記録関連データ登録部品オブジェクトのクローズ
		taiorrkDataAdd.close();
	}

	/**
	 * SQLKEY(CH_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	コード名称管理．コード種別コード
	 *		 	コード名称管理．コード区分
	 *		 	コード名称管理．適用開始年月日
	 *		 	コード名称管理．適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_CD_NM_KANRI_CH_SELECT_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());

		// DBアクセスを実行します
		db_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_CH_SELECT_001);
	}

	/**
	 * SQLKEY(CH_SELECT_004)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	請求契約番号
	 *		 	バッチ運用日
	 *		 	バッチ運用日
	 *		 	予約適用コード
	 *		 	バッチ運用日
	 * </pre>
	 * <p>
	 * @param  seikyKeiNo   請求契約番号
	 * @return svcKeiNoList サービス契約番号リスト
	 * @throws Exception    業務サービス内で発生した例外全般。
	 */
	private ArrayList<String> getSvcKeiNo(String seikyKeiNo) throws Exception
	{
		// サービス契約番号リスト
		ArrayList<String> svcKeiNoList = new ArrayList<String>();
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(seikyKeiNo);
		paramList.setValue(commonItem.getOpeDate());
		paramList.setValue(commonItem.getOpeDate());
		// v13.00.00 ADD START
		paramList.setValue(commonItem.getOpeDate());
		// v13.00.00 ADD END
		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_CH_SELECT_004);
		
		JBSbatCommonDBInterface dbMap = db_KK_T_SVC_KEI.selectNext();
		// 取得できない場合はnullを返す
		if(dbMap == null)
		{
			return null;
		}
		else
		{
			// 取得結果がある限り処理を継続する
			while(dbMap != null)
			{
				// サービス契約番号リストに取得結果を格納
				svcKeiNoList.add(dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));
				dbMap 			= db_KK_T_SVC_KEI.selectNext();
			}
		}
		return svcKeiNoList;
	}
}
