/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHSeikyMensuHanei
*	ソースファイル名	：JBSbatCHSeikyMensuHanei.java
*	作成者				：富士通　
*	作成日				：2011年08月29日
*＜機能概要＞
*　請求書面数反映（口振）部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/29   富士通		新規作成
*	v3.00.00	2012/08/28   FJ）成田	【TG1-2012-0000145】パラメータ取得部品のクローズ処理を追加。
*********************************************************************/
package eo.business.service;

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.JBSbatMatchServiceInterface;
import eo.business.util.file.JBSbatCHIFM051;
import eo.business.util.file.JBSbatCHIFM082;
import eo.business.util.file.JBSbatCHIFM092;
import eo.common.constant.JACStrConst;
import eo.common.util.JPCEditString;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHSeikyMensuHanei extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**▼▼▼▼▼▼クラス変数追加 開始▼▼▼▼▼▼*/
	
	/** レコード区分（同封管理ヘッダ） */
	private static final String REC_DIV_DOFU_KNRI_HD = "050";
	
	/** レコード区分（請求料金情報） */
	private static final String REC_DIV_SEKY_PRC_INF = "100";
	
	/** 電話番号（ALL空白） */
	private static final String TEL_NO_SPACE = JPCEditString.fillHalfSpace(" ", 12, true);
	
	/** 印刷枚数オーバーデータ．関連内容 */
	private static final String KANREN_NAIYO_VALUE = JPCEditString.fillHalfSpace(" ", 20, true);
	
	/** 退避．同封内請求契約毎情報：総面数 */
	private static final int DOFU_SEIKY_LIST_TTL_CNT = 0;
	
	/** 退避．同封内請求契約毎情報：内訳面数 */
	private static final int DOFU_SEIKY_LIST_UW_CNT = 1;
	
	/** 退避．同封内請求契約毎情報：明細面数 */
	private static final int DOFU_SEIKY_LIST_DTL_CNT = 2;
	
	/** 面数の桁数 */
	private static final int MEN_CNT_DIG = 5;
	
	/** 明細有無判定用印刷内訳 */
	private static final int DTL_JUDGE_UW = 2;
	
	/** 明細有無判定用印刷明細 */
	private static final int DTL_JUDGE_DTL = 1;
	
	/** 退避．前回同封コード（トラン） */
	private String zenDofuCdTr = JACStrConst.KARA_MOJI;
	
	/** 退避．前回同封コード（マスタ） */
	private String zenDofuCdMs = JACStrConst.KARA_MOJI;
	
	/** 退避．前回請求契約番号 */
	private String zenSeikyKeiNo = JACStrConst.KARA_MOJI;
	
	/** 退避．同封内請求契約毎情報リスト（同封コード：請求契約番号：総面数：内訳面数：明細面数） */
	private HashMap<ArrayList<String>, ArrayList<Integer>> dofuKeiInfList = null;
	
	/** 退避．請求契約内通話明細面数合算 */
	private int seikyKeiNaiTwDtlGsan = 0;
	
	/** 退避．請求契約内内訳面数合算 */
	private int seikyKeiNaiUwGsan = 0;
	
	/** 退避．同封内通話明細面数合算 */
	private int dofuNaiTwDtlGsan = 0;
	
	/** 退避．同封内内訳面数合算 */
	private int dofuNaiUwGasan = 0;
	
	/** 退避．同封内総内訳面数 */
	private int dofuNaiTtlCnt = 0;
	
	/** 退避．業務パラメータ（請求書同封印刷上限数） */
	private int sksDofuPrintUpplno = 0;
	
	/**▲▲▲▲▲▲クラス変数追加 終了▲▲▲▲▲▲*/
	
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial][opeDate=" + super.opeDate + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial][freeItem=" + super.freeItem + "]");
		
		// 業務パラメータ管理スキーマから請求書同封印刷上限数を取得
		JACbatParamUtil paramUtil = new JACbatParamUtil(commonItem);
		
		sksDofuPrintUpplno = Integer.parseInt(paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_SKS_DF_PRNT_UPLNO));
		
		paramUtil.close();
		
		dofuKeiInfList = new HashMap<ArrayList<String>, ArrayList<Integer>>();
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial][sksDofuPrintUpplno=" + sksDofuPrintUpplno + "]");
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param mastMap　入力電文
	 * @param tranMap　入力電文
	 * @param outputInItem  入力情報
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap, JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert mastMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][mastMap=" + mastMap.getMap().toString() + "]") : true;
		assert tranMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][tranMap=" + tranMap.getMap().toString() + "]") : true;
		
		// 入力M、入力TともにNullの場合
		if(mastMap == null && tranMap == null)
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力M、入力TともにNull]");
			// 処理なし
		}
		
		else if(mastMap == null)
		// 入力MのみNullの場合
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力MのみNull]");
			// トランファイル処理フラグを設定する
			this.setTranProcFlg(true);
		}
		else if(tranMap == null)
		// 入力TのみNullの場合
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力TのみNull]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][dofuNaiTtlCnt=" + String.valueOf(dofuNaiTtlCnt) + "]");
			
			// 退避．前回同封コード（トラン）　≠　未設定の場合
			if(!zenDofuCdTr.equals(JACStrConst.KARA_MOJI))
			{
				// 請求契約内面数の設定および、同封内合算処理を行います。
				setSeiKeiMenCntAndDoFuGassan();
				
				// 退避．前回同封コード（トラン）　＝　未設定に更新
				zenDofuCdTr = JACStrConst.KARA_MOJI;
			}
			// 退避．前回同封コード（マスタ）　≠　入力M．同封コードの場合
			if(!zenDofuCdMs.equals(mastMap.getString(JBSbatCHIFM092.DOFU_CD)))
			{
				// 退避情報クリア
				clearTempInf();
			}
			// 退避．前回同封コード（マスタ） 更新
			zenDofuCdMs = mastMap.getString(JBSbatCHIFM092.DOFU_CD);
			
			// マスタファイル処理フラグを設定する
			this.setMastProcFlg(true);
			// 退避．同封内総内訳面数が請求書同封印刷上限数を超過した場合
			if(dofuNaiTtlCnt > sksDofuPrintUpplno)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力M．レコード区分=" + mastMap.getString(JBSbatCHIFM092.DOFU_CTRL_REC_DIV) + "]");
				
				// 入力M．レコード区分　＝　同封管理ヘッダの場合
				if(mastMap.getString(JBSbatCHIFM092.DOFU_CTRL_REC_DIV).equals(REC_DIV_DOFU_KNRI_HD))
				{
					// 印刷枚数オーバーデータ作成
					outputInItem.addOutMapList_2(makePrintCntOverDate(mastMap));
				}
			}
			// 上記以外の場合
			else
			{
				// 請求書データ総枚付与ファイル作成
				outputInItem.addOutMapList(makeSksDataTtlAddFileInf(mastMap));
			}
		}
		// 上記以外の場合
		else
		{
			// 退避．前回同封コード（マスタ）　≠　入力M．同封コード
			if(!zenDofuCdMs.equals(mastMap.getString(JBSbatCHIFM092.DOFU_CD)))
			{
				// 退避情報クリア
				clearTempInf();
			}
			// キー退避
			zenDofuCdMs = mastMap.getString(JBSbatCHIFM092.DOFU_CD);
			// マッチングキー設定
			// マスタキー
			String mastKey = mastMap.getString(JBSbatCHIFM092.DOFU_CD);
			// トランキー
			String tranKey = tranMap.getString(JBSbatCHIFM082.DOFU_CD);
			
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][mastKey=" + mastKey + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][tranKey=" + tranKey + "]");
			
			// マッチした場合
			if(mastKey.equals(tranKey))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力M　＝　入力T]");
				// マッチフラグを設定する
				this.setMatchProcFlg(true);
				// 退避情報更新
				updTmpInfo(mastMap, tranMap);
			}
			// マスタ＞トランの場合
			else if(mastKey.compareTo(tranKey) > 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力M　＞　入力T]");
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][dofuNaiTtlCnt=" + String.valueOf(dofuNaiTtlCnt) + "]");
				// トランファイル処理フラグを設定する
				this.setTranProcFlg(true);
				// 退避．前回同封コード（マスタ） 更新
				zenDofuCdMs = mastMap.getString(JBSbatCHIFM092.DOFU_CD);
			}
			// 上記以外の場合（マスタ＜トランの場合）
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力M　＜　入力T]");
				// マスタファイル処理フラグを設定する
				this.setMastProcFlg(true);
				
				// 退避．前回同封コード（トラン）　≠　入力T．同封コード　かつ　退避．前回同封コード（トラン）　≠　未設定の場合
				if(!zenDofuCdTr.equals(tranMap.getString(JBSbatCHIFM082.DOFU_CD)) && !zenDofuCdTr.equals(JACStrConst.KARA_MOJI))
				{
					// 請求契約内面数の設定および、同封内合算処理を行います。
					setSeiKeiMenCntAndDoFuGassan();
					
					// 退避．前回同封コード（トラン）　＝　未設定に更新
					zenDofuCdTr = JACStrConst.KARA_MOJI;
				}

				// 退避．同封内総内訳面数が請求書同封印刷上限数を超過した場合
				if(dofuNaiTtlCnt > sksDofuPrintUpplno)
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力M．レコード区分=" + mastMap.getString(JBSbatCHIFM092.DOFU_CTRL_REC_DIV) + "]");
					// マスタ．レコード区分　＝　同封管理ヘッダの場合
					if(mastMap.getString(JBSbatCHIFM092.DOFU_CTRL_REC_DIV).equals(REC_DIV_DOFU_KNRI_HD))
					{
						// 印刷枚数オーバーデータ作成
						outputInItem.addOutMapList_2(makePrintCntOverDate(mastMap));
					}
				}
				// 上記以外の場合
				else
				{
					// 請求書データ総枚付与ファイル作成
					outputInItem.addOutMapList(makeSksDataTtlAddFileInf(mastMap));
				}
			}
		}
		
		assert dofuKeiInfList != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][dofuKeiInfList=" + dofuKeiInfList.toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][zenDofuCdTr=" + zenDofuCdTr + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][zenDofuCdMs=" + zenDofuCdMs + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][zenSeikyKeiNo=" + zenSeikyKeiNo + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][seikyKeiNaiTwDtlGsan=" + String.valueOf(seikyKeiNaiTwDtlGsan) + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][seikyKeiNaiUwGsan=" + String.valueOf(seikyKeiNaiUwGsan) + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][dofuNaiTwDtlGsan=" + String.valueOf(dofuNaiTwDtlGsan) + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][dofuNaiUwGasan=" + String.valueOf(dofuNaiUwGasan) + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][dofuNaiTtlCnt=" + String.valueOf(dofuNaiTtlCnt) + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return(outputInItem);
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼メソッド追加 開始▼▼▼▼▼▼*/
	
	/**
	 * 印刷枚数オーバーデータを作成します。
	 * 
	 * @param mastMap 入力M
	 * @return JBSbatServiceInterfaceMap 出力情報（印刷枚数オーバーデータ）
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap makePrintCntOverDate(JBSbatServiceInterfaceMap mastMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makePrintCntOverDate]");
		
		JBSbatServiceInterfaceMap rtnMap = new JBSbatServiceInterfaceMap();
		
		// 請求契約番号
		rtnMap.setString(JBSbatCHIFM051.SEIKY_KEI_NO, mastMap.getString(JBSbatCHIFM092.CTRL_SEIKY_KEI_NO));
		// 請求書作成結果コード
		rtnMap.setString(JBSbatCHIFM051.SEIKY_SKS_RSLT_CD, JACStrConst.SIKY_MAKE_RSLT_CD_PRINT_CNT_NG);
		// 関連内容
		rtnMap.setString(JBSbatCHIFM051.KANREN_NAIYO, KANREN_NAIYO_VALUE);
		
		rtnMap.setOutFlg(true);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makePrintCntOverDate]");
		
		return rtnMap;
	}
	
	/**
	 * 請求書データ総枚付与ファイル情報を作成します。
	 * 
	 * @param mastMap 入力M
	 * @return JBSbatServiceInterfaceMap 出力情報（請求書データ総枚付与ファイル）
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap makeSksDataTtlAddFileInf(JBSbatServiceInterfaceMap mastMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeSksDataTtlAddFileInf]");
		
		JBSbatServiceInterfaceMap rtnMap = new JBSbatServiceInterfaceMap();
		
		// 入力Mの情報を出力情報に設定
		rtnMap.getMap().putAll(mastMap.getMap());
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeSksDataTtlAddFileInf][入力M．レコード区分" + mastMap.getString(JBSbatCHIFM092.DOFU_CTRL_REC_DIV) + "");
		
		// 入力M．レコード区分　＝　同封管理ヘッダの場合
		if(mastMap.getString(JBSbatCHIFM092.DOFU_CTRL_REC_DIV).equals(REC_DIV_DOFU_KNRI_HD))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeSksDataTtlAddFileInf][入力M．レコード区分　＝　同封管理ヘッダ]");
			
			// 同封ヘッダ＿面数＿総合計
			rtnMap.setString(JBSbatCHIFM092.DOFU_MEN_GOU, JPCEditString.fillZero(String.valueOf(dofuNaiTtlCnt), MEN_CNT_DIG, false));
			// 同封ヘッダ＿面数＿内訳
			rtnMap.setString(JBSbatCHIFM092.DOFU_MEN_UT, JPCEditString.fillZero(String.valueOf(dofuNaiUwGasan), MEN_CNT_DIG, false));
			// 同封ヘッダ＿面数＿明細
			rtnMap.setString(JBSbatCHIFM092.DOFU_MEN_MEI, JPCEditString.fillZero(String.valueOf(dofuNaiTwDtlGsan), MEN_CNT_DIG, false));
			
			// 印刷面数（内訳書＿ｅｏ） ≧ 2 または印刷面数（明細書＿ｅｏ） ≧ 1 の場合
			if(dofuNaiUwGasan >= DTL_JUDGE_UW || dofuNaiTwDtlGsan >= DTL_JUDGE_DTL)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeSksDataTtlAddFileInf][通話明細有無　←　1（明細あり）]");
				rtnMap.setString(JBSbatCHIFM092.DOFU_TUWA_DTL_UM, JACStrConst.TUWA_MEISAI_UMU_FLG_ARI);
			}
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeSksDataTtlAddFileInf][通話明細有無　←　0（明細なし）]");
				rtnMap.setString(JBSbatCHIFM092.DOFU_TUWA_DTL_UM, JACStrConst.TUWA_MEISAI_UMU_FLG_NASI);
			}
		}
		// 入力M．レコード区分　＝　請求料金情報の場合
		else if(mastMap.getString(JBSbatCHIFM092.DOFU_CTRL_REC_DIV).equals(REC_DIV_SEKY_PRC_INF))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeSksDataTtlAddFileInf][入力M．レコード区分　＝　請求料金情報]");
			
			// 退避．同封内請求毎情報リストのキー取得
			ArrayList<String> mapKey = getListKey(mastMap, true);
			
			// 退避．同封内請求毎情報リストより面数関連情報を取得する。
			
			// 退避．同封内請求毎情報リストに対象キーが存在する場合
			if(dofuKeiInfList.containsKey(mapKey))
			{
				// 退避．同封内請求毎情報リストより面数データを取得する。
				ArrayList<Integer> menCntData = dofuKeiInfList.get(mapKey);
				
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeSksDataTtlAddFileInf][退避．同封内請求毎情報リスト．総面数=" + String.valueOf(menCntData.get(DOFU_SEIKY_LIST_TTL_CNT)) + "]");
				
				// 請求料金＿枚数＿総合計に（退避．同封内請求毎情報リスト．総面数／２）の小数点以下を切り捨てた値に＋１をして設定
				rtnMap.setString(JBSbatCHIFM092.SEI_MEN_UT, JPCEditString.fillZero(String.valueOf((menCntData.get(DOFU_SEIKY_LIST_TTL_CNT) / 2) + 1), MEN_CNT_DIG, false));
				
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeSksDataTtlAddFileInf][請求料金＿枚数＿総合計=" + rtnMap.getString(JBSbatCHIFM092.SEI_MEN_UT) + "]");
				
				// 請求料金＿面数＿内訳
				rtnMap.setString(JBSbatCHIFM092.SEI_MAI_GOU, JPCEditString.fillZero(String.valueOf(menCntData.get(DOFU_SEIKY_LIST_UW_CNT)), MEN_CNT_DIG, false));
				// 請求料金＿面数＿明細
				rtnMap.setString(JBSbatCHIFM092.SEI_MEN_MEI, JPCEditString.fillZero(String.valueOf(menCntData.get(DOFU_SEIKY_LIST_DTL_CNT)), MEN_CNT_DIG, false));
			}
		}
		
		rtnMap.setOutFlg(true);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeSksDataTtlAddFileInf]");
		
		return rtnMap;
	}
	
	/**
	 * 同封内請求毎情報リストのキーを取得します。
	 * 
	 * @param inMap 入力情報
	 * @param flg 入力情報判別フラグ（true:入力M,false:入力T）
	 * @return ArrayList<String>
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private ArrayList<String> getListKey(JBSbatServiceInterfaceMap inMap, boolean flg) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getListKey]");
		ArrayList<String> rtnKey = new ArrayList<String>();
		// インファイルが入力Mの場合
		if(flg)
		{
			// リストキー（同封コード, 同封制御請求契約番号）作成
			// 同封コード
			rtnKey.add(inMap.getString(JBSbatCHIFM092.DOFU_CD));
			// 請求契約番号
			rtnKey.add(inMap.getString(JBSbatCHIFM092.CTRL_SEIKY_KEI_NO));
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getListKey][rtnKey=" + rtnKey.toString() + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getListKey]");
			return rtnKey;
		}
		// インファイルが入力Tの場合
		else
		{
			// リストキー（同封コード, 請求契約番号）作成
			// 同封コード
			rtnKey.add(inMap.getString(JBSbatCHIFM082.DOFU_CD));
			// 請求契約番号
			rtnKey.add(inMap.getString(JBSbatCHIFM082.SEIKY_KEI_NO));
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getListKey][rtnKey=" + rtnKey.toString() + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getListKey]");
			return rtnKey;
		}
	}
	
	/**
	 * 退避情報の更新を行います。
	 * 
	 * @param mastMap 入力M
	 * @param tranMap 入力T
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	
	private void updTmpInfo(JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][updTmpInfo]");
		// 退避．前回請求契約番号　≠　入力T．請求契約番号　または　退避．前回同封コード（トラン）　≠　入力T．同封コードの場合
		if(!zenSeikyKeiNo.equals(tranMap.getString(JBSbatCHIFM082.SEIKY_KEI_NO)) || !zenDofuCdTr.equals(tranMap.getString(JBSbatCHIFM082.DOFU_CD)))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updTmpInfo][退避．前回請求契約番号　≠　入力T．請求契約番号　または　退避．前回同封コード（トラン）　≠　入力T．同封コード]");

			
			// 退避．前回請求契約番号　≠　未設定の場合
			if(!zenSeikyKeiNo.equals(JACStrConst.KARA_MOJI))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updTmpInfo][退避．前回請求契約番号　≠　未設定]");
				
				// 請求契約内面数の設定および、同封内合算処理を行います。
				setSeiKeiMenCntAndDoFuGassan();
			}
			
			// キー退避
			// 退避．請求契約番号
			zenSeikyKeiNo = tranMap.getString(JBSbatCHIFM082.SEIKY_KEI_NO);
			// 退避．前回同封コード（トラン）
			zenDofuCdTr = tranMap.getString(JBSbatCHIFM082.DOFU_CD);
			// 退避．同封内請求毎情報リストのキー取得
			ArrayList<String> mapKey = getListKey(tranMap, false);
			
			// 退避．同封内請求契約毎情報リスト．内訳面数
			int uwMenCnt = 0;
			// 退避．同封内請求契約毎情報リスト．明細面数
			int dtlMenCnt = 0;
			// 退避．同封内請求契約毎情報リスト．総面数
			int ttlMenCnt = 0;
			
			// 退避．同封内請求毎情報リストのデータ（内訳面数：明細面数：総面数）
			ArrayList<Integer> dofuKeiInfListData = new ArrayList<Integer>();
			// 総面数
			dofuKeiInfListData.add(DOFU_SEIKY_LIST_TTL_CNT, ttlMenCnt);
			// 内訳面数
			dofuKeiInfListData.add(DOFU_SEIKY_LIST_UW_CNT, uwMenCnt);
			// 明細面数
			dofuKeiInfListData.add(DOFU_SEIKY_LIST_DTL_CNT, dtlMenCnt);
			
			// 退避．同封内請求毎情報リストに新規データ分を設定
			dofuKeiInfList.put(mapKey, dofuKeiInfListData);
			
			// 入力T．課金先電話番号　≠　""（空白）
			if(!JACStrConst.KARA_MOJI.equals(tranMap.getString(JBSbatCHIFM082.KAKINS_TELNO)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updTmpInfo][入力T．課金先電話番号　≠　空白]");
				// 退避．請求契約内通話明細面数合算
				seikyKeiNaiTwDtlGsan = Integer.parseInt(tranMap.getString(JBSbatCHIFM082.DTL_MEN_CNT));
				// 退避．請求契約内内訳面数合算
				seikyKeiNaiUwGsan = 0;
			}
			// 上記以外の場合
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updTmpInfo][入力T．課金先電話番号　＝　空白]");
				// 退避．請求契約内通話明細面数合算
				seikyKeiNaiTwDtlGsan = 0;
				// 退避．請求契約内内訳面数合算
				seikyKeiNaiUwGsan = Integer.parseInt(tranMap.getString(JBSbatCHIFM082.DTL_MEN_CNT));
			}
		}
		// 退避．前回請求契約番号　＝　入力T．請求契約番号の場合
		else if(zenSeikyKeiNo.equals(tranMap.getString(JBSbatCHIFM082.SEIKY_KEI_NO)))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updTmpInfo][退避．前回請求契約番号　＝　入力T．請求契約番号]");
			// 入力T．課金先電話番号　≠　""（空白）
			if(!JACStrConst.KARA_MOJI.equals(tranMap.getString(JBSbatCHIFM082.KAKINS_TELNO)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updTmpInfo][入力T．課金先電話番号　≠　空白]");
				// 退避．請求契約内通話明細面数合算
				seikyKeiNaiTwDtlGsan += Integer.parseInt(tranMap.getString(JBSbatCHIFM082.DTL_MEN_CNT));
			}
			// 上記以外の場合
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][updTmpInfo][入力T．課金先電話番号　＝　空白]");
				// 退避．請求契約内内訳面数合算
				seikyKeiNaiUwGsan = Integer.parseInt(tranMap.getString(JBSbatCHIFM082.DTL_MEN_CNT));
			}
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][updTmpInfo]");
		return;
	}
	
	/**
	 * 請求契約内面数の設定および、同封内合算処理を行います。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setSeiKeiMenCntAndDoFuGassan() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setSeiKeiMenCntAndDoFuGassan]");
		
		// 退避．請求契約内内訳面数合算　＝　０の場合
		if(seikyKeiNaiUwGsan == 0)
		{
			// 退避．請求契約内内訳面数合算　＝　１
			seikyKeiNaiUwGsan = 1;
		}
		// 退避情報を更新します
		
		// 退避．同封内請求契約毎情報リスト．内訳面数
		int uwMenCnt = seikyKeiNaiUwGsan;
		// 退避．同封内請求契約毎情報リスト．明細面数
		int dtlMenCnt = seikyKeiNaiTwDtlGsan;
		// 退避．同封内請求契約毎情報リスト．総面数
		int ttlMenCnt = seikyKeiNaiUwGsan + seikyKeiNaiTwDtlGsan;
		// 退避．同封内請求毎情報リストのデータ（内訳面数：明細面数：総面数）
		ArrayList<Integer> dofuKeiInfListData = new ArrayList<Integer>();
		// 総面数
		dofuKeiInfListData.add(DOFU_SEIKY_LIST_TTL_CNT, ttlMenCnt);
		// 内訳面数
		dofuKeiInfListData.add(DOFU_SEIKY_LIST_UW_CNT, uwMenCnt);
		// 明細面数
		dofuKeiInfListData.add(DOFU_SEIKY_LIST_DTL_CNT, dtlMenCnt);
		
		// 退避．同封内請求毎情報リストのキーを作成
		ArrayList<String> mapKey = new ArrayList<String>();
		// 退避．前回同封コード（トラン）
		mapKey.add(zenDofuCdTr);
		// 退避．前回請求番号
		mapKey.add(zenSeikyKeiNo);
		
		// 退避．同封内請求毎情報リストを更新
		dofuKeiInfList.put(mapKey, dofuKeiInfListData);
		
		// 退避．同封内通話明細面数合算
		dofuNaiTwDtlGsan += seikyKeiNaiTwDtlGsan;
		// 退避．同封内内訳面数合算
		dofuNaiUwGasan += seikyKeiNaiUwGsan;
		// 退避．同封内総内訳面数
		dofuNaiTtlCnt = dofuNaiUwGasan + dofuNaiTwDtlGsan;
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setSeiKeiMenCntAndDoFuGassan]");
		
		return;
	}
	
	
	/**
	 * 退避情報をクリアします。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void clearTempInf() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][clearTempInf]");
		/** 退避．前回同封コード（トラン） */
		zenDofuCdTr = JACStrConst.KARA_MOJI;
		
		/** 退避．前回請求契約番号 */
		zenSeikyKeiNo = JACStrConst.KARA_MOJI;
		
		/** 退避．同封内請求契約毎情報リスト（同封コード：請求契約番号：総面数：内訳面数：明細面数） */
		dofuKeiInfList.clear();
		
		/** 退避．請求契約内通話明細面数合算 */
		seikyKeiNaiTwDtlGsan = 0;
		
		/** 退避．請求契約内内訳面数合算 */
		seikyKeiNaiUwGsan = 0;
		
		/** 退避．同封内通話明細面数合算 */
		dofuNaiTwDtlGsan = 0;
		
		/** 退避．同封内内訳面数合算 */
		dofuNaiUwGasan = 0;
		
		/** 退避．同封内総内訳面数 */
		dofuNaiTtlCnt = 0;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][clearTempInf]");
		return;
	}
	
	/**▲▲▲▲▲▲メソッド追加 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * @return mastProcFlg を戻します。
	 */
	public boolean isMastProcFlg()
	{
		return mastProcFlg;
	}

	/**
	 * @return matchProcFlg を戻します。
	 */
	public boolean isMatchProcFlg()
	{
		return matchProcFlg;
	}

	/**
	 * @return tranProcFlg を戻します。
	 */
	public boolean isTranProcFlg()
	{
		return tranProcFlg;
	}

	/**
	 * @param mast_ProcFlg 設定する mastProcFlg。
	 */
	public void setMastProcFlg(boolean mast_ProcFlg)
	{
		this.mastProcFlg = mast_ProcFlg;
	}

	/**
	 * @param match_ProcFlg 設定する matchProcFlg。
	 */
	public void setMatchProcFlg(boolean match_ProcFlg)
	{
		this.matchProcFlg = match_ProcFlg;
	}

	/**
	 * @param tran_ProcFlg 設定する tranProcFlg。
	 */
	public void setTranProcFlg(boolean tran_ProcFlg)
	{
		this.tranProcFlg = tran_ProcFlg;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
