/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHKsdTrgtsIcrnSksi
*	ソースファイル名	：JBSbatCHKsdTrgtsIcrnSksi.java
*	作成者				：富士通　
*	作成日				：2012年01月22日
*＜機能概要＞
*　貸倒れ対象者一覧作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/01/22   富士通		新規作成
*	v3.00		2012/06/19   FJ）冨井	【ANK-0024-04-00】処理変更
*	v4.00		2013/03/26   FJ) 小柴	【内部管理番号-0000613】ファイル出力オブジェクト生成時のエンコード設定ずれ防止対応
*	v4.01		2013/04/05   FJ) 小柴	【IKK-2013-0000783】文字化け対策のため、エンコード形式の変更
*	v5.00		2013/07/10   FJ) 前田   【LT-2013-0000317】出力ファイルの解約起算日をキャンセル年月日、解約起算日の最小に修正
*	v5.01		2013/07/11   FJ) 桑島	【TG1-2013-0000662】請求年月対応
*	v5.02		2013/07/14   FJ) 前田	【LT-2013-0000495】サービス課金終了日がnullのときのABEND対応
*	v5.03		2013/08/14   FJ) 前田	【IT2-2013-0000740】課金開始、終了の検索キーに運用日を与えないように修正
*	v6.00		2013/11/27   FJ) 田内	【OM-2013-0004659】出力ファイルの解約起算日を解約起算日が優先で設定されるように修正
*	v6.01		2013/12/25   FJ) 垣内	【OM-2013-0005135】解約起算日設定時に課金開始・終了を考慮するよう修正
*	v8.00.00	2014/02/28   FJ) 北端	【ANK-1801-00-00】貸倒れ対象抽出データの仕様変更対応
*	v8.00.01	2014/03/21   FJ) 北端	【ANK-1801-00-00】貸倒れ対象者一覧作成（最終領収日が出ない）対応
*	v10.00.00	2014/07/10   FJ) 中作	【ANK-2053-00-00】貸倒れ対象者一覧の免税額追加対応
*	v45.00.00   2019/08/13   FJ) 酒井   【ANK-3682-00-00】軽減税率対応
*	v55.00.00   2021/08/18   FJ) 杉本   【ANK-3839-00-00】サービス契約紐付きなし請求先に対する貸倒業務改善
*************************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.Arrays;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.util.file.JBSbatCHIFM137;
import eo.business.util.file.JBSbatCHIFM333;
import eo.business.util.table.JBSbatCH_T_NYUKIN;
import eo.business.util.table.JBSbatCH_T_TOKUSOKU;
import eo.business.util.table.JBSbatKK_M_PRC_GRP;
import eo.business.util.table.JBSbatKK_T_KAKINS;
import eo.business.util.table.JBSbatKK_T_SEIKY_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatAplConst;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHKsdTrgtsIcrnSksi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(料金グループ)*/
	private static final String D_TBL_NAME_KK_M_PRC_GRP = "KK_M_PRC_GRP";

	/** テーブル(入金)*/
	private static final String D_TBL_NAME_CH_T_NYUKIN = "CH_T_NYUKIN";

	/** テーブル(督促)*/
	private static final String D_TBL_NAME_CH_T_TOKUSOKU = "CH_T_TOKUSOKU";
	// ANK-3839-00-00 ADD START
	/** テーブル(請求契約)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";
	// ANK-3839-00-00 ADD END

	/** SQL定義キー(CH_SELECT_002)*/
	private static final String KK_T_SVC_KEI_CH_SELECT_002 = "CH_SELECT_002";

	/** SQL定義キー(CH_SELECT_001)*/
	private static final String KK_M_PRC_GRP_CH_SELECT_001 = "CH_SELECT_001";

	/** SQL定義キー(CH_SELECT_021)*/
	private static final String CH_T_NYUKIN_CH_SELECT_021 = "CH_SELECT_021";

	/** SQL定義キー(CH_SELECT_017)*/
	private static final String CH_T_TOKUSOKU_CH_SELECT_017 = "CH_SELECT_017";
	// ANK-3839-00-00 ADD START
	/** SQL定義キー(CH_SELECT_018)*/
	private static final String KK_T_SVC_KEI_CH_SELECT_018 = "CH_SELECT_018";
	
	/** SQL定義キー(KK_SELECT_063)*/
	private static final String KK_T_SEIKY_KEI_KK_SELECT_063 = "KK_SELECT_063";
	// ANK-3839-00-00 ADD END

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
	// ANK-3839-00-00 ADD START
	/** テーブルアクセスクラス(サービス契約_請求内訳取得用)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI_2 = null;

	/** テーブルアクセスクラス(請求契約_最新世代取得用)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;
	// ANK-3839-00-00 ADD END

	/** テーブルアクセスクラス(料金グループ)*/
	private JBSbatSQLAccess db_KK_M_PRC_GRP = null;

	/** テーブルアクセスクラス(入金)*/
	private JBSbatSQLAccess db_CH_T_NYUKIN = null;

	/** テーブルアクセスクラス(督促)*/
	private JBSbatSQLAccess db_CH_T_TOKUSOKU = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 入力キー */
	private String 	inKey 					= null;
	/** 退避キー */
	private String 	taiKey					= null;

	/** 項番 */
	private int 		koban 					= 0;
	/** 請求金額 */
	private Long 		seikyAmntKei 				= 0L;
	/** 消費税 */
	private Long 		tax 					= 0L;
	/** 月別請求額情報格納位置 */
	private int 		seikyInfoPointer 		= 0;
	/** 月別請求額情報（未収月）*/
	private String[] 	seikyInfoMisyu 			= null;
	/** 月別請求額情報（請求額）*/
	private Long[] 	seikyInfoSeikyAmnt 			= null;
	/** 月別請求額情報（消費税）*/
	private Long[] 	seikyInfoTax 				= null;
	/** 月別請求額情報（非課税）*/
	private Long[] 	seikyInfoTax2 				= null;
	
	/** 退避.請求契約番号 */
	private String 	seikyKeiNo 					= JACStrConst.KARA_MOJI;
	/** 退避.督促ステータス */
	private String 	tkskStat 					= JACStrConst.KARA_MOJI;
	/** 退避.送付先名 */
	private String 	sohusNm 					= JACStrConst.KARA_MOJI;

	/** 退避.最終領収日 */
	private String 	lastReceiptYMD				= JACStrConst.KARA_MOJI;
	/** 退避.最新債権回収委託日 */
	private String 	latestSknksitkYMD 			= JACStrConst.KARA_MOJI;

	/** 格納月数 */
	private int 	kknMonCnt 					= 0;
	
	/** 退避．最大未収月数 */
	private int	maxMisyuMonthCnt 				= 0;
	
	/** 退避．出力リスト */
	private ArrayList<JBSbatServiceInterfaceMap> tmpOutPutList = null;
	
	/** 送付先名_桁数 */
	private static final int 	SOHUS_NM_LENGTH 	= 60;
	
	/** 料金グループ名_桁数 */
	private static final int 	PRC_GRP_NM_LENGTH 	= 30;
	
	/** 退避マップ */
	JBSbatServiceInterfaceMap tmpMap = null;
	
// v45.00.00 ANK-3682-00-00 ADD STA
	/** 退避.不課税識別 */
	private String 	fukazeiTaxRtSkbt 			= JACStrConst.KARA_MOJI;
// v45.00.00 ANK-3682-00-00 ADD END
	
// ANK-2053-00-00 ADD STA
	/** 退避.消費税率 */
	private String 	staxRt 					= JACStrConst.KARA_MOJI;
// ANK-2053-00-00 ADD END
	
	/** 退避.料金グループコード */
	private String 	prcGrpCd 					= JACStrConst.KARA_MOJI;
	/** 退避.料金グループ名 */
	private String 	prcGrpNm 					= JACStrConst.KARA_MOJI;
	/** 退避.サービス課金開始年月日 */
	private String 	svcChrgStaymd 				= JACStrConst.KARA_MOJI;
	/** 退避.サービス課金終了年月日 */
	private String 	svcChrgEndymd 				= JACStrConst.KARA_MOJI;
	
	/** 貸倒れ対象者一覧_見出し１（NO） */
	private String 	fileHeader1 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し２（請求先番号） */
	private String 	fileHeader2 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し３（請求先名） */
	private String 	fileHeader3 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し４（請求金額） */
	private String 	fileHeader4 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し５（うち消費税） */
	private String 	fileHeader5 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し６（料金グループ） */
	private String 	fileHeader6 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し７（料金グループ名） */
	private String 	fileHeader7 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し８（課金開始日） */
	private String 	fileHeader8 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し９（解約起算日） */
	private String 	fileHeader9 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し１０（督促ST） */
	private String 	fileHeader10 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し１１（未収月） */
	private String 	fileHeader11 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し１２（請求額） */
	private String 	fileHeader12 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し１３（うち消費税） */
	private String 	fileHeader13 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し１４（最終領収日） */
	private String 	fileHeader14 				= JACStrConst.KARA_MOJI;
	/** 貸倒れ対象者一覧_見出し１５（最新債権回収委託日） */
	private String 	fileHeader15 				= JACStrConst.KARA_MOJI;
	
