/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHIktNyukinClAdd
*	ソースファイル名	：JBSbatCHIktNyukinClAdd.java
*	作成者				：富士通　
*	作成日				：2023年10月18日
*＜機能概要＞
*　一括入金取消登録部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v68.00.00	2023/11/01  FJ)アラ		【ANK-4475-00-00】インボイス対応 STEP2
*********************************************************************/
package eo.business.service;

import java.io.File;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import eo.business.common.JACBatCommon;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JACbatRknBusinessUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JCCbatShoriIraiUtil;
import eo.business.common.JCHBatNameStkuUtil;
import eo.business.common.JCHbatTaiorrkDataAdd;
import eo.business.util.file.JBSbatCHIFM436;
import eo.business.util.file.JBSbatCHIFM437;
import eo.business.util.table.JBSbatCC_T_DLYD_TRN_REQ;
import eo.business.util.table.JBSbatCH_T_SAIKEN;
import eo.business.util.table.JBSbatCH_T_SEIKY_SKN_KNRN;
import eo.business.util.table.JBSbatCH_T_TOKUSOKU;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JZM0171Constant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatDefFileUtil;
import eo.framework.file.JBSbatInputFileUtil;
import eo.framework.util.JBSbatAplConst;
import eo.framework.util.JBSbatBusinessFileUtil;
import eo.framework.util.JBSbatCheckUtil;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHIktNyukinClAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(ディレイド処理依頼)*/
	private static final String D_TBL_NAME_CC_T_DLYD_TRN_REQ = "CC_T_DLYD_TRN_REQ";

	/** テーブル(請求契約)*/
	private static final String D_TBL_NAME_KK_T_SEIKY_KEI = "KK_T_SEIKY_KEI";

	/** テーブル(債権)*/
	private static final String D_TBL_NAME_CH_T_SAIKEN = "CH_T_SAIKEN";

	/** テーブル(督促)*/
	private static final String D_TBL_NAME_CH_T_TOKUSOKU = "CH_T_TOKUSOKU";

	/** テーブル(ダウンロードファイル管理)*/
	private static final String D_TBL_NAME_ZM_T_DL_FILE_KANRI = "ZM_T_DL_FILE_KANRI";

	/** SQL定義キー(CH_SELECT_004)*/
	private static final String KK_T_SEIKY_KEI_CH_SELECT_004 = "CH_SELECT_004";

	/** SQL定義キー(CH_SELECT_045)*/
	private static final String CH_T_SAIKEN_CH_SELECT_045 = "CH_SELECT_045";


	/** SQL定義キー(CH_SELECT_046)*/
	private static final String CH_T_SAIKEN_CH_SELECT_046 = "CH_SELECT_046";

	/** SQL定義キー(CH_SELECT_011)*/
	private static final String CH_T_TOKUSOKU_CH_SELECT_011 = "CH_SELECT_011";

	/** SQL定義キー(CH_INSERT_001)*/
	private static final String ZM_T_DL_FILE_KANRI_CH_INSERT_001 = "CH_INSERT_001";

	/** テーブルアクセスクラス(ディレイド処理依頼)*/
	private JBSbatSQLAccess db_CC_T_DLYD_TRN_REQ = null;

	/** テーブルアクセスクラス(請求契約)*/
	private JBSbatSQLAccess db_KK_T_SEIKY_KEI = null;

	/** テーブルアクセスクラス(債権)*/
	private JBSbatSQLAccess db_CH_T_SAIKEN = null;

	/** テーブルアクセスクラス(督促)*/
	private JBSbatSQLAccess db_CH_T_TOKUSOKU = null;

	/** テーブルアクセスクラス(ダウンロードファイル管理)*/
	private JBSbatSQLAccess db_ZM_T_DL_FILE_KANRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	/** 料金対応記録登録用タイトル */
	private static final String PRCTAIOKIROKCLADD_TITLE = "一括入金取消登録";
	/** ファイルコード */
	private static final String FILE_CD = "0000";
	/** 処理管理番号 一括入金取消登録 */
	private static final String TRN_KANRI_NO_IKT_NYUKIN_CL_ADD = "000000000265";
	/** コード種別コード（(一括入金取消登録エラーコード） */
	private static final String CD_SBT_CD_CL_ERR_CD  = "CD01816";
	/** 一括入金取消登録エラーコード 0000 */
	private static final String ERR_CD_0000 = "0000";
	/** 一括入金取消登録エラーコード H001 */
	private static final String ERR_CD_H001 = "H001";
	/** 一括入金取消登録エラーコード E001 */
	private static final String ERR_CD_E001 = "E001";
	/** 一括入金取消登録エラーコード E002 */
	private static final String ERR_CD_E002 = "E002";
	/** 一括入金取消登録エラーコード E003 */
	private static final String ERR_CD_E003 = "E003";
	/** 一括入金取消登録エラーコード E004 */
	private static final String ERR_CD_E004 = "E004";
	/** 一括入金取消登録エラーコード E005 */
	private static final String ERR_CD_E005 = "E005";
	/** 一括入金取消登録エラーコード E006 */
	private static final String ERR_CD_E006 = "E006";
	/** 一括入金取消登録エラーコード E007 */
	private static final String ERR_CD_E007 = "E007";
	/** 一括入金取消登録エラーコード E008 */
	private static final String ERR_CD_E008 = "E008";
	/** 一括入金取消登録エラーコード E100 */
	private static final String ERR_CD_E100 = "E100";
	/** 一括入金取消登録エラーコード E101 */
	private static final String ERR_CD_E101 = "E101";
	/** 一括入金取消登録エラーコード E102 */
	private static final String ERR_CD_E102 = "E102";
	/** 一括入金取消登録エラーコード E200 */
	private static final String ERR_CD_E200 = "E200";
	/**一括入金取消登録エラーコード E900 */
	private static final String ERR_CD_E900 = "E900";
	
	/** ユーザー関連情報 ユーザーID */
	private static final String USER_INF_USER_ID = "USER_ID";
	/** ユーザー関連情報 ユーザー名 */
	private static final String USER_INF_USER_NM = "USER_NM";
	/** ユーザー関連情報 業務個別設定組織コード */
	private static final String USER_INF_WKKBT_ORG_CD = "WKKBT_ORG_CD";
	/** ユーザー関連情報 業務個別設定組織名 */
	private static final String USER_INF_WKKBT_ORG_NM = "WKKBT_ORG_NM";
	
	/** 入金取消登録関連情報 請求契約番号 */
	private static final String NKIN_CL_INF_SEIKY_KEI_NO = "SEIKY_KEI_NO";
	/** 入金取消登録関連情報 対応履歴連動対象フラグ */
	private static final String NKIN_CL_INF_TAIORRKI_RENDO_TG_FLG = "TAIORRKI_RENDO_TG_FLG";
	/** 入金取消登録関連情報 記事 */
	private static final String NKIN_CL_INF_KIJI = "KIJI";
	/** 入金取消登録関連情報 請求契約マップ */
	private static final String NKIN_CL_INF_SEIKY_KEI_MAP = "SEIKY_KEI_MAP";
	/** 入金取消登録関連情報 充当リスト */
	private static final String NKIN_CL_INF_JUTO_LIST = "JUTO_LIST";
	
	/** ユーザー関連情報格納マップ */
	private HashMap<String, String> userMap  = null;
	/** 一括入金取消登録エラーコード格納マップ */
	private HashMap<String, String> iktNyukinClAddErrCdMap  = null;
	/** 対応履歴連動対象フラグ格納マップ */
	private HashMap<String, String> taiorrkiRendoTgFlgMap  = null;
	/** 業務機能識別コード：料金項目コード（債権額） */
	private String wksSaikenAmnt  = JACStrConst.KARA_MOJI;
	/** 業務機能識別コード：料金項目コード（充当） */
	private String wksJutoAmnt  = JACStrConst.KARA_MOJI;
	/** エンコード */
	private String encode = JACStrConst.KARA_MOJI;
	
	/** 請求契約番号リスト（重複チェック用） */
	private HashSet<String> seikyKeiNoZumiList = null;
	/** 請求年月リスト（重複チェック用） */
	private HashSet<String> seikyYmZumiList = null;
	
	/** 一括入金取消登録処理結果ファイルのファイルオブジェクト */
	private JBSbatBusinessFileUtil chlst10402Obj = null;
	/** 一括入金取消登録処理結果ファイルのレコード件数 */
	private int chlst10402Cnt = 0;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_CC_T_DLYD_TRN_REQ = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CC_T_DLYD_TRN_REQ);
		db_KK_T_SEIKY_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SEIKY_KEI);
		db_CH_T_SAIKEN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_SAIKEN);
		db_CH_T_TOKUSOKU = new JBSbatSQLAccess(commonItem, D_TBL_NAME_CH_T_TOKUSOKU);
		db_ZM_T_DL_FILE_KANRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_T_DL_FILE_KANRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		// 初期化
		iktNyukinClAddErrCdMap  = new HashMap<String, String>();
		taiorrkiRendoTgFlgMap  = new HashMap<String, String>();
		
		// コード名称管理から該当の名称マップを作成する
		JCHBatNameStkuUtil nameStkuUtil = new JCHBatNameStkuUtil();
		
		// 一括入金取消登録エラーコード
		iktNyukinClAddErrCdMap = nameStkuUtil.getCdNmMap(commonItem, CD_SBT_CD_CL_ERR_CD);
		// 対応履歴連動対象フラグ
		taiorrkiRendoTgFlgMap = nameStkuUtil.getCdNmMap(commonItem, JZM0171Constant.CD00984);
		
		// 業務パラメータ管理から対象データを取得する
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		// 業務機能識別コード：料金項目コード（債権額）
		wksSaikenAmnt = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_SAIKEN_AMNT);
		// 業務機能識別コード：料金項目コード（充当額＿合計）
		wksJutoAmnt = paramUtil.getGyoumuParameter(JACStrConst.WKPRA_CH_WKS_JUTO_GOKEI);
		paramUtil.close();
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public JBSbatOutputItem execute() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// ディレイド処理依頼情報を取得する
		List<HashMap<String, Object>> shoriIraiList = JCCbatShoriIraiUtil.getShoriIraiInfo(commonItem, this.jobid);
		if (shoriIraiList == null)
		{
			// 対象データが存在しないため処理終了
			return null;
		}
		
		// フリー項目を取得する
		String[] freeItems = freeItem.split(JACStrConst.FREE_DIV);
		
		// エンコード取得
		encode = freeItems[1];
		
		for (HashMap<String, Object> shoriIrai : shoriIraiList)
		{
			// チェックエラー存在フラグ false:エラーなし、true:エラーあり
			boolean checkErr = false;
			
			// 初回処理フラグ true:初回、false:初回以外
			boolean firstTranFlg = true;
			
			// 入力ファイルの定義取得
			String chlst10401DefFileName = JBSbatAplConst.getAplConstValue("IND") + "CHIFM436.def";
			
			// ディレイド処理依頼番号
			String shoriIraiNo = (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.DLYD_TRN_REQ_NO);
			
			// 入力電子ファイル管理番号
			String fileKanriNo = (String)shoriIrai.get(JBSbatCC_T_DLYD_TRN_REQ.INPUT_EFILE_KANRI_NO);
			
			// 電子ファイル管理より一括入金取消登録指示ファイルの復元
			String chlst10401Path = JCCBatCommon.searchDenshiFile(commonItem, fileKanriNo);
			JBSbatInputFileUtil chlst10401Util = new JBSbatInputFileUtil(chlst10401Path);
			JBSbatDefFileUtil chlst10401Def = new JBSbatDefFileUtil(chlst10401DefFileName, chlst10401Util);
			
			// Readerオブジェクトを生成する
			chlst10401Util.createReader();
			
			// 一括入金取消登録処理結果ファイルのファイル名を編集
			String sysDateTimeStamp = JCCBatCommon.getSysDateTimeStamp();
			String chlst10402Name =  "CHIFM437001_" + sysDateTimeStamp + ".csv";
			
			// 一括入金取消登録処理結果ファイルのファイルパス
			String chlst10402FullPath = freeItems[0] + chlst10402Name;
			
			// 一括入金取消登録処理結果ファイルのファイルオブジェクト
			chlst10402Obj = JCCBatCommon.createBusinessFileUtil(
					chlst10402FullPath, JACStrConst.ENCODE_SJIS, JACStrConst.LINE_SEPARATOR, JACStrConst.COMMA);
			
			// 一括入金取消登録処理結果ファイルのファイル
			chlst10402Cnt = 0;
			
			// 請求契約番号リスト
			seikyKeiNoZumiList = new HashSet<String>();
			
			// ユーザー関連情報
			userMap = new HashMap<String, String>();
			
			// ディレイド処理依頼のＰＫ検索を行う
			JBSbatCommonDBInterface dlydTrnReqMap = executeCC_T_DLYD_TRN_REQ_PKSELECT(new Object[]{shoriIraiNo});
			
			if (dlydTrnReqMap != null)
			{
				// ユーザーID
				String userId = dlydTrnReqMap.getString(JBSbatCC_T_DLYD_TRN_REQ.ADD_OPEACNT);
				userMap.put(USER_INF_USER_ID, userId);
				
				// 対応記録関連データ登録部品
				JCHbatTaiorrkDataAdd taiorrkDataAdd = new JCHbatTaiorrkDataAdd(commonItem, userId);
				
				// ユーザー名
				userMap.put(USER_INF_USER_NM, taiorrkDataAdd.getUserNm());
				// 業務個別設定組織コード
				userMap.put(USER_INF_WKKBT_ORG_CD, taiorrkDataAdd.getWkkbtOrgCd());
				// 業務個別設定組織名
				userMap.put(USER_INF_WKKBT_ORG_NM, taiorrkDataAdd.getWkkbtOrgNm());
			}
			
			// 請求年月リスト（重複チェック用）
			seikyYmZumiList = new HashSet<String>();
			// 出力用データリスト
			ArrayList<HashMap<String, String>> outFileDateList = new ArrayList<HashMap<String,String>>();
			// 入金取消登録用データマップ
			HashMap<String, Object> nyukinClAddDataMap  = new HashMap<String, Object>();
			// 先頭レコードを判別するフラグ true:先頭レコード、false:先頭レコード以外
			boolean firstReccrdFlg = true;
			// 請求契約単位エラーフラグ false:エラーなし、true:エラーあり
			boolean seikyTaniErrFlg = false;
			// 請求契約番号（ブレイクキー）
			String seikyKeiNoBrkKey = JACStrConst.KARA_MOJI;
			
			while (chlst10401Util.ready()) 
			{
				// ファイルから１レコード取得
				String chlst10401Line = chlst10401Util.readLine();
				
				// １レコードの情報をマップに格納
				JBSbatServiceInterfaceMap recordMap = chlst10401Def.lineToObject(chlst10401Line, chlst10401Util, 0);
				
				// 請求契約番号
				String seikyKeiNo = getNullToStr(recordMap.getString(JBSbatCHIFM436.SEIKY_KEI_NO));
				
				// 初回処理の場合
				if (firstTranFlg)
				{
					seikyKeiNoBrkKey = seikyKeiNo;
					firstTranFlg = false;
				}
				else
				{
					// 入力ファイルの請求契約番号が前回処理の請求契約番号と異なる場合
					if (!seikyKeiNo.equals(seikyKeiNoBrkKey))
					{
						// 入金取消登録処理を行う
						if (!executeNyukinClAdd(seikyTaniErrFlg, seikyKeiNoBrkKey, outFileDateList, nyukinClAddDataMap))
						{
							checkErr = true;
						}
						
						// 初期化　※請求契約単位
						// 請求年月リスト（重複チェック用）
						seikyYmZumiList = new HashSet<String>();
						// 出力用データリスト
						outFileDateList = new ArrayList<HashMap<String,String>>();
						// 入金取消登録用データマップ
						nyukinClAddDataMap  = new HashMap<String, Object>();
						// 先頭レコードを判別するフラグ
						firstReccrdFlg = true;
						// 請求契約単位エラーフラグ
						seikyTaniErrFlg = false;
						// 請求契約番号（ブレイクキー）
						seikyKeiNoBrkKey = seikyKeiNo;
					}
				}
				
				// 登録チェック処理
				HashMap<String, String> resultMap = checkMain(recordMap, nyukinClAddDataMap, firstReccrdFlg );
				
				// チェックエラーの場合
				if (!JACBatCommon.isNull(resultMap.get(JBSbatCHIFM437.ERR_CD)))
				{
					HashMap<String, String> dataMap = recordMap.getMap();
					dataMap.put(JBSbatCHIFM437.ERR_CD, resultMap.get(JBSbatCHIFM437.ERR_CD));
					dataMap.put(JBSbatCHIFM437.NYUKIN_CL_AMNT, JACStrConst.KARA_MOJI);
					outFileDateList.add(dataMap);
					seikyTaniErrFlg = true;
				}
				else
				{
					HashMap<String, String> dataMap = recordMap.getMap();
					dataMap.put(JBSbatCHIFM437.ERR_CD, JACStrConst.KARA_MOJI);
					dataMap.put(JBSbatCHIFM437.NYUKIN_CL_AMNT, resultMap.get(JBSbatCHIFM437.NYUKIN_CL_AMNT));
					outFileDateList.add(dataMap);
				}
				
				firstReccrdFlg = false;
			}
			
			// 最終回処理
			if (!firstTranFlg)
			{
				// 入金取消登録処理を行う
				if (!executeNyukinClAdd(seikyTaniErrFlg, seikyKeiNoBrkKey, outFileDateList, nyukinClAddDataMap))
				{
					checkErr = true;
				}
			}
			
			// 出力ファイルをクローズする
			JCCBatCommon.closeBusinessFileUtil(chlst10402Obj);
			
			if (checkErr)
			{
				// チェックエラーありのため、ディレイド処理依頼結果コードを"業務エラー"で更新
				JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JACStrConst.DLYD_TRN_RSLT_CD_WORK_ERR, null);
			}
			else
			{
				// チェックエラーなしのため、ディレイド処理依頼結果コードを"完了"で更新
				
				JCCbatShoriIraiUtil.updateShoriIraiResult(commonItem, shoriIraiNo, JACStrConst.DLYD_TRN_RSLT_CD_FIN, null);
			}
			
			// 電子ファイル管理登録処理
			JBSbatCommonItem arg0 = commonItem;								// 業務共通電文
			String arg1 = FILE_CD;											// ファイルコード
			String arg2 = chlst10402FullPath;								// ファイルパス
			String arg3 = JBSbatDateUtil.adjustMonth(super.opeDate, 1);		// ファイル削除年月日（運用日付 + 1ヶ月）
			String[] rc = JCCBatCommon.createDenshiFile(arg0, arg1, arg2, arg3);
			
			// ログ出力
			super.logPrint.printDebugLog("電子ファイル管理番号(" + rc[0] + ")、世代登録年月日時分秒(" + rc[1] + ")");
			
			// 電話ファイル管理に登録する日本語のファイル名
			String chlst10402NhngName = "一括入金取消登録処理結果ファイル_" + sysDateTimeStamp + ".csv";
			
			// ダウンロードファイル管理登録処理
			String[] dlFileKanriParam = new String[5];
			dlFileKanriParam[0] = TRN_KANRI_NO_IKT_NYUKIN_CL_ADD;				// 処理管理番号
			dlFileKanriParam[1] = chlst10402NhngName;						// ファイル名
			dlFileKanriParam[2] = String.valueOf(chlst10402Cnt);			// データ件数
			dlFileKanriParam[3] = rc[0];									// 電子ファイル管理番号
			dlFileKanriParam[4] = rc[1];									// 世代登録年月日時分秒
			executeZM_T_DL_FILE_KANRI_CH_INSERT_001(dlFileKanriParam);
			
			// 一時ファイルを削除する
			File chlst10402 = new File(chlst10402FullPath);
			if (chlst10402.exists())
			{
				chlst10402.delete();
			}
		}
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_CC_T_DLYD_TRN_REQ.close();
		db_KK_T_SEIKY_KEI.close();
		db_CH_T_SAIKEN.close();
		db_CH_T_TOKUSOKU.close();
		db_ZM_T_DL_FILE_KANRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	DLYD_TRN_REQ_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeCC_T_DLYD_TRN_REQ_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("DLYD_TRN_REQ_NO", whereParam[0]);

		// DBアクセスを実行します
		return db_CC_T_DLYD_TRN_REQ.selectByPrimaryKeys(whereMap);
	}

	/**
	 * SQLKEY(CH_SELECT_004)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	請求契約番号
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SEIKY_KEI_CH_SELECT_004(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_CH_SELECT_004);
	}

	/**
	 * SQLKEY(CH_SELECT_045)で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_045(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_CH_T_SAIKEN.selectBySqlDefine(paramList, CH_T_SAIKEN_CH_SELECT_045);
	}

	/**
	 * SQLKEY(CH_SELECT_046)で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_046(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());

		// DBアクセスを実行します
		db_CH_T_SAIKEN.selectBySqlDefine(paramList, CH_T_SAIKEN_CH_SELECT_046);
	}

	/**
	 * SQLKEY(CH_SELECT_011)で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_011(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_011);
	}

	/**
	 * SQLKEY(CH_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	処理管理番号
	 *		 	ファイル名
	 *		 	データ件数
	 *		 	電子ファイル管理番号
	 *		 	世代登録年月日時分秒
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_T_DL_FILE_KANRI_CH_INSERT_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());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_ZM_T_DL_FILE_KANRI.executeBySqlDefine(paramList, ZM_T_DL_FILE_KANRI_CH_INSERT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 登録チェックを行います。
	 * <br>
	 * @param recordMap 入金取消登録指示ファイルの１レコードの情報
	 * @param nyukinAddClDataMap 入金取消登録用データマップ
	 * @param firstReccrdFlg 請求契約単位で先頭レコードを判別するフラグ
	 * @return 入金登録チェック結果
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, String> checkMain(JBSbatServiceInterfaceMap recordMap, HashMap<String, Object> nyukinClAddDataMap, boolean firstReccrdFlg)throws Exception
	{
		HashMap<String, String> resultMap = new HashMap<String, String>();
		resultMap.put(JBSbatCHIFM437.ERR_CD, JACStrConst.KARA_MOJI);
		resultMap.put(JBSbatCHIFM437.NYUKIN_CL_AMNT, JACStrConst.KARA_MOJI);
		
		// ■■■ファイルチェック
		// フォーマットチェック
		if (recordMap.isInputErrorFlg())
		{
			// １レコードの項目数が異なる
			resultMap.put(JBSbatCHIFM437.ERR_CD, ERR_CD_H001);
			return resultMap;
		}
		
		// 必須・属性・桁数チェック・重複チェック
		String result = singleCheck(recordMap.getMap(), firstReccrdFlg);
		
		if (!JACBatCommon.isNull(result))
		{
			resultMap.put(JBSbatCHIFM437.ERR_CD, result);
			return resultMap;
		}
		
		// 請求契約番号
		String seikyKeiNo = recordMap.getString(JBSbatCHIFM436.SEIKY_KEI_NO);
		// 請求年月
		String seikyYm = recordMap.getString(JBSbatCHIFM436.SEIKY_YM);
		
		// 先頭レコードの場合
		if (firstReccrdFlg)
		{
			// 請求契約番号
			nyukinClAddDataMap.put(NKIN_CL_INF_SEIKY_KEI_NO, recordMap.getString(JBSbatCHIFM436.SEIKY_KEI_NO));
			
			// 対応履歴連動対象フラグ
			nyukinClAddDataMap.put(NKIN_CL_INF_TAIORRKI_RENDO_TG_FLG, recordMap.getString(JBSbatCHIFM436.TAIORRKI_RENDO_TG_FLG));
			// 記事
			nyukinClAddDataMap.put(NKIN_CL_INF_KIJI, recordMap.getString(JBSbatCHIFM436.KIJI));
			
			// 請求契約マップ
			executeKK_T_SEIKY_KEI_CH_SELECT_004(new String[]{seikyKeiNo, super.opeDate});
			JBSbatCommonDBInterface seikyKeiInfo = db_KK_T_SEIKY_KEI.selectNext();
			nyukinClAddDataMap.put(NKIN_CL_INF_SEIKY_KEI_MAP, seikyKeiInfo);
			
		}
		
		// ■■■請求契約番号存在チェック
		JBSbatCommonDBInterface seikyKeiChk = (JBSbatCommonDBInterface)nyukinClAddDataMap.get(NKIN_CL_INF_SEIKY_KEI_MAP);
		if (seikyKeiChk == null)
		{
			resultMap.put(JBSbatCHIFM437.ERR_CD, ERR_CD_E100);
			return resultMap;
		}
		
		// ■■■債権年月存在チェック
		executeCH_T_SAIKEN_CH_SELECT_045(new String[]{seikyKeiNo, seikyYm});
		JBSbatCommonDBInterface saikenChk = db_CH_T_SAIKEN.selectNext();
		if (saikenChk == null)
		{
			resultMap.put(JBSbatCHIFM437.ERR_CD, ERR_CD_E101);
			return resultMap;
		}
		
		// 債権リスト
		executeCH_T_SAIKEN_CH_SELECT_046(new String[]{wksSaikenAmnt, super.opeDate, wksJutoAmnt, super.opeDate, seikyKeiNo, seikyKeiNo, seikyYm});
		JBSbatCommonDBInterface saikenInfo = db_CH_T_SAIKEN.selectNext();
		
		// 請求年月の債権額合計
		BigDecimal seikyYmSaikenAmntSum = BigDecimal.ZERO;
		
		ArrayList<JBSbatCommonDBInterface> seikyYmSaikenList = new ArrayList<JBSbatCommonDBInterface>(); 
		
		while (saikenInfo != null)
		{
			 
			BigDecimal saikenAmnt = new BigDecimal(getNullToZero(saikenInfo.getString("SAIKEN_AMNT")));
			
			// 債権額が０円以外の債権情報
			if (saikenAmnt.compareTo(BigDecimal.ZERO) != 0)
			{
				seikyYmSaikenAmntSum = seikyYmSaikenAmntSum.add(saikenAmnt);
				seikyYmSaikenList.add(saikenInfo);
			}
			
			saikenInfo = db_CH_T_SAIKEN.selectNext();
		}
		
		// ■■■債権ステータスチェック
		if (seikyYmSaikenList.size() == 0)
		{
			resultMap.put(JBSbatCHIFM437.ERR_CD, ERR_CD_E102);
			return resultMap;
		}
		
	
		ArrayList<JBSbatCommonDBInterface> jutoList = (ArrayList<JBSbatCommonDBInterface>)nyukinClAddDataMap.get(NKIN_CL_INF_JUTO_LIST);
		if (jutoList == null)
		{
			jutoList = new ArrayList<JBSbatCommonDBInterface>();
		}
		
		jutoList.addAll(seikyYmSaikenList);
		nyukinClAddDataMap.put(NKIN_CL_INF_JUTO_LIST, jutoList);
		
		// チェックOK
		resultMap.put(JBSbatCHIFM437.NYUKIN_CL_AMNT, seikyYmSaikenAmntSum.toString());
		return resultMap;
	}
	
	/**
	 * 入力情報（一括入金取消登録指示ファイル）の単項目チェックを行います。
	 * <br>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param firstReccrdFlg 請求契約単位で先頭レコードを判別するフラグ
	 * @return エラー内容に該当する入金取消登録エラーコード。エラーなしの場合には空文字を返却。
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private String singleCheck(HashMap rsMap, boolean firstReccrdFlg) throws Exception
	{
		// 単項目チェックを行います
		String strValue = null;
		
		// ■■■請求契約番号項目チェック
		strValue = (String)rsMap.get(JBSbatCHIFM436.SEIKY_KEI_NO);
		
		// 必須チェック
		if(JACBatCommon.isNull(strValue))
		{
			return ERR_CD_E001;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1","10"}))
		{
			return ERR_CD_E001;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			return ERR_CD_E001;
		}
		// 重複チェック
		if(seikyKeiNoZumiList.contains(strValue))
		{
			return ERR_CD_E007;
		}
		
		// ■■■請求年月項目チェック
		strValue = (String)rsMap.get(JBSbatCHIFM436.SEIKY_YM);
		
		// 必須チェック
		if(JACBatCommon.isNull(strValue))
		{
			return ERR_CD_E002;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu1","6"}))
		{
			return ERR_CD_E002;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"year_month1"}))
		{
			return ERR_CD_E002;
		}
		// 重複チェック
		if(seikyYmZumiList.contains(strValue))
		{
			return ERR_CD_E008;
		}
		else
		{
			seikyYmZumiList.add(strValue);
		}
		
		// 請求契約単位で先頭レコードの場合
		if (firstReccrdFlg)
		{
			
			// ■■■対応履歴連動対象フラグ項目チェック
			strValue = (String)rsMap.get(JBSbatCHIFM436.TAIORRKI_RENDO_TG_FLG);
			
			// 必須チェック
			if(JACBatCommon.isNull(strValue))
			{
				return ERR_CD_E003;
			}
			// 属性チェック
			if(!taiorrkiRendoTgFlgMap.containsKey(strValue))
			{
				return ERR_CD_E003;
			}
			
			// ■■■記事項目チェック
			strValue = (String)rsMap.get(JBSbatCHIFM436.KIJI);
			
			// 必須チェック
			if(JACBatCommon.isNull(strValue))
			{
				return ERR_CD_E004;
			}
			// バイト数チェック
			if(JACbatRknBusinessUtil.getBytes(strValue, encode) > 200)
			{
				return ERR_CD_E004;
			}
		}
		// 請求契約単位で2件目以降の場合
		else
		{
			
			// ■■■対応履歴連動対象フラグ項目チェック
			strValue = (String)rsMap.get(JBSbatCHIFM436.TAIORRKI_RENDO_TG_FLG);
			
			// 設定された場合、エラー
			if(!JACBatCommon.isNull(strValue))
			{
				return ERR_CD_E005;
			}
			
			// ■■■記事項目チェック
			strValue = (String)rsMap.get(JBSbatCHIFM436.KIJI);
			
			// 設定された場合、エラー
			if(!JACBatCommon.isNull(strValue))
			{
				return ERR_CD_E006;
			}
		}
		
		return JACStrConst.KARA_MOJI;
	}
	
	/**
	 * 入金取消登録処理を行います。
	 * <br>
	 * @param seikyTaniErrFlg 請求契約単位エラーフラグ
	 * @param seikyKeiNoBrkKey 請求契約番号（ブレイクキー）
	 * @param outFileDateList 出力用データリスト
	 * @param nyukinClAddDataMap 入金取消登録用データマップ
	 * @return 正常の場合はtrue、異常の場合はfalse
	 * @throws Exception 
	 */
	private boolean executeNyukinClAdd(boolean seikyTaniErrFlg,
										String seikyKeiNoBrkKey,
										ArrayList<HashMap<String, String>> outFileDateList,
										HashMap<String, Object> nyukinClAddDataMap
										)throws Exception
	{
		// 処理結果
		boolean result = false;
		
		// ■■■請求契約単位チェック
		// チェックエラーありの場合
		if (seikyTaniErrFlg)
		{
			// 結果ファイル作成
			createChlst10402(outFileDateList, ERR_CD_E200, JACStrConst.KARA_MOJI);
		}
		// チェックエラーなしの場合
		else
		{
			// 入金取消登録サービス情報
			HashMap<String, Object> outputMap = null;
			
			//入金取消前督促ステータス
			String tokusokuBf = getTokusokuStatus(seikyKeiNoBrkKey);
			
			// 入金取消登録のためサービスを呼び出す
			try
			{
				outputMap = invokeService(nyukinClAddDataMap);
			}
			catch (Throwable e)
			{
				// 何もしない
			}
			
			// リターンコード 
			String returnCode = JCCBatchEsbInterface.getReturnCode(outputMap);
			
			// 異常の場合
			if(!JCCBatchEsbInterface.RETURN_CODE_SUCCESS.equals(returnCode))
			{
				createChlst10402(outFileDateList, ERR_CD_E900, JACStrConst.KARA_MOJI);
			}
			// 正常の場合
			else
			{
				
				
				// 結果ファイル作成
				createChlst10402(outFileDateList, ERR_CD_0000, tokusokuBf);
				
				result = true;
			}
		}
		
		// 請求契約番号リストに処理済の請求契約番号を追加する
		if (!JACBatCommon.isNull(seikyKeiNoBrkKey) && !seikyKeiNoZumiList.contains(seikyKeiNoBrkKey))
		{
			seikyKeiNoZumiList.add(seikyKeiNoBrkKey);
		}
		
		return result;
	}
	
	/**
	 * サービス呼出処理
	 * @param nyukinClAddDataMap 入金取消用データマップ
	 * @return サービスの処理結果
	 * @throws Exception
	 */
	private HashMap<String, Object> invokeService(HashMap<String, Object> nyukinClAddDataMap) throws Exception
	{
		// サービス呼び出し時の引数を生成
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, "CHSV0065");
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, "CHSV0065OP");
		
		// サービスに渡す業務データを格納するMAP
		HashMap<String, Object> inDataMap = new HashMap<String, Object>();
		
		setJUTOICRNCC(nyukinClAddDataMap, inDataMap, JPCModelConstant.FUNC_CD_1);
		setPRCSCHDLTEIGI(nyukinClAddDataMap, inDataMap, JPCModelConstant.FUNC_CD_2);
		setSEIKYUCWKSAIKEN(nyukinClAddDataMap, inDataMap, JPCModelConstant.FUNC_CD_1);
		setUPDATESEIKYUCWK(nyukinClAddDataMap, inDataMap, JPCModelConstant.FUNC_CD_1);
		setTAIOKIROKADDCC(nyukinClAddDataMap, inDataMap, JPCModelConstant.FUNC_CD_1);
		setADDHOTVOICCC(nyukinClAddDataMap, inDataMap, JPCModelConstant.FUNC_CD_1);
		setPRCTAIOKIROKTMP(nyukinClAddDataMap, inDataMap, JPCModelConstant.FUNC_CD_1);
		
		// サービスの処理結果が格納されるMAP
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		
		// サービス呼び出し
		JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inDataMap, outputMap);
		
		return outputMap;
	}
	
	/**
	 * 上りマッピングをする
	 * 
	 * @param nyukinClAddDataMap 入金取消登録用データマップ
	 * @param outputMap
	 * @param func_code　機能コード
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private HashMap setJUTOICRNCC(HashMap<String, Object> nyukinClAddDataMap, HashMap outputMap, String func_code) throws Exception
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);
		parentMap.put("nyukin_func_code", func_code);
		
		// 充当一覧明細リストの作成
		ArrayList<HashMap<String, Object>> jutoIcrnList = new ArrayList<HashMap<String, Object>>(); 
		
		
		// 充当リスト
		ArrayList<JBSbatCommonDBInterface> jutoIcrnInfo = (ArrayList<JBSbatCommonDBInterface>)nyukinClAddDataMap.get(NKIN_CL_INF_JUTO_LIST);
		
		if (jutoIcrnInfo != null)
		{
			for (JBSbatCommonDBInterface jutoInfo : jutoIcrnInfo)
			{
				//HashMap childMap = new HashMap();
				HashMap<String, Object> jutoMap = new HashMap<String, Object>();
				
				
				// ＫＥＹ＿債権番号
				jutoMap.put("key_saiken_no", jutoInfo.getString(JBSbatCH_T_SAIKEN.SAIKEN_NO));
				
				// 請求契約番号
				jutoMap.put("seiky_kei_no", (String)nyukinClAddDataMap.get(NKIN_CL_INF_SEIKY_KEI_NO));
				
				// 債権番号
				jutoMap.put("saiken_no", jutoInfo.getString(JBSbatCH_T_SAIKEN.SAIKEN_NO));
				
				// 請求年月 
				jutoMap.put("seiky_ym",  jutoInfo.getString(JBSbatCH_T_SAIKEN.SAIKEN_YM));
				
				// 請求種別コード
				jutoMap.put("seiky_sbt_cd", jutoInfo.getString(JBSbatCH_T_SAIKEN.SEIKY_SBT_CD));
				
				// 債権ステータス
				jutoMap.put("saiken_stat", jutoInfo.getString(JBSbatCH_T_SAIKEN.SAIKEN_STAT));
				
				// 充当額
				jutoMap.put("juto_amnt", jutoInfo.getString("JYTO_AMNT"));
				
				// 更新前債権更新年月日時分秒 
				jutoMap.put("saiken_upd_dtm_af", jutoInfo.getString(JBSbatCH_T_SAIKEN.UPD_DTM));
				
				//  請求番号
				jutoMap.put("seiky_no", jutoInfo.getString(JBSbatCH_T_SEIKY_SKN_KNRN.SEIKY_NO));
				
				jutoIcrnList.add(jutoMap);
			}
		}
		
		parentMap.put("juto_icrn_list", jutoIcrnList);
		
		outputMap.put("JUTOICRNCC", parentMap);
		
		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param nyukinClAddDataMap 入金取消用データマップ
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	private HashMap setPRCSCHDLTEIGI(HashMap<String, Object> nyukinClAddDataMap, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 部品呼び出し → 料金スケジュール定義一意照会マップ.ＫＥＹ＿運用日
		parentMap.put("key_unyo_day", super.opeDate);

		outputMap.put("PRCSCHDLTEIGI", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param nyukinClAddDataMap 入金取消用データマップ
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	private HashMap setSEIKYUCWKSAIKEN(HashMap<String, Object> nyukinClAddDataMap, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 請求契約番号 → 請求内訳債権番号一覧照会マップ１.ＫＥＹ＿請求契約番号
		parentMap.put("key_seiky_kei_no", (String)nyukinClAddDataMap.get(NKIN_CL_INF_SEIKY_KEI_NO));

		outputMap.put("MAP_SEIKY_UCWK", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param nyukinClAddDataMap 入金取消用データマップ
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	private HashMap setUPDATESEIKYUCWK(HashMap<String, Object> nyukinClAddDataMap, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 入金フラグ
		parentMap.put("nyukin_flg", JACStrConst.AMNT_HANNEI_CD_KSN);

		outputMap.put("UPDSEIKYUW", parentMap);
		outputMap.put("ADDSEIKYUW", parentMap);
		outputMap.put("DELSEIKYUW", parentMap);
		

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param nyukinClAddDataMap 入金取消登録用データマップ
	 * @param outputMap
	 * @param func_code　機能コード
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private HashMap setTAIOKIROKADDCC(HashMap<String, Object> nyukinClAddDataMap, HashMap outputMap, String func_code) throws Exception
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		String wkkbtOrgCd = userMap.get(USER_INF_WKKBT_ORG_CD);
		String wkkbtOrgNm = userMap.get(USER_INF_WKKBT_ORG_NM);
		String userId = userMap.get(USER_INF_USER_ID);
		String userNm = userMap.get(USER_INF_USER_NM);
		String dtm = JCCBatCommon.getSysDateTime();
		
		ArrayList<HashMap<String, Object>> taioKirokAddList = new ArrayList<HashMap<String, Object>>();
		
		HashMap<String, Object> childMap = new HashMap<String, Object>();

		// 入金取消["123"固定] → 対応記録登録マップ.対応記録登録リスト.料金対応記録種別コード
		childMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_NYUKIN_CL);
		// 入金取消（一括）["1305"固定] → 対応記録登録マップ.対応記録登録リスト.料金対応記録種別詳細コード
		childMap.put("prc_taio_kirok_dtl_bunrui_cd", JACStrConst.TKRK_SBTD_IKT_NYUKIN_CL);
		// 業務個別設定組織コード → 対応記録登録マップ.業務個別設定組織コード
		childMap.put("wkkbt_org_cd", wkkbtOrgCd);
		// 業務個別設定組織名 → 対応記録登録マップ.業務個別設定組織名
		childMap.put("wkkbt_org_nm", wkkbtOrgNm);
		// ユーザーＩＤ → 対応記録登録マップ.ユーザーＩＤ
		childMap.put("user_id", userId);
		// ユーザー名 → 対応記録登録マップ.ユーザー名
		childMap.put("user_nm", userNm);
		// 年月日時分秒 → 対応記録登録マップ.年月日時分秒
		childMap.put("dtm", dtm);
		// "入金取消" → 対応記録登録マップ.対応記録登録リスト.タイトル
		childMap.put("title", PRCTAIOKIROKCLADD_TITLE);
		// 記事 → 対応記録登録マップ.対応記録登録リスト.問合せ内容
		childMap.put("toiawase_naiyo", (String)nyukinClAddDataMap.get(NKIN_CL_INF_KIJI));

		// 応対区分カテゴリーリストの作成
		ArrayList<HashMap<String, Object>> rspCtgrList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> ctgrMap = new HashMap<String, Object>();
		// 料金対応記録種別コード(:入金取消) → 対応記録登録マップ.料金対応記録種別コード
		ctgrMap.put("prc_taio_kirok_sbt_cd", JACStrConst.TKRK_SBT_NYUKIN_CL);
		// 入金取消["1305"固定] → 対応記録登録マップ.料金対応記録種別詳細コード
		ctgrMap.put("prc_taio_kirok_dtl_bunrui_cd", JACStrConst.TKRK_SBTD_IKT_NYUKIN_CL);

		// 対応区分カテゴリーリストに追加顧客
		rspCtgrList.add(ctgrMap);

		// 対応区分カテゴリーリスト → 対応記録登録マップ.対応区分カテゴリーリスト
		childMap.put("rsp_ctgr_list", rspCtgrList);

		// 対応履歴登録リストに追加
		taioKirokAddList.add(childMap);
		
		parentMap.put("taio_kirok_add_list", taioKirokAddList);

		parentMap.put("seiky_kei_no", (String)nyukinClAddDataMap.get(NKIN_CL_INF_SEIKY_KEI_NO));

		outputMap.put(JACStrConst.TAIOKIROKADDCC_MAP_ID, parentMap);
		
		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * @param bean　[0]：請求書再発行
	 * @param outputMap
	 * @param func_code　機能コード
	 */
	@SuppressWarnings("unchecked")
	private HashMap setADDHOTVOICCC(HashMap<String, Object> nyukinClAddDataMap, HashMap outputMap, String func_code)
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		// 応対区分カテゴリーリストの作成
		ArrayList<HashMap<String, Object>> rspCtgrList = new ArrayList<HashMap<String, Object>>();
		HashMap<String, Object> ctgrMap = new HashMap<String, Object>();
		rspCtgrList.add(ctgrMap);

		parentMap.put("RSP_CTGR_List", rspCtgrList);
		outputMap.put("ADDHOTVOICCC", parentMap);

		return outputMap;
	}

	/**
	 * 上りマッピングをする
	 * 
	 * @param nyukinClAddDataMap 入金用データマップ
	 * @param outputMap
	 * @param func_code　機能コード
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private HashMap setPRCTAIOKIROKTMP(HashMap<String, Object> nyukinClAddDataMap, HashMap outputMap, String func_code) throws Exception
	{
		
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", func_code);

		String userId = userMap.get(USER_INF_USER_ID);
		// ユーザＩＤ → 料金対応記録一時マップ.料金対応ユーザＩＤ
		parentMap.put("prc_taio_user_id", userId);

		// 請求契約番号 → 料金対応記録一時マップ.請求契約番号
		parentMap.put("seiky_kei_no", (String)nyukinClAddDataMap.get(NKIN_CL_INF_SEIKY_KEI_NO));

		// "入金取消" → 料金対応記録一時マップ.タイトル
		parentMap.put("title", PRCTAIOKIROKCLADD_TITLE);

		// 記事 → 料金対応記録一時マップ.記事
		parentMap.put("kiji", (String)nyukinClAddDataMap.get(NKIN_CL_INF_KIJI));

		// 入金取消（一括）["1305"固定] → 料金対応記録一時マップ.料金対応記録種別詳細コード
		parentMap.put("prc_taio_kirok_dtl_bunrui_cd", JACStrConst.TKRK_SBTD_IKT_NYUKIN_CL);

		// 部品呼出し（対応履歴表示） → 料金対応記録一時マップ.対応履歴連動対象フラグ
		parentMap.put("taiorrki_rendo_tg_flg", (String)nyukinClAddDataMap.get(NKIN_CL_INF_TAIORRKI_RENDO_TG_FLG));

		outputMap.put("PRCTAIOKIROKTMP", parentMap);

		return outputMap;
	}
	
	/**
	 * 一括入金取消登録処理結果ファイル作成処理
	 * @param outFileDateList 出力用データリスト
	 * @param errCd エラーコード
	 * @param tokusokuBf 入金取消前督促ステータス
	 * @throws Exception
	 */
	private void createChlst10402(ArrayList<HashMap<String, String>> outFileDateList, String errCd, String tokusokuBf) throws Exception
	{
		boolean sentouRec = true;
		
		for (HashMap<String, String> dateMap : outFileDateList)
		{
			ArrayList<String> dataInfo = new ArrayList<String>();
			
			// エラーコード
			String errCdRow = dateMap.get(JBSbatCHIFM437.ERR_CD);
			if (JACBatCommon.isNull(errCdRow))
			{
				errCdRow = errCd;
			}
			
			// エラー内容
			String errNaiyoRow = JACStrConst.KARA_MOJI;
			if (!JACBatCommon.isNull(errCdRow))
			{
				errNaiyoRow = iktNyukinClAddErrCdMap.get(errCdRow);
			}
			
			// エラーコード
			dataInfo.add(getNullToStr(errCdRow));
			// エラー内容
			dataInfo.add(getNullToStr(errNaiyoRow));
			// 請求契約番号
			dataInfo.add(getNullToStr(dateMap.get(JBSbatCHIFM436.SEIKY_KEI_NO)));
			// 請求年月
			dataInfo.add(getNullToStr(dateMap.get(JBSbatCHIFM436.SEIKY_YM)));
			// 対応履歴連動対象フラグ
			dataInfo.add(getNullToStr(dateMap.get(JBSbatCHIFM436.TAIORRKI_RENDO_TG_FLG)));
			// 記事
			dataInfo.add(getNullToStr(dateMap.get(JBSbatCHIFM436.KIJI)));
			
			// 正常の場合
			if (ERR_CD_0000.equals(errCd))
			{
				// 入金取消額
				dataInfo.add(getNullToStr(dateMap.get(JBSbatCHIFM437.NYUKIN_CL_AMNT)));
				
				// 入金取消前督促ステータス
				if (sentouRec){
					dataInfo.add(getNullToStr(tokusokuBf));
					sentouRec = false;
				}
				else
				{
					dataInfo.add(JACStrConst.KARA_MOJI);
				}
			}
			else
			{
				// 入金取消額
				dataInfo.add(JACStrConst.KARA_MOJI);
				// 入金取消前督促ステータス
				dataInfo.add(JACStrConst.KARA_MOJI);
			}
			
			JCCBatCommon.printDoubleQuoteBusinessFileUtil(chlst10402Obj, dataInfo);
			
			// 出力件数カウントアップ
			chlst10402Cnt++;
		}
	}
	
	/**
	 * 督促ステータス取得を行います。
	 * <br>
	 * @param seikyKeiNo 請求契約番号
	 * @throws Exception 
	 */
	private String getTokusokuStatus(String seikyKeiNo)throws Exception
	{
		// 最新の督促ステータスを取得する
		executeCH_T_TOKUSOKU_CH_SELECT_011(new String[]{seikyKeiNo, super.opeDate, super.opeDate});
		JBSbatCommonDBInterface tokusokuInfo = db_CH_T_TOKUSOKU.selectNext();
		
		// 督促情報が存在しない場合、"00"(督促なし)を設定する
		if (tokusokuInfo == null)
		{
			return JACStrConst.TOKUSOKU_STAT_NASHI;
		}
		
		// 入金取消前督促ステータス
		String tokusokuStatBf = tokusokuInfo.getString(JBSbatCH_T_TOKUSOKU.TOKUSOKU_STAT);
		
		return tokusokuStatBf;
	}
	
	/**
	 * パラメタがNullの場合空白を返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToStr(String str)
	{
		if (JACBatCommon.isNull(str))
		{
			return JACStrConst.KARA_MOJI;
		}
		
		return str;
	}
	
	/**
	 * パラメタがNullの場合ゼロを返却します。
	 * @param str 文字列
	 * @return str
	 */
	private String getNullToZero(String str)
	{
		if (JACBatCommon.isNull(str))
		{
			return "0";
		}
		
		return str;
	}
}
