/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatACMansSvcWrKeiInfoSette
*	ソースファイル名	：JBSbatACMansSvcWrKeiInfoSette.java
*	作成者				：富士通　
*	作成日				：2013年03月18日
*＜機能概要＞
*　マンション割引サービス契約情報設定部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v4.00.00	2013/03/18  FJ)早崎		【IT1-2013-0000377】マンション違約金対応 新規作成
*	v4.00.01	2013/04/11  FJ)早崎		【IKK-2013-0000897】対応
*	v5.00.00	2013/07/09  FJ)岡田		【TG1-2013-0000662】マスタ参照基準日水平展開対応
*	v8.00.00	2014/03/20   FJ)狭間	【TG1-2014-0000005】マンション相対料金設定適用期間制御改善
*	v8.00.01	2014/03/26   FJ)狭間	【OM-2014-0001052】マンション相対料金設定適用期間制御改善（追加修正）
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatSchdlUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatACIFM051;
import eo.business.util.table.JBSbatAC_M_MANS_PNLTY;
import eo.business.util.table.JBSbatAC_M_WRIB_PRC;
import eo.business.util.table.JBSbatKK_T_MANS_WRIBSVK;
import eo.business.util.table.JBSbatKK_T_TK_HSK_KEI_PRC;
import eo.common.constant.JACStrConst;
import eo.common.util.JPCUtilCommon;
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;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatACMansSvcWrKeiInfoSette extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(マンション違約金)*/
	private static final String D_TBL_NAME_AC_M_MANS_PNLTY = "AC_M_MANS_PNLTY";

	/** SQL定義キー(AC_SELECT_001)*/
	private static final String AC_M_MANS_PNLTY_AC_SELECT_001 = "AC_SELECT_001";

	/** SQL定義キー(AC_DELETE_001)*/
	private static final String AC_M_MANS_PNLTY_AC_DELETE_001 = "AC_DELETE_001";

	/** テーブルアクセスクラス(マンション違約金)*/
	private JBSbatSQLAccess db_AC_M_MANS_PNLTY = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 退避．マンション違約金雛形情報 */
	private ArrayList<JBSbatCommonDBInterface> bkMansPnltyInfoList = null;

	/** -1 */
	private BigDecimal minusOne = new BigDecimal(-1);
	
	/** -100 */
	private BigDecimal oneHundred = new BigDecimal(100);
	
	/** 退避．マンション違約金マスタ情報削除キー */
	private String bkDeleteKey = null;
	
	/** 退避．料金コースコード */
	private String bkPcrsCd = null;

	/** 退避．料金サービスコード */
	private String bkPrcSvcCd = null;

	/** 退避．提供方式契約番号 */
	private String bkTkHoshikiKeiNo = null;
	
	/** 退避．マンション違約金単価リスト */
	private ArrayList<BigDecimal> bkMansPnltyTankaList = null;
	
	/** 退避．マンション違約金適用開始年月日リスト */
	private ArrayList<String> bkMansPnltyTstaYmdList = null;

	/** 退避．マンション違約金適用終了年月日リスト */
	private ArrayList<String> bkMansPnltyTendYmdList = null;

	/** 退避項目カウント */
	private int bkCount = 0;
	
	/** 退避．群月末日 */
	private String tmpCycEnd = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_AC_M_MANS_PNLTY = new JBSbatSQLAccess(commonItem, D_TBL_NAME_AC_M_MANS_PNLTY);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][initial]");
		
		// 料金スケジュール定義アクセス部品初期処理
		JACbatSchdlUtil schdlUtil = new JACbatSchdlUtil(commonItem);
		
		try
		{
			// 請求年月を取得する
			String seikyYm = schdlUtil.getBillDate(super.opeDate, JACStrConst.EVENT_CD_RYOKIN_KEISAN_YMD);
			
			// 請求年月から、利用開始終了日取得
			String[] strEndYmd = schdlUtil.getUseStrEnd(seikyYm, JACStrConst.EVENT_CD_USE_STAYMD, JACStrConst.EVENT_CD_USE_ENDYMD);
			
			this.tmpCycEnd = strEndYmd[1];	// 群月末日
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][initial][群月末日：" + tmpCycEnd + "]");
		}
		finally
		{
			// 料金スケジュール定義アクセス部品クローズ
			schdlUtil.close();
		}
		
		// マンション違約金マスタ雛型情報取得
		makeMansPnltyPrcInfo();

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * マンション違約金スキーマより、退避．マンション違約金マスタ雛型情報マップに設定します。
	 * 
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void makeMansPnltyPrcInfo() throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeMansPnltyPrcInfo]");
		
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(super.systemCode);					// システムコード
		paramList.setValue(JACStrConst.PCRS_CD_SP);				// 料金コースコード
		paramList.setValue(JACStrConst.PRC_SVC_CD_SP);			// 料金サービス
		paramList.setValue(JACStrConst.TK_HOSHIKI_KEI_NO_SP);	// 提供方式契約番号
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeMansPnltyPrcInfo][paramList=" + paramList.getList().toString() + "]");
		
		// SQL実行
		executeAC_M_MANS_PNLTY_AC_SELECT_001(paramList.getList().toArray());
		
		JBSbatCommonDBInterface dbMap = db_AC_M_MANS_PNLTY.selectNext();
		
		// 退避．マンション違約金雛形情報 
		this.bkMansPnltyInfoList = new ArrayList<JBSbatCommonDBInterface>();
		
		// 取得出来た場合
		if(dbMap != null)
		{	
			while(dbMap != null)
			{
				// 退避．マンション違約金雛形情報 ← マンション違約金雛形情報
				bkMansPnltyInfoList.add(dbMap);

				// 次レコード取得
				dbMap = db_AC_M_MANS_PNLTY.selectNext(); 
			}

		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeMansPnltyPrcInfo]");
		return;
	}

	
	/**
	 * 主処理
	 * @param  inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap,  JBSbatOutputItem outputInItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		
		// マンション違約金マスタ情報削除キー
		String deleteKey = JACStrConst.KARA_MOJI;
		
		// マンション違約金単価
		BigDecimal mansPnltyTanka = BigDecimal.ZERO;

		// 最終レコードではない場合
		if(inMap != null)
		{
			
			// マンション違約金マスタ情報削除キーの設定
			// 入力．料金コースコード + 入力．料金サービスコード + 入力．提供方式契約番号
			deleteKey = makeStr(inMap.getString(JBSbatAC_M_WRIB_PRC.PCRS_CD),
									JPCUtilCommon.fillHalfSpace(inMap.getString(JBSbatAC_M_WRIB_PRC.PRC_SVC_CD), JACStrConst.PRC_SVC_CD_LENGTH, true),
									inMap.getString(JBSbatKK_T_MANS_WRIBSVK.TK_HOSHIKI_KEI_NO));
			
			assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][deleteKey=" + deleteKey + "]") ;
			
			// マンション違約金単価を算出する
			mansPnltyTanka = calcMansPnltyPrc(inMap);
			
			// キーブレイク判定
			
			// 1レコード目の場合
			if(this.bkDeleteKey == null)
			{
				// ダミーレコードをセットする
				outputInItem.addOutMapList(new JBSbatServiceInterfaceMap());
				
				// 退避項目の初期化
				this.bkMansPnltyTankaList = new ArrayList<BigDecimal>();
				this.bkMansPnltyTstaYmdList = new ArrayList<String>();
				this.bkMansPnltyTendYmdList = new ArrayList<String>();
				
				
				// 退避項目を設定

				// 退避．料金コースコード  ← 入力．料金コースコード
				this.bkPcrsCd = inMap.getString(JBSbatAC_M_WRIB_PRC.PCRS_CD);

				// 退避．料金サービスコード ← 入力．料金サービスコード
				this.bkPrcSvcCd = JPCUtilCommon.fillHalfSpace(inMap.getString(JBSbatAC_M_WRIB_PRC.PRC_SVC_CD), JACStrConst.PRC_SVC_CD_LENGTH, true);

				// 退避．提供方式契約番号 ← 入力．提供方式契約番号
				this.bkTkHoshikiKeiNo = inMap.getString(JBSbatKK_T_MANS_WRIBSVK.TK_HOSHIKI_KEI_NO);
				
				// 退避．マンション違約金単価リスト ← マンション違約金単価
				// 退避．マンション違約金適用開始年月日リスト ← 入力．請求金額適用開始年月日
				// 退避．マンション違約金適用終了年月日リスト ← 入力．請求金額適用終了年月日
				bkInMapInfo(inMap, mansPnltyTanka);
				
				// 退避．マンション違約金マスタ情報削除キー ← マンション違約金マスタ情報削除キー
				this.bkDeleteKey = deleteKey;
				
				return outputInItem;
			}
			
			// 前レコードと同じキーの場合
			if(this.bkDeleteKey.equals(deleteKey))
			{
				// 入力項目の退避
				bkInMapInfo(inMap, mansPnltyTanka);
				
				return outputInItem;
			}
		}
		
		// マンション違約金マスタ存在チェックおよび削除処理
		deleteMansPnltyPrc(inMap);
		
		// 退避項目件数分登録処理を実行する
		for(int h = 0; h < this.bkCount; h++)
		{
			// マンション違約金マスタ登録処理
			for(int i = 0; i < bkMansPnltyInfoList.size(); i++)
			{
				JBSbatCommonDBInterface templeteInfoMap = bkMansPnltyInfoList.get(i);
				
				// マンションレプリカで保持している請求金額適用期間と雛形情報で管理する適用期間とで絞り込む
				String mansTegakPrcTStaYmd = templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.MANS_PNLTY_TSTAYMD);	// マンション違約金マスタ．適用開始日
				String mansTegakPrcTEndYmd = templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.MANS_PNLTY_TENDYMD);	// マンション違約金マスタ．適用終了日
				String mansPnltyTstaYmd = this.bkMansPnltyTstaYmdList.get(h);										// マンション違約金設定基．請求金額適用開始年月日
				String mansPnltyTendYmd = this.bkMansPnltyTendYmdList.get(h);										// マンション違約金設定基．請求金額適用終了年月日
				
				// マンション違約金マスタ．適用開始日≦マンション違約金設定基．請求金額適用終了年月日
				// かつマンション違約金設定基．請求金額適用開始年月日≦マンション違約金マスタ．適用終了日の場合のみ出力する
				if(mansTegakPrcTStaYmd.compareTo(mansPnltyTendYmd) <= 0
				&& mansPnltyTstaYmd.compareTo(mansTegakPrcTEndYmd) <= 0)
				{
					// マンション違約金登録処理
					insertMansPnltyPrc(templeteInfoMap, h);
				}
			}
		}

		// 再計算対象提供方式契約番号情報(マンション違約金)設定処理
		outputInItem.addOutMapList(this.outPutInfo(this.bkTkHoshikiKeiNo));
		
		// 最終レコードではない場合
		if(inMap!=null)
		{
			// 退避項目の設定
			
			// 退避項目の初期化
			this.bkMansPnltyTankaList.clear();
			this.bkMansPnltyTstaYmdList.clear();
			this.bkMansPnltyTendYmdList.clear();
			this.bkCount = 0;
			
			// 退避項目を設定

			// 退避．料金コースコード  ← 入力．料金コースコード
			this.bkPcrsCd = inMap.getString(JBSbatAC_M_WRIB_PRC.PCRS_CD);

			// 退避．料金サービスコード ← 入力．料金サービスコード
			this.bkPrcSvcCd = JPCUtilCommon.fillHalfSpace(inMap.getString(JBSbatAC_M_WRIB_PRC.PRC_SVC_CD), JACStrConst.PRC_SVC_CD_LENGTH, true);

			// 退避．提供方式契約番号 ← 入力．提供方式契約番号
			this.bkTkHoshikiKeiNo = inMap.getString(JBSbatKK_T_MANS_WRIBSVK.TK_HOSHIKI_KEI_NO);
			
			// 退避．マンション違約金単価リスト ← マンション違約金単価
			// 退避．マンション違約金適用開始年月日リスト ← 入力．請求金額適用開始年月日
			// 退避．マンション違約金適用終了年月日リスト ← 入力．請求金額適用終了年月日
			bkInMapInfo(inMap, mansPnltyTanka);
			
			// 退避．マンション違約金マスタ情報削除キー ← マンション違約金マスタ情報削除キー
			this.bkDeleteKey = deleteKey;

		}

		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		return outputInItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_AC_M_MANS_PNLTY.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(AC_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	システムコード
	 *		 	対象料金コースコード
	 *		 	対象料金サービスコード
	 *		 	提供方式契約番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_M_MANS_PNLTY_AC_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_AC_M_MANS_PNLTY.selectBySqlDefine(paramList, AC_M_MANS_PNLTY_AC_SELECT_001);
	}

	/**
	 * SQLKEY(AC_DELETE_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 executeAC_M_MANS_PNLTY_AC_DELETE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());

		// DBアクセスを実行します
		db_AC_M_MANS_PNLTY.executeBySqlDefine(paramList, AC_M_MANS_PNLTY_AC_DELETE_001);
	}

	/**
	 * PK(全項目登録)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	システムコード				SYS_CD
	 *		 	対象料金コースコード				TRGT_PCRS_CD
	 *		 	対象料金サービスコード				TRGT_PRC_SVC_CD
	 *		 	提供方式契約番号				TK_HOSHIKI_KEI_NO
	 *		 	支払契約識別コード				PAY_KEI_SKBT_CD
	 *		 	対象料金項目コード				TG_PRC_KMK_CD
	 *		 	サービス解約理由識別コード				SVC_DSL_RSN_SKBT_CD
	 *		 	下限値				LOWL_VALUE
	 *		 	上限値				UPPL_VALUE
	 *		 	料金項目コード				PRC_KMK_CD
	 *		 	世代登録年月日時分秒				GENE_ADD_DTM
	 *		 	予約適用年月日				RSV_APLY_YMD
	 *		 	マンション違約金適用開始年月日				MANS_PNLTY_TSTAYMD
	 *		 	マンション違約金適用終了年月日				MANS_PNLTY_TENDYMD
	 *		 	マンション違約金単価				MANS_PNLTY_TANKA
	 *		 	違約金計算方法コード				PNLTY_CALC_WAY_CD
	 *		 	丸め方法コード				ROUND_WAY_CD
	 *		 	期間開始日識別コード				PRD_STAYMD_SKBT_CD
	 *		 	期間終了月解約徴収方法コード				PRD_END_MON_DSL_CLCTWAY_CD
	 *		 	解約月徴収方法コード				DSL_MON_COLLECT_WAY_CD
	 *		 	期間終了月徴収方法コード				PRD_END_MON_COLLECT_WAY_CD
	 *		 	登録年月日時分秒				ADD_DTM
	 *		 	登録オペレータアカウント				ADD_OPEACNT
	 *		 	更新年月日時分秒				UPD_DTM
	 *		 	更新オペレータアカウント				UPD_OPEACNT
	 *		 	削除年月日時分秒				DEL_DTM
	 *		 	削除オペレータアカウント				DEL_OPEACNT
	 *		 	無効フラグ				MK_FLG
	 *		 	登録運用年月日				ADD_UNYO_YMD
	 *		 	登録処理ＩＤ				ADD_TRN_ID
	 *		 	更新運用年月日				UPD_UNYO_YMD
	 *		 	更新処理ＩＤ				UPD_TRN_ID
	 *		 	削除運用年月日				DEL_UNYO_YMD
	 *		 	削除処理ＩＤ				DEL_TRN_ID
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeAC_M_MANS_PNLTY_PKINSERT(Object[] setParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SYS_CD", setParam[0]);
		setMap.setValue("TRGT_PCRS_CD", setParam[1]);
		setMap.setValue("TRGT_PRC_SVC_CD", setParam[2]);
		setMap.setValue("TK_HOSHIKI_KEI_NO", setParam[3]);
		setMap.setValue("PAY_KEI_SKBT_CD", setParam[4]);
		setMap.setValue("TG_PRC_KMK_CD", setParam[5]);
		setMap.setValue("SVC_DSL_RSN_SKBT_CD", setParam[6]);
		setMap.setValue("LOWL_VALUE", setParam[7]);
		setMap.setValue("UPPL_VALUE", setParam[8]);
		setMap.setValue("PRC_KMK_CD", setParam[9]);
		setMap.setValue("GENE_ADD_DTM", setParam[10]);
		setMap.setValue("RSV_APLY_YMD", setParam[11]);
		setMap.setValue("MANS_PNLTY_TSTAYMD", setParam[12]);
		setMap.setValue("MANS_PNLTY_TENDYMD", setParam[13]);
		setMap.setValue("MANS_PNLTY_TANKA", setParam[14]);
		setMap.setValue("PNLTY_CALC_WAY_CD", setParam[15]);
		setMap.setValue("ROUND_WAY_CD", setParam[16]);
		setMap.setValue("PRD_STAYMD_SKBT_CD", setParam[17]);
		setMap.setValue("PRD_END_MON_DSL_CLCTWAY_CD", setParam[18]);
		setMap.setValue("DSL_MON_COLLECT_WAY_CD", setParam[19]);
		setMap.setValue("PRD_END_MON_COLLECT_WAY_CD", setParam[20]);
		setMap.setValue("ADD_DTM", setParam[21]);
		setMap.setValue("ADD_OPEACNT", setParam[22]);
		setMap.setValue("UPD_DTM", setParam[23]);
		setMap.setValue("UPD_OPEACNT", setParam[24]);
		setMap.setValue("DEL_DTM", setParam[25]);
		setMap.setValue("DEL_OPEACNT", setParam[26]);
		setMap.setValue("MK_FLG", setParam[27]);
		setMap.setValue("ADD_UNYO_YMD", setParam[28]);
		setMap.setValue("ADD_TRN_ID", setParam[29]);
		setMap.setValue("UPD_UNYO_YMD", setParam[30]);
		setMap.setValue("UPD_TRN_ID", setParam[31]);
		setMap.setValue("DEL_UNYO_YMD", setParam[32]);
		setMap.setValue("DEL_TRN_ID", setParam[33]);
	
		// DBアクセスを実行します
		db_AC_M_MANS_PNLTY.insertByPrimaryKeys(setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * マンション違約金の更新（物理削除）を行います。
	 * 
	 * @param inMap 入力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void deleteMansPnltyPrc(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][deleteMansPnltyPrc]");
	
		// 設定値
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		// 条件値
		// システムコード 
		paramList.setValue(super.systemCode);
		// 料金コースコード
		paramList.setValue(this.bkPcrsCd);
		// 料金サービスコード(フル桁空白埋め)
		paramList.setValue(this.bkPrcSvcCd);
		// 提供方式契約番号
		paramList.setValue(this.bkTkHoshikiKeiNo);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][deleteMansPnltyPrc][paramList="	+ paramList.getList().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][deleteMansPnltyPrc]");
		
		// マンション違約金マスタ更新(物理削除)処理
		executeAC_M_MANS_PNLTY_AC_DELETE_001(paramList.getList().toArray());
		
	}
	
	/**
	 * マンション違約金を登録します。
	 * 
	 * @param inMap 入力電文
	 * @param templeteInfoMap マンション違約金雛形情報
	 * @param mansPnltyTanka マンション違約金単価
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void insertMansPnltyPrc(JBSbatCommonDBInterface templeteInfoMap, int inDex) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][insertMansPnltyPrc]");
		
		// 設定値
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.SYS_CD));						// システムコード
		paramList.setValue(this.bkPcrsCd);																	// 料金コースコード
		paramList.setValue(this.bkPrcSvcCd);																// 料金サービスコー
		paramList.setValue(this.bkTkHoshikiKeiNo);															// 提供方式契約番号 
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.PAY_KEI_SKBT_CD));				// 支払契約識別コード
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.TG_PRC_KMK_CD));					// 対象料金項目コード
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.SVC_DSL_RSN_SKBT_CD));			// サービス解約理由識別コード
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.LOWL_VALUE));					// 下限値 
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.UPPL_VALUE));					// 上限値 
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.PRC_KMK_CD));					// 料金項目コード 
		paramList.setValue(this.bkMansPnltyTstaYmdList.get(inDex));												// 世代登録年月日時分秒
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.RSV_APLY_YMD));					// 予約適用年月日
		paramList.setValue(this.bkMansPnltyTstaYmdList.get(inDex));											// マンション違約金適用開始年月日
		paramList.setValue(this.bkMansPnltyTendYmdList.get(inDex));											// マンション違約金適用終了年月日
		paramList.setValue(this.bkMansPnltyTankaList.get(inDex));											// マンション違約金単価
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.PNLTY_CALC_WAY_CD));				// 違約金計算方法コード 
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.ROUND_WAY_CD));					// 丸め方法コード
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.PRD_STAYMD_SKBT_CD));			// 期間開始日識別コード 
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.PRD_END_MON_DSL_CLCTWAY_CD));	// 期間終了月解約徴収方法コード
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.DSL_MON_COLLECT_WAY_CD));		// 解約月徴収方法コード
		paramList.setValue(templeteInfoMap.getString(JBSbatAC_M_MANS_PNLTY.PRD_END_MON_COLLECT_WAY_CD));	// 期間終了月徴収方法コード
		paramList.setValue(null);																			// 登録年月日時分秒
		paramList.setValue(null);																			// 登録オペレータアカウント
		paramList.setValue(null);																			// 更新年月日時分秒
		paramList.setValue(null);																			// 更新オペレータアカウント
		paramList.setValue(null);																			// 削除年月日時分秒
		paramList.setValue(null);																			// 削除オペレータアカウント
		paramList.setValue(JACStrConst.MK_FLG_YK);															// 無効フラグ
		paramList.setValue(null);																			// 登録年月日時分秒
		paramList.setValue(null);																			// 登録オペレータアカウント
		paramList.setValue(null);																			// 更新年月日時分秒
		paramList.setValue(null);																			// 更新オペレータアカウント
		paramList.setValue(null);																			// 削除年月日時分秒
		paramList.setValue(null);																			// 削除オペレータアカウント


		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][insertMansPnltyPrc][paramList="	+ paramList.getList().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][insertMansPnltyPrc]");
		
		// マンション定額料金更新実行
		executeAC_M_MANS_PNLTY_PKINSERT(paramList.getList().toArray());

	}

	/**
	 * 再計算対象提供方式契約番号情報(マンション違約金)設定処理
	 * @param  tkHoshikiKeiNo    提供方式契約番号
	 * @return outInfoMap 再計算対象提供方式契約番号情報(マンション違約金)
	 * @throws Exception  業務サービス内で発生した例外全般。
	 */
	private JBSbatServiceInterfaceMap outPutInfo(String tkHoshikiKeiNo) throws Exception
	{
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][outPutInfo]");
		
		JBSbatServiceInterfaceMap outInfoMap = new JBSbatServiceInterfaceMap();
		
		// 提供方式契約番号
		outInfoMap.set(JBSbatACIFM051.TK_HOSHIKI_KEI_NO,						tkHoshikiKeiNo);
		
		outInfoMap.setOutFlg(true);
		
		assert 	JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][outPutInfo]");
		
		return outInfoMap;

	}
	
	/**
	 * マンション違約金単価の算出を行います。
	 * 
	 * @param inMap  入力電文
	 * @param mapKey 雛形情報キー
	 * @param inKey  入力情報キー
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private BigDecimal calcMansPnltyPrc(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][calcMansPnltyPrc]");

		// 割引計算方法コード
		String pnltyCalcWayCd           = inMap.getString(JBSbatAC_M_WRIB_PRC.WRIB_CALC_WAY_CD);
		// マンション違約金単価
		BigDecimal mansPnltyTanka		= BigDecimal.ZERO;
		// 加入契約請求金額
		BigDecimal kanyuKeiSeikyAmnt    = BigDecimal.ZERO;
		// 割引値
		BigDecimal wribPrcValue         = BigDecimal.ZERO;

		// 割引計算方法コードが"1"または"2"(置換割引)の場合
		if(pnltyCalcWayCd.equals(JACStrConst.WRIB_CALC_WAY_CKAN_CKAN) || pnltyCalcWayCd.equals(JACStrConst.WRIB_CALC_WAY_CKAN_NEBIKI))
		{
			// 加入契約請求金額
			kanyuKeiSeikyAmnt = inMap.getBigDecimal(JBSbatKK_T_TK_HSK_KEI_PRC.KANYU_KEI_SEIKY_AMNT);
			
			// 割引値
			wribPrcValue = inMap.getBigDecimal(JBSbatAC_M_WRIB_PRC.WRIB_VALUE);
			
			// マンション違約金単価 = 加入契約請求金額 - 割引値
			mansPnltyTanka = kanyuKeiSeikyAmnt.subtract(wribPrcValue);
		}
		// 割引計算方法コードが"3"または"4"(金額割引)の場合
		else if(pnltyCalcWayCd.equals(JACStrConst.WRIB_CALC_WAY_AMNT_CKAN) || pnltyCalcWayCd.equals(JACStrConst.WRIB_CALC_WAY_AMNT_NEBIKI))
		{
			// 加入契約請求金額の絶対値取得
			kanyuKeiSeikyAmnt = inMap.getBigDecimal(JBSbatKK_T_TK_HSK_KEI_PRC.KANYU_KEI_SEIKY_AMNT);
			BigDecimal kanyuKeiSeikyAmntZ = kanyuKeiSeikyAmnt.abs();
			
			// 割引値の絶対値取得
			wribPrcValue = inMap.getBigDecimal(JBSbatAC_M_WRIB_PRC.WRIB_VALUE);
			BigDecimal wribPrcValueZ = wribPrcValue.abs();
			
			if(wribPrcValueZ.compareTo(kanyuKeiSeikyAmntZ) > 0)
			{
				// マンション違約金単価 = 加入契約請求金額
				mansPnltyTanka = kanyuKeiSeikyAmnt;
			}
			else
			{
				// マンション違約金単価 = 割引値 * -1
				mansPnltyTanka = wribPrcValue.multiply(minusOne);
			}
		}
		// 割引計算方法コードが"5"または"6"(率割引)の場合
		else if(pnltyCalcWayCd.equals(JACStrConst.WRIB_CALC_WAY_RT_CKAN) || pnltyCalcWayCd.equals(JACStrConst.WRIB_CALC_WAY_RT_NEBIKI))
		{
			// 加入契約請求金額
			kanyuKeiSeikyAmnt = inMap.getBigDecimal(JBSbatKK_T_TK_HSK_KEI_PRC.KANYU_KEI_SEIKY_AMNT);
			
			// 割引値
			wribPrcValue = inMap.getBigDecimal(JBSbatAC_M_WRIB_PRC.WRIB_VALUE);
			
			// マンション違約金単価 = 加入契約請求金額 * 割引値 / 100(小数点第一位切り上げ)
			mansPnltyTanka = kanyuKeiSeikyAmnt.multiply(wribPrcValue).divide(oneHundred, RoundingMode.UP);
		}

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][calcMansPnltyPrc]");
		
		return mansPnltyTanka;
	}

	
	/**
	 * 入力情報の退避を行います。
	 * 
	 * @param inMap  入力電文
	 * @param mansPnltyTanka マンション違約金単価
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void bkInMapInfo(JBSbatServiceInterfaceMap inMap, BigDecimal mansPnltyTanka) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][bkInMapInfo]");

		// 退避．マンション違約金単価リスト ← マンション違約金単価
		this.bkMansPnltyTankaList.add(mansPnltyTanka);
		
		// 退避．マンション違約金適用開始年月日リスト ← 入力．請求金額適用開始年月日
		this.bkMansPnltyTstaYmdList.add(inMap.getString(JBSbatKK_T_TK_HSK_KEI_PRC.SEIKY_AMNT_TSTAYMD));

		// 退避．マンション違約金適用終了年月日リスト ← 入力．請求金額適用終了年月日
		this.bkMansPnltyTendYmdList.add(inMap.getString(JBSbatKK_T_TK_HSK_KEI_PRC.SEIKY_AMNT_TENDYMD));

		// 退避項目カウント + 1
		this.bkCount++;

		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][bkInMapInfo]");
	}

	
	/**
	 * 文字を連結します
	 * @param string　文字
	 * @return strBuf　連結した文字列
	 */
	private String makeStr(String ...string)
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeStr]");
		
		StringBuffer strBuf = new StringBuffer();
		for(String str:string){
			strBuf.append(str);
		}
		assert strBuf != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeStr][strBuf = " + strBuf.toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeStr]");
		
		return strBuf.toString();
	}

}