// ANK-2053-00-00 ADD STA
	/** 貸倒れ対象者一覧_見出し１６（税率(%)） */
	private String 	fileHeader16 				= JACStrConst.KARA_MOJI;
// ANK-2053-00-00 ADD END

	/** 固定値：月別請求額情報欄 未収月 */
	private static final String 	MISYU_MON 		= "MISYU_MON";

	/** 固定値：月別請求額情報欄 請求額 */
	private static final String 	MISYU_MON_AMNT 	= "MISYU_MON_AMNT";
	
	/** 固定値：月別請求額情報欄 消費税 */
	private static final String 	MISYU_MON_STAX 	= "MISYU_MON_STAX";
	// ANK-3839-00-00 ADD START	
	/** 固定値：紐づきなし請求契約番号 料金グループコード名 */
	private static final String 	NO_REL_PRC_GRP_NM = "コンテンツ単独";
	// ANK-3839-00-00 ADD END
	
	/** 群締め日 */
	private String wk_GunEnd 	= null;
	
// ANK-2053-00-00 ADD STA
	/** 退避.請求契約番号 */
	private String tmpSeikyKeiNo = JACStrConst.KARA_MOJI;
// ANK-2053-00-00 ADD END
	
// v45.00.00 ANK-3682-00-00 ADD STA
	/** 不課税識別(不課税)*/
	private static final String FUKAZEI_TAX_RT_SKBT_1 = "1";
// v45.00.00 ANK-3682-00-00 ADD END

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		// ANK-3839-00-00 ADD START
		db_KK_T_SVC_KEI_2 = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_SEIKY_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_KEI);
		// ANK-3839-00-00 ADD END
		db_KK_M_PRC_GRP = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_M_PRC_GRP);
		db_CH_T_NYUKIN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_NYUKIN);
		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.getWorkPara();
		
		// 配列の初期化
		this.seikyInfoMisyu 		= new String[this.kknMonCnt + 1];
		this.seikyInfoSeikyAmnt 	= new Long[this.kknMonCnt + 1];
		this.seikyInfoTax 			= new Long[this.kknMonCnt + 1];
		this.seikyInfoTax2 			= new Long[this.kknMonCnt + 1];
		
		// 配列に空文字設定
		int i = 0;
		while(this.kknMonCnt > i)
		{
			this.seikyInfoMisyu[i] 		= JACStrConst.KARA_MOJI;
			this.seikyInfoSeikyAmnt[i]	= Long.parseLong("-1");
			this.seikyInfoTax[i]		= Long.parseLong("-1");
			this.seikyInfoTax2[i]		= Long.parseLong("-1");
			i++;
		}
		
		this.tmpOutPutList = new ArrayList<JBSbatServiceInterfaceMap>();
		
		//当日を含む過去最新の請求年月を取得
		JCHbatSeikyKaknoBusinessUtil su = new JCHbatSeikyKaknoBusinessUtil(commonItem);
		
		String su_SkyuYM = "";
		try
		{
			// 請求年月取得
			su_SkyuYM = su.getBillYmContain(super.opeDate, JACStrConst.EVENT_CD_RYOKIN_KEISAN_YMD);
		}
		finally
		{
			su.close();
		}
		
		// 料金スケジュール定義アクセス
		JACbatSchdlUtil schdUtil = new JACbatSchdlUtil(commonItem);
		
		try
		{
			// 群月初日、群締め日　←　JACbatSchdlUtil.getUseStrEnd(請求年月, イベントコード("01"（利用開始日））, イベントコード（"02"（利用終了日））)
			String[] rtn = schdUtil.getUseStrEnd(su_SkyuYM, JACStrConst.EVENT_CD_USE_STAYMD, JACStrConst.EVENT_CD_USE_ENDYMD);
			
			this.wk_GunEnd = rtn[1];
		}
		finally
		{
			// クローズ
			schdUtil.close();
		}
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		
		/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param  inMap            入力電文
	 * @param  outputInItem     入力情報
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception        業務サービス内で発生した例外全般。
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert 	inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap=" + inMap.getMap().toString() + "]") : true;
		
		// 最終レコード以外の場合
		if(inMap != null)
		{
			
			// 初回起動時
			if(this.tmpMap == null)
			{
				JBSbatServiceInterfaceMap dummy = new JBSbatServiceInterfaceMap();
				this.tmpMap = new JBSbatServiceInterfaceMap();
				// マップを退避させる
				this.tmpMap = inMap;
				// サービス契約スキーマ取得
				selectSvcKei(tmpMap);
				// 料金グループスキーマ取得
				selectPrcGrp(tmpMap);
				// 入金スキーマ取得
				selectNyukin(tmpMap);
				// 督促スキーマ取得
				selectTokusoku(tmpMap);
				outputInItem.addOutMapList(dummy);
				return outputInItem;
			}
			// 入力キー項目作成：(入力.請求契約番号＋入力.料金グループコード＋入力.消費税率)
			this.inKey = makeInKey(tmpMap);
			
			// 退避キー≠null かつ　退避キー≠入力キーの場合
			if(this.taiKey != null && !this.taiKey.equals(this.inKey))
			{
// ANK-2053-00-00 DEL STA
				// 項番カウントアップ
				//this.koban++;
// ANK-2053-00-00 DEL END
				// 貸倒れ対象者一覧退避
				this.tmpOutPutList.add(outKsdTgItiInfo());
				// 最大未収月数の退避
				this.setMaxMisyuMonthCnt();
				// 退避情報クリア
				taihiInfoClear();
				// サービス契約スキーマ取得
				selectSvcKei(tmpMap);
				// 料金グループスキーマ取得
				selectPrcGrp(tmpMap);
				// 入金スキーマ取得
				selectNyukin(tmpMap);
				// 督促スキーマ取得
				selectTokusoku(tmpMap);
			}
			// 入力情報の退避処理
			setInInfo(tmpMap);
			// 月別請求額情報の退避
			setMonBtSeiky(tmpMap);
			// マップを退避させる
			this.tmpMap = inMap;
		}
		else if(inMap == null)
		{
			// 入力キー項目作成：(入力.請求契約番号＋入力.料金グループコード＋入力.消費税率)
			this.inKey = makeInKey(tmpMap);
			// 退避キー≠null かつ　退避キー≠入力キーの場合
			if(this.taiKey != null && !this.taiKey.equals(this.inKey))
			{
// ANK-2053-00-00 DEL STA
				// 項番カウントアップ
				//this.koban++;
// ANK-2053-00-00 DEL END
				// 貸倒れ対象者一覧出力
				this.tmpOutPutList.add(outKsdTgItiInfo());
				
				// 最大未収月数の退避
				this.setMaxMisyuMonthCnt();
				// 退避情報クリア
				taihiInfoClear();
				// サービス契約スキーマ取得
				selectSvcKei(tmpMap);
				// 料金グループスキーマ取得
				selectPrcGrp(tmpMap);
				// 入金スキーマ取得
				selectNyukin(tmpMap);
				// 督促スキーマ取得
				selectTokusoku(tmpMap);
			}
// ANK-2053-00-00 DEL STA
			// 項番カウントアップ
			//this.koban++;
// ANK-2053-00-00 DEL END
			// 入力情報の退避処理
			setInInfo(tmpMap);
			// 月別請求額情報の退避
			setMonBtSeiky(tmpMap);
			// 貸倒れ対象者一覧出力
			this.tmpOutPutList.add(outKsdTgItiInfo());
			// 最大未収月数の退避
			this.setMaxMisyuMonthCnt();
		}
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 入力キー作成
	 * @param  inMap     入力電文
	 * @return tmpKey    入力キー
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String makeInKey(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeInKey]");
		// 入力キー
		StringBuffer tmpKey = new StringBuffer();
		
