/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHTkskKnriChgTgCht
*	ソースファイル名	：JBSbatCHTkskKnriChgTgCht.java
*	作成者				：富士通　
*	作成日				：2012年01月26日
*＜機能概要＞
*　督促管理変更対象抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/01/26   富士通		新規作成
*	v5.00		2013/07/29   FJ)前田	【IT1-2013-0001466】記事に改行が入っているときに改行をはずすように修正
*	v5.01		2013/08/20   FJ)早崎	【OM-2013-0000394】督促異動スキーマに該当データがない場合ABEND
*	v5.02		2013/09/05   FJ)早崎	【OM-2013-0001557】督促状況更新の場合も記事項目を出力するように修正
*	v6.00		2013/11/18   FJ)鈴木	【ANK-1692-00-00】督促ステータスの表示を「コード値:コード名称」に変更する
*   v13.00.00   2015/03/10   FJ)寺園    【ANK-2416-00-00】【IT1-2015-0000024】 請求書のハガキ化対応
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JACBatCommon;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatCHIFM136;
import eo.business.util.table.JBSbatCH_T_PRC_TAIOKRK;
import eo.business.util.table.JBSbatCH_T_TOKUSOKU;
import eo.business.util.table.JBSbatCH_T_TOKUSOKU_IDO;
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.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHTkskKnriChgTgCht extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(コード名称管理)*/
	private static final String D_TBL_NAME_ZM_M_CD_NM_KANRI = "ZM_M_CD_NM_KANRI";

	/** テーブル(督促異動)*/
	private static final String D_TBL_NAME_CH_T_TOKUSOKU_IDO = "CH_T_TOKUSOKU_IDO";

	/** テーブル(督促)*/
	private static final String D_TBL_NAME_CH_T_TOKUSOKU = "CH_T_TOKUSOKU";

	/** SQL定義キー(CH_SELECT_005)*/
	private static final String ZM_M_CD_NM_KANRI_CH_SELECT_005 = "CH_SELECT_005";

	/** SQL定義キー(CH_SELECT_004)*/
	private static final String CH_T_TOKUSOKU_IDO_CH_SELECT_004 = "CH_SELECT_004";

	/** SQL定義キー(CH_SELECT_005)*/
	private static final String CH_T_TOKUSOKU_IDO_CH_SELECT_005 = "CH_SELECT_005";

	/** SQL定義キー(CH_SELECT_004)*/
	private static final String CH_T_TOKUSOKU_CH_SELECT_004 = "CH_SELECT_004";

	/** テーブルアクセスクラス(コード名称管理)*/
	private JBSbatSQLAccess db_ZM_M_CD_NM_KANRI = null;

	/** テーブルアクセスクラス(督促異動)*/
	private JBSbatSQLAccess db_CH_T_TOKUSOKU_IDO = null;

	/** テーブルアクセスクラス(督促)*/
	private JBSbatSQLAccess db_CH_T_TOKUSOKU = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼クラス変数追加 開始▼▼▼▼▼▼*/
	
	/** 督促ステータスマップ */
	private HashMap<String, String> tokusokuStatMap = null;
	
	/** 督促異動検索対象リスト */
	private ArrayList<String> tkskIdoSelectTrgList = null;
	
	/** コード名称マップ */
	private HashMap<String, String> cdNmKanriMap = null;
	
	/** 抑止リスト */
	private ArrayList<String> yokusiList = null;
	
	/**▲▲▲▲▲▲クラス変数追加 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_CD_NM_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_CD_NM_KANRI);
		db_CH_T_TOKUSOKU_IDO = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_TOKUSOKU_IDO);
		db_CH_T_TOKUSOKU = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_TOKUSOKU);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][opeDate=" + super.opeDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][freeItem=" + super.freeItem + "]");
		
		// 督促ステータスマップを作成します。
		this.tokusokuStatMap = this.makeCdNmMap(JZM0171Constant.CD00184);
		
		// コード名称マップ作成を作成します。
		this.cdNmKanriMap = this.makeCdNmMap(JZM0171Constant.CD00917);
		
		// 督促異動検索対象リストを作成します。
		this.makeTkskIdoSelectTrgList();
		
		// 抑止リストを作成します。
		this.makeYokusiList();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][tkskIdoSelectTrgList=" + this.tkskIdoSelectTrgList.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][yokusiList=" + this.yokusiList.toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert 	inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;
		
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		
		// 料金対応記録種別詳細コード
		String sbtDtlCd = inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD);
		
		// 料金対応記録種別詳細コード　≠　"1003"（利用停止実施）　かつ　料金対応記録種別詳細コード　≠　"1101"（強制解約実施）
		if(!JACStrConst.TKRK_SBTD_USE_STP_JSSI.equals(sbtDtlCd) && !JACStrConst.TKRK_SBTD_KYOSEI_DSL_JSSI.equals(sbtDtlCd))
		{
			// 出力情報を設定します。
			this.setOutputInf(inMap, outputItem);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_CD_NM_KANRI.close();
		db_CH_T_TOKUSOKU_IDO.close();
		db_CH_T_TOKUSOKU.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(CH_SELECT_005)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	コード種別コード
	 *		 	適用開始年月日
	 *		 	適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_CD_NM_KANRI_CH_SELECT_005(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_ZM_M_CD_NM_KANRI.selectBySqlDefine(paramList, ZM_M_CD_NM_KANRI_CH_SELECT_005);
	}

	/**
	 * SQLKEY(CH_SELECT_004)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	督促番号
	 *		 	督促異動番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_TOKUSOKU_IDO_CH_SELECT_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_T_TOKUSOKU_IDO.selectBySqlDefine(paramList, CH_T_TOKUSOKU_IDO_CH_SELECT_004);
	}

	/**
	 * SQLKEY(CH_SELECT_005)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	督促番号
	 *		 	登録年月日時分秒
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_TOKUSOKU_IDO_CH_SELECT_005(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_T_TOKUSOKU_IDO.selectBySqlDefine(paramList, CH_T_TOKUSOKU_IDO_CH_SELECT_005);
	}

	/**
	 * SQLKEY(CH_SELECT_004)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	督促番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCH_T_TOKUSOKU_CH_SELECT_004(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CH_T_TOKUSOKU.selectBySqlDefine(paramList, CH_T_TOKUSOKU_CH_SELECT_004);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼メソッド追加 開始▼▼▼▼▼▼*/
	
	/**
	 * コード名称管理スキーマを検索し、その結果を基にマップを返却します。
	 * @param cdDiv コード区分
	 * @return HashMap<String, String> 設定済マップ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private HashMap<String, String> makeCdNmMap(String cdDiv) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makecdNmMap]");
		
		// 条件値
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		// コード種別コード
		whereParam.setValue(cdDiv);
		// 適用開始年月日
		whereParam.setValue(super.opeDate);
		// 適用終了年月日
		whereParam.setValue(super.opeDate);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makecdNmMap][whereParam=" + whereParam.getList().toString() + "]");
		
		// SQL実施
		executeZM_M_CD_NM_KANRI_CH_SELECT_005(whereParam.getList().toArray());
		
		// 結果取得
		JBSbatCommonDBInterface dbMap = db_ZM_M_CD_NM_KANRI.selectNext();
		
		// 取得なしの場合
		if(null == dbMap)
		{
			// ログ出力（【最重要】ＤＢ未存在エラー）
			String[] msgParam = new String[]
			{ JBSbatZM_M_CD_NM_KANRI.TABLE_NAME, whereParam.getList().toString() };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
		}
		
		HashMap<String, String> map = new HashMap<String, String>();
		
		// 取得した情報分情報を設定します。
		while(null != dbMap)
		{
			// 値を設定（KEY:コード名称管理．コード区分、VALUE:コード名称管理．コード区分名称）
			map.put(dbMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV),		dbMap.getString(JBSbatZM_M_CD_NM_KANRI.CD_DIV_NM));
			
			// 次レコード　読み込み
			dbMap = db_ZM_M_CD_NM_KANRI.selectNext();
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makecdNmMap][map=" + map + "]");
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makecdNmMap]");
		return map;
	}
	
	/**
	 * 督促異動検索対象マップを作成します。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeTkskIdoSelectTrgList() throws Exception
	{
		this.tkskIdoSelectTrgList = new ArrayList<String>();
		
		// 督促ステータス変更
		this.tkskIdoSelectTrgList.add(JACStrConst.TKRK_SBTD_TOKUSOKU_ST_CHG);
		// 支払約束日登録
		this.tkskIdoSelectTrgList.add(JACStrConst.TKRK_SBTD_PAY_YAKSOK_DAY_ADD);
		// 支払約束日変更
		this.tkskIdoSelectTrgList.add(JACStrConst.TKRK_SBTD_PAY_YAKSOK_DAY_CHG);
		// 支払約束日削除
		this.tkskIdoSelectTrgList.add(JACStrConst.TKRK_SBTD_PAY_YAKSOK_DAY_DEL);
	}
	
	/**
	 * 抑止リストを作成します。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeYokusiList() throws Exception
	{
		this.yokusiList = new ArrayList<String>();
		
		// 請求書発行抑止
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSI_SKS);
		// 請求書等内訳発行抑止
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSI_SKSUW);
		// 口座番号表示抑止
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSI_KOZA);
		// 合算請求抑止
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSI_GSN_SEIKY);
		// ＷＥＢ公開抑止
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSI_WEB);
		// 請求書発行手数料抑止（課金）
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSI_SKS_CMS);
		// 強制窓口抑止
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSI_KYOSEI_MDGC);
		// 督促抑止
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSI_TOKUSOKU);
		// 債権回収委託抑止
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSI_SKNKSITK);
		// 加入者情報交換抑止
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSI_KNYSHA);
		// 督促メール抑止
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSI_TOKUSOKU_ML);
		// v13.00.00 ADD START
		// 請求書ハガキ化抑止
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSI_SKS_HAGAKI);
		// v13.00.00 ADD END
		// 請求書発行抑止解除
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSCL_SKS);
		// 請求書等内訳発行抑止解除
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSCL_SKSUW);
		// 口座番号表示抑止解除
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSCL_KOZA);
		// 合算請求抑止解除
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSCL_GSN_SEIKY);
		// ＷＥＢ公開抑止解除
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSCL_WEB);
		// 請求書発行手数料抑止（課金）解除
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSCL_SKS_CMS);
		// 強制窓口抑止解除
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSCL_KYOSEI_MDGC);
		// 督促抑止解除
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSCL_TOKUSOKU);
		// 債権回収委託抑止解除
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSCL_SKNKSITK);
		// 加入者情報交換抑止解除
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSCL_KNYSHA);
		// 督促メール抑止解除
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSCL_TOKUSOKU_ML);
		// v13.00.00 ADD START
		// 請求書ハガキ化抑止解除
		this.yokusiList.add(JACStrConst.TKRK_SBTD_YKSCL_SKS_HAGAKI);
		// v13.00.00 ADD END
	}
	
	
	
	/**
	 * 出力情報を設定します。
	 * 
	 * @param inMap 入力情報
	 * @param outputItem 出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setOutputInf(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputItem) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setOutputInf]");
		
		// 料金対応記録種別詳細コード
		String sbtDtlCd = inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD);
		// 料金対応記録種別コード
		String sbtCd = inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_CD);
		
		// 出力レコード情報
		JBSbatServiceInterfaceMap outRec = new JBSbatServiceInterfaceMap();
		
		// 料金対応記録種別コード　＝　"107"（督促状況更新）　かつ　料金対応記録種別詳細コードが督促異動検索対象リスト含まれる場合
		if(JACStrConst.TKRK_SBT_TOKUSOKU_STAT_UPD.equals(sbtCd) && tkskIdoSelectTrgList.contains(sbtDtlCd))
		{
			// 督促異動番号
			String tokusokuIdoNo = inMap.getString(JBSbatCH_T_PRC_TAIOKRK.TOKUSOKU_IDO_NO);
			
			// 変更前督促異動情報
			JBSbatCommonDBInterface chgBfDbMap = new JBSbatCommonDBInterface();
			
			// 変更後督促異動情報または督促情報
			JBSbatCommonDBInterface chgAfDbMap = new JBSbatCommonDBInterface();
			
			
			// 督促異動番号が取得されない場合
			if(tokusokuIdoNo == null || JACStrConst.KARA_MOJI.equals(tokusokuIdoNo))
			{
				// 督促情報を変更後情報として取得します
				chgAfDbMap = getToksokInf(inMap);
			}
			// 上記以外の場合
			else
			{
				// 督促異動スキーマを検索し、変更前督促異動情報を取得します。
				chgBfDbMap = this.selectChgBfTkskIdo(inMap);

				// 入力情報・変更前督促異動情報を基に、変更後情報を取得します。
				chgAfDbMap = this.getChgAfInf(inMap, chgBfDbMap);
			}
			
			// 料金対応記録種別詳細コード　＝　"401"（督促ステータス変更）の場合
			if(JACStrConst.TKRK_SBTD_TOKUSOKU_ST_CHG.equals(sbtDtlCd))
			{
// UPDATE START 2013.11.18 ANK-1692-00-00
//				// 変更前督促ステータス
//				outRec.set(JBSbatCHIFM136.CHBF_TOKUSOKU_STAT,			this.tokusokuStatMap.get(chgBfDbMap.getString(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_STAT)));
//				// 変更後督促ステータス
//				outRec.set(JBSbatCHIFM136.CHAF_TOKUSOKU_STAT,			this.tokusokuStatMap.get(chgAfDbMap.getValue(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_STAT)));
				// 変更前督促ステータス
				outRec.set(JBSbatCHIFM136.CHBF_TOKUSOKU_STAT,			this.getTokusokuStatName(chgBfDbMap.getString(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_STAT)));
				// 変更後督促ステータス
				outRec.set(JBSbatCHIFM136.CHAF_TOKUSOKU_STAT,			this.getTokusokuStatName(chgAfDbMap.getString(JBSbatCH_T_TOKUSOKU_IDO.TOKUSOKU_STAT)));
// UPDATE END 2013.11.18 ANK-1692-00-00
			}
			// 料金対応記録種別詳細コード　＝　"0802"（支払約束日変更）　または　料金対応記録種別詳細コード　＝　"803"（支払約束日削除）の場合
			if(JACStrConst.TKRK_SBTD_PAY_YAKSOK_DAY_CHG.equals(sbtDtlCd) || JACStrConst.TKRK_SBTD_PAY_YAKSOK_DAY_DEL.equals(sbtDtlCd))
			{
				// 変更前支払約束日
				outRec.set(JBSbatCHIFM136.CHBF_PAY_YAKUSOKU_YMD,		chgBfDbMap.getValue(JBSbatCH_T_TOKUSOKU_IDO.PAY_YAKUSOKU_YMD));
			}
			// 料金対応記録種別詳細コード　＝　"0801"（支払約束日登録）　または　料金対応記録種別詳細コード　＝　"0802"（支払約束日登録）の場合
			if(JACStrConst.TKRK_SBTD_PAY_YAKSOK_DAY_ADD.equals(sbtDtlCd) || JACStrConst.TKRK_SBTD_PAY_YAKSOK_DAY_CHG.equals(sbtDtlCd))
			{
				// 変更後支払約束日
				outRec.set(JBSbatCHIFM136.CHAF_PAY_YAKUSOKU_YMD,		chgAfDbMap.getValue(JBSbatCH_T_TOKUSOKU_IDO.PAY_YAKUSOKU_YMD));
			}
			
		}
		
		// 抑止コード
		String yokusiCd = this.tranString(this.cdNmKanriMap.get(sbtDtlCd), 15, true);
		
		// 変更前抑止
		outRec.set(JBSbatCHIFM136.CHBF_YOKSI,		JACStrConst.KARA_MOJI);
		
		// 料金対応記録種別詳細コードが抑止リストに含まれる場合
		if(this.yokusiList.contains(sbtDtlCd))
		{
			// 変更後抑止
			outRec.set(JBSbatCHIFM136.CHAF_YOKSI,		yokusiCd);
		}
		
		// 変更後記事
		outRec.set(JBSbatCHIFM136.CHAF_KIJI,		kaigyoDel(this.tranString(inMap.getString(JBSbatCH_T_PRC_TAIOKRK.KIJI), 100, true)));
		// 操作者ID
		outRec.set(JBSbatCHIFM136.SOSASYA_ID,		inMap.get(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_USER_ID));
		// 変更時刻（対応年月日時分秒の時分秒）
		outRec.set(JBSbatCHIFM136.CHG_TIME,			inMap.getString(JBSbatCH_T_PRC_TAIOKRK.TAIO_DTM).substring(8, 14));
		// 請求契約番号
		outRec.set(JBSbatCHIFM136.SEIKY_KEI_NO,		inMap.getString(JBSbatCH_T_PRC_TAIOKRK.SEIKY_KEI_NO));
		
		assert 	outRec != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][outRec=" + outRec.getMap().toString() + "]") : true;
		
		outRec.setOutFlg(true);
		
		outputItem.addOutMapList(outRec);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setOutputInf]");
	}
	
	/**
	 * 督促異動スキーマを検索し、変更前督促異動情報を取得します。
	 * 
	 * @param inMap 入力情報
	 * @return JBSbatCommonDBInterface 変更前督促異動情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface selectChgBfTkskIdo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectChgBfTkskIdo]");
		
		// 条件値
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		// 督促番号
		whereParam.setValue(inMap.get(JBSbatCH_T_PRC_TAIOKRK.TOKUSOKU_NO));
		// 督促異動番号
		whereParam.setValue(inMap.get(JBSbatCH_T_PRC_TAIOKRK.TOKUSOKU_IDO_NO));
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChgBfTkskIdo][whereParam=" + whereParam.getList().toString() + "]");
		
		// SQL実行
		executeCH_T_TOKUSOKU_IDO_CH_SELECT_004(whereParam.getList().toArray());
		
		// 結果を取得します。
		JBSbatCommonDBInterface dbMap = db_CH_T_TOKUSOKU_IDO.selectNext();
		
		// 取得しない場合
		if(null == dbMap)
		{
			// 該当データなし
			String[] msgParam = new String[]
			{ JBSbatCH_T_TOKUSOKU_IDO.TABLE_NAME, whereParam.getList().toString() };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectChgBfTkskIdo][dbMap=" + dbMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectChgBfTkskIdo]");
		return dbMap;
	}
	
	/**
	 * 入力情報・変更前督促異動情報を基に、変更後情報を取得します。
	 * 
	 * @param inMap 入力情報
	 * @param chgBfDbMap 変更前督促異動番号
	 * @return JBSbatCommonDBInterface 変更後情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface getChgAfInf(JBSbatServiceInterfaceMap inMap, JBSbatCommonDBInterface chgBfDbMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getChgAfInf]");
		
		// 条件値
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		
		// 督促番号
		whereParam.setValue(inMap.get(JBSbatCH_T_PRC_TAIOKRK.TOKUSOKU_NO));
		// 登録年月日時分秒
		whereParam.setValue(chgBfDbMap.getValue(JBSbatCH_T_PRC_TAIOKRK.ADD_DTM));
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getChgAfInf][whereParam_01=" + whereParam.getList().toString() + "]");
		
		// SQL実行
		executeCH_T_TOKUSOKU_IDO_CH_SELECT_005(whereParam.getList().toArray());
		
		// 結果を取得します。
		JBSbatCommonDBInterface dbMap = db_CH_T_TOKUSOKU_IDO.selectNext();
		
		// 取得できなかった場合
		if(null == dbMap)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getChgAfInf][督促異動からの取得なし]");
		
			// 督促情報を取得します。
			dbMap = getToksokInf(inMap);
			
		}
		else
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getChgAfInf][dbMap=" + dbMap.getMap().toString() + "]");

		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getChgAfInf]");
		return dbMap;
	}
	
	/**
	 * 対象文字列の長さを引数で指定した長さ以上の場合、その桁数で切り捨てた値を返します。
	 * 
	 * @param trgStr 対象文字列
	 * @param length 対象桁数
	 * @param bFlg 桁数のカウント方向判定フラグ（true:先頭から桁数をカウント、false:末尾から桁数をカウント）
	 * @return String 変換後文字列
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String tranString(String trgStr, int length, boolean bFlg) throws Exception
	{
		// 変換後文字列
		String rtnStr = JACStrConst.KARA_MOJI;
		
		// 対象文字列がnull以外の場合
		if(null != trgStr)
		{
			// 変換後文字列　更新
			rtnStr = trgStr;
		}
		
		// 文字列の長さ
		int trgLen = rtnStr.length();
		
		// 文字の桁数が対象桁数より大きい場合
		if(trgLen > length)
		{
			// 先頭から
			if(bFlg)
			{
				rtnStr = rtnStr.substring(0, length);
			}
			// 末尾から
			else
			{
				rtnStr = rtnStr.substring(length - trgLen);
			}
		}
		return rtnStr;
	}
	
	/**
	 * 改行を空文字に変換する。
	 * @param kiji 記事
	 * @return
	 */
	private String kaigyoDel(String kiji)
	{
		
		String kaigyoReplace = JACStrConst.KARA_MOJI;
		
		if(kiji != null)
		{
		
			kaigyoReplace = kiji.replaceAll(JACBatCommon.chgKaigyo(JACStrConst.LINE_CRLF)
																	, JACStrConst.KARA_MOJI);
		
		}
		return kaigyoReplace;
	}
	
	
	/**
	 * 入力情報を基に、督促情報を取得します。
	 * 
	 * @param inMap 入力情報
	 * @return JBSbatCommonDBInterface 変更後情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface getToksokInf(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getToksokInf]");
		
		// 条件値
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();

		// 督促番号
		whereParam.setValue(inMap.get(JBSbatCH_T_PRC_TAIOKRK.TOKUSOKU_NO));
			
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getToksokInf][whereParam=" + whereParam.getList().toString() + "]");
			
		// SQL実行
		executeCH_T_TOKUSOKU_CH_SELECT_004(whereParam.getList().toArray());
			
		// 結果を取得します。
		 JBSbatCommonDBInterface dbMap = db_CH_T_TOKUSOKU.selectNext();
			
		// 取得できなかった場合
		if(null == dbMap)
		{
			// 該当データなし
			String[] msgParam = new String[]
			{ JBSbatCH_T_TOKUSOKU.TABLE_NAME, whereParam.getList().toString() };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getToksokInf][dbMap=" + dbMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getToksokInf]");
		
		return dbMap;
	}

	/**▲▲▲▲▲▲メソッド追加 終了▲▲▲▲▲▲*/
	
// ADD START 2013.11.18 ANK-1692-00-00
	/**
	 * 「コード値:コード名称」の形式で督促ステータス名称を取得します。
	 * 
	 * @param status 督促ステータス
	 * @return 督促ステータス名称
	 * 
	 */
	private String getTokusokuStatName(String status)
	{
		StringBuffer sb = new StringBuffer();
		
		String statusName = this.tokusokuStatMap.get(status);
		
		if (statusName != null && !JACStrConst.KARA_MOJI.equals(statusName.trim())) // 名称を取得できた場合
		{
			// コード値:コード名称の形式で返却する
			sb.append(status);
			sb.append(JACStrConst.COLON);
			sb.append(statusName);
			return sb.toString();
		}
		else // 名称を取得できなかった場合
		{
			// 名称をそのまま返却する（ソース変更前の動きと同じ）
			return statusName;
		}
	}
// ADD END 2013.11.18 ANK-1692-00-00

}
