/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatCHReSeikyDchsTrn
*	ソースファイル名	：JBSbatCHReSeikyDchsTrn.java
*	作成者				：富士通　
*	作成日				：2011年11月26日
*＜機能概要＞
*　再発行操作記録抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/11/26   富士通		新規作成
*	v3.00		2012/10/04	FJ)岡田		【ST2-2012-0001733】請求金額のNULL考慮追加
*	v4.00.00	2013/01/14	FJ)早崎		【ST2-2012-0001733】暫定対応削除
*	v8.00.00	2014/01/20	FJ)北端		【ANK-1589-00-00】消費税に伴う料金施策（増税対応）
*	v8.00.01	2014/03/07	FJ)北端		【IT2-2014-0000150】印紙税対象の判定処理を「料金対応記録種別詳細コード」により制御
*	v51.00.00	2021/01/05	FJ)三原		【ANK-3838-00-00】窓口払い手数料の顧客負担方式導入
*********************************************************************/
package eo.business.service;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

import eo.business.common.JACbatDebugLogUtil;
import eo.business.common.JACbatParamUtil;
import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCHbatSeikyKaknoBusinessUtil;
import eo.business.util.file.JBSbatCHIFM125;
import eo.business.util.table.JBSbatCH_M_PRC_KMK_CS_CHGE;
import eo.business.util.table.JBSbatCH_T_PRC_TAIOKRK;
import eo.business.util.table.JBSbatCH_T_SEIKY;
import eo.business.util.table.JBSbatCH_T_SEIKY_UCWK;
import eo.business.util.table.JBSbatZM_M_WORK_PARAM_KNRI;
import eo.common.constant.JACStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.util.JCHStampDutyUtil;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatCHReSeikyDchsTrn extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(業務パラメータ管理)*/
	private static final String D_TBL_NAME_ZM_M_WORK_PARAM_KNRI = "ZM_M_WORK_PARAM_KNRI";

	/** SQL定義キー(CH_SELECT_002)*/
	private static final String ZM_M_WORK_PARAM_KNRI_CH_SELECT_002 = "CH_SELECT_002";

	/** テーブルアクセスクラス(業務パラメータ管理)*/
	private JBSbatSQLAccess db_ZM_M_WORK_PARAM_KNRI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** 印紙税対象額 */
	private BigDecimal inshiTaxTgAmnt = null;

	/** 収入印紙マスクラグ判定金額退避マップ */
	private Map<String, BigDecimal> inshiMaskAmntMap = new HashMap<String, BigDecimal> ();

	/** 振替日退避マップ */
	private Map<String, String> furikaeYMDMap = new HashMap<String, String> ();

	/** 業務パラメータ：リアル用のメーカーコード */
	private String makerCodeReal = null;
	
	/** 手数料無マップ */
	private HashMap<String, String> seikyCmsNonMap = null;
	
	/** 手数料有マップ */
	private HashMap<String, String> seikyCmsAriMap = null;
	
	/** 入力-取得方法 */
	private static final String INPARAM_STKU_WAY = "STKU_WAY";

	/** 「印紙不要」料金対応記録詳細分類コード定義 */
	private static HashSet<String> inshiFuyoSet = new HashSet<String>();
	static
	{
		inshiFuyoSet.add(JACStrConst.TKRK_SBTD_SKS_CRE_CMS_NON);	// 請求書再発行(クレジット)・手数料無
		inshiFuyoSet.add(JACStrConst.TKRK_SBTD_SKS_CRE_CMS_ARI);	// 請求書再発行(クレジット)・手数料有
		inshiFuyoSet.add(JACStrConst.TKRK_SBTD_SEIKYUW_CMS_NON);	// 請求内訳再印刷・手数料無
		inshiFuyoSet.add(JACStrConst.TKRK_SBTD_SEIKYUW_CMS_ARI);	// 請求内訳再印刷・手数料有
	}
	
	/** 「発行日基準」料金対応記録詳細分類コード定義 */
	private static HashSet<String> inshiIssuedDaySet = new HashSet<String>();
	static
	{
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_MDGC_CMS_NON);	// 請求書再発行(窓口通常)・手数料無
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_MDGC_CMS_ARI);	// 請求書再発行(窓口通常)・手数料有
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_REAL_CMS_NON);	// 請求書再発行(窓口リアル)・手数料無
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_REAL_CMS_ARI);	// 請求書再発行(窓口リアル)・手数料有
		// ANK-3838-00-00 ADD START
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_NOMAL_CMS_NON_CONV);		// 通常・手数料無・コンビニ専用
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_NOMAL_CMS_ARI_CONV);		// 通常・手数料有・コンビニ専用
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_REAL_CMS_NON_CONV);			// リアル・手数料無・コンビニ専用
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_REAL_CMS_ARI_CONV);			// リアル・手数料有・コンビニ専用
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_NOMAL_CMS_NON_CONV_PERF);	// 通常・手数料無・コンビニ＋ＰＦ
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_NOMAL_CMS_ARI_CONV_PERF);	// 通常・手数料有・コンビニ＋ＰＦ
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_REAL_CMS_NON_CONV_PERF);	// リアル・手数料無・コンビニ＋ＰＦ
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_REAL_CMS_ARI_CONV_PERF);	// リアル・手数料有・コンビニ＋ＰＦ
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_NOMAL_CMS_NON_COMP);		// 通常・手数料無・企業負担
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_NOMAL_CMS_ARI_COMP);		// 通常・手数料有・企業負担
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_REAL_CMS_NON_COMP);			// リアル・手数料無・企業負担
		inshiIssuedDaySet.add(JACStrConst.TKRK_SBTD_SKS_REAL_CMS_ARI_COMP);			// リアル・手数料有・企業負担
		// ANK-3838-00-00 ADD END
	}
	
	/** 「領収日基準」料金対応記録詳細分類コード定義 */
	private static HashSet<String> inshiReceiptDaySet = new HashSet<String>();
	static
	{
		inshiReceiptDaySet.add(JACStrConst.TKRK_SBTD_SKS_KOZA_CMS_NON);	// 請求書再発行(口振)・手数料無
		inshiReceiptDaySet.add(JACStrConst.TKRK_SBTD_SKS_KOZA_CMS_ARI);	// 請求書再発行(口振)・手数料有
		inshiReceiptDaySet.add(JACStrConst.TKRK_SBTD_RCPT_CMS_NON);		// 領収証再発行・手数料無
		inshiReceiptDaySet.add(JACStrConst.TKRK_SBTD_RCPT_CMS_ARI);		// 領収証再発行・手数料有
	}
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_ZM_M_WORK_PARAM_KNRI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_ZM_M_WORK_PARAM_KNRI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
		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(super.commonItem);

		// 業務パラメータ「リアル用のメーカーコード」
		makerCodeReal = paramUtil.getGyoumuParameter(JACStrConst.WKPARA_CH_MAKER_CODE_REAL);
		
		paramUtil.close();
		
		// 手数料判定無マップの作成
		this.seikyCmsNonMap = makeSeikyCmsMap(JACStrConst.WAKPARA_CH_SEIKY_CMS_NON);
		
		// 手数料判定有マップの作成
		this.seikyCmsAriMap = makeSeikyCmsMap(JACStrConst.WAKPARA_CH_SEIKY_CMS_ARI);
		
		assert makerCodeReal != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial][makerCodeReal = " + makerCodeReal + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][initial]");
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 手数料判定マップを作成します。
	 * 
	 * @param workPara 業務パラメータID
	 * @return seikyCmsMap 手数料判定マップ
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private HashMap<String, String> makeSeikyCmsMap(String workPara) throws Exception
	{
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][makeSeikyCmsMap]");
		
		JBSbatCommonDBInterface whereParam = new JBSbatCommonDBInterface();
		HashMap<String, String> seikyCmsMap = new HashMap<String, String>();
		
		// 業務パラメータID
		whereParam.setValue(workPara);
		// 適用開始年月日
		whereParam.setValue(super.opeDate);
		// 適用終了年月日
		whereParam.setValue(super.opeDate);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][makeSeikyCmsMap][whereParam = " + whereParam.getList().toString() + "]");

		// SQL実行
		executeZM_M_WORK_PARAM_KNRI_CH_SELECT_002(whereParam.getList().toArray());
		JBSbatCommonDBInterface selectMap = db_ZM_M_WORK_PARAM_KNRI.selectNext(); 
		
		// 取得結果判定
		if (selectMap != null)
		{
			while (selectMap != null)
			{
				// 手数料マップに格納する
				seikyCmsMap.put(selectMap.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE), selectMap.getString(JBSbatZM_M_WORK_PARAM_KNRI.WORK_PARAM_SETTE_VALUE));
				
				selectMap = db_ZM_M_WORK_PARAM_KNRI.selectNext();
			}
		}
		else
		{
			// ログ出力（【最重要】ＤＢ未存在エラー）
			String[] msgParam = new String[]{ JBSbatCH_M_PRC_KMK_CS_CHGE.TABLE_NAME, whereParam.getList().toString() };
			throw new JBSbatBusinessException(JPCBatchMessageConstant.ECHB0270CH, msgParam);
		}
		
		assert seikyCmsMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeSeikyCmsMap][seikyCmsMap = " + seikyCmsMap.toString() + "]") : true;
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][makeSeikyCmsMap]");
		
		return seikyCmsMap;
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute]");
		assert inMap != null ? JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][execute][inMap = " + inMap.getMap().toString() + "]") : true;
		
		// 再請求抽出データ作成
		JBSbatOutputItem outputItem = new JBSbatOutputItem();
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();
		
		{
			
			// 1.登録者ＩＤ
			outMap.setString(JBSbatCHIFM125.ADD_ID, inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_USER_ID));
			// 2.登録時刻(時分秒を設定)
			outMap.setString(JBSbatCHIFM125.ADD_DTM, inMap.getString(JBSbatCH_T_PRC_TAIOKRK.TAIO_DTM).substring(8, 14));
			// 3.請求契約番号
			outMap.setString(JBSbatCHIFM125.SEIKY_KEI_NO, inMap.getString(JBSbatCHIFM125.SEIKY_KEI_NO));
			// 4.送付先名（カナ）
			outMap.setString(JBSbatCHIFM125.SHS_KANA, inMap.getString(JBSbatCHIFM125.SHS_KANA));
			// 5.対象請求月
			outMap.setString(JBSbatCHIFM125.TG_SEIKY_YM, inMap.getString(JBSbatCHIFM125.TG_SEIKY_YM));
			// 6.請求種別コード
			outMap.setString(JBSbatCHIFM125.SEIKY_SBT_CD, inMap.getString(JBSbatCHIFM125.SEIKY_SBT_CD));
			// 7.支払期限日
			outMap.setString(JBSbatCHIFM125.PAY_KIGEN_YMD, inMap.getString(JBSbatCHIFM125.PAY_KIGEN_YMD));
			// 8.取扱期限日
			outMap.setString(JBSbatCHIFM125.TRAT_LIMIT_YMD, inMap.getString(JBSbatCH_T_SEIKY.EAN_TRAT_LIMIT_YMD));
			// 9.請求金額（NULLの場合は空文字に変換）
			String strSeikAmnt = convertAmnt(inMap.get(JBSbatCH_T_SEIKY_UCWK.AMNT));
			
			
			{
				if(JACStrConst.TKRK_SBTD_SEIKYUW_CMS_NON.equals(inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD))
					|| JACStrConst.TKRK_SBTD_SEIKYUW_CMS_ARI.equals(inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD)))
				{
					// 請求内訳再発行の場合
					outMap.setString(JBSbatCHIFM125.SEIKY_AMNT, JACStrConst.KARA_MOJI);
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][手数料「有」「無」の場合：PRC_TAIO_KIROK_SBT_DTL_CD=" + inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD) + "]");
				}
				else
				{
					// 上記以外
					outMap.setString(JBSbatCHIFM125.SEIKY_AMNT, strSeikAmnt);
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][手数料「有」「無」以外の場合：PRC_TAIO_KIROK_SBT_DTL_CD=" + inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD) + "]");
				}
			}
			
			// 10.支払方法の設定
			this.setPayWay(inMap, outMap);
			// 11.請求方法コード
			outMap.setString(JBSbatCHIFM125.SEIKY_WAY_CD, inMap.getString(JBSbatCHIFM125.SEIKY_WAY_CD));
			// 12.コンビニ収納代行会社
			outMap.setString(JBSbatCHIFM125.CVS_SHNODKCMP, inMap.getString(JBSbatCH_T_SEIKY.EAN_MAKER_CD));
			// 13.手数料有無フラグの設定
			{
				if(this.seikyCmsNonMap.containsValue(inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD)))
				{
					// 入力．料金対応記録種別詳細コード が 手数料「無」マップ に存在する場合
					outMap.setString(JBSbatCHIFM125.COMMISION_UM_FLG, JACStrConst.COMMISION_UM_FLG_OFF);
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][手数料「無」：PRC_TAIO_KIROK_SBT_DTL_CD=" + inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD) + "]");
				}
				else if(this.seikyCmsAriMap.containsValue(inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD)))
				{
					// 入力．料金対応記録種別詳細コード が 手数料「有」マップ に存在する場合
					outMap.setString(JBSbatCHIFM125.COMMISION_UM_FLG, JACStrConst.COMMISION_UM_FLG_ON);
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][手数料「有」：PRC_TAIO_KIROK_SBT_DTL_CD=" + inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD) + "]");
				}
			}
			
			// 14.印紙フラグの設定
			{
				// 「印紙不要」料金対応記録詳細分類コードに含まれる場合
				if(inshiFuyoSet.contains(inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD)))
				{
					outMap.setString(JBSbatCHIFM125.INSHI_FLG, JACStrConst.INSHI_FLG_OFF);
				}
				else
				{
					// 印紙対象税額取得の基準日
					String baseDate = null;
					
					// 「発行日基準」料金対応記録詳細分類コードに含まれる場合
					if(inshiIssuedDaySet.contains(inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD)))
					{
						baseDate = inMap.getString(JBSbatCH_T_SEIKY.SEIKYUS_HAKKO_YMD);	// 基準日←請求書発行日
					}
					// 「領収日基準」料金対応記録詳細分類コードに含まれる場合
					else if(inshiReceiptDaySet.contains(inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD)))
					{
						// 請求年月を基準にスケジュール定義から振替日取得
						baseDate = getFurikaeYMD(inMap.getString(JBSbatCHIFM125.TG_SEIKY_YM));	// 基準日←領収日（振替日）
					}

					// 印紙対象税額
					inshiTaxTgAmnt = getInshiMaskAmount(baseDate);
					
					if(!JACStrConst.KARA_MOJI.equals(strSeikAmnt))
					{
						if(new BigDecimal(strSeikAmnt).compareTo(inshiTaxTgAmnt) < 0)
						{
							// 請求金額 ＜ 印紙税対象額 の場合
							outMap.setString(JBSbatCHIFM125.INSHI_FLG, JACStrConst.INSHI_FLG_OFF);
							assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][「請求金額＜印紙税対象額」AMNT=" + strSeikAmnt + "]");
						}
						else
						{
							// 請求金額 ≧ 印紙税対象額 の場合
							outMap.setString(JBSbatCHIFM125.INSHI_FLG, JACStrConst.INSHI_FLG_ON);
							assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][「請求金額≧印紙税対象額」AMNT=" + strSeikAmnt + "]");
						}
					}
				}
			}

			// 15.料金対応記録大分類コード
			outMap.setString(JBSbatCHIFM125.PRC_TAIO_KIROK_SBT_CD, inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_CD));
			// 16.料金対応記録詳細分類コード
			outMap.setString(JBSbatCHIFM125.PRC_TAIO_KIROK_SBT_DTL_CD, inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD));
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][execute][outMap=" + outMap.getMap().toString() + "]");
		
		// 出力フラグを設定
		outMap.setOutFlg(true);
		
		// 出力共通電文に出力インターフェースを設定
		outputItem.addOutMapList(outMap);
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][execute]");
		
		return outputItem;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 支払方法を設定します。
	 * 
	 * @param inMap 入力電文
	 * @param outMap 出力電文
	 * @throws Exception 業務サービス内で発生した例外全般
	 */
	private void setPayWay(JBSbatServiceInterfaceMap inMap, JBSbatServiceInterfaceMap outMap) throws Exception
	{
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setPayWay]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][setPayWay][inMap=" + inMap.getMap().toString() + "]");
		
		// 取得方法 ＝ "1"（請求書再発行）の場合
		if(JACStrConst.STKU_WAY_SEIKY.equals(inMap.getString(INPARAM_STKU_WAY)))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setPayWay][取得方法が請求書再発行の場合=" + inMap.getString(INPARAM_STKU_WAY) + "]");
			
			// 請求方法コード ＝ "1"（窓口払い）の場合
			if(JACStrConst.SEIKY_MADOGUCHI.equals(inMap.getString(JBSbatCH_T_SEIKY.SEIKY_WAY_CD)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setPayWay][請求方法が窓口払いの場合=" + inMap.getString(JBSbatCH_T_SEIKY.SEIKY_WAY_CD) + "]");
				
				// ＥＡＮメーカーコード ＝ リアル用のメーカーコードの場合
				if(makerCodeReal.equals(inMap.getString(JBSbatCH_T_SEIKY.EAN_MAKER_CD)))
				{
					outMap.setString(JBSbatCHIFM125.PAY_WAY, JACStrConst.PAY_WAY_NM_001);
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setPayWay][リアル用のメーカーコードの場合=" + inMap.getString(JBSbatCH_T_SEIKY.EAN_MAKER_CD) + "]");
				}
				else
				{
					// 上記以外の場合
					outMap.setString(JBSbatCHIFM125.PAY_WAY, JACStrConst.PAY_WAY_NM_002);
					assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setPayWay][リアル用以外の場合=" + inMap.getString(JBSbatCH_T_SEIKY.EAN_MAKER_CD) + "]");
					
				}
			}
			// 請求方法コード ＝ "2"（預金口座振替）または "3"（郵便自動振込）の場合
			else if(JACStrConst.SEIKY_KHRI.equals(inMap.getString(JBSbatCH_T_SEIKY.SEIKY_WAY_CD))
						|| JACStrConst.SEIKY_YUFUIRI.equals(inMap.getString(JBSbatCH_T_SEIKY.SEIKY_WAY_CD)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setPayWay][請求方法が預金口座振替または郵便自動振込の場合=" + inMap.getString(JBSbatCH_T_SEIKY.SEIKY_WAY_CD) + "]");
				
				outMap.setString(JBSbatCHIFM125.PAY_WAY, JACStrConst.PAY_WAY_NM_003);
			}
			// 請求方法コード ＝ "4"（クレジット）の場合
			else if(JACStrConst.SEIKY_CREDIT.equals(inMap.getString(JBSbatCH_T_SEIKY.SEIKY_WAY_CD)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setPayWay][請求方法がクレジットの場合=" + inMap.getString(JBSbatCH_T_SEIKY.SEIKY_WAY_CD) + "]");
				
				outMap.setString(JBSbatCHIFM125.PAY_WAY, JACStrConst.PAY_WAY_NM_004);
			}
			
		}
		// 取得方法 ＝ "2"（口座領収証）の場合
		else if(JACStrConst.STKU_WAY_KOUZA.equals(inMap.getString(INPARAM_STKU_WAY)))
		{
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setPayWay][取得方法が口座領収証の場合=" + inMap.getString(INPARAM_STKU_WAY) + "]");
			
			// 入力．料金対応記録詳細分類コード ＝ "0209"（領収証再発行・手数料無） もしくは "0210"（領収証再発行・手数料有） の場合
			if(JACStrConst.TKRK_SBTD_RCPT_CMS_NON.equals(inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD))
					|| JACStrConst.TKRK_SBTD_RCPT_CMS_ARI.equals(inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setPayWay][取得方法 ＝ 2（口座領収証）=" + inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD) + "]");
				outMap.setString(JBSbatCHIFM125.PAY_WAY, JACStrConst.PAY_WAY_NM_005);
			}
			// 入力．料金対応記録詳細分類コード ＝ "0211"（請求内訳再発行・手数料無） もしくは "0212"（請求内訳再発行・手数料有） の場合
			else if(JACStrConst.TKRK_SBTD_SEIKYUW_CMS_NON.equals(inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD))
						|| JACStrConst.TKRK_SBTD_SEIKYUW_CMS_ARI.equals(inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD)))
			{
				assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][setPayWay][取得方法 ＝ 2（口座領収証）=" + inMap.getString(JBSbatCH_T_PRC_TAIOKRK.PRC_TAIO_KIROK_SBT_DTL_CD) + "]");
				outMap.setString(JBSbatCHIFM125.PAY_WAY, JACStrConst.PAY_WAY_NM_006);
			}
		}
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setPayWay][outMap=" + outMap.getMap().toString() + "]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][setPayWay]");
	}

	
	/**
	 * オブジェクトの値を文字列に変換して返却します。
	 * NULLの場合には空文字を返却します。
	 * 
	 * @param inMap DB入力情報
	 * @return 変換後の値
	 */
	private String convertAmnt(Object obAmnt)
	{
		if (obAmnt == null)
		{
			return JACStrConst.KARA_MOJI;
		}
		
		// 料金の値を文字列に変換して返却します。
		return String.valueOf(obAmnt);
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_ZM_M_WORK_PARAM_KNRI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][terminal]");
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][terminal]");
		
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * SQLKEY(CH_SELECT_002)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	業務パラメータID
	 *		 	業務パラメータ適用開始年月日
	 *		 	業務パラメータ適用終了年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeZM_M_WORK_PARAM_KNRI_CH_SELECT_002(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_ZM_M_WORK_PARAM_KNRI.selectBySqlDefine(paramList, ZM_M_WORK_PARAM_KNRI_CH_SELECT_002);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 印紙対象金額取得
	 * 
	 * @param baseDate 基準年月日（YYYYMMDD）
	 * @return BigDecimal 印紙対象金額
	 * @throws Exception 
	 */
	private BigDecimal getInshiMaskAmount(String baseDate) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getInshiMaskAmount]");
		
		String baseDateYM = baseDate.substring(0, 6);
		BigDecimal receiptAmnt = inshiMaskAmntMap.get(baseDateYM);
		if(receiptAmnt == null)
		{
			// 未取得の場合は取得してMapに退避する
			receiptAmnt = new BigDecimal(JCHStampDutyUtil.getTaxableAmount(JACStrConst.CALLER_BATCH, commonItem.getConnection(), baseDate));
			inshiMaskAmntMap.put(baseDateYM, receiptAmnt);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getInshiMaskAmount]" + "印紙対象金額退避 " + receiptAmnt);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getInshiMaskAmount]");
		return receiptAmnt;
	}

	/**
	 * 振替日取得
	 * 
	 * @param seikyYM 請求年月（YYYYMM）
	 * @return String 振替日（YYYYMMDD）
	 * @throws Exception 
	 */
	private String getFurikaeYMD(String seikyYM) throws Exception
	{
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[S][getFurikaeYMD]");
		
		String furikaeYMD = furikaeYMDMap.get(seikyYM);
		if(furikaeYMD == null)
		{
			// 請求年月に対する振替年月日を取得
			JCHbatSeikyKaknoBusinessUtil businessUtil = new JCHbatSeikyKaknoBusinessUtil(this.commonItem);
			furikaeYMD = businessUtil.getEventYmd(seikyYM, JACStrConst.EVENT_CD_KOUZA_HURIKAE_YMD);
			businessUtil.close();

			// 退避
			furikaeYMDMap.put(seikyYM, furikaeYMD);
			assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[L][getFurikaeYMD]" + "振替日退避 " + furikaeYMD);
		}
		
		assert JACbatDebugLogUtil.printDebugLog(super.logPrint, "[E][getFurikaeYMD]");
		return furikaeYMD;
	}
}