// ANK-2053-00-00 MOD STA
//		tmpKey.append(inMap.get(JBSbatCHIFM132.SEIKY_KEI_NO)); 	// 請求契約番号
//		tmpKey.append(inMap.get(JBSbatCHIFM132.PRC_GRP_CD)); 	// 料金グループコード
// v45.00.00 ANK-3682-00-00 MOD STA
//		tmpKey.append(inMap.get(JBSbatCHIFM235.SEIKY_KEI_NO));              // 請求契約番号
//		tmpKey.append(inMap.get(JBSbatCHIFM235.MISHU_AMNT_CHG_PRC_GRP_CD)); // 未収額変換後料金グループコード
//		tmpKey.append(inMap.get(JBSbatCHIFM235.STAX_RT));                   // 消費税率
		tmpKey.append(inMap.get(JBSbatCHIFM333.SEIKY_KEI_NO));              // 請求契約番号
		tmpKey.append(inMap.get(JBSbatCHIFM333.MISHU_AMNT_CHG_PRC_GRP_CD)); // 未収額変換後料金グループコード
		tmpKey.append(inMap.get(JBSbatCHIFM333.FUKAZEI_TAX_RT_SKBT));       // 不課税識別
		tmpKey.append(inMap.get(JBSbatCHIFM333.STAX_RT));                   // 消費税率
