/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatAKSeikyuwHriwake
*	ソースファイル名	：JBSbatAKSeikyuwHriwake.java
*	作成者				：富士通　
*	作成日				：2013年04月23日
*＜機能概要＞
*　請求内訳振り分け部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/04/23   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatMatchServiceInterface;
import eo.business.util.file.JBSbatAKIFM022;
import eo.business.util.file.JBSbatAKIFM023;
import eo.business.util.file.JBSbatAKIFM025;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
 * 商用検証-料金-前当月比較ツール<BR>
 * 請求内訳振り分けクラス
 * 
 * @author 富士通
 */
public class JBSbatAKSeikyuwHriwake extends JBSbatBusinessService implements JBSbatMatchServiceInterface
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** キーマッチ処理フラグ*/
	private boolean matchProcFlg;

	/** マスタファイル処理フラグ*/
	private boolean mastProcFlg;

	/** トランファイル処理フラグ*/
	private boolean tranProcFlg;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**▼▼▼▼▼▼クラス変数追加 開始▼▼▼▼▼▼*/

	/** マッチングフラグ（true:マッチ、false:アンマッチ） */
	private boolean matchFlg = false;

	/** 退避.マッチングキー */
	private String tmpMatchKey;

	/** 退避.督促関連異動情報 */
	private ArrayList<JBSbatServiceInterfaceMap> tmpTranMapList;

	/**▲▲▲▲▲▲クラス変数追加 終了▲▲▲▲▲▲*/
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/

		// 退避.マッチングキー の初期化
		tmpMatchKey = "";

		// 退避.督促関連異動情報 の初期化
		tmpTranMapList = new ArrayList<JBSbatServiceInterfaceMap>();

		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.getMap().toString() + "]") : true;
		assert tranMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][入力Ｔ（投入用想定請求内訳情報）=" + tranMap.getMap().toString() + "]") : true;

		// 入力Ｍのみ存在する
		if (mastMap != null && tranMap == null)
		{

			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＜入力Ｔ]");

			// マッチフラグ　＝　true（マッチング後キーブレイク）の場合
			if(this.matchFlg)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][マッチング後キーブレイク]");
				this.matchFlg = false;
			}
			// 上記以外（入力Ｍのみ）の場合
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍのみ]");

				// マッチングキー取得
				String mastKey = getMastKey(mastMap);

				// 入力Ｍ = 退避.マッチングキー の場合
				// 退避している全ての督促関連異動情報とレコード出力をおこなう。
				if(mastKey.equals(tmpMatchKey))
				{
					for(int i = 0; tmpTranMapList.size() > i; i++)
					{
						// 請求内訳(異動あり)レコードに入力Ｍと前月異動レコードを設定する。
						this.setZenIdoChsh2(outputInItem, mastMap, tmpTranMapList.get(i), i);
					}
				}
				else
				{
					// 請求内訳(異動なし)レコードに入力Ｍを設定する。
					this.setZenIdoChsh(outputInItem, mastMap);
					this.matchFlg = false;

					// 入力Ｍとマッチする退避.督促関連異動情報はないため空にする。
					tmpTranMapList.clear();
				}
			}

			this.setMastProcFlg(true);
		}
		// 入力Ｔのみ存在する
		else if (mastMap == null && tranMap != null)
		{

			// 前月異動にのみデータがあった場合は何も出力せず次レコードに移動。
			this.setTranProcFlg(true);

		}
		// 入力Ｍ、入力Ｔともに存在する
		else
		{
			// マッチングキー取得
			String mastKey = getMastKey(mastMap);
		
			// マッチングキー取得
			String tranKey = getTranKey(tranMap);

			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ．比較キー=" + mastKey + "]");
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｔ．比較キー=" + tranKey + "]");

			// マッチング処理
			// 入力Ｍ＝入力Ｔ（マッチ）
			if (mastKey.equals(tranKey))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＝入力Ｔ（マッチ）]");

				if(!this.matchFlg)
				{
					// 初めてマッチした場合退避したリストを空にする。
					tmpTranMapList.clear();
				}

				int recordCnt = 1;
				if(tmpTranMapList.isEmpty())
				{
					recordCnt = 0;
				}

				// 入力Ｍ、Ｔの情報をもとに、 出力レコードを編集し、出力情報に設定する。
				this.setZenIdoChsh2(outputInItem, mastMap, tranMap, recordCnt);

				this.setTranProcFlg(true);

				// マッチフラグ更新
				this.matchFlg = true;

				// 退避.マッチングキーに代入
				tmpMatchKey = tranKey;

				// 退避.督促関連異動情報
				tmpTranMapList.add(tranMap);

			}
			// 入力Ｍ＜入力Ｔ
			else if (mastKey.compareTo(tranKey) < 0)
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＜入力Ｔ]");

				// マッチフラグ　＝　true（マッチング後キーブレイク）の場合
				if(this.matchFlg)
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][マッチング後キーブレイク]");
					this.matchFlg = false;
				}
				// 上記以外（入力Ｍのみ）の場合
				else
				{
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍのみ]");

					// 入力Ｍ = 退避.マッチングキー の場合
					// 退避している全ての督促関連異動情報とレコード出力をおこなう。
					if(mastKey.equals(tmpMatchKey))
					{
						for(int i = 0; tmpTranMapList.size() > i; i++)
						{
							// 請求内訳(異動あり)レコードに入力Ｍと前月異動レコードを設定する。
							this.setZenIdoChsh2(outputInItem, mastMap, tmpTranMapList.get(i), i);
						}
					}
					else
					{
						// 請求内訳(異動なし)レコードに入力Ｍを設定する。
						this.setZenIdoChsh(outputInItem, mastMap);
						this.matchFlg = false;

						// 入力Ｍとマッチする退避.督促関連異動情報はないため空にする。
						tmpTranMapList.clear();
					}
				}

				this.setMastProcFlg(true);
			}
			// 入力Ｍ＞入力Ｔ
			else
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][入力Ｍ、入力Ｔともに存在する][入力Ｍ＞入力Ｔ]");

				// 前月異動にのみデータがあった場合は何も出力せず次レコードに移動。
				this.setTranProcFlg(true);
			}
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * @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;
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**▼▼▼▼▼▼メソッド追加 開始▼▼▼▼▼▼*/

	/**
	 * 請求内訳(異動あり)レコードに入力Ｍと前月異動レコードを設定する。
	 * 
	 * @param outputInItem 出力情報
	 * @param mastMap 入力Ｍ
	 * @param tranMap 入力Ｔ・退避Ｔ
	 * @param matchCnt マッチ件数
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setZenIdoChsh2(JBSbatOutputItem outputInItem, JBSbatServiceInterfaceMap mastMap, JBSbatServiceInterfaceMap tranMap, int matchCnt) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setTempSeikyuwIdoAri]");

		// 請求内訳(異動なし)レコードの生成
		JBSbatServiceInterfaceMap tempSeikyuwIdoAri = new JBSbatServiceInterfaceMap();

		// データ種別に'1'を付加する。
		StringBuffer dataSbt = new StringBuffer();
		dataSbt.append(mastMap.getString(JBSbatAKIFM025.DATA_SBT));
		dataSbt.append("1");
		
		String ucwkDbelSkbt;
		// マッチした数が1件目(カウントが0)の場合
		if (matchCnt == 0)
		{
			ucwkDbelSkbt = "0";
		}
		else
		{
			ucwkDbelSkbt = "1";
		}
		
		// データ種別
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.DATA_SBT, dataSbt.toString());
		// 請求番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.SEIKY_NO, mastMap.getString(JBSbatAKIFM025.SEIKY_NO));
		// 請求契約番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.SEIKY_KEI_NO, mastMap.getString(JBSbatAKIFM025.SEIKY_KEI_NO));
		// 請求年月
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.SEIKY_YM, mastMap.getString(JBSbatAKIFM025.SEIKY_YM));
		// 整理番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.SEIRI_NO, mastMap.getString(JBSbatAKIFM025.SEIRI_NO));
		// サービス契約番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.SVC_KEI_NO, mastMap.getString(JBSbatAKIFM025.SVC_KEI_NO));
		// 内訳重複識別
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.UCWK_JFK_SKB, ucwkDbelSkbt);
		// 料金グループコード
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRC_GRP_CD, mastMap.getString(JBSbatAKIFM025.PRC_GRP_CD));
		// 料金コースコード
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PCRS_CD, mastMap.getString(JBSbatAKIFM025.PCRS_CD));
		// 料金サービスコード
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRC_SVC_CD, mastMap.getString(JBSbatAKIFM025.PRC_SVC_CD));
		// 料金項目コード
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRC_KMK_CD, mastMap.getString(JBSbatAKIFM025.PRC_KMK_CD));
		// 料金項目名称
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRC_KMK_NM, mastMap.getString(JBSbatAKIFM025.PRC_KMK_NM));
		// 合算請求年月
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.GSAN_SEIKY_YM, mastMap.getString(JBSbatAKIFM025.GSAN_SEIKY_YM));
		// 利用開始年月日
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.USE_STAYMD, mastMap.getString(JBSbatAKIFM025.USE_STAYMD));
		// 利用終了年月日
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.USE_ENDYMD, mastMap.getString(JBSbatAKIFM025.USE_ENDYMD));
		// 金額
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.AMNT, mastMap.getString(JBSbatAKIFM025.AMNT));
		// 前月金額
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.ZGTU_AMNT, mastMap.getString(JBSbatAKIFM025.ZGTU_AMNT));
		// 料金訂正登録フラグ
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRC_TEISE_ADD_FLG, mastMap.getString(JBSbatAKIFM025.PRC_TEISE_ADD_FLG));
		// 登録年月日時分秒
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.ADD_DTM, mastMap.getString(JBSbatAKIFM025.ADD_DTM));
		// 登録オペレータアカウント
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.ADD_OPEACNT, mastMap.getString(JBSbatAKIFM025.ADD_OPEACNT));
		// 更新年月日時分秒
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.UPD_DTM, mastMap.getString(JBSbatAKIFM025.UPD_DTM));
		// 更新オペレータアカウント
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.UPD_OPEACNT, mastMap.getString(JBSbatAKIFM025.UPD_OPEACNT));
		
		// 進捗番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRG_NO, tranMap.getString(JBSbatAKIFM022.PRG_NO));
		// 申込明細番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.MSKM_DTL_NO, tranMap.getString(JBSbatAKIFM022.MSKM_DTL_NO));
		// 進捗請求契約番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRG_SEIKY_KEI_NO, tranMap.getString(JBSbatAKIFM022.SEIKY_KEI_NO));
		// 進捗サービス契約番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRG_SVC_KEI_NO, tranMap.getString(JBSbatAKIFM022.SVC_KEI_NO));
		// サービス契約内訳番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.SVC_KEI_UCWK_NO, tranMap.getString(JBSbatAKIFM022.SVC_KEI_UCWK_NO));
		// サービス契約回線内訳番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.SVC_KEI_KAISEN_UCWK_NO, tranMap.getString(JBSbatAKIFM022.SVC_KEI_KAISEN_UCWK_NO));
		// 機器提供サービス契約番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.KKTK_SVC_KEI_NO, tranMap.getString(JBSbatAKIFM022.KKTK_SVC_KEI_NO));
		// オプションサービス契約番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.OP_SVC_KEI_NO, tranMap.getString(JBSbatAKIFM022.OP_SVC_KEI_NO));
		// 請求オプションサービス契約番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.SEIOPSVC_KEI_NO, tranMap.getString(JBSbatAKIFM022.SEIOPSVC_KEI_NO));
		// サブオプションサービス契約番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.SBOP_SVC_KEI_NO, tranMap.getString(JBSbatAKIFM022.SBOP_SVC_KEI_NO));
		// 割引サービス契約番号
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.WRIB_SVC_KEI_NO, tranMap.getString(JBSbatAKIFM022.WRIB_SVC_KEI_NO));
		// 異動区分
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.IDO_DIV, tranMap.getString(JBSbatAKIFM022.IDO_DIV));
		// 異動区分名
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.IDO_DIV_NM, tranMap.getString(JBSbatAKIFM022.IDO_DIV_NM));
		// 異動年月日時分秒
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.IDO_DTM, tranMap.getString(JBSbatAKIFM022.IDO_DTM));
		// 進捗ステータス
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRG_STAT, tranMap.getString(JBSbatAKIFM022.PRG_STAT));
		// 進捗年月日時分秒
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRG_DTM, tranMap.getString(JBSbatAKIFM022.PRG_DTM));
		// 進捗メモ
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRG_MEMO, tranMap.getString(JBSbatAKIFM022.PRG_MEMO));
		// 進捗特記事項１
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRG_TKJK_1, tranMap.getString(JBSbatAKIFM022.PRG_TKJK_1));
		// 進捗特記事項２
		tempSeikyuwIdoAri.setString(JBSbatAKIFM023.PRG_TKJK_2, tranMap.getString(JBSbatAKIFM022.PRG_TKJK_2));

		// 出力フラグをtrueにする
		tempSeikyuwIdoAri.setOutFlg(true);

		// 請求内訳(異動あり)レコードに出力する
		outputInItem.addOutMapList_2(tempSeikyuwIdoAri);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setTempSeikyuwIdoAri]");
	}

	/**
	 * 請求内訳(異動なし)レコードに入力Ｍを設定する。
	 * 
	 * @param outputInItem 請求内訳(異動なし)レコード
	 * @param mastMap 入力Ｍ
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void setZenIdoChsh(JBSbatOutputItem outputInItem, JBSbatServiceInterfaceMap mastMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][settempSeikyuwIdoNashi]");

		// 請求内訳(異動なし)レコードの生成
		JBSbatServiceInterfaceMap tempSeikyuwIdoNashi = new JBSbatServiceInterfaceMap();

		// データ種別に'0'を付加する。
		StringBuffer dataSbt = new StringBuffer();
		dataSbt.append(mastMap.getString(JBSbatAKIFM025.DATA_SBT));
		dataSbt.append("0");
		
		String ucwkDbelSkbt = "0";
		
		// データ種別
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.DATA_SBT, dataSbt.toString());
		// 請求番号
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.SEIKY_NO, mastMap.getString(JBSbatAKIFM025.SEIKY_NO));
		// 請求契約番号
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.SEIKY_KEI_NO, mastMap.getString(JBSbatAKIFM025.SEIKY_KEI_NO));
		// 請求年月
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.SEIKY_YM, mastMap.getString(JBSbatAKIFM025.SEIKY_YM));
		// 整理番号
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.SEIRI_NO, mastMap.getString(JBSbatAKIFM025.SEIRI_NO));
		// サービス契約番号
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.SVC_KEI_NO, mastMap.getString(JBSbatAKIFM025.SVC_KEI_NO));
		// 内訳重複識別
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.UCWK_JFK_SKB, ucwkDbelSkbt);
		// 料金グループコード
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.PRC_GRP_CD, mastMap.getString(JBSbatAKIFM025.PRC_GRP_CD));
		// 料金コースコード
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.PCRS_CD, mastMap.getString(JBSbatAKIFM025.PCRS_CD));
		// 料金サービスコード
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.PRC_SVC_CD, mastMap.getString(JBSbatAKIFM025.PRC_SVC_CD));
		// 料金項目コード
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.PRC_KMK_CD, mastMap.getString(JBSbatAKIFM025.PRC_KMK_CD));
		// 料金項目名称
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.PRC_KMK_NM, mastMap.getString(JBSbatAKIFM025.PRC_KMK_NM));
		// 合算請求年月
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.GSAN_SEIKY_YM, mastMap.getString(JBSbatAKIFM025.GSAN_SEIKY_YM));
		// 利用開始年月日
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.USE_STAYMD, mastMap.getString(JBSbatAKIFM025.USE_STAYMD));
		// 利用終了年月日
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.USE_ENDYMD, mastMap.getString(JBSbatAKIFM025.USE_ENDYMD));
		// 金額
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.AMNT, mastMap.getString(JBSbatAKIFM025.AMNT));
		// 前月金額
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.ZGTU_AMNT, mastMap.getString(JBSbatAKIFM025.ZGTU_AMNT));
		// 料金訂正登録フラグ
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.PRC_TEISE_ADD_FLG, mastMap.getString(JBSbatAKIFM025.PRC_TEISE_ADD_FLG));
		// 登録年月日時分秒
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.ADD_DTM, mastMap.getString(JBSbatAKIFM025.ADD_DTM));
		// 登録オペレータアカウント
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.ADD_OPEACNT, mastMap.getString(JBSbatAKIFM025.ADD_OPEACNT));
		// 更新年月日時分秒
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.UPD_DTM, mastMap.getString(JBSbatAKIFM025.UPD_DTM));
		// 更新オペレータアカウント
		tempSeikyuwIdoNashi.setString(JBSbatAKIFM023.UPD_OPEACNT, mastMap.getString(JBSbatAKIFM025.UPD_OPEACNT));

		// 出力フラグをtrueにする
		tempSeikyuwIdoNashi.setOutFlg(true);

		// 請求内訳(異動なし)レコードに出力する
		outputInItem.addOutMapList(tempSeikyuwIdoNashi);

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][settempSeikyuwIdoNashi]");
	}

	/**
	 * 入力Ｍをもとにマッチングキーを生成する。
	 * 
	 * @param mastMap 入力Ｍ
	 * @return String Mastのマッチングキー
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String getMastKey(JBSbatServiceInterfaceMap mastMap) throws Exception
	{
		StringBuffer mastKeySb = new StringBuffer();
		// マスタキーセット
		// 請求契約番号
		mastKeySb.append(mastMap.getString(JBSbatAKIFM025.SEIKY_KEI_NO));
		// サービス契約番号
		mastKeySb.append(mastMap.getString(JBSbatAKIFM025.SVC_KEI_NO));
		return mastKeySb.toString();
	}

	/**
	 * 入力Ｔをもとにマッチングキーを生成する。
	 * 
	 * @param tranMap 入力Ｔ
	 * @return String Tranのマッチングキー
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private String getTranKey(JBSbatServiceInterfaceMap tranMap) throws Exception
	{
		StringBuffer tranKeySb = new StringBuffer();
		// トランキーセット
		// 請求契約番号
		tranKeySb.append(tranMap.getString(JBSbatAKIFM022.SEIKY_KEI_NO));
		// サービス契約番号
		tranKeySb.append(tranMap.getString(JBSbatAKIFM022.SVC_KEI_NO));
		return tranKeySb.toString();
	}
	/**▲▲▲▲▲▲メソッド追加 終了▲▲▲▲▲▲*/
}
