/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JBSbatCHSknKisCpItkFlSksi
 *	ソースファイル名	：JBSbatCHSknKisCpItkFlSksi.java
 *	作成者				：富士通　
 *	作成日				：2012年01月24日
 *＜機能概要＞
 *　債権回収会社委託ファイル作成部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2012/01/24   富士通		新規作成
 *	v3.00		2012/08/29   FJ）岡田	【TG1-2012-0000137・138】金額の属性チェック変更
 *	v4.00		2012/09/07   FJ)本多	【ANK-0129-00-00】対応
 *	v4.01.00	2012/11/12   FJ）加島	【ST1-2012-0000656】「EACB0240CW【警告】ＤＢ未存在エラー」を「ECHB0240CW【警告】ＤＢ未存在エラー」に修正
 *	v4.02.00	2013/01/17   FJ) 早崎	【内部管理番号-0000617】債権回収会社委託ファイルの表示不正
 *	v4.03.00	2013/01/17   FJ) 早崎	【内部管理番号-0000419】債権委託管理情報ファイル作成でABENDする
 *	v4.04.00	2013/01/17   FJ) 早崎	【内部管理番号-0000525】債権回収会社委託ファイルで1337バイトのレコードがある
 *	v4.05.00	2013/03/26   FJ) 小柴	【内部管理番号-0000613】ファイル出力オブジェクト生成時のエンコード設定ずれ防止対応
 *	v4.06.00	2013/04/05   FJ) 小柴	【IKK-2013-0000783】文字化け対策のため、エンコード形式の変更
 *	v4.07.00	2013/04/11   FJ) 小柴	【内部管理番号-0000874】住所・名称項目で桁数調整処理が他と異なるものを使用していた部分を統一化
 *																金額の桁数埋めに使う文字を空白から0に変更し、左埋めするように修正
 *	v4.08.00	2013/04/27   FJ) 狭間	【TG1-2013-0000254】債権回収会社委託ファイルの不具合修正 
 *	v4.09.00	2013/05/10   FJ) 前田	【TG1-2013-0000254】債権回収会社委託ファイルの契約者連絡先電話番号、勤務先電話番号の追加
 *	v4.10.00	2013/05/10   FJ) 前田	【IT1-2013-0001301】解約日を最終解約日から最古の解約日を取得するように変更
 *	v5.00.00	2013/07/09   FJ) 前田	【LT1-2013-0000317】申込日を最古のものを取得するように変更
 *	v5.00.01	2013/07/15   FJ) 前田	【LT1-2013-0000552】【LT1-2013-0000553】約定弁済期限年月日
 *	v5.00.02	2013/07/19   FJ) 黒木	【LT1-2013-0000552】【LT1-2013-0000553】不正ワーニング出力対応
 *	v5.00.03	2013/07/15   FJ) 前田	【TG1-2013-0000727】約定弁済期限年月日が0円請求以外の最新を取得するように修正
 *	v5.00.04	2013/09/25   FJ) 小柴	【OM-2013-0002325】 約定弁済期限年月日の取得条件を修正
 *															請求契約からサービス契約番号を取得する際に、請求ステータスコード＝920（キャンセル済）を除外するように修正
 *	v5.00.05	2013/10/31   FJ) 小野	【OM-2013-0003023】 債権回収会社委託ファイルのＰＳＮ、申込年月日、解約年月日が設定されない事象を修正。
 *															約定弁済期限年月日の取得条件を修正。
 *	v5.00.06	2013/11/12   FJ) 柴田	【OM-2013-0004081】【OM-2013-0004121】 約定弁済期限年月日を取得するSQLの修正に伴い、パラメータを削除。
 *																			   請求金額を出力する条件を「入力.請求金額が空文字でない かつ 0でない場合」に修正。
 *	v8.00.00	2014/03/17   FJ) 後藤	【OM-2014-0000997】 申込日の取得条件を修正
 *	v9.00.00	2014/06/14   FJ) 桑島	【OM-2013-0005201】 合算処理対応修正
 *	v26.00.00	2016/08/17   FJ) 寺園	【ANK-2854-00-00】 （客A）ニッテレ債権委託データの改修
 *********************************************************************/
package eo.business.service;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil.FillType;
import eo.business.util.file.JBSbatCHIFE049;
import eo.business.util.file.JBSbatCHIFM133;
import eo.business.util.table.JBSbatCH_T_SAIKEN;
import eo.business.util.table.JBSbatCK_T_CUST;
import eo.business.util.table.JBSbatCK_T_CUST_KOJIN;
import eo.business.util.table.JBSbatCK_T_HOJIN_RRKS;
import eo.business.util.table.JBSbatCK_T_RRKS;
import eo.business.util.table.JBSbatKK_T_KOZA;
import eo.business.util.table.JBSbatKK_T_MSKM;
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.common.util.JPCFomatString;
import eo.framework.application.JBSbatBusinessException;
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;
import eo.framework.util.JBSbatCheckUtil;

/**
 * (クラスの機能概要) <p>
 *<BR>
 * @author 富士通
 */