// v45.00.00 ANK-3682-00-00 MOD END
// ANK-2053-00-00 MOD END
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeInKey][tmpKey=" + tmpKey.toString() + "]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeInKey]");
		return tmpKey.toString();
	}

	/**
	 * サービス契約スキーマ取得
	 * @param  inMap     入力電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void selectSvcKei(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectSvcKei]");

		String bkSvcStaYmd = null;
		
		JBSbatCommonDBInterface paramList	= new JBSbatCommonDBInterface();
		
// ANK-2053-00-00 MOD STA
//		paramList.setValue(inMap.get(JBSbatCHIFM132.SEIKY_KEI_NO));	// 請求契約．請求契約番号
//		paramList.setValue(super.opeDate);							// 請求契約．予約適用年月日
//		paramList.setValue(inMap.get(JBSbatCHIFM132.PRC_GRP_CD));	// サービス契約．料金グループコード
//		paramList.setValue(super.opeDate);							// サービス契約．予約適用年月日
// v45.00.00 ANK-3682-00-00 MOD STA
//		paramList.setValue(inMap.get(JBSbatCHIFM235.SEIKY_KEI_NO));               // 請求契約番号
		paramList.setValue(inMap.get(JBSbatCHIFM333.SEIKY_KEI_NO));               // 請求契約番号
// v45.00.00 ANK-3682-00-00 MOD END
		paramList.setValue(super.opeDate);							              // 運用日
// v45.00.00 ANK-3682-00-00 MOD STA
//		paramList.setValue(inMap.get(JBSbatCHIFM235.MISHU_AMNT_CHG_PRC_GRP_CD));  // 未収額変換後料金グループコード
		paramList.setValue(inMap.get(JBSbatCHIFM333.MISHU_AMNT_CHG_PRC_GRP_CD));  // 未収額変換後料金グループコード
// v45.00.00 ANK-3682-00-00 MOD END
		paramList.setValue(super.opeDate);                                       // 運用日
// ANK-2053-00-00 MOD END
		
		// SQL実行
		executeKK_T_SVC_KEI_CH_SELECT_002(paramList.getList().toArray());
		JBSbatCommonDBInterface dbMap = db_KK_T_SVC_KEI.selectNext();

		// 取得結果がある場合
		if(dbMap != null)
		{
			// 終了解約起算年月日
			String endSvcDslKisanYmd = null;
			// キャンセル日（解約起算年月日が設定されない場合に利用）
			String endCancelYmd = null;
			// キャンセルフラグ
			boolean cancelFlg = true;
			
			while(dbMap != null)
			{
				
				// 初回レコードは無条件で送付先名を設定
				if(JACStrConst.KARA_MOJI.equals(this.sohusNm))
				{
					this.sohusNm = dbMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_NM); 		// 送付先名
				}
				String svcStaYmd = dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD);
				
				String svcCancelYmd = dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_CANCEL_YMD);
				
				String svcDslKisanYmd = dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_DSL_KISAN_YMD);
				
				// サービス課金開始年月日
				if(svcStaYmd != null)
				{
					// 初回レコードは無条件でサービス課金開始年月日を設定
					if(JACStrConst.KARA_MOJI.equals(this.svcChrgStaymd))
					{
						
						if(JACStrConst.KARA_MOJI.equals(svcStaYmd.trim()) && bkSvcStaYmd == null)
						{
							bkSvcStaYmd = svcStaYmd;
						}
						else
						{
							this.svcChrgStaymd = svcStaYmd;
						}
						
					}
					else
					{
						if(JACStrConst.KARA_MOJI.equals(svcStaYmd.trim()) && bkSvcStaYmd == null)
						{
							bkSvcStaYmd = svcStaYmd;
						}
						else
						{
							// 退避．サービス課金開始年月日　←　取得したデータの中で、最小のサービス課金開始年月日
							if(this.svcChrgStaymd.compareTo(dbMap.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD)) > 0)
							{
								this.svcChrgStaymd = svcStaYmd;
							}
						}
					}
				}
				
				// 解約起算年月日
				if(svcDslKisanYmd != null)
				{
					// 課金先が適用中の場合
					if(isKakinsApl(dbMap))
					{
						// 初回レコードは解約起算年月日を設定
						if(JACStrConst.KARA_MOJI.equals(this.svcChrgEndymd))
						{
							this.svcChrgEndymd = svcDslKisanYmd;
						}
						else
						{
							// 退避．解約起算年月日 ← 取得したデータの中で、最大の解約起算年月日
							if(this.svcChrgEndymd.compareTo(svcDslKisanYmd) < 0)
							{
								this.svcChrgEndymd = svcDslKisanYmd;
							}
							// 解約起算年月日を優先して設定
							if (cancelFlg) 
							{
								this.svcChrgEndymd = svcDslKisanYmd;
							}
						}
						cancelFlg = false;
					}
					else
					{
						// 初回レコードは解約起算年月日を設定
						if(endSvcDslKisanYmd == null || JACStrConst.KARA_MOJI.equals(endSvcDslKisanYmd))
						{
							endSvcDslKisanYmd = svcDslKisanYmd;
						}
						else
						{
							// 退避．解約起算年月日 ← 取得したデータの中で、最大の解約起算年月日
							if(endSvcDslKisanYmd.compareTo(svcDslKisanYmd) < 0)
							{
								endSvcDslKisanYmd = svcDslKisanYmd;
							}
						}
					}
				}
				else
				{
					// 解約起算年月日のレコードが設定されていない場合
					if (cancelFlg) 
					{
						// 課金先が適用中の場合
						if(isKakinsApl(dbMap))
						{
							// キャンセル日
							if (svcCancelYmd != null) 
							{
								// 初回レコードは無条件でサービス課金終了年月日を設定
								if(JACStrConst.KARA_MOJI.equals(this.svcChrgEndymd))
								{
									
									this.svcChrgEndymd = svcCancelYmd;
								}
								else
								{
									// 退避．解約起算年月日 ← 取得したデータの中で、最大のキャンセル日
									if(this.svcChrgEndymd.compareTo(svcCancelYmd) < 0)
									{
										this.svcChrgEndymd = svcCancelYmd;
									}
								}
							}
						}
						else
						{
							// 初回レコードは解約起算年月日を設定
							if(endCancelYmd == null || JACStrConst.KARA_MOJI.equals(endCancelYmd))
							{
								endCancelYmd = svcCancelYmd;
							}
							else
							{
								// 退避．解約起算年月日 ← 取得したデータの中で、最大の解約起算年月日
								if(endCancelYmd.compareTo(svcCancelYmd) < 0)
								{
									endCancelYmd = svcCancelYmd;
								}
							}
						}
					}
				}
				dbMap = db_KK_T_SVC_KEI.selectNext();
			}
			
			if(null != bkSvcStaYmd && JACStrConst.KARA_MOJI.equals(this.svcChrgStaymd))
			{
				this.svcChrgStaymd = bkSvcStaYmd;
			}
			
			// 課金先適用中のサービス契約がない場合、適用終了しているサービス契約の解約起算日を設定
			if(null != endSvcDslKisanYmd && JACStrConst.KARA_MOJI.equals(this.svcChrgEndymd))
			{
				this.svcChrgEndymd = endSvcDslKisanYmd;
			}
			// 解約起算日がない場合は、キャンセル年月日を設定
			else if(null != endCancelYmd && JACStrConst.KARA_MOJI.equals(this.svcChrgEndymd))
			{
				this.svcChrgEndymd = endCancelYmd;
			}
		}
		// 取得結果がない場合
		else
		{
			// ANK-3839-00-00 ADD START
			// 課金先に紐づかない請求先の場合、請求内訳に設定されているお客様IDを基に課金開始日、解約起算日を取得する
			JBSbatCommonDBInterface paramList2 = new JBSbatCommonDBInterface();
			
			// 請求契約番号
			paramList2.setValue(inMap.get(JBSbatCHIFM333.SEIKY_KEI_NO));
			// 運用日
			paramList2.setValue(super.opeDate);
			// 未収額変換後料金グループコード
			paramList2.setValue(inMap.get(JBSbatCHIFM333.MISHU_AMNT_CHG_PRC_GRP_CD));
			// 運用日
			paramList2.setValue(super.opeDate);

			// SQL実行
			executeKK_T_SVC_KEI_CH_SELECT_018(paramList2.getList().toArray());
			JBSbatCommonDBInterface dbMap2 = db_KK_T_SVC_KEI_2.selectNext();
			if (dbMap2 != null)
			{
				// 送付先名
				String svcSohusNm = JACStrConst.KARA_MOJI;
				// 課金開始日
				String svcChrgStaYmd = JACStrConst.KARA_MOJI;
				// 解約起算年月日
				String svcDslKisanYmd = JACStrConst.KARA_MOJI;

				while(dbMap2 != null)
				{
					if (JACStrConst.KARA_MOJI.equals(svcSohusNm))
					{
						// 送付先名
						svcSohusNm = dbMap2.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_NM);
					}

					if(JACStrConst.KARA_MOJI.equals(svcChrgStaYmd) || svcChrgStaYmd.compareTo(dbMap2.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD)) > 0)
					{
						// 課金開始日
						svcChrgStaYmd = dbMap2.getString(JBSbatKK_T_SVC_KEI.SVC_CHRG_STAYMD);
					}

					if(JACStrConst.KARA_MOJI.equals(svcDslKisanYmd) || svcDslKisanYmd.compareTo(dbMap2.getString(JBSbatKK_T_SVC_KEI.SVC_DSL_KISAN_YMD)) < 0)
					{
						// 解約起算年月日
						svcDslKisanYmd = dbMap2.getString(JBSbatKK_T_SVC_KEI.SVC_DSL_KISAN_YMD);
					}

					dbMap2 = db_KK_T_SVC_KEI_2.selectNext();
				}

				// 送付先名を設定
				if(!JACStrConst.KARA_MOJI.equals(svcSohusNm))
				{
					// 送付先名
					this.sohusNm = svcSohusNm;
				}
				// 課金開始日を設定
				if(!JACStrConst.KARA_MOJI.equals(svcChrgStaYmd))
				{
					// 課金開始日
					this.svcChrgStaymd = svcChrgStaYmd;
				}
				// 解約起算年月日を設定
				if(!JACStrConst.KARA_MOJI.equals(svcDslKisanYmd))
				{
					// 解約起算年月日
					this.svcChrgEndymd = svcDslKisanYmd;
				}
			}
			else
			{
			// ANK-3839-00-00 ADD END
				// ANK-3839-00-00 DEL START
//				// DB未存在エラー
//				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectSvcKei][DB未存在エラー]");
//				String[] outCntMsg = {JBSbatKK_T_SVC_KEI.TABLE_NAME, paramList.getList().toString()};
//				// エラーログ出力（エラーコード："EACB0240CW"（DB未存在エラー））
//				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0240CW, outCntMsg);
				// ANK-3839-00-00 DEL END
			// ANK-3839-00-00 ADD START
				// 請求契約の送付先名を取得
				// 最終未収月が取得できない場合、請求契約のカレントレコードの送付先名を取得する
				JBSbatCommonDBInterface paramList3 = new JBSbatCommonDBInterface();
				
				// 運用日
				paramList3.setValue(super.opeDate);
				// 請求契約番号
				paramList3.setValue(inMap.get(JBSbatCHIFM333.SEIKY_KEI_NO));
				
				executeKK_T_SEIKY_KEI_KK_SELECT_063(paramList3.getList().toArray());
				JBSbatCommonDBInterface dbMap3 = db_KK_T_SEIKY_KEI.selectNext();
				
				if (dbMap3 != null)
				{
					// 送付先名
					String svcSohusNm = JACStrConst.KARA_MOJI;
					
					while(dbMap3 != null)
					{
						if (JACStrConst.KARA_MOJI.equals(svcSohusNm))
						{
							// 送付先名
							svcSohusNm = dbMap3.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_NM);
						}
						
						dbMap3 = db_KK_T_SEIKY_KEI.selectNext();
					}
					
					// 送付先名を設定
					if(!JACStrConst.KARA_MOJI.equals(svcSohusNm))
					{
						// 送付先名
						this.sohusNm = svcSohusNm;
					}
				}
				
				// 料金グループコード名に「コンテンツ単独」を設定
				this.prcGrpNm = NO_REL_PRC_GRP_NM;
			}
			// ANK-3839-00-00 ADD END
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectSvcKei]");
	}

	/**
	 * 料金グループスキーマ取得
	 * @param  inMap     入力電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void selectPrcGrp(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectPrcGrp]");

		// ANK-3839-00-00 ADD START
		// 送付先名にすでに「コンテンツ単独」が設定されている場合、何もせずに処理終了
		if (!NO_REL_PRC_GRP_NM.equals(this.prcGrpNm))
		{
		// ANK-3839-00-00 ADD END
			JBSbatCommonDBInterface paramList	= new JBSbatCommonDBInterface();

// ANK-2053-00-00 MOD STA
//		paramList.setValue(inMap.get(JBSbatCHIFM132.PRC_GRP_CD));	// 料金グループコード
// v45.00.00 ANK-3682-00-00 MOD STA
//		paramList.setValue(inMap.get(JBSbatCHIFM235.MISHU_AMNT_CHG_PRC_GRP_CD));   // 未収額変換後料金グループコード
			paramList.setValue(inMap.get(JBSbatCHIFM333.MISHU_AMNT_CHG_PRC_GRP_CD));   // 未収額変換後料金グループコード
// v45.00.00 ANK-3682-00-00 MOD END
// ANK-2053-00-00 MOD END

			paramList.setValue(this.wk_GunEnd);							// 予約適用年月日
			paramList.setValue(this.wk_GunEnd);							// 料金グループ適用開始年月日
			paramList.setValue(this.wk_GunEnd);							// 料金グループ適用終了年月日

			// SQL実行
			executeKK_M_PRC_GRP_CH_SELECT_001(paramList.getList().toArray());
			JBSbatCommonDBInterface dbMap = db_KK_M_PRC_GRP.selectNext();

			// 該当データがある場合
			if(dbMap != null)
			{
				this.prcGrpNm = dbMap.getString(JBSbatKK_M_PRC_GRP.PRC_GRP_NM);
			}
			// 該当データがない場合
			else
			{
				this.prcGrpNm = JACStrConst.KARA_MOJI;
				// DB未存在エラー
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectPrcGrp][DB未存在エラー]");
				String[] outCntMsg = {JBSbatKK_M_PRC_GRP.TABLE_NAME, paramList.getList().toString()};
				// エラーログ出力（エラーコード："EACB0240CW"（DB未存在エラー））
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0240CW, outCntMsg);
			}
		// ANK-3839-00-00 ADD START
		}
		// ANK-3839-00-00 ADD END
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectPrcGrp]");

	}

	/**
	 * 入金スキーマ取得
	 * @param  inMap     入力電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void selectNyukin(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectNyukin]");

		JBSbatCommonDBInterface paramList	= new JBSbatCommonDBInterface();
		
// ANK-2053-00-00 MOD STA
//		paramList.setValue(inMap.get(JBSbatCHIFM132.SEIKY_KEI_NO));	// 請求契約番号
// v45.00.00 ANK-3682-00-00 MOD STA
//		paramList.setValue(inMap.get(JBSbatCHIFM235.SEIKY_KEI_NO)); // 請求契約番号
		paramList.setValue(inMap.get(JBSbatCHIFM333.SEIKY_KEI_NO)); // 請求契約番号
// v45.00.00 ANK-3682-00-00 MOD END
// ANK-2053-00-00 MOD END
		
		// SQL実行
		executeCH_T_NYUKIN_CH_SELECT_021(paramList.getList().toArray());
		JBSbatCommonDBInterface dbMap = db_CH_T_NYUKIN.selectNext();

		// 該当データがある場合
		if(dbMap != null)
		{
			this.lastReceiptYMD = dbMap.getString(JBSbatCH_T_NYUKIN.RECEIPT_YMD);
		}
		// 該当データがない場合
		else
		{
			this.lastReceiptYMD = JACStrConst.KARA_MOJI;
			// DB未存在エラー
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectNyukin][DB未存在エラー]");
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectNyukin]");

	}

	/**
	 * 督促スキーマ取得
	 * @param  inMap     入力電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void selectTokusoku(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectTokusoku]");

		JBSbatCommonDBInterface paramList	= new JBSbatCommonDBInterface();
		
// ANK-2053-00-00 MOD STA
//		paramList.setValue(inMap.get(JBSbatCHIFM132.SEIKY_KEI_NO));	// 請求契約番号
// v45.00.00 ANK-3682-00-00 MOD STA
//		paramList.setValue(inMap.get(JBSbatCHIFM235.SEIKY_KEI_NO)); // 請求契約番号
		paramList.setValue(inMap.get(JBSbatCHIFM333.SEIKY_KEI_NO)); // 請求契約番号
// v45.00.00 ANK-3682-00-00 MOD END
// ANK-2053-00-00 MOD END
		
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
		
		// SQL実行
		executeCH_T_TOKUSOKU_CH_SELECT_017(paramList.getList().toArray());
		JBSbatCommonDBInterface dbMap = db_CH_T_TOKUSOKU.selectNext();

		// 該当データがある場合
		if(dbMap != null)
		{
			this.latestSknksitkYMD = dbMap.getString(JBSbatCH_T_TOKUSOKU.SKNKSITKCM_ITAKU_TRAN_YMD);
			
// ANK-2053-00-00 ADD STA
			// 督促ステータス
			this.tkskStat = dbMap.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_STAT);
// ANK-2053-00-00 ADD END
		}
		// 該当データがない場合
		else
		{
			this.latestSknksitkYMD = JACStrConst.KARA_MOJI;
			
// ANK-2053-00-00 ADD STA
			// 督促ステータス
			this.tkskStat = JACStrConst.KARA_MOJI;
// ANK-2053-00-00 ADD END
			
			// DB未存在エラー
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectTokusoku][DB未存在エラー]");
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectTokusoku]");

	}

	/**
	 * 貸倒れ対象者一覧出力
	 * @return tmpMap    入力キー
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap outKsdTgItiInfo() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outKsdTgItiInfo]");
		
		JBSbatServiceInterfaceMap outTmpMap = new JBSbatServiceInterfaceMap();
		
// ANK-2053-00-00 ADD STA
		if(!tmpSeikyKeiNo.equals(this.seikyKeiNo))
		{
			this.koban++;
			tmpSeikyKeiNo = this.seikyKeiNo;
		}
// ANK-2053-00-00 ADD END
		
		// 貸倒れ対象者情報リスト
		outTmpMap.setString(JBSbatCHIFM137.NO, 			this.koban); 									// 項番
		outTmpMap.setString(JBSbatCHIFM137.SEIKY_KEI_NO, 	this.seikyKeiNo);							// 請求契約番号
		outTmpMap.setString(JBSbatCHIFM137.SOHUS_NM, 		divStr(this.sohusNm, SOHUS_NM_LENGTH)); 	// 送付先名
		outTmpMap.setString(JBSbatCHIFM137.SEIKY_AMNT, 	Long.toString(this.seikyAmntKei)); 				// 請求金額
		
// ANK-2053-00-00 ADD STA
		
		// 消費税率が空白の場合
		if("".equals(this.staxRt))
		{
			// 消費税空文字
			outTmpMap.setString(JBSbatCHIFM137.STAX, JACStrConst.KARA_MOJI); 					// 消費税
		}
// v45.00.00 ANK-3682-00-00 ADD STA
		else if(FUKAZEI_TAX_RT_SKBT_1.equals(this.fukazeiTaxRtSkbt))
		{
			// 消費税空文字
			outTmpMap.setString(JBSbatCHIFM137.STAX, JACStrConst.KARA_MOJI); 					// 消費税
		}
// v45.00.00 ANK-3682-00-00 ADD END
		else
		{
			outTmpMap.setString(JBSbatCHIFM137.STAX, 			Long.toString(this.tax)); 					// 消費税
		}
// ANK-2053-00-00 ADD END
		
		outTmpMap.setString(JBSbatCHIFM137.PRC_GRP_CD, 	this.prcGrpCd); 								// サービスコード
		outTmpMap.setString(JBSbatCHIFM137.PRC_GRP_NM, 	divStr(this.prcGrpNm, PRC_GRP_NM_LENGTH)); 	 	// 料金グループ名
		outTmpMap.setString(JBSbatCHIFM137.CHRG_STAYMD, 	this.svcChrgStaymd); 						// 課金開始日
		outTmpMap.setString(JBSbatCHIFM137.DSL_KISAN_YMD, 	this.svcChrgEndymd); 						// 解約起算日
		
		outTmpMap.setString(JBSbatCHIFM137.LAST_RECEIPT_YMD, 	this.lastReceiptYMD); 					// 最終領収日
		outTmpMap.setString(JBSbatCHIFM137.LATEST_SKNKSITK_YMD, 	this.latestSknksitkYMD);			// 最新債権回収委託日
		
		outTmpMap.setString(JBSbatCHIFM137.TOKUSOKU_STAT, 	this.tkskStat); 							// 督促ステータス
		
// ANK-2053-00-00 ADD STA
		outTmpMap.setString(JBSbatCHIFM137.STAX_RT, 	this.staxRt); 							        // 消費税率
// ANK-2053-00-00 ADD END
		outTmpMap.set(MISYU_MON, 							Arrays.copyOf(this.seikyInfoMisyu, this.seikyInfoMisyu.length));
		outTmpMap.set(MISYU_MON_AMNT, 						Arrays.copyOf(this.seikyInfoSeikyAmnt, this.seikyInfoSeikyAmnt.length));
		
		// 消費税率が空白の場合
		if("".equals(this.staxRt))
		{
			outTmpMap.set(MISYU_MON_STAX, 						Arrays.copyOf(this.seikyInfoTax2, this.seikyInfoTax2.length));
		}
// v45.00.00 ANK-3682-00-00 ADD STA
		else if(FUKAZEI_TAX_RT_SKBT_1.equals(this.fukazeiTaxRtSkbt))
		{
			outTmpMap.set(MISYU_MON_STAX, 						Arrays.copyOf(this.seikyInfoTax2, this.seikyInfoTax2.length));
		}
// v45.00.00 ANK-3682-00-00 ADD END
		else
		{
			outTmpMap.set(MISYU_MON_STAX, 						Arrays.copyOf(this.seikyInfoTax, this.seikyInfoTax.length));
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outKsdTgItiInfo]");
		return outTmpMap;
	}
	
	/**
	 * 入力情報退避処理
	 * @param  inMap     入力電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setInInfo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setInInfo]");
		
// ANK-2053-00-00 MOD STA
//		this.seikyKeiNo 	= inMap.getString(JBSbatCHIFM132.SEIKY_KEI_NO); 	// 請求契約番号
//		this.prcGrpCd 		= inMap.getString(JBSbatCHIFM132.PRC_GRP_CD); 		// 料金グループコード
// v45.00.00 ANK-3682-00-00 MOD STA
//		this.seikyKeiNo 	= inMap.getString(JBSbatCHIFM235.SEIKY_KEI_NO);              // 請求契約番号
//		this.prcGrpCd 		= inMap.getString(JBSbatCHIFM235.MISHU_AMNT_CHG_PRC_GRP_CD); // 未収額変換後料金グループコード
//		this.staxRt        = inMap.getString(JBSbatCHIFM235.STAX_RT);  // 消費税率
		this.seikyKeiNo = inMap.getString(JBSbatCHIFM333.SEIKY_KEI_NO);              // 請求契約番号
		this.prcGrpCd = inMap.getString(JBSbatCHIFM333.MISHU_AMNT_CHG_PRC_GRP_CD);   // 未収額変換後料金グループコード
		this.fukazeiTaxRtSkbt = inMap.getString(JBSbatCHIFM333.FUKAZEI_TAX_RT_SKBT); // 不課税識別
		this.staxRt = inMap.getString(JBSbatCHIFM333.STAX_RT);                       // 消費税率
// v45.00.00 ANK-3682-00-00 MOD END
// ANK-2053-00-00 MOD END
		
// ANK-2053-00-00 DEL STA
//		this.tkskStat 		= inMap.getString(JBSbatCHIFM132.TOKUSOKU_STAT); 	// 督促ステータス
// ANK-2053-00-00 DEL END
		
		this.taiKey 		= this.inKey; 										// 退避キー
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setInInfo]");
	}

	/**
	 * 月別請求額情報退避処理
	 * @param  inMap     入力電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setMonBtSeiky(JBSbatServiceInterfaceMap inMap) throws Exception
	{
// ANK-2053-00-00 MOD STA
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setMonBtSeiky]");
//		// 入力.請求金額が空文字でない場合
//		if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM132.SEIKY_AMNT)))
//		{
//			// 請求金額加算
//			this.seikyAmntKei 		= this.seikyAmntKei + Long.parseLong(inMap.getString(JBSbatCHIFM132.SEIKY_AMNT));
//		}
//		// 入力.消費税が空文字でない場合
//		if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM132.STAX)))
//		{
//			// 消費税加算
//			this.tax 			= this.tax + Integer.parseInt(inMap.getString(JBSbatCHIFM132.STAX));
//		}
//
//		// 月別請求額格納位置　＜　格納月数の場合
//		if(this.kknMonCnt > this.seikyInfoPointer)
//		{
//			this.seikyInfoMisyu[this.seikyInfoPointer] 		= inMap.getString(JBSbatCHIFM132.MISYU_MON); 	// 未収月
//
//			// 入力.請求金額が空文字でない場合
//			if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM132.SEIKY_AMNT)))
//			{
//				this.seikyInfoSeikyAmnt[this.seikyInfoPointer] = 
//					Long.parseLong(inMap.getString(JBSbatCHIFM132.SEIKY_AMNT)); 	// 請求金
//			}
//			// 入力.消費税が空文字でない場合
//			if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM132.STAX)))
//			{
//				this.seikyInfoTax[this.seikyInfoPointer] = 
//					Long.parseLong(inMap.getString(JBSbatCHIFM132.STAX)); 			// 消費税
//			}
//			this.seikyInfoPointer++;
//		}
//		else
//		{
//			// 入力.請求金額が空文字でない場合
//			if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM132.SEIKY_AMNT)))
//			{
//				// 請求額の値が初期値でない場合
//				if(!this.seikyInfoSeikyAmnt[this.seikyInfoPointer - 1].equals(-1L))
//				{
//					// 入力.請求額を加算
//					this.seikyInfoSeikyAmnt[this.seikyInfoPointer - 1] = 
//						this.seikyInfoSeikyAmnt[this.seikyInfoPointer - 1] + 
//						Long.parseLong(inMap.getString(JBSbatCHIFM132.SEIKY_AMNT)); 	// 請求金額
//				}
//				// 請求額の値が初期値の場合
//				else
//				{
//					this.seikyInfoSeikyAmnt[this.seikyInfoPointer - 1] = 
//						Long.parseLong(inMap.getString(JBSbatCHIFM132.SEIKY_AMNT)); 	// 請求金
//				}
//			}			
//			// 入力.消費税が空文字でない場合
//			if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM132.STAX)))
//			{
//				// 消費税の値が初期値でない場合
//				if(!this.seikyInfoTax[this.seikyInfoPointer - 1].equals(-1))
//				{
//					// 入力.消費税を加算
//					this.seikyInfoTax[this.seikyInfoPointer - 1] = 
//						this.seikyInfoTax[this.seikyInfoPointer - 1] + 
//						Long.parseLong(inMap.getString(JBSbatCHIFM132.STAX)); 		// 消費税
//				}
//				// 消費税の値が初期値の場合
//				else
//				{
//					this.seikyInfoTax[this.seikyInfoPointer - 1] = 
//						Long.parseLong(inMap.getString(JBSbatCHIFM132.STAX)); 	// 消費税
//				}
//			}
//		}
//		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setMonBtSeiky]");
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setMonBtSeiky]");
		
		// 請求金額加算
// v45.00.00 ANK-3682-00-00 MOD STA
//		this.seikyAmntKei 		= this.seikyAmntKei + inMap.getBigDecimal(JBSbatCHIFM235.MISHU_AMNT).longValue();
		this.seikyAmntKei 		= this.seikyAmntKei + inMap.getBigDecimal(JBSbatCHIFM333.MISHU_AMNT).longValue();
// v45.00.00 ANK-3682-00-00 MOD END
		
		// 入力.消費税額が空文字でない場合
// v45.00.00 ANK-3682-00-00 MOD STA
//		if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM235.STAX_AMNT)))
		if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM333.STAX_AMNT)))
// v45.00.00 ANK-3682-00-00 MOD END
		{
			// 消費税加算
// v45.00.00 ANK-3682-00-00 MOD STA
//			this.tax 			= this.tax + Integer.parseInt(inMap.getString(JBSbatCHIFM235.STAX_AMNT));
			this.tax 			= this.tax + Integer.parseInt(inMap.getString(JBSbatCHIFM333.STAX_AMNT));
// v45.00.00 ANK-3682-00-00 MOD END
		}
		
		// 月別請求額格納位置　＜　格納月数の場合
		if(this.kknMonCnt > this.seikyInfoPointer)
		{
// v45.00.00 ANK-3682-00-00 MOD STA
//			this.seikyInfoMisyu[this.seikyInfoPointer] 	= inMap.getString(JBSbatCHIFM235.SAIKEN_YM); 	// 債権月
			this.seikyInfoMisyu[this.seikyInfoPointer] 	= inMap.getString(JBSbatCHIFM333.SAIKEN_YM); 	// 債権月
// v45.00.00 ANK-3682-00-00 MOD END
			
// v45.00.00 ANK-3682-00-00 MOD STA
//			this.seikyInfoSeikyAmnt[this.seikyInfoPointer] = inMap.getBigDecimal((JBSbatCHIFM235.MISHU_AMNT)).longValue(); 	// 未収額
			this.seikyInfoSeikyAmnt[this.seikyInfoPointer] = inMap.getBigDecimal((JBSbatCHIFM333.MISHU_AMNT)).longValue(); 	// 未収額
// v45.00.00 ANK-3682-00-00 MOD END
			
			// 入力.消費税が空文字でない場合
// v45.00.00 ANK-3682-00-00 MOD STA
//			if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM235.STAX_AMNT)))
			if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM333.STAX_AMNT)))
// v45.00.00 ANK-3682-00-00 MOD END
			{
// v45.00.00 ANK-3682-00-00 MOD STA
//				this.seikyInfoTax[this.seikyInfoPointer] = 
//					Long.parseLong(inMap.getString(JBSbatCHIFM235.STAX_AMNT)); 			// 消費税
				this.seikyInfoTax[this.seikyInfoPointer] = 
					Long.parseLong(inMap.getString(JBSbatCHIFM333.STAX_AMNT)); 			// 消費税
// v45.00.00 ANK-3682-00-00 MOD END
			}
			this.seikyInfoPointer++;
		}
		else
		{
			// 未収額の値が初期値でない場合
			if(!this.seikyInfoSeikyAmnt[this.seikyInfoPointer - 1].equals(-1L))
			{
				// 入力.未収額を加算
// v45.00.00 ANK-3682-00-00 MOD STA
//				this.seikyInfoSeikyAmnt[this.seikyInfoPointer - 1] = 
//					this.seikyInfoSeikyAmnt[this.seikyInfoPointer - 1] + 
//					inMap.getBigDecimal((JBSbatCHIFM235.MISHU_AMNT)).longValue(); 	// 未収額
				this.seikyInfoSeikyAmnt[this.seikyInfoPointer - 1] = 
					this.seikyInfoSeikyAmnt[this.seikyInfoPointer - 1] + 
					inMap.getBigDecimal((JBSbatCHIFM333.MISHU_AMNT)).longValue(); 	// 未収額
// v45.00.00 ANK-3682-00-00 MOD END
			}
			// 未収額の値が初期値の場合
			else
			{
// v45.00.00 ANK-3682-00-00 MOD STA
//				this.seikyInfoSeikyAmnt[this.seikyInfoPointer - 1] = inMap.getBigDecimal((JBSbatCHIFM235.MISHU_AMNT)).longValue(); 	// 未収額
				this.seikyInfoSeikyAmnt[this.seikyInfoPointer - 1] = inMap.getBigDecimal((JBSbatCHIFM333.MISHU_AMNT)).longValue(); 	// 未収額
// v45.00.00 ANK-3682-00-00 MOD END
			}
			// 入力.消費税が空文字でない場合
// v45.00.00 ANK-3682-00-00 MOD STA
//			if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM235.STAX_AMNT)))
			if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM333.STAX_AMNT)))
// v45.00.00 ANK-3682-00-00 MOD END
			{
				// 消費税の値が初期値でない場合
				if(!this.seikyInfoTax[this.seikyInfoPointer - 1].equals(-1))
				{
					// 入力.消費税を加算
// v45.00.00 ANK-3682-00-00 MOD STA
//					this.seikyInfoTax[this.seikyInfoPointer - 1] = 
//						this.seikyInfoTax[this.seikyInfoPointer - 1] + 
//						Long.parseLong(inMap.getString(JBSbatCHIFM235.STAX_AMNT)); 		// 消費税
					this.seikyInfoTax[this.seikyInfoPointer - 1] = 
						this.seikyInfoTax[this.seikyInfoPointer - 1] + 
						Long.parseLong(inMap.getString(JBSbatCHIFM333.STAX_AMNT)); 		// 消費税
// v45.00.00 ANK-3682-00-00 MOD END
				}
				// 消費税の値が初期値の場合
				else
				{
// v45.00.00 ANK-3682-00-00 MOD STA
//					this.seikyInfoTax[this.seikyInfoPointer - 1] = 
//						Long.parseLong(inMap.getString(JBSbatCHIFM235.STAX_AMNT)); 	// 消費税
					this.seikyInfoTax[this.seikyInfoPointer - 1] = 
						Long.parseLong(inMap.getString(JBSbatCHIFM333.STAX_AMNT)); 	// 消費税
// v45.00.00 ANK-3682-00-00 MOD END
				}
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setMonBtSeiky]");
// ANK-2053-00-00 MOD END
	}

	/**
	 * 退避情報クリア
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void taihiInfoClear() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][taihiInfoClear]");
		
		// 月別請求額情報格納位置クリア
		this.seikyInfoPointer 		= 0;
		// 配列に空文字設定
		int i = 0;
		while(kknMonCnt > i)
		{
			// 月別請求額情報（未収月）
			this.seikyInfoMisyu[i] 		= JACStrConst.KARA_MOJI;
			// 月別請求額情報（請求額）
			this.seikyInfoSeikyAmnt[i]	= Long.parseLong("-1");
			// 月別請求額情報（消費税）
			this.seikyInfoTax[i]		= Long.parseLong("-1");
			i++;
		}
		// 請求金額
		this.seikyAmntKei 				= 0L;
		// 消費税
		this.tax 						= 0L;
		// 料金グループコード
		this.prcGrpCd 					= JACStrConst.KARA_MOJI;
		// 料金グループ名
		this.prcGrpNm 					= JACStrConst.KARA_MOJI;
		// サービス課金開始年月日
		this.svcChrgStaymd 				= JACStrConst.KARA_MOJI;
		// サービス課金終了年月日
		this.svcChrgEndymd 				= JACStrConst.KARA_MOJI;
		// 送付先名
		this.sohusNm 					= JACStrConst.KARA_MOJI;
		// 最終領収日
		this.lastReceiptYMD				= JACStrConst.KARA_MOJI;
		// 退避.最新債権回収委託日
		this.latestSknksitkYMD 			= JACStrConst.KARA_MOJI;
		
// v45.00.00 ANK-3682-00-00 ADD STA
		// 不課税識別
		this.fukazeiTaxRtSkbt 			= JACStrConst.KARA_MOJI;
// v45.00.00 ANK-3682-00-00 ADD END

// ANK-2053-00-00 ADD STA
		// 消費税率
		this.staxRt 					= JACStrConst.KARA_MOJI;
// ANK-2053-00-00 ADD END
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][taihiInfoClear]");
	}
	
	/**
	 * 対象の文字数が引数で渡された桁数を超過している場合、
	 * その桁数にして返します。
	 * 
	 * @param str 対象文字列
	 * @param length 桁数
	 * @return String 対象文字列または、桁数調整後の対象文字列
	 */
	private String divStr(String str, int length)
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][divStr]");
		String rtnStr = JACStrConst.KARA_MOJI;
		
		if(null != str)
		{
			rtnStr = str;
			
			int trgLen = rtnStr.length();
			
			if(trgLen > length)
			{
					rtnStr = rtnStr.substring(0, length);
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][divStr]");
		return rtnStr;
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI.close();
		// ANK-3839-00-00 ADD START
		db_KK_T_SVC_KEI_2.close();
		db_KK_T_SEIKY_KEI.close();
		// ANK-3839-00-00 ADD END
		db_KK_M_PRC_GRP.close();
		db_CH_T_NYUKIN.close();
		db_CH_T_TOKUSOKU.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		
		
		// ファイル出力部品を取得
		JBSbatOutputFileUtil fileUtil = super.commonItem.getOutPutFile();
		// 設定されているエンコード形式を退避
		String enc = fileUtil.getEncode();
		// encodeの形式がSHIFT-JISの場合、MS932に変換
		if (JACStrConst.ENCODE_SJIS.toUpperCase().equals(enc.toUpperCase()))
		{
			enc = JACStrConst.ENCODE_MS932;
		}
		
		//出力定義ファイル名を取得する。
		String outFileDefName = JBSbatAplConst.getAplConstValue("OTD") + "CHIFM137.def";

		// 出力定義ファイルオブジェクトを生成する
		JBSbatDefFileUtil outFileDef = new JBSbatDefFileUtil(outFileDefName, fileUtil);
		// 退避したエンコード形式を戻す（出力定義ファイルオブジェクト生成時に上書きが発生しているため）
		fileUtil.setEncode(enc);
		
		// 貸倒れ対象者一覧ファイル（見出し）出力を行う。
		this.makeOutputHeader(fileUtil, outFileDef);
		
		// 貸倒れ対象者一覧ファイル（データ）出力を行う。
		this.makeOutputDtl(fileUtil, outFileDef);

		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
		
		/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(CH_SELECT_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 executeKK_T_SVC_KEI_CH_SELECT_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_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_CH_SELECT_002);
	}
	// ANK-3839-00-00 ADD START

	/**
	 * SQLKEY(CH_SELECT_018)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	請求契約．請求契約番号
	 *		 	請求契約．予約適用年月日
	 *		 	サービス契約．料金グループコード
	 *		 	サービス契約．予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_CH_SELECT_018(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_KK_T_SVC_KEI_2.selectBySqlDefine(paramList, KK_T_SVC_KEI_CH_SELECT_018);
	}

	/**
	 * SQLKEY(KK_SELECT_063)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	請求契約．予約適用年月日
	 *		 	請求契約．請求契約番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SEIKY_KEI_KK_SELECT_063(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SEIKY_KEI.selectBySqlDefine(paramList, KK_T_SEIKY_KEI_KK_SELECT_063);
	}
	// ANK-3839-00-00 ADD END

	/**
	 * 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 executeKK_M_PRC_GRP_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_KK_M_PRC_GRP.selectBySqlDefine(paramList, KK_M_PRC_GRP_CH_SELECT_001);
	}

	/**
	 * SQLKEY(CH_SELECT_021)で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_NYUKIN_CH_SELECT_021(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_CH_T_NYUKIN.selectBySqlDefine(paramList, CH_T_NYUKIN_CH_SELECT_021);
	}

	/**
	 * SQLKEY(CH_SELECT_017)で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_017(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_CH_T_TOKUSOKU.selectBySqlDefine(paramList, CH_T_TOKUSOKU_CH_SELECT_017);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 業務パラメータ管理及び、システムパラメータ管理から値を取得します。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void getWorkPara() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getWorkPara]");
		
		// 業務パラメータ取得
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		try
		{
			// 格納月数
			this.kknMonCnt 	= Integer.parseInt(paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_KAKNO_MON_KAS_CNT));
			// 貸倒れ対象者一覧_見出し１（NO）
			this.fileHeader1 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_1);
			// 貸倒れ対象者一覧_見出し２（請求先番号）
			this.fileHeader2 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_2);
			// 貸倒れ対象者一覧_見出し３（請求先名）
			this.fileHeader3 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_3);
			// 貸倒れ対象者一覧_見出し４（請求金額）
			this.fileHeader4 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_4);
			// 貸倒れ対象者一覧_見出し５（うち消費税）
			this.fileHeader5 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_5);
			// 貸倒れ対象者一覧_見出し６（料金グループ）
			this.fileHeader6 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_6);
			// 貸倒れ対象者一覧_見出し７（料金グループ名）
			this.fileHeader7 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_7);
			// 貸倒れ対象者一覧_見出し８（課金開始日）
			this.fileHeader8 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_8);
			// 貸倒れ対象者一覧_見出し９（解約起算日）
			this.fileHeader9 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_9);
			// 貸倒れ対象者一覧_見出し１０（督促ST）
			this.fileHeader10 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_10);
			// 貸倒れ対象者一覧_見出し１１（未収月）
			this.fileHeader11 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_11);
			// 貸倒れ対象者一覧_見出し１２（請求額）
			this.fileHeader12 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_12);
			// 貸倒れ対象者一覧_見出し１３（うち消費税）
			this.fileHeader13 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_13);
			// 貸倒れ対象者一覧_見出し１４（最終領収日）
			this.fileHeader14 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_14);
			// 貸倒れ対象者一覧_見出し１５（最新債権回収委託日）
			this.fileHeader15 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_15);
			
// ANK-2053-00-00 ADD STA
			// 貸倒れ対象者一覧_見出し１６（税率(%)）
			this.fileHeader16 = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_CHLST04101_H_16);
// ANK-2053-00-00 ADD END
			
		}
		finally
		{
			paramUtil.close();
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][格納月数 = " + this.kknMonCnt  + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し１（NO） = " + this.fileHeader1 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し２（請求先番号） = " + this.fileHeader2 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し３（請求先名） = " + this.fileHeader3 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し４（請求金額） = " + this.fileHeader4 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し５（うち消費税） = " + this.fileHeader5 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し６（料金グループ） = " + this.fileHeader6 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し７（料金グループ名） = " + this.fileHeader7 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し８（課金開始日） = " + this.fileHeader8 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し９（解約起算日） = " + this.fileHeader9 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し１０（督促ST） = " + this.fileHeader10 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し１１（未収月） = " + this.fileHeader11 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し１２（請求額） = " + this.fileHeader12 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し１３（うち消費税） = " + this.fileHeader13 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し１４（最終領収日） = " + this.fileHeader14 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し１５（最新債権回収委託日） = " + this.fileHeader15 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara][貸倒れ対象者一覧_見出し１６（税率(%)） = " + this.fileHeader16 + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getWorkPara]");
		return;
	}
	
	/**
	 * 最大未収月数の退避を行います。
	 * 
	 */
	private void setMaxMisyuMonthCnt()
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setMaxMisyuMonthCnt]");
		
		if(this.maxMisyuMonthCnt < this.seikyInfoPointer)
		{
			this.maxMisyuMonthCnt = this.seikyInfoPointer;
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setMaxMisyuMonthCnt]最大未収月数 = " + this.maxMisyuMonthCnt + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setMaxMisyuMonthCnt]");
		return;
	}
	
	/**
	 * 貸倒れ対象者一覧ファイル（見出し）出力処理を行います。
	 * @param fileUtil    ファイル出力部品	
	 * @param outFileDef    出力定義ファイルオブジェクト
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeOutputHeader(JBSbatOutputFileUtil fileUtil, JBSbatDefFileUtil outFileDef) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputHeader]");
		int i = 0;
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		// 貸倒れ対象者一覧ファイル（見出し）
		outMap.setString(JBSbatCHIFM137.NO, 			this.fileHeader1); 				// 項番
		outMap.setString(JBSbatCHIFM137.SEIKY_KEI_NO, 	this.fileHeader2);				// 請求契約番号
		outMap.setString(JBSbatCHIFM137.SOHUS_NM, 		this.fileHeader3); 				// 送付先名
		outMap.setString(JBSbatCHIFM137.SEIKY_AMNT, 	this.fileHeader4); 				// 請求金額
		outMap.setString(JBSbatCHIFM137.STAX, 			this.fileHeader5); 				// 消費税
		
// ANK-2053-00-00 ADD STA
		outMap.setString(JBSbatCHIFM137.STAX_RT,        this.fileHeader16); 			// 税率(%)
// ANK-2053-00-00 ADD END
		
		outMap.setString(JBSbatCHIFM137.PRC_GRP_CD, 	this.fileHeader6); 				// サービスコード
		outMap.setString(JBSbatCHIFM137.PRC_GRP_NM, 	this.fileHeader7); 				// 料金グループ名
		outMap.setString(JBSbatCHIFM137.CHRG_STAYMD, 	this.fileHeader8); 				// 課金開始日
		outMap.setString(JBSbatCHIFM137.DSL_KISAN_YMD, 	this.fileHeader9); 				// 解約起算日
		outMap.setString(JBSbatCHIFM137.TOKUSOKU_STAT, 	this.fileHeader10); 			// 督促ステータス
		outMap.setString(JBSbatCHIFM137.LAST_RECEIPT_YMD, 		this.fileHeader14); 	// 最終領収日
		outMap.setString(JBSbatCHIFM137.LATEST_SKNKSITK_YMD, 	this.fileHeader15); 	// 最新債権回収委託日
		
		ArrayList<String> tmpKmk = new ArrayList<String>();
		
		while(this.maxMisyuMonthCnt > i)
		{
			tmpKmk.add(this.fileHeader11.concat(Long.toString(i + 1))); 	// 未収月
		
			tmpKmk.add(this.fileHeader12.concat(Long.toString(i + 1))); 	// 請求額
			
			tmpKmk.add(this.fileHeader13.concat(Long.toString(i + 1))); 	// 消費税

			i++;
		}
		
		//リストを項目毎のカンマ区切りに変換し格納
		outMap.setString(JBSbatCHIFM137.MI_INFO, JCHbatSeikyKaknoBusinessUtil.convListToString(tmpKmk));
		outMap.setOutFlg(true);
		fileUtil.print((JBSbatServiceInterfaceMap)outMap, outFileDef);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutputHeader]");
		return ;
	}
	
	/**
	 * 貸倒れ対象者一覧ファイル（データ）出力処理を行います。
	 * @param fileUtil    ファイル出力部品	
	 * @param outFileDef    出力定義ファイルオブジェクト
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeOutputDtl(JBSbatOutputFileUtil fileUtil, JBSbatDefFileUtil outFileDef) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeOutputDtl]");

		for(int i = 0 ; i < this.tmpOutPutList.size(); i++)
		{
			JBSbatServiceInterfaceMap outMap = this.tmpOutPutList.get(i);
			int j = 0;
			ArrayList<String> tmpKmk = new ArrayList<String>();
			String[] misyuMon = (String[])outMap.get(MISYU_MON);
			Long[] seikyAmnt = (Long[])outMap.get(MISYU_MON_AMNT);
			Long[] stax =  (Long[])outMap.get(MISYU_MON_STAX);
			while(this.maxMisyuMonthCnt > j)
			{
				
				tmpKmk.add(misyuMon[j]); 		// 未収月
				// 請求額が初期値でない場合
				if(!seikyAmnt[j].equals(-1L))
				{
					tmpKmk.add(Long.toString(seikyAmnt[j])); 	// 請求額
				}
				// 初期値の場合
				else
				{
					tmpKmk.add(JACStrConst.KARA_MOJI);
				}
				// 消費税が初期値でない場合
				if(!stax[j].equals(-1L))
				{
					tmpKmk.add(Long.toString(stax[j])); 		// 消費税
				}
				// 初期値の場合
				else
				{
					tmpKmk.add(JACStrConst.KARA_MOJI);
				}
				j++;
			}
			outMap.setString(JBSbatCHIFM137.MI_INFO, JCHbatSeikyKaknoBusinessUtil.convListToString(tmpKmk));
			outMap.setOutFlg(true);
			fileUtil.print((JBSbatServiceInterfaceMap)outMap, outFileDef);
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeOutputDtl]");
		return ;
	}
	
	/**
	 * 対象のレコードの課金先が適用中か判定します。
	 * @param  dbMap
	 * @throws Exception 業務サービス内で発生した例外全般
	 * @return boolean true:適用中 false:適用終了
	 */
	private boolean isKakinsApl(JBSbatCommonDBInterface dbMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][isKakinsApl]");

		// 返却フラグ
		boolean rtnFlg = false;
		
		// 課金先開始・終了年月日
		String kakinStaYmd = dbMap.getString(JBSbatKK_T_KAKINS.KAKINS_TSTAYMD);
		String kakinEndYmd = dbMap.getString(JBSbatKK_T_KAKINS.KAKINS_TENDYMD);
		
		// 課金開始日　≦　バッチ運用日　≦　課金終了日
		if(kakinStaYmd != null && kakinEndYmd != null && 
				kakinStaYmd.compareTo(super.opeDate) <= 0 && kakinEndYmd.compareTo(super.opeDate) >= 0)
		{
			rtnFlg = true;
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][isKakinsApl]");
		return rtnFlg;
	}
}