public class JBSbatCHSknKisCpItkFlSksi extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(請求契約)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";

	/** テーブル(連絡先)*/
	private static final String D_TBL_NAME_CK_T_RRKS = "CK_T_RRKS";
	
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";
		
	/** テーブル(法人連絡先)*/
	private static final String D_TBL_NAME_CK_T_HOJIN_RRKS = "CK_T_HOJIN_RRKS";
	
	/** テーブル（債権）*/
	private static final String D_TBL_NAME_CH_T_SAIKEN = "CH_T_SAIKEN";

	/** SQL定義キー(CH_SELECT_010)*/
	private static final String KK_T_SEIKY_KEI_CH_SELECT_010 = "CH_SELECT_010";

	/** SQL定義キー(CH_SELECT_001)*/
	private static final String CK_T_RRKS_CH_SELECT_001 = "CH_SELECT_001";
	
	/** SQL定義キー(CH_SELECT_007)*/
	private static final String KK_T_SVC_KEI_CH_SELECT_007 = "CH_SELECT_007" ;

	/** SQL定義キー(CH_SELECT_001)*/
	private static final String CK_T_HOJIN_RRKS_CH_SELECT_001 = "CH_SELECT_001" ;

	/** SQL定義キー(CH_SELECT_030)*/
	private static final String CH_T_SAIKEN_CH_SELECT_030 = "CH_SELECT_030" ;


	/** テーブルアクセスクラス(請求契約)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;

	/** テーブルアクセスクラス(連絡先)*/
	private JBSbatSQLAccess db_CK_T_RRKS = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
	
	/** テーブルアクセスクラス(法人連絡先)*/
	private JBSbatSQLAccess db_CK_T_HOJIN_RRKS = null;
	
	/** テーブルアクセスクラス(債権)*/
	private JBSbatSQLAccess db_CH_T_SAIKEN = null;
	

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 固定値：０ */
	private static final String 	ZERO	= "0";
	/** 合算区分：１ */
	private static final String 	INIT_ONE	= "1";
	/** 債権管理組合ＣＤ＿桁数 */
	private static final int SAIKEN_KANRI_CD_LENGTH = 3;
	/** 請求契約番号＿桁数 */
	private static final int SEIKY_KEI_NO_LENGTH = 10;
	/** ＰＳＮ＿桁数 */
	private static final int PSN_LENGTH = 12;
	/** ＰＳＮ編集＿桁数 */
	private static final int PSN_EDIT_LENGTH = 14;
	/** 債権金額＿桁数 */
	private static final int SAIKEN_AMNT_LENGTH = 13;
	/** 延滞利率＿桁数 */
	private static final int ENTI_RIRITSU_LENGTH = 3;
	/** 延滞利息＿桁数 */
	private static final int ENTI_RISOKU_LENGTH = 13;
	/** 延滞開始月＿桁数 */
	private static final int ENTI_STA_MONTH_LENGTH = 6;
	/** 延滞終了月＿桁数 */
	private static final int ENTI_END_MONTH_LENGTH = 6;
	/** 延滞開始日＿桁数 */
	private static final int ENTI_STA_DAY_LENGTH = 8;
	/** 申込日＿桁数 */
	private static final int MSKM_YMD_LENGTH = 8;
	/** 解約日＿桁数 */
	private static final int DLS_YMD_LENGTH = 8;
	/** 請求者カナ＿桁数 */
	private static final int SIKY_KANA_LENGTH = 40;
	/** 請求先氏名１＿桁数 */
	private static final int SIKY_NAME_1_LENGTH = 20;
	/** 請求先氏名２＿桁数 */
	private static final int SIKY_NAME_2_LENGTH = 20;
	/** 請求先住所１＿桁数 */
	private static final int SIKY_ADDRESS_1_LENGTH = 20;
	/** 請求先住所２＿桁数 */
	private static final int SIKY_ADDRESS_2_LENGTH = 20;
	/** 請求先住所３＿桁数 */
	private static final int SIKY_ADDRESS_3_LENGTH = 20;
	/** 請求先電話番号＿桁数 */
	private static final int SIKY_PHONE_NO_LENGTH = 12;
	/** 請求先電話番号編集＿桁数 */
	private static final int SIKY_PHONE_NO_EDIT_LENGTH = 14;
	/** 請求先郵便番号＿桁数 */
	private static final int SIKY_MAIL_NO_LENGTH = 8;
	/** 請求先郵便番号編集＿桁数 */
	private static final int SIKY_MAIL_NO_EDIT_LENGTH = 9;
	/** 口座名義＿桁数 */
	private static final int KOZA_LENGTH = 40;
	/** 契約者番号＿桁数 */
	private static final int KYS_NO_LENGTH = 10;
	/** 契約者氏名（カナ）＿桁数 */
	private static final int KYS_KANA_LENGTH = 40;
	/** 契約者氏名１＿桁数 */
	private static final int KYS_NAME_1_LENGTH = 20;
	/** 契約者氏名２＿桁数 */
	private static final int KYS_NAME_2_LENGTH = 20;
	/** 契約者住所１＿桁数 */
	private static final int KYS_ADDRESS_1_LENGTH = 20;
	/** 契約者住所２＿桁数 */
	private static final int KYS_ADDRESS_2_LENGTH = 20;
	/** 契約者住所３＿桁数 */
	private static final int KYS_ADDRESS_3_LENGTH = 20;
	/** 契約者電話番号＿桁数 */
	private static final int KYS_PHONE_NO_LENGTH = 12;
	/** 契約者電話番号編集＿桁数 */
	private static final int KYS_PHONE_NO_EDIT_LENGTH = 14;
	/** 契約者連絡先電話番号＿桁数 */
	private static final int KYS_RRS_NO_LENGTH = 12;
	/** 契約者連絡先電話番号編集＿桁数 */
	private static final int KYS_RRS_NO_EDIT_LENGTH = 14;
	/** 契約者郵便番号＿桁数 */
	private static final int KYS_MAIL_NO_LENGTH = 8;
	/** 契約者郵便番号編集＿桁数 */
	private static final int KYS_MAIL_NO_EDIT_LENGTH = 9;
	/** 契約者生年月日＿桁数 */
	private static final int KYS_BDAY_LENGTH = 8;
	/** 性別区分＿桁数 */
	private static final int SEX_DIV_LENGTH = 1;
	/** 未・結婚＿桁数 */
	private static final int MI_KEKKON_LENGTH = 1;
	/** 契約日＿桁数 */
	private static final int KEI_DAY_LENGTH = 8;
	/** 親権者氏名（カナ）＿桁数 */
	private static final int SHIN_NAME_KANA_LENGTH = 20;
	/** 親権者名（漢字）＿桁数 */
	private static final int SHIN_NAME_KNJI_LENGTH = 15;
	/** 親権者住所１＿桁数 */
	private static final int SHIN_ADSRESS_1_LENGTH = 20;
	/** 親権者住所２＿桁数 */
	private static final int SHIN_ADSRESS_2_LENGTH = 20;
	/** 親権者住所３＿桁数 */
	private static final int SHIN_ADSRESS_3_LENGTH = 20;
	/** 親権者電話番号＿桁数 */
	private static final int SHIN_PHONE_NO_LENGTH = 12;
	/** 親権者電話番号編集＿桁数 */
	private static final int SHIN_PHONE_NO_EDIT_LENGTH = 14;
	/** 親権者郵便番号＿桁数 */
	private static final int SHIN_MAIL_NO_LENGTH = 8;
	/** 親権者郵便番号編集＿桁数 */
	private static final int SHIN_MAIL_NO_EDIT_LENGTH = 9;
	/** 続柄＿桁数 */
	private static final int ZOKU_LENGTH = 1;
	/** 勤務先電話番号＿桁数 */
	private static final int KNM_PHONE_LENGTH = 12;
	/** 勤務先電話番号編集＿桁数 */
	private static final int KNM_PHONE_EDIT_LENGTH = 14;
	/** 勤務先名＿桁数 */
	private static final int KNM_NAME_LENGTH = 40;
	/** 利息計算起算日＿桁数 */
	private static final int RSKKSNKS_DAY_LENGTH = 8;
	/** 合計区分＿桁数 */
	private static final int SUM_DIV_LENGTH = 1;
	/** 請求月＿桁数 */
	private static final int SEIKY_MONTH_LENGTH = 6;
	/** 請求金額＿桁数 */
	private static final int SEIKY_AMNT_LENGTH = 9;
	/** 約定弁済期限年月日＿桁数 */
	private static final int YKBN_KGN_YMD_LENGTH = 8;
	/** ヘッダレコード＿空白 */
	private static final int YOBI_HEADER_LENGTH = 1299;
	/** 住所出力編集処理部品＿クラスパス */
	private static final String AD_OUTPUT_EDIT_PASS = "eo.common.util.JZMAdOutputEdit";
	/** エラーメッセージ（業務パラメータ設定値） */
	private static final String ERR_MSG_WKPARA_VAL = "業務パラメータ設定値";

	/** 入力キー */
	private String 	inKey 				= null;
	/** 退避キー */
	private String 	taiKey				= null;
	/** 月別料金情報格納件数 */
	private int 		prcInfoCounter 		= 0;
	/** 月別料金情報マップ */
	private HashMap<Integer, String[]> prcInfoMap = null;
	/** 月別料金情報（請求月）*/
	private String[] 	prcInfoSeikyMon 	= null;
	/** 月別料金情報（請求額）*/
	private int[] 		prcInfoSeikyAmnt 	= null;
	/** 退避.請求契約番号 */
	private String 	seikyKeiNo 			= JACStrConst.KARA_MOJI;
	/** 退避.約定弁済期限年月日 */
	private String 	ykbnYMD 			= JACStrConst.KARA_MOJI;
	/** 債権金額 */
	private int 		saiAmnt 			= 0;
	/** 合算区分 */
	private String 	gsnDiv 				= JACStrConst.KARA_MOJI;
	/** 請求者カナ */
	private String seikysKana				= JACStrConst.KARA_MOJI;
	/** 請求者氏名１ */
	private String 	seikyNm1 			= JACStrConst.KARA_MOJI;
	/** 請求者氏名２ */
	private String 	seikyNm2 			= JACStrConst.KARA_MOJI;
	/** 口座名義 */
	private String kozaMeigi				= JACStrConst.KARA_MOJI;
	/** 契約者氏名（カナ） */
	private String keisNmKana				= JACStrConst.KARA_MOJI;
	/** 契約者氏名１ */
	private String 	keiykNm1 			= JACStrConst.KARA_MOJI;
	/** 契約者氏名２ */
	private String 	keiykNm2 			= JACStrConst.KARA_MOJI;
	/** 親権者氏名（カナ） */
	private String snknsNmKana				= JACStrConst.KARA_MOJI;
	/** 請求者住所１ */
	private String 	seikyAdd1 			= JACStrConst.KARA_MOJI;
	/** 請求者住所２ */
	private String 	seikyAdd2 			= JACStrConst.KARA_MOJI;
	/** 請求者住所３ */
	private String 	seikyAdd3 			= JACStrConst.KARA_MOJI;
	/** 契約者住所１ */
	private String 	keiykAdd1 			= JACStrConst.KARA_MOJI;
	/** 契約者住所２ */
	private String 	keiykAdd2 			= JACStrConst.KARA_MOJI;
	/** 契約者住所３ */
	private String 	keiykAdd3 			= JACStrConst.KARA_MOJI;
	/** 親権者住所１ */
	private String 	sinknAdd1 			= JACStrConst.KARA_MOJI;
	/** 親権者住所２ */
	private String 	sinknAdd2 			= JACStrConst.KARA_MOJI;
	/** 親権者住所３ */
	private String 	sinknAdd3 			= JACStrConst.KARA_MOJI;
	/** 請求先郵便番号 */
	private String 	seikyPostCd 		= JACStrConst.KARA_MOJI;
	/** 契約先郵便番号 */
	private String 	keiykPostCd 		= JACStrConst.KARA_MOJI;
	/** 親権者郵便番号 */
	private String 	sinknPostCd 		= JACStrConst.KARA_MOJI;
	/** 格納月数 */
	private String 	kknMonCnt 			= null;
	/** 勤務先名 */
	private String		offcNm				= JACStrConst.KARA_MOJI;
	/** 契約者連絡先電話番号 */
	private String 	keiRrks			    = null;
	/** 勤務先電話番号 */
	private String		offcRrks 			= null;
	/** 未収債権 */
	private String		mishuSaikn			= JACStrConst.KARA_MOJI;
	
	/** 請求収納業務共通クラス */
	private JCHbatSeikyKaknoBusinessUtil seikyUtil = null;
	/** 住所出力編集処理部品＿クラス */
	private Class addresEditClass = null;
	/** 住所出力編集処理部品＿メソッド */
	private Method addresEditMethod = null;

	/** 出力レコード長 */
	private int 	yobiDtlLength = 0;

	/** 退避.入力マップ */
	JBSbatServiceInterfaceMap 	tmpMap 		= null;
	/** 退避.請求契約マップ */
	JBSbatCommonDBInterface 	seikyKeiMap = null;

	/** 退避.サービス契約マップ */
	JBSbatCommonDBInterface 	svcKeiMap = null;

	/** 退避.法人連絡先マップ */
	JBSbatCommonDBInterface 	offcNmMap = null;

	/**
	 * 初期処理
	 * @param  JBSbatCommonItem commonItem バッチ共通パラメータ電文
	 * @throws Exception                   業務サービス内で発生した例外全般。
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SEIKY_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_KEI);

		db_CK_T_RRKS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_RRKS);
		
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		
		db_CK_T_HOJIN_RRKS = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CK_T_HOJIN_RRKS);
		
		db_CH_T_SAIKEN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_SAIKEN);
		
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		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 + "]");

		// パラメータ取得クラス生成
		JACbatParamUtil paramUtil 	= new JACbatParamUtil(commonItem);
		// 格納月数
		this.kknMonCnt 	= paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_KAKNO_MON_SAI_CNT);
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][kknMonCnt=" + kknMonCnt + "]");
		
		// 業務機能識別コード（未集金額）取得
		this.mishuSaikn = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_WKS_MISYU_KINGAKU);

		// 出力レコード長
		this.yobiDtlLength = Integer.parseInt(paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_CHIFE049_YOBI_LEN));

		// 住所出力編集処理パターン
		String useMethodName = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_SKN_ADDR_EDIT_PTN);

		paramUtil.close();

		this.prcInfoSeikyMon 		= new String[Integer.parseInt(this.kknMonCnt) + 1];
		this.prcInfoSeikyAmnt 	= new int[Integer.parseInt(this.kknMonCnt) + 1];
		// 配列に空文字設定
		int i = 0;
		while(Integer.parseInt(this.kknMonCnt) > i)
		{
			this.prcInfoSeikyMon[i] 		= JACStrConst.KARA_MOJI;
			this.prcInfoSeikyAmnt[i]		= -1;
			i++;
		}

		seikyUtil = new JCHbatSeikyKaknoBusinessUtil(commonItem); 

		// 住所出力編集部品　取得
		this.getAddrOutEditMethod(useMethodName);

		// ヘッダ情報編集・出力
		makeHeadder(super.freeItem);

		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;
				// 請求契約スキーマ取得
				selectseikyKei(tmpMap);
				selectRenrakusaki();
				getOffcNm();
				selectSvcDsl();
				selectYkbnKgnYmd(tmpMap);
				
				outputInItem.addOutMapList(dummy);
				this.prcInfoMap = new HashMap<Integer, String[]>();
				return outputInItem;
			}
			// 入力キー項目作成：(入力.請求契約番号)
			this.inKey = makeInKey(tmpMap);

			// 退避キー≠null かつ　退避キー≠入力キーの場合
			if(this.taiKey != null && !this.taiKey.equals(this.inKey))
			{
				// 出力情報編集
				makeOutInfo();
				// 出力処理
				outputInItem.addOutMapList(setOutInfo());
				// 退避情報クリア
				taihiInfoClear();
				this.prcInfoMap = new HashMap<Integer, String[]>();
				// 請求契約スキーマ取得
				selectseikyKei(tmpMap);
				selectRenrakusaki();
				getOffcNm();
				selectSvcDsl();
				selectYkbnKgnYmd(tmpMap);
			}
			// 入力情報の退避処理
			setInInfo(tmpMap);
			// 月別料金情報の退避
			setPrcInfo(tmpMap);
			// マップを退避させる
			this.tmpMap = inMap;

		}
		else if(inMap == null)
		{
			// 入力キー項目作成：(入力.請求契約番号)
			this.inKey = makeInKey(tmpMap);
			// 退避キー≠null かつ　退避キー≠入力キーの場合
			if(this.taiKey != null && !this.taiKey.equals(this.inKey))
			{
				// 出力情報編集
				makeOutInfo();
				// 出力処理
				outputInItem.addOutMapList(setOutInfo());
				// 退避情報クリア
				taihiInfoClear();
				this.prcInfoMap = new HashMap<Integer, String[]>();
				// 請求契約スキーマ取得
				selectseikyKei(tmpMap);
				selectRenrakusaki();
				getOffcNm();
				selectSvcDsl();
				selectYkbnKgnYmd(tmpMap);
			}
			// 入力情報の退避処理
			setInInfo(tmpMap);
			// 月別料金情報退避
			setPrcInfo(tmpMap);
			// 出力情報編集
			makeOutInfo();
			// 出力処理
			outputInItem.addOutMapList(setOutInfo());

		}

		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");

		return outputInItem;

		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	public void terminal() throws Exception
	{
		/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SEIKY_KEI.close();
		db_CK_T_RRKS.close();
		db_KK_T_SVC_KEI.close();
		db_CK_T_HOJIN_RRKS.close();
		db_CH_T_SAIKEN.close();

		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		seikyUtil.close();
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");

		/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * SQLKEY(CH_SELECT_010)で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_CH_SELECT_010(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());
		paramList.setValue(param[4].toString());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());
		paramList.setValue(param[10].toString());
		paramList.setValue(param[11].toString());
		paramList.setValue(param[12].toString());
		paramList.setValue(param[13].toString());
		paramList.setValue(param[14].toString());
		paramList.setValue(param[15].toString());
		paramList.setValue(param[16].toString());
		paramList.setValue(param[17].toString());
		paramList.setValue(param[18].toString());
		paramList.setValue(param[19].toString());
		paramList.setValue(param[20].toString());
		paramList.setValue(param[21].toString());
		paramList.setValue(param[22].toString());
		paramList.setValue(param[23].toString());
		paramList.setValue(param[24].toString());
//v26.00.00 Add Start
		paramList.setValue(param[25].toString());
		paramList.setValue(param[26].toString());
		paramList.setValue(param[27].toString());
		paramList.setValue(param[28].toString());
		paramList.setValue(param[29].toString());
		paramList.setValue(param[30].toString());
		paramList.setValue(param[31].toString());
		paramList.setValue(param[32].toString());
		paramList.setValue(param[33].toString());
		paramList.setValue(param[34].toString());
//v26.00.00 Add End

		// DBアクセスを実行します
		db_KK_T_SEIKY_KEI.selectBySqlDefine(paramList, KK_T_SEIKY_KEI_CH_SELECT_010);
	}

	/**
	 * SQLKEY(CH_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *			運用日
	 *			SYSID
	 *			
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_RRKS_CH_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList2 = new JBSbatCommonDBInterface();
		paramList2.setValue(param[0].toString());
		paramList2.setValue(param[1].toString());
		

		// DBアクセスを実行します
		db_CK_T_RRKS.selectBySqlDefine(paramList2, CK_T_RRKS_CH_SELECT_001);
	}
	
	/**
	 * SQLKEY(CH_SELECT_007)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	運用日
	 *			SYSID
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_CH_SELECT_007(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList3 = new JBSbatCommonDBInterface();
		paramList3.setValue(param[0].toString());
		paramList3.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList3, KK_T_SVC_KEI_CH_SELECT_007);
	}

	/**
	 * SQLKEY(CH_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	
	 *			SYSID
	 *			世代登録年月日時分秒
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeCK_T_HOJIN_RRKS_CH_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList4 = new JBSbatCommonDBInterface();
		paramList4.setValue(param[0].toString());
		paramList4.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CK_T_HOJIN_RRKS.selectBySqlDefine(paramList4, CK_T_HOJIN_RRKS_CH_SELECT_001);
	}

	
	/**
	 * SQLKEY(CH_SELECT_030)で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_SAIKEN_CH_SELECT_030(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList5 = new JBSbatCommonDBInterface();
		paramList5.setValue(param[0].toString());
		paramList5.setValue(param[1].toString());
		paramList5.setValue(param[2].toString());
		
		// DBアクセスを実行します
		db_CH_T_SAIKEN.selectBySqlDefine(paramList5, CH_T_SAIKEN_CH_SELECT_030);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 業務パラメータより取得した値をもとに、
	 * 住所出力編集処理部品の使用するメソッドを特定の上、
	 * 退避させます。
	 * 
	 * @param addrOutEditPtn 住所出力編集パターン
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void getAddrOutEditMethod(String addrOutEditPtn) throws Exception
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getAddrOutEditMethod]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getAddrOutEditMethod][住所出力編集パターン=" + addrOutEditPtn + "]");

		// クラス生成
		this.addresEditClass = Class.forName(AD_OUTPUT_EDIT_PASS);
		// メソッドの全取得
		Method[] adOutputMethods = this.addresEditClass.getMethods();

		for(Method trgMethod : adOutputMethods)
		{
			// メソッド名が住所出力編集パターンで終わる場合
			if(trgMethod.getName().endsWith(addrOutEditPtn))
			{
				// 対象のメソッドを退避
				this.addresEditMethod = trgMethod;

				assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getAddrOutEditMethod][使用する住所出力編集処理部品．メソッド名=" + this.addresEditMethod.getName() + "]");
				assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getAddrOutEditMethod]");
				return;
			}
		}

		String[] msgParam = new String[]{ERR_MSG_WKPARA_VAL, ERR_MSG_WKPARA_VAL, addrOutEditPtn};

		throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0770CE, msgParam);
	}

	/**
	 * 入力キー作成
	 * @param  inMap     入力電文
	 * @return tmpKey    入力キー
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String makeInKey(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeInKey]");
		// 入力キー
		StringBuffer tmpKey = new StringBuffer();

		tmpKey.append(inMap.get(JBSbatCHIFM133.SEIKY_KEI_NO)); 	// 請求契約番号

		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeInKey][tmpKey=" + tmpKey.toString() + "]");
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeInKey]");
		return tmpKey.toString();
	}

	/**
	 * ヘッダ情報編集・出力
	 * @param  fileDef   ファイル出力情報
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeHeadder(String fileDef) throws Exception
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeHeadder]");

		// ファイル出力部品を取得
		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") + fileDef;
		// 出力定義ファイルオブジェクトを生成する
		JBSbatDefFileUtil outFileDef 		= new JBSbatDefFileUtil(outFileDefName, fileUtil);
		// 退避したエンコード形式を戻す（出力定義ファイルオブジェクト生成時に上書きが発生しているため）
		fileUtil.setEncode(enc);

		// リスト内の情報をすべて出力
		JBSbatOutputItem outputItem 		= new JBSbatOutputItem();
		// 出力情報格納用マップ
		JBSbatServiceInterfaceMap headMap 	= new JBSbatServiceInterfaceMap();
		// 貸倒れ対象者情報リスト
		ArrayList<String> tmpKmk 			= new ArrayList<String>();
		// 出力情報編集
		tmpKmk.add(JACStrConst.REC_SBT_HEAD); // レコード種別：０

		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, JACStrConst.KARA_MOJI, YOBI_HEADER_LENGTH, true)); 

		//項目を連結し格納
		headMap.set(JBSbatCHIFE049.ITEM, maleItem(tmpKmk));
		headMap.setOutFlg(true);

		// ヘッダ出力
		outputItem.addOutMapList(headMap);

		// ログ出力:件数
		int listSize = outputItem.getOutMapList().size();

		int initialOutCnt = 0;

		for (int j = 0; j < listSize; j++)
		{
			fileUtil.print((JBSbatServiceInterfaceMap)outputItem.getOutMapList().get(j), outFileDef);

			initialOutCnt++;
		}

		String[] outCntMsg = {JACStrConst.LOG_MSG_INITIAL, String.valueOf(initialOutCnt)};
		super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB1450AI, outCntMsg);

		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeHeadder]");
	}

	/**
	 * 月別料金情報退避
	 * @param  inMap     入力電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setPrcInfo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		
		boolean dbleYmFlg = false;    //債権確定年月の重複確認フラグ
			
		//OM-2013-0005201 START　合算処理対応修正
		//同じ請求契約番号での債権確定年月が月別料金情報マップに設定されている場合
		if(this.prcInfoCounter != 0)
		{
			
			String saikenFixYm = inMap.getString(JBSbatCHIFM133.SAIKEN_FIX_YM); 	// 債権確定年月
			
			if(saikenFixYm != null && !JACStrConst.KARA_MOJI.equals(saikenFixYm))
			{
				//月別料金情報マップに格納されている場合
				if(this.prcInfoMap != null)
				{
					//配列情報取得
					String[] seikyList_bf = this.prcInfoMap.get(this.prcInfoCounter - 1);
					
					if(seikyList_bf != null && seikyList_bf.length == 2)
					{
						//前の情報と債権確定年月が同じ場合
						if(saikenFixYm.equals(seikyList_bf[0]))
						{
							dbleYmFlg = true;
								
							// 入力.請求金額が空文字でない かつ 0でない場合
							if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM133.AMNT)) && !"0".equals(inMap.getString(JBSbatCHIFM133.AMNT)))
							{
								// 請求金額加算
								this.saiAmnt 		= this.saiAmnt + Integer.parseInt(inMap.getString(JBSbatCHIFM133.AMNT));
								//前の情報が取得できた場合
								if(seikyList_bf[1] != null && !JACStrConst.KARA_MOJI.equals(seikyList_bf[1]))
								{
									//同じ請求契約番号での債権確定年月が重複している場合、未納額を集約する
									int amnt_bf = Integer.parseInt(seikyList_bf[1]);
									seikyList_bf[1] =  Integer.toString(amnt_bf + Integer.parseInt(inMap.getString(JBSbatCHIFM133.AMNT))); 			// 未納額の加算
									
								}
								
							}
						}
					}
				}
			}
		}
		//OM-2013-0005201 END　合算処理対応修正

		//前の情報と債権確定年月が同じでない場合
		if(!dbleYmFlg)
		{
			// 請求月・請求金額格納用リスト
			String[] seikyList = new String[2];
			// 債権金額の加算
			// 入力.請求金額が空文字でない かつ 0でない場合
			if(!JACStrConst.KARA_MOJI.equals(inMap.getString(JBSbatCHIFM133.AMNT)) && !"0".equals(inMap.getString(JBSbatCHIFM133.AMNT)))
			{
				// 請求金額加算
				this.saiAmnt 		= this.saiAmnt + Integer.parseInt(inMap.getString(JBSbatCHIFM133.AMNT));
	
				seikyList[0] = inMap.getString(JBSbatCHIFM133.SAIKEN_FIX_YM); 	// 債権確定年月
				seikyList[1] = inMap.getString(JBSbatCHIFM133.AMNT); 			// 未納額
				this.prcInfoMap.put(this.prcInfoCounter, seikyList);
				// 月別料金情報
				this.prcInfoCounter++;
			}
		}
	}

	/**
	 * 請求契約スキーマ取得
	 * @param  inMap     入力電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void selectseikyKei(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectseikyKei]");

		JBSbatCommonDBInterface paramList	= new JBSbatCommonDBInterface();
		paramList.setValue(inMap.get(JBSbatCHIFM133.SEIKY_KEI_NO));	// 請求契約番号
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(JACStrConst.SVC_KEI_STAT_UKTK);			// サービス契約ステータス（受付済）
		paramList.setValue(JACStrConst.SVC_KEI_STAT_SYOSA);			// サービス契約ステータス（照査済）
		paramList.setValue(JACStrConst.SVC_KEI_STAT_TIKT);			// サービス契約ステータス（締結済）
		paramList.setValue(JACStrConst.SVC_KEI_STAT_CNCL_ZUMI);		// サービス契約ステータス（キャンセル済）
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(JACStrConst.SVC_KEI_STAT_UKTK);			// サービス契約ステータス（受付済）
		paramList.setValue(JACStrConst.SVC_KEI_STAT_SYOSA);			// サービス契約ステータス（照査済）
		paramList.setValue(JACStrConst.SVC_KEI_STAT_TIKT);			// サービス契約ステータス（締結済）
		paramList.setValue(JACStrConst.SVC_KEI_STAT_CNCL_ZUMI);		// サービス契約ステータス（キャンセル済）
		paramList.setValue(inMap.get(JBSbatCHIFM133.SEIKY_KEI_NO));	// 請求契約番号
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(inMap.get(JBSbatCHIFM133.SEIKY_KEI_NO));	// 請求契約番号
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
//v26.00.00 Add Start
		paramList.setValue(JACStrConst.SVC_KEI_STAT_UKTK);			// サービス契約ステータス（受付済）
		paramList.setValue(JACStrConst.SVC_KEI_STAT_SYOSA);			// サービス契約ステータス（照査済）
		paramList.setValue(JACStrConst.SVC_KEI_STAT_TIKT);			// サービス契約ステータス（締結済）
		paramList.setValue(JACStrConst.SVC_KEI_STAT_CNCL_ZUMI);		// サービス契約ステータス（キャンセル済）
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(inMap.get(JBSbatCHIFM133.SEIKY_KEI_NO));	// 請求契約番号
		paramList.setValue(super.opeDate);							// バッチ運用日
		paramList.setValue(super.opeDate);							// バッチ運用日
//v26.00.00 Add End
		// SQL実行
		executeKK_T_SEIKY_KEI_CH_SELECT_010(paramList.getList().toArray());
		JBSbatCommonDBInterface dbMap = db_KK_T_SEIKY_KEI.selectNext();

		// 取得結果がある場合
		if(dbMap != null)
		{
			this.seikyKeiMap = new JBSbatCommonDBInterface();
			this.seikyKeiMap = dbMap;
		}
		// 取得結果がない場合
		else
		{
			// DB未存在エラー
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectseikyKei][DB未存在エラー]");
			String[] outCntMsg = {JBSbatKK_T_SEIKY_KEI.TABLE_NAME, paramList.getList().toString()};
			// エラーログ出力（エラーコード："ECHB0240CW"（DB未存在エラー））
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.ECHB0240CW, outCntMsg);
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectseikyKei]");
	}

	/**
	 * 連絡先スキーマ取得
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void selectRenrakusaki() throws Exception
	{
		/** 契約者連絡先電話番号フラグ */
		boolean		keiFlg 		= false;
		/** 勤務先先電話番号フラグ */
		boolean		offcFlg 		= false;
		
		this.keiRrks = null;
		this.offcRrks = null;
		
		
		if(this.seikyKeiMap != null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectRenrakusaki]");
			
			this.offcRrks = this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.OFFC_TELNO);
			
			JBSbatCommonDBInterface paramList2	= new JBSbatCommonDBInterface();
			
			paramList2.setValue(super.opeDate);													// バッチ運用日
			paramList2.setValue(this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SYSID));		// SYSID
			
			
			// SQL実行
			executeCK_T_RRKS_CH_SELECT_001(paramList2.getList().toArray());
			JBSbatCommonDBInterface dbMap2 = db_CK_T_RRKS.selectNext();
			
			
			while(dbMap2 != null)
			{
				if(!keiFlg)
				{
					if(JACStrConst.RRKS_SBT_CD_KTAI.equals(dbMap2.getString(JBSbatCK_T_RRKS.RRKS_SBT_CD)))
					{
						//契約者連絡先電話番号を取得
						this.keiRrks = dbMap2.getString(JBSbatCK_T_RRKS.TELNO);
					
						keiFlg = true;	
					}
					
				}
				
				if(!offcFlg)
				{
					if(JACStrConst.RRKS_SBT_CD_OFFC.equals(dbMap2.getString(JBSbatCK_T_RRKS.RRKS_SBT_CD)))
					{
						//勤務先電話番号を取得
						this.offcRrks = dbMap2.getString(JBSbatCK_T_RRKS.TELNO);
					
						offcFlg = true;
					}
					else if(JACStrConst.RRKS_SBT_CD_OTHER.equals(dbMap2.getString(JBSbatCK_T_RRKS.RRKS_SBT_CD)))
					{
						//勤務先電話番号を取得
						this.offcRrks = dbMap2.getString(JBSbatCK_T_RRKS.TELNO);
					
						offcFlg = true;
					}
				}
				dbMap2 = db_CK_T_RRKS.selectNext();
			}
			
			
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectRenrakusaki]");
	}
	
	/**
	 * サービス契約スキーマ取得
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void selectSvcDsl() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectSvcDsl]");

		if(this.seikyKeiMap != null)
		{
			JBSbatCommonDBInterface paramList3	= new JBSbatCommonDBInterface();
		
			paramList3.setValue(super.opeDate);												// 運用日
			paramList3.setValue(this.seikyKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));	// サービス契約番号

			// SQL実行
			executeKK_T_SVC_KEI_CH_SELECT_007(paramList3.getList().toArray());
			JBSbatCommonDBInterface dbMap3 = db_KK_T_SVC_KEI.selectNext();

			this.svcKeiMap = new JBSbatCommonDBInterface();
			// 取得結果がある場合
			if(dbMap3 != null)
			{
				this.svcKeiMap = dbMap3;
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectSvcDsl]");
			
	}
	
	/**
	 * 法人連絡先スキーマ取得
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void selectOffcNm() throws Exception
	{
		if(this.seikyKeiMap != null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][selectOffcNm]");

			JBSbatCommonDBInterface paramList4	= new JBSbatCommonDBInterface();
			
			paramList4.setValue(this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SYSID));		// SYSID
			paramList4.setValue(this.seikyKeiMap.getString(JBSbatCK_T_CUST.GENE_ADD_DTM));		// 世帯登録年月日時分秒

			// SQL実行
			executeCK_T_HOJIN_RRKS_CH_SELECT_001(paramList4.getList().toArray());
			JBSbatCommonDBInterface dbMap4 = db_CK_T_HOJIN_RRKS.selectNext();
			
		
			this.offcNmMap = new JBSbatCommonDBInterface();

			if(dbMap4 != null)
			{
				//勤務先名を取得
				this.offcNmMap = dbMap4;
			}
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectOffcNm]");
	}

	/**
	 * 債権スキーマ取得
	 * @param  inMap     入力電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void selectYkbnKgnYmd(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	
		
			JBSbatCommonDBInterface paramList5 = new JBSbatCommonDBInterface();
			
			paramList5.setValue(inMap.getString(JBSbatCHIFM133.SEIKY_KEI_NO)); 		// 請求契約番号
			paramList5.setValue(JACStrConst.SAIKEN_STAT_MINUS_SEIKY);				// 債権ステータス(100(マイナス請求))
			paramList5.setValue(JACStrConst.SAIKEN_STAT_KAKNO_ZUMI);				// 債権ステータス(050(収納済み))
			
			// SQL実行
			executeCH_T_SAIKEN_CH_SELECT_030(paramList5.getList().toArray());
			JBSbatCommonDBInterface dbMap5 = db_CH_T_SAIKEN.selectNext();
			
			// 取得結果がある場合
			if(dbMap5 != null)
			{
				// 約定弁済期限年月日
				String  ykbnKgnYmd = JACStrConst.KARA_MOJI;
				
				while(dbMap5 != null)
				{
					// 支払期限年月日
					String payKigenYmd = dbMap5.getString(JBSbatCH_T_SAIKEN.PAY_KIGEN_YMD);
					
					// 変更支払期限年月日
					String  chgPayKigenYmd = dbMap5.getString(JBSbatCH_T_SAIKEN.CHG_PAY_KIGEN_YMD);
					
					// 支払期限年月日、変更支払期限年月日がnullでない場合、支払期限年月日を設定
					if(payKigenYmd != null && chgPayKigenYmd != null)
					{
						ykbnKgnYmd = payKigenYmd;
					}
					else if(payKigenYmd != null && chgPayKigenYmd == null)
					{
						ykbnKgnYmd = payKigenYmd;
					}
					else if(payKigenYmd == null && chgPayKigenYmd != null)
					{
						ykbnKgnYmd = chgPayKigenYmd;
					}
					
					// 支払期限年月日
					if(!JACStrConst.KARA_MOJI.equals(ykbnKgnYmd))
					{
						// 初回レコードは無条件で支払期限年月日を設定
						if(JACStrConst.KARA_MOJI.equals(this.ykbnYMD))
						{		
							this.ykbnYMD = ykbnKgnYmd;
						}
						else
						{
							// 退避.約定弁済期限年月日 ← 取得したデータの中で、最大の支払期限年月日か変更支払期限年月日
							if(this.ykbnYMD.compareTo(ykbnKgnYmd) < 0)
							{
								this.ykbnYMD = ykbnKgnYmd;
							}
						}
					}
					dbMap5 = db_CH_T_SAIKEN.selectNext();
				}
			}
			// 取得結果がない場合
			else
			{
				// DB未存在エラー
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][selectSvcKei][DB未存在エラー]");
				String[] outCntMsg = {JBSbatCH_T_SAIKEN.TABLE_NAME, paramList5.getList().toString()};
				// エラーログ出力（エラーコード："EACB0240CW"（DB未存在エラー））
				super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EACB0240CW, outCntMsg);
			}
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][selectSeikyKey]");
	}

		
	
	/**
	 * 出力情報編集
	 * @throws Exception        業務サービス内で発生した例外全般。
	 */
	private void makeOutInfo() throws Exception
	{

		// 請求契約スキーマがnullでない場合
		if(this.seikyKeiMap != null)
		{
			// 氏名編集
			makeNm();
			// カナ名編集
			makeKanaNm();
			// 住所編集
			makeAdd();
			// 郵便番号編集
			makePostCd();
		}
		// 月別料金情報編集
		makePrcInfo();
	}

	/**
	 * 月別料金情報編集
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makePrcInfo() throws Exception
	{
		// 月別料金情報用カウンタ
		int infoCnt = 0;
		// 超過件数
		int lbCnt 	= 0;
		// 月別料金情報配列要素数
		int prcCnt = 1;
		// 格納月数　＜　月別料金情報格納件数
		if(Integer.parseInt(this.kknMonCnt) < this.prcInfoCounter)
		{
			// 合算区分に"1"を設定
			this.gsnDiv = INIT_ONE;
			// 超過件数を設定
			lbCnt = this.prcInfoCounter - Integer.parseInt(this.kknMonCnt);
			// 超過分集約
			while(lbCnt + 1 > infoCnt)
			{
				// 値が取得できた場合
				if(this.prcInfoMap.get(infoCnt)[0] != null && !JACStrConst.KARA_MOJI.equals(this.prcInfoMap.get(infoCnt)[0]))
				{
					// 取得した値を設定
					System.arraycopy(this.prcInfoMap.get(infoCnt), 0, this.prcInfoSeikyMon, 0, 1);
					//					this.prcInfoSeikyMon[0] 		= this.prcInfoMap.get(infoCnt)[0];
				}
				else
				{
					// 空文字を設定
					this.prcInfoSeikyMon[0] 		= JACStrConst.KARA_MOJI;
				}
				// 値が取得できた場合
				if(this.prcInfoMap.get(infoCnt)[1] != null && !JACStrConst.KARA_MOJI.equals(this.prcInfoMap.get(infoCnt)[1]))
				{
					// 請求金額が初期値でない場合
					if(this.prcInfoSeikyAmnt[0] != -1)
					{
						// 値が半角数字である場合
						if(JBSbatCheckUtil.invoke(this.prcInfoMap.get(infoCnt)[1], new String[]{"long2"}))
						{
							this.prcInfoSeikyAmnt[0] 		= this.prcInfoSeikyAmnt[0] + Integer.parseInt(this.prcInfoMap.get(infoCnt)[1]);
						}
					}
					else
					{
						// 値が半角数字である場合
						if(JBSbatCheckUtil.invoke(this.prcInfoMap.get(infoCnt)[1], new String[]{"long2"}))
						{
							this.prcInfoSeikyAmnt[0] 		= Integer.parseInt(this.prcInfoMap.get(infoCnt)[1]);
						}
					}
				}
				infoCnt++;
			}
			// 月別料金情報用カウンタの値を超過件数＋１に設定
			infoCnt = lbCnt + 1;
			// 集約後、月別料金情報設定
			while(this.prcInfoCounter > infoCnt)
			{
				// 値が取得できた場合
				if(this.prcInfoMap.get(infoCnt)[0] != null && !JACStrConst.KARA_MOJI.equals(this.prcInfoMap.get(infoCnt)[0]))
				{
					// 取得した値を設定
					System.arraycopy(this.prcInfoMap.get(infoCnt), 0, this.prcInfoSeikyMon, prcCnt, 1);
					//					this.prcInfoSeikyMon[infoCnt - lbCnt] 		= this.prcInfoMap.get(infoCnt)[0];
				}
				else
				{
					// 空文字を設定
					this.prcInfoSeikyMon[prcCnt] 		= JACStrConst.KARA_MOJI;
				}
				// 値が取得できた場合
				if(this.prcInfoMap.get(infoCnt)[1] != null && !JACStrConst.KARA_MOJI.equals(this.prcInfoMap.get(infoCnt)[1]))
				{
					// 値が半角数字である場合
					if(JBSbatCheckUtil.invoke(this.prcInfoMap.get(infoCnt)[1], new String[]{"long2"}))
					{
						this.prcInfoSeikyAmnt[prcCnt] 		= Integer.parseInt(this.prcInfoMap.get(infoCnt)[1]);
					}
				}
				lbCnt++;
				infoCnt++;
				prcCnt++;
			}
		}
		else
		{
			// 合算区分に空文字を設定
			this.gsnDiv = JACStrConst.KARA_MOJI;
			
			// 月別料金情報設定処理
			while(Integer.parseInt(this.kknMonCnt) > infoCnt)
			{
				if(this.prcInfoMap.get(infoCnt) != null)
				{
					// 値が取得できた場合
					if(this.prcInfoMap.get(infoCnt)[0] != null && !JACStrConst.KARA_MOJI.equals(this.prcInfoMap.get(infoCnt)[0]))
					{
						// 取得した値を設定
						System.arraycopy(this.prcInfoMap.get(infoCnt), 0, this.prcInfoSeikyMon, infoCnt, 1);
						//	this.prcInfoSeikyMon[infoCnt] 		= this.prcInfoMap.get(infoCnt)[0];
					}
					else
					{
						// 空文字を設定
						this.prcInfoSeikyMon[infoCnt] 		= JACStrConst.KARA_MOJI;
					}
					// 値が取得できた場合
					if(this.prcInfoMap.get(infoCnt)[1] != null && !JACStrConst.KARA_MOJI.equals(this.prcInfoMap.get(infoCnt)[1]))
					{
						// 値が半角数字である場合
						if(JBSbatCheckUtil.invoke(this.prcInfoMap.get(infoCnt)[1], new String[]{"long2"}))
						{
							this.prcInfoSeikyAmnt[infoCnt] 		= Integer.parseInt(this.prcInfoMap.get(infoCnt)[1]);
						}
					}

				}
				else
				{
					// 空文字を設定
					this.prcInfoSeikyMon[infoCnt] 		= JACStrConst.KARA_MOJI;
				}
				infoCnt++;
			}
		}
	}

	/**
	 * 退避情報（各種編集用情報）の初期化を行います。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void clearTmpInf() throws Exception
	{
		// 初期化処理
		this.seikyNm1 = JACStrConst.KARA_MOJI;		// 請求者名１
		this.seikyNm2 = JACStrConst.KARA_MOJI;		// 請求者名２
		this.keiykNm1 = JACStrConst.KARA_MOJI;		// 契約者名１
		this.keiykNm2 = JACStrConst.KARA_MOJI;		// 契約者名２
		this.seikysKana  = JACStrConst.KARA_MOJI;	// 契約者カナ
		this.kozaMeigi   = JACStrConst.KARA_MOJI;	// 口座名義
		this.keisNmKana  = JACStrConst.KARA_MOJI;	// 契約者氏名（カナ）
		this.snknsNmKana = JACStrConst.KARA_MOJI;	// 親権者氏名（カナ）
		this.seikyAdd1 = JACStrConst.KARA_MOJI; 	// 請求者住所１
		this.seikyAdd2 = JACStrConst.KARA_MOJI; 	// 請求者住所２
		this.seikyAdd3 = JACStrConst.KARA_MOJI; 	// 請求者住所３
		this.keiykAdd1 = JACStrConst.KARA_MOJI; 	// 契約者住所１
		this.keiykAdd2 = JACStrConst.KARA_MOJI; 	// 契約者住所２
		this.keiykAdd3 = JACStrConst.KARA_MOJI; 	// 契約者住所３
		this.sinknAdd1 = JACStrConst.KARA_MOJI;	    // 親権者住所１
		this.sinknAdd2 = JACStrConst.KARA_MOJI; 	// 親権者住所２
		this.sinknAdd3 = JACStrConst.KARA_MOJI; 	// 親権者住所３
		this.seikyPostCd = JACStrConst.KARA_MOJI; 	// 請求先郵便番号
		this.keiykPostCd = JACStrConst.KARA_MOJI; 	// 契約先郵便番号
		this.sinknPostCd = JACStrConst.KARA_MOJI; 	// 親権者郵便番号
		this.offcRrks  = JACStrConst.KARA_MOJI;		// 勤務先連絡先
		this.ykbnYMD = JACStrConst.KARA_MOJI; 		// 約定弁済期限年月日
	}

	/**
	 * 氏名編集
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeNm() throws Exception
	{
		// 送付先名
		String sohusNm 		= null;
		// お客様名
		String custNm 		= null;

		// 請求契約.送付先名がnullでない場合
		if(this.seikyKeiMap.getValue(JBSbatKK_T_SEIKY_KEI.SOHUS_NM) != null)
		{
			// 取得した請求規約.送付先
			sohusNm = this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_NM);
			// 20文字以上の場合20文字設定する
			if(sohusNm.length() > SIKY_NAME_1_LENGTH)
			{
				this.seikyNm1 = sohusNm.substring(0, SIKY_NAME_1_LENGTH);
				this.seikyNm2 = sohusNm.substring(SIKY_NAME_1_LENGTH);
			}
			else
			{
				this.seikyNm1 = sohusNm;
			}
		}

		// お客様.お客様名がnullでない場合
		if(this.seikyKeiMap.getValue(JBSbatCK_T_CUST.CUST_NM) != null)
		{
			// 取得したお客様.お客様名
			custNm = this.seikyKeiMap.getString(JBSbatCK_T_CUST.CUST_NM);
			// 20文字以上の場合20文字設定する
			if(custNm.length() > KYS_NAME_1_LENGTH)
			{
				this.keiykNm1 = custNm.substring(0, KYS_NAME_1_LENGTH);
				this.keiykNm2 = custNm.substring(KYS_NAME_1_LENGTH);
			}
			else
			{
				this.keiykNm1 = custNm;
			}
		}
	}

	/**
	 * カナ名編集
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeKanaNm() throws Exception
	{
		// 各項目を半角文字列に変換

		// 請求契約．送付先カナ名がnullでない場合
		if(null != this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SHS_KANA))
		{
			this.seikysKana  = JCHbatSeikyKaknoBusinessUtil.formatZenToHan(this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SHS_KANA));
		}
		// 口座．口座名義人カナ名がnullでない場合
		if(null != this.seikyKeiMap.getString(JBSbatKK_T_KOZA.KOZA_MEIGIN_KANA))
		{
			this.kozaMeigi   = JCHbatSeikyKaknoBusinessUtil.formatZenToHan(this.seikyKeiMap.getString(JBSbatKK_T_KOZA.KOZA_MEIGIN_KANA));
		}
		// お客様．お客様カナ名がnullでない場合
		if(null != this.seikyKeiMap.getString(JBSbatCK_T_CUST.CUST_KANA))
		{
			this.keisNmKana  = JCHbatSeikyKaknoBusinessUtil.formatZenToHan(this.seikyKeiMap.getString(JBSbatCK_T_CUST.CUST_KANA));
		}
		// お客様＜個人＞．親権者カナ名がnullでない場合
		if(null != this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_KANA))
		{
			this.snknsNmKana = JCHbatSeikyKaknoBusinessUtil.formatZenToHan(this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_KANA));
		}
		// 各項目の長さを指定桁数に合わせて調整
		this.seikysKana  = this.seikyUtil.adjStringLength(this.seikysKana,		SIKY_KANA_LENGTH,		FillType.HalfSpace,		true,	true);
		this.kozaMeigi   = this.seikyUtil.adjStringLength(this.kozaMeigi,		KOZA_LENGTH,			FillType.HalfSpace,		true,	true);
		this.keisNmKana  = this.seikyUtil.adjStringLength(this.keisNmKana,		KYS_KANA_LENGTH,		FillType.HalfSpace,		true,	true);
		this.snknsNmKana = this.seikyUtil.adjStringLength(this.snknsNmKana,	SHIN_NAME_KANA_LENGTH,	FillType.HalfSpace,		true,	true);

	}

	/**
	 * 住所編集
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeAdd() throws Exception
	{

		// 引数用請求者住所
		String[] sksAddr = new String[]{
						this.makeTrimStr(this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_STATE_NM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_CITY_NM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_OAZTSU_NM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_AZCHO_NM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_BNCHIGO))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_ADRTTM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_ADRRM))};
		// 引数用契約者住所
		String[] keiAddr = new String[]{
						this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST.KEISHA_STATE_NM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST.KEISHA_CITY_NM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST.KEISHA_OAZTSU_NM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST.KEISHA_AZCHO_NM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST.KEISHA_BNCHIGO))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST.KEISHA_ADRTTM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST.KEISHA_ADRRM))};
		// 引数用親権者住所
		String[] snknsAddr = new String[]{
						this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_STATE_NM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_CITY_NM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_OAZTSU_NM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_AZCHO_NM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_AD_BNCHIGO))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_ADRTTM))
						, this.makeTrimStr(this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_ADRRM))};

		//退避．住所出力編集部品を用いて、各種住所の編集を実施します。
		// 請求者住所
		String[] rtnSikyAddr = (String[])this.addresEditMethod.invoke(this.addresEditClass, sksAddr);
		// 契約者住所
		String[] rtnKeiAddr = (String[])this.addresEditMethod.invoke(this.addresEditClass, keiAddr);
		// 親権者住所
		String[] rtnSnknsAddr = (String[])this.addresEditMethod.invoke(this.addresEditClass, snknsAddr);

		// 請求者住所の設定

		// 請求者住所１
		this.seikyAdd1 = rtnSikyAddr[0];
		// 請求者住所２
		this.seikyAdd2 = rtnSikyAddr[1];
		// 請求者住所３
		this.seikyAdd3 = rtnSikyAddr[2];


		// 契約者住所の設定

		// 契約者住所１
		this.keiykAdd1 = rtnKeiAddr[0];
		// 契約者住所２
		this.keiykAdd2 = rtnKeiAddr[1];
		// 契約者住所３
		this.keiykAdd3 = rtnKeiAddr[2];

		// 親権者住所の設定

		// 親権者住所１
		this.sinknAdd1 = rtnSnknsAddr[0];
		// 親権者住所２
		this.sinknAdd2 = rtnSnknsAddr[1];
		// 親権者住所３
		this.sinknAdd3 = rtnSnknsAddr[2];

	}

	/**
	 * 対象の文字列をnullかどうかを判定し、
	 * nullでない場合は空白をトリムして返します。
	 * 
	 * @param str 文字
	 * @return String 空白トリム後文字列
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String makeTrimStr(String str) throws Exception
	{
		String rtnStr = JACStrConst.KARA_MOJI;
		if(null != str)
		{
			rtnStr = str.trim();
		}
		return rtnStr;
	}

	/**
	 * 郵便番号編集
	 * @throws Exception        業務サービス内で発生した例外全般。
	 */
	private void makePostCd() throws Exception
	{
		// 請求先郵便番号を設定(xxx-xxxx)
		this.seikyPostCd = 
			JPCFomatString.hyhunPcd(this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_PCD));
		// 契約先郵便番号を設定(xxx-xxxx)
		this.keiykPostCd = 
			JPCFomatString.hyhunPcd(this.seikyKeiMap.getString(JBSbatCK_T_CUST.KEISHA_PCD));
		// 親権者郵便番号を設定(xxx-xxxx)
		this.sinknPostCd = 
			JPCFomatString.hyhunPcd(this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_PCD));
	}

	/**
	 * 入力情報退避処理
	 * @param  inMap     入力電文
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setInInfo(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setInInfo]");

		this.seikyKeiNo 	= inMap.getString(JBSbatCHIFM133.SEIKY_KEI_NO); 	// 請求契約番号
		this.taiKey 		= this.inKey; 										// 退避キー

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setInInfo]");
	}

	/**
	 * 退避情報クリア
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void taihiInfoClear() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][taihiInfoClear]");

		// 月別料金情報格納件数クリア
		this.prcInfoCounter 		= 0;
		// 月別料金情報マップをクリア
		this.prcInfoMap 			= null;
		// 配列に空文字設定
		int i = 0;
		while(Integer.parseInt(kknMonCnt) > i)
		{
			// 月別料金情報（未収月）
			this.prcInfoSeikyMon[i] 	= JACStrConst.KARA_MOJI;
			// 月別料金情報（請求額）
			this.prcInfoSeikyAmnt[i]	= -1;
			i++;
		}
		// 債権金額
		this.saiAmnt 					= 0;
		// 合算区分
		this.gsnDiv 					= JACStrConst.KARA_MOJI;
		this.seikyKeiMap = null;

		// 編集情報クリア
		clearTmpInf();

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][taihiInfoClear]");
	}

	/**
	 * 月別料金情報出力
	 * @return tmpMap    入力キー
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap setOutInfo() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outKsdTgItiInfo]");
		int i = 0;
		// 退避.請求契約マップがnullの場合
		if(this.seikyKeiMap == null)
		{
			// 初期化する
			this.seikyKeiMap = new JBSbatCommonDBInterface();
		}

		// 退避.サービス契約マップがnullの場合
		if(this.svcKeiMap == null)
		{
			// 初期化する
			this.svcKeiMap = new JBSbatCommonDBInterface();
		}

		JBSbatServiceInterfaceMap infoMap = new JBSbatServiceInterfaceMap();
		// 貸倒れ対象者情報リスト
		ArrayList<String> tmpKmk = new ArrayList<String>();
		// 01.レコード種別
		tmpKmk.add(JACStrConst.REC_SBT_DATA);
		// 02.債権管理組合CD
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace,	JACStrConst.KARA_MOJI, SAIKEN_KANRI_CD_LENGTH, true));
		// 03.請求先番号
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiNo, SEIKY_KEI_NO_LENGTH, true));
		// 04.PSN
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO), PSN_LENGTH, true));
		// 05.PSN編集
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, JACStrConst.KARA_MOJI, PSN_EDIT_LENGTH, true));
		// 06.処理日
		tmpKmk.add(super.opeDate);
		// 07.債権金額
		tmpKmk.add(seikyUtil.fillString(FillType.Zero, Integer.toString(this.saiAmnt), SAIKEN_AMNT_LENGTH, false));
		// 08.延滞利率
		tmpKmk.add(seikyUtil.fillString(FillType.Zero, ZERO, ENTI_RISOKU_LENGTH, false));
		// 09.延滞利息
		tmpKmk.add(seikyUtil.fillString(FillType.Zero, ZERO, ENTI_RIRITSU_LENGTH, false)); 
		// 10.延滞開始月
		tmpKmk.add(seikyUtil.fillString(FillType.Zero, ZERO, ENTI_STA_MONTH_LENGTH, false));
		// 11.延滞終了月
		tmpKmk.add(seikyUtil.fillString(FillType.Zero, ZERO, ENTI_END_MONTH_LENGTH, false));
		// 12.延滞開始日
		tmpKmk.add(seikyUtil.fillString(FillType.Zero, ZERO, ENTI_STA_DAY_LENGTH, false));
		// 13.申込日
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiMap.getString(JBSbatKK_T_MSKM.MSKM_YMD), MSKM_YMD_LENGTH, true));
		// 14.解約日
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.svcKeiMap.getString(JBSbatKK_T_SVC_KEI.SVC_DSL_YMD), DLS_YMD_LENGTH, true));
		// 15.請求者カナ
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikysKana, SIKY_KANA_LENGTH, true));
		// 16.請求者氏名１
		tmpKmk.add(seikyUtil.adjStringLength(this.seikyNm1, SIKY_NAME_1_LENGTH, FillType.Space, true, true));
		// 17.請求者氏名２
		tmpKmk.add(seikyUtil.adjStringLength(this.seikyNm2, SIKY_NAME_2_LENGTH, FillType.Space, true, true));
		// 18.請求先住所１
		tmpKmk.add(seikyUtil.adjStringLength(this.seikyAdd1, SIKY_ADDRESS_1_LENGTH, FillType.Space, true, true));
		// 19.請求先住所２
		tmpKmk.add(seikyUtil.adjStringLength(this.seikyAdd2, SIKY_ADDRESS_2_LENGTH, FillType.Space, true, true));
		// 20.請求先住所３
		tmpKmk.add(seikyUtil.adjStringLength(this.seikyAdd3, SIKY_ADDRESS_3_LENGTH, FillType.Space, true, true));
		// 21.請求先電話番号
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_TELNO), SIKY_PHONE_NO_LENGTH, true));
		// 22.請求先電話番号編集
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, JACStrConst.KARA_MOJI, SIKY_PHONE_NO_EDIT_LENGTH, true));
		// 23.請求先郵便番号
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiMap.getString(JBSbatKK_T_SEIKY_KEI.SOHUS_PCD), SIKY_MAIL_NO_LENGTH, true));
		// 24.請求先郵便番号編集
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyPostCd, SIKY_MAIL_NO_EDIT_LENGTH, true));
		// 25.口座名義
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.kozaMeigi, KOZA_LENGTH, true));
		// 26.契約者番号
		tmpKmk.add(divStr(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiMap.getString(JBSbatCK_T_CUST.SYSID), KYS_NO_LENGTH, true), KYS_NO_LENGTH));
		// 27.契約者氏名（カナ）
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.keisNmKana, KYS_KANA_LENGTH, true));
		// 28.契約者氏名１
		tmpKmk.add(seikyUtil.adjStringLength(this.keiykNm1, KYS_NAME_1_LENGTH, FillType.Space, true, true));
		// 29.契約者氏名２
		tmpKmk.add(seikyUtil.adjStringLength(this.keiykNm2, KYS_NAME_2_LENGTH, FillType.Space, true, true));
		// 30.契約者住所１
		tmpKmk.add(seikyUtil.adjStringLength(this.keiykAdd1, KYS_ADDRESS_1_LENGTH, FillType.Space, true, true));
		// 31.契約者住所２
		tmpKmk.add(seikyUtil.adjStringLength(this.keiykAdd2, KYS_ADDRESS_2_LENGTH, FillType.Space, true, true));
		// 32.契約者住所３
		tmpKmk.add(seikyUtil.adjStringLength(this.keiykAdd3, KYS_ADDRESS_3_LENGTH, FillType.Space, true, true));
		// 33.契約者電話番号
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiMap.getString(JBSbatCK_T_CUST.KEISHA_TELNO), KYS_PHONE_NO_LENGTH, true));
		// 34.契約者電話番号編集
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, JACStrConst.KARA_MOJI, KYS_PHONE_NO_EDIT_LENGTH, true));
		// 35.契約者連絡先電話番号
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.keiRrks, KYS_RRS_NO_LENGTH, true));
		// 36.契約者連絡先電話番号編集
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, JACStrConst.KARA_MOJI, KYS_RRS_NO_EDIT_LENGTH, true));
		// 37.契約者郵便番号
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiMap.getString(JBSbatCK_T_CUST.KEISHA_PCD), KYS_MAIL_NO_LENGTH, true));
		// 38.契約者郵便番号編集
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.keiykPostCd, KYS_MAIL_NO_EDIT_LENGTH, true));
		// 39.契約者生年月日
		tmpKmk.add(seikyUtil.fillString(FillType.Zero, this.seikyKeiMap.getString(JBSbatCK_T_CUST.CUST_BIRTHD), KYS_BDAY_LENGTH, true));
		// 40.性別区分
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiMap.getString(JBSbatCK_T_CUST.CUST_SEX_CD), SEX_DIV_LENGTH, true));
		// 41.未・結婚
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, JACStrConst.KARA_MOJI, MI_KEKKON_LENGTH, true));
		// 42.契約日
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiMap.getString(JBSbatKK_T_SVC_KEI.RSV_APLY_YMD), KEI_DAY_LENGTH, true));
		// 43.親権者氏名（カナ）
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.snknsNmKana, SHIN_NAME_KANA_LENGTH, true));
		// 44.親権者名（漢字）
		tmpKmk.add(seikyUtil.adjStringLength(this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_NM), SHIN_NAME_KNJI_LENGTH, FillType.Space, true, true));
		// 45.親権者住所１
		tmpKmk.add(seikyUtil.adjStringLength(this.sinknAdd1, SHIN_ADSRESS_1_LENGTH, FillType.Space, true, true));
		// 46.親権者住所２
		tmpKmk.add(seikyUtil.adjStringLength(this.sinknAdd2, SHIN_ADSRESS_2_LENGTH, FillType.Space, true, true));
		// 47.親権者住所３
		tmpKmk.add(seikyUtil.adjStringLength(this.sinknAdd3, SHIN_ADSRESS_3_LENGTH, FillType.Space, true, true));
		// 48.親権者電話番号
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_TELNO), SHIN_PHONE_NO_LENGTH, true));
		// 49.親権者電話番号編集
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, JACStrConst.KARA_MOJI, SHIN_PHONE_NO_EDIT_LENGTH, true));
		// 50.親権者郵便番号
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_PCD), SHIN_MAIL_NO_LENGTH, true));
		// 51.親権者郵便番号編集
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.sinknPostCd, SHIN_MAIL_NO_EDIT_LENGTH, true));
		// 52.続柄
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.SKSHA_ZOKUGARA_CD), ZOKU_LENGTH, true));
		// 53.勤務先電話番号
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.offcRrks, KNM_PHONE_LENGTH, true));
		// 54.勤務先電話番号編集
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, JACStrConst.KARA_MOJI, KNM_PHONE_EDIT_LENGTH, true));
		// 55.勤務先名
		tmpKmk.add(seikyUtil.adjStringLength(this.offcNm, KNM_NAME_LENGTH, FillType.Space, true, true));
		// 56.本人・保証人区分
		tmpKmk.add(ZERO);
		// 57.利息計算起算日
		tmpKmk.add(seikyUtil.fillString(FillType.Zero, ZERO, RSKKSNKS_DAY_LENGTH, false));
		// 58.合計区分
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.gsnDiv, SUM_DIV_LENGTH, true));
		while(Integer.parseInt(this.kknMonCnt) > i)
		{
			// 59.請求月
			tmpKmk.add(seikyUtil.fillString(FillType.Zero, this.prcInfoSeikyMon[i], SEIKY_MONTH_LENGTH, true));
			// 請求額が初期値でない場合
			if(this.prcInfoSeikyAmnt[i] != -1)
			{
				// 60.請求金額
				tmpKmk.add(seikyUtil.fillString(FillType.Zero, Integer.toString(this.prcInfoSeikyAmnt[i]), SEIKY_AMNT_LENGTH, false));
			}
			// 初期値の場合
			else
			{
				tmpKmk.add(seikyUtil.fillString(FillType.Zero, ZERO, SEIKY_AMNT_LENGTH, false));
			}
			i++;
		}
		// 61.約定弁済期限年月日
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, this.ykbnYMD, YKBN_KGN_YMD_LENGTH, true));
		// 62.予備
		tmpKmk.add(seikyUtil.fillString(FillType.HalfSpace, JACStrConst.KARA_MOJI, yobiDtlLength, true));

		String item = maleItem(tmpKmk);
		// 出力項目を連結
		infoMap.set(JBSbatCHIFE049.ITEM, item);
		infoMap.setOutFlg(true);
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E]出力項目[" + item + "]");

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outKsdTgItiInfo]");
		return infoMap;
	}

	/**
	 * ArrayListの項目を連結して、Stringで返します。
	 * 
	 * @param tmpKmk 出力要素リスト
	 * @return String 出力項目
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private String maleItem(ArrayList<String> tmpKmk)throws Exception
	{
		StringBuffer item = new StringBuffer();
		for(String tmp:tmpKmk)
		{
			if(tmp != null)
			{
				item.append(tmp);
			}
		}
		return item.toString();
	}


	/**
	 * 対象の文字数が引数で渡された桁数を超過している場合、
	 * その桁数にして返します。
	 * 
	 * @param str 対象文字列
	 * @param length 桁数
	 * @return String 対象文字列または、桁数調整後の対象文字列
	 */
	private String divStr(String str, int length)
	{
		String rtnStr = JACStrConst.KARA_MOJI;

		if(null != str)
		{
			rtnStr = str;

			int trgLen = rtnStr.length();

			if(trgLen > length)
			{
				rtnStr = rtnStr.substring(0, length);
			}
		}
		return rtnStr;
	}


	/**
	 * 勤務先名の取得
	 * 

	 * @throws Exception 
	 */
	private void getOffcNm() throws Exception
	{
		this.offcNm = null;
		if(this.seikyKeiMap != null)
		{
			this.offcNm = this.seikyKeiMap.getString(JBSbatCK_T_CUST_KOJIN.OFFC_NM);
			// 退避.勤務先電話番号マップがnullの場合

			if(this.offcNm == null)
			{
				selectOffcNm();

				this.offcNm = this.offcNmMap.getString(JBSbatCK_T_HOJIN_RRKS.HJRRKS_NM);
			}
			if(this.offcNm == null)
			{

				this.offcNm = this.offcNmMap.getString(JBSbatCK_T_HOJIN_RRKS.HJRRKS_TNTSHA_SHOZKBSHO_NM);
			}
		}
	}


}
