/*********************************************************************
 *	All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名		：eo顧客基幹システム
 *	モジュール名	：JCHejbAC0171SecProc
 *	ソースファイル名：JCHejbAC0171SecProc.java
 *	作成者			：富士通
 *	日付			：2011年08月06日
 *＜機能概要＞
 *	一時金に対する副次処理を行う部品
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2011/08/06	富士通		新規作成
 *	v5.00.00    2013/08/27  FJ) 林     【IT1-2013-0001612】バッチ再調整用。一時金登録日時/更新日時に処理単位で同一値を設定するよう変更。
 *	v5.00.01    2013/09/17  FJ) 林     【随時-13-5005】料金一括変更用。機能コード4でも一時金登録番号が発番されるよう修正。
 *	v8.00.00    2013/12/16  FJ)江森    【ANK-1584-00-00】対応
 *	v9.00.00    2014/06/02  FJ)江森    【OM-2013-0005201】随時請求で一時金を登録するように修正。
 *	v25.00.00   2016/06/01  FJ)岡田    【OM-2016-0000751】一時金設定 (請求種別：随時入金)
 *  v44.00.00   2019/06/04  FJ)大崎    【ANK-3514-00-00】マンションオーナーに対する料金計算日前の料金調整不具合対応（OM-2017-0000033）
 *	v63.00.00	2023/01/04	FJ)吉田    【ANK-4305-00-00】前受け金充当の会計改善対応
 *	v67.00.00	2023/07/04	FJ)吉田    【IT1-2023-0000003】前受金充当増額範囲内で減額時会計不正
 **********************************************************************/

package eo.ejb.common.db;

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANCreateException;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANFinderException;
import com.fujitsu.futurity.model.base.CAANJDBCUtil;
import com.fujitsu.futurity.model.base.CAANMsg;
import com.fujitsu.futurity.model.base.CAANRuntimeException;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;
import com.fujitsu.futurity.model.ejb.common.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.constant.JACStrConst;
import eo.common.util.JCHStringUtil;
import eo.common.util.JCRUtilCommon;
import eo.ejb.cbm.cbmmsg.AC0171CBMMsg;
import eo.ejb.cbm.entity.AC0171ETMsg;
import eo.ejb.cbm.entity.CH0101ETMsg;
import eo.ejb.cbm.entity.CH0401ETMsg;
import eo.ejb.cbm.entity.KK0081ETMsg;
import eo.ejb.cbs.cbsmsg.EAC0171C010CBSMsg;
import eo.ejb.common.JACModelCommon;
import eo.ejb.common.JCCModelCommon;
import eo.ejb.common.JCHModelCommon;
import eo.ejb.common.JPCModelCommon;
import eo.ejb.common.JSYejbSysDate;
import eo.ejb.common.edit.JACejbAC0171NumberParts;

/**
 * <p>
 * 一時金に対する副次処理を行う部品です。
 * </p>
 * 
 * @author 富士通
 */
public class JCHejbAC0171SecProc extends JCHejbAC0171DBABase {

	private static final String OPERATORID = "operatorID";
	
	private static final String TEMPLATEID = "templateID";
	
	private static final String AMNT = "ajst_af_amnt";
	
	private static final String ICJKN_DTM = "icjkn_dtm";
	
	/** 一時金登録用訂正区分 */
	private static final String TEISEI_KBN = "teisei_kbn";
	
	/** 一時金登録用訂正区分（調整） */
	private static final String ADJ = "adj";
	
	/** 一時金登録用訂正区分（変更） */
	private static final String CHG = "chg";
	
	/**
	 * コンストラクタです。
	 */
	public JCHejbAC0171SecProc() {
		super();
	}

	/**
	 * <p>
	 * 料金調整一時金登録副次処理部品
	 * 料金調整登録時に一時金の登録を行う。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param iDMsgList 料金調整登録用一覧内部データ
	 * @param caIcjknExecute 料金調整登録用一覧内部データ
	 */
	public void PrcAdjIcjknIns(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg caIcjknExecute)
	{
		
		try {
			// 一時金登録番号を算出
			String sIcjknAddSeq = JACejbAC0171NumberParts.getIcjkinAddSeqNo();
			
			// テンプレートID
			String tempID = inCBSMsg.getString(TEMPLATEID);
			
			// 登録する値を設定
			CAANMsg inETMsgIcjkn = new CAANMsg(AC0171ETMsg.class.getName());
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_ADD_SEQ, sIcjknAddSeq);
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_UPD_SEQ, "01");
			inETMsgIcjkn.set(AC0171ETMsg.SEIKY_KEI_NO, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_KEI_NO));
			inETMsgIcjkn.set(AC0171ETMsg.SEIKY_YM, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_YM));
			inETMsgIcjkn.set(AC0171ETMsg.TONYU_DIV, JACStrConst.TONYU_DIV_SEIKY_MON);
			
			// 随時請求から一時金が登録される時の考慮で、nullの時、半角空白埋めする。
			String icjknSvcKeiNo = "          ";
			if (!caIcjknExecute.isNull(JACStrConst.KEY_PRC_SHUK_SVC_KEI_NO))
			{
				icjknSvcKeiNo = caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_SVC_KEI_NO);
			}
			inETMsgIcjkn.set(AC0171ETMsg.SVC_KEI_NO, icjknSvcKeiNo);
			
			// 調整区分によって一時金を設定する。
			String sAjstDiv = caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_AJST_DIV);
			
			if(JACStrConst.PRC_ADJ_DIV_ADD.equals(sAjstDiv))
			{
				// 追加の場合
				// 料金グループ、料金コース、料金サービス、料金項目コードを設定する。
				// 随時請求から一時金が登録される時の考慮で、nullの時、半角空白埋めする。

				// 料金グループコード
				String icjknPrcGrpCd = "  ";
				if (!caIcjknExecute.isNull(JACStrConst.KEY_PRC_SHUK_PRC_GRP_CD))
				{
					icjknPrcGrpCd = caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_GRP_CD);
				}
				inETMsgIcjkn.set(AC0171ETMsg.PRC_GRP_CD, icjknPrcGrpCd);

				// 料金コースコード
				String icjknPcrsCd = "   ";
				if (!caIcjknExecute.isNull(JACStrConst.KEY_PRC_SHUK_PCRS_CD))
				{
					icjknPcrsCd = caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PCRS_CD);
				}
				inETMsgIcjkn.set(AC0171ETMsg.PCRS_CD, icjknPcrsCd);

				// 料金サービスコード
				String icjknPrcSvcCd = "            ";
				if (!caIcjknExecute.isNull(JACStrConst.KEY_PRC_SHUK_PRC_SVC_CD))
				{
					icjknPrcSvcCd = caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_SVC_CD);
				}
				inETMsgIcjkn.set(AC0171ETMsg.PRC_SVC_CD, icjknPrcSvcCd);

				// 料金項目コード
				String icjknPrcKmkCd = "           ";
				if (!caIcjknExecute.isNull(JACStrConst.KEY_PRC_SHUK_PRC_KMK_CD))
				{
					icjknPrcKmkCd = caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_KMK_CD);

					if ("ECH0051D011".equals(tempID))
					{
						// 随時請求の場合（料金調整、料金変更の場合はすでに設定されている）
						// 料金項目コードがnullでない場合、料金項目コード下2桁を設定
						if (inCBSMsg.getString(TEISEI_KBN).equals(ADJ))
						{
							icjknPrcKmkCd = icjknPrcKmkCd.substring(0, 9) + JACStrConst.PRC_KMK_CD_ADJ_SAGAKU;
						}
						else if (inCBSMsg.getString(TEISEI_KBN).equals(CHG))
						{
							icjknPrcKmkCd = icjknPrcKmkCd.substring(0, 9) + JACStrConst.PRC_KMK_CD_CHG_SAGAKU;
						}
					}
				}
				inETMsgIcjkn.set(AC0171ETMsg.PRC_KMK_CD, icjknPrcKmkCd);
				
				// 対象料金グループ、対象料金コース、対象料金サービス、対象料金項目コードにALLブランクを設定する。
				inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_GRP_CD, "  ");
				inETMsgIcjkn.set(AC0171ETMsg.TRGT_PCRS_CD, "   ");
				inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_SVC_CD, "            ");
				inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_KMK_CD, "           ");
			}
			else if(JACStrConst.PRC_ADJ_DIV_CHG.equals(sAjstDiv))
			{
				// 変更の場合、すべて設定する。
				inETMsgIcjkn.set(AC0171ETMsg.PRC_GRP_CD, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_GRP_CD));
				inETMsgIcjkn.set(AC0171ETMsg.PCRS_CD, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PCRS_CD));
				inETMsgIcjkn.set(AC0171ETMsg.PRC_SVC_CD, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_SVC_CD));
				inETMsgIcjkn.set(AC0171ETMsg.PRC_KMK_CD, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_KMK_CD));
				inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_GRP_CD, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_GRP_CD));
				inETMsgIcjkn.set(AC0171ETMsg.TRGT_PCRS_CD, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PCRS_CD));
				inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_SVC_CD, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_SVC_CD));
				inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_KMK_CD, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_KMK_CD));
			}
			else if(JACStrConst.PRC_ADJ_DIV_DEL.equals(sAjstDiv))
			{
				// 削除の場合
				
				// 料金グループ、料金コース、料金サービス、料金項目コードにALLブランクを設定する。
				inETMsgIcjkn.set(AC0171ETMsg.PRC_GRP_CD, "  ");
				inETMsgIcjkn.set(AC0171ETMsg.PCRS_CD, "   ");
				inETMsgIcjkn.set(AC0171ETMsg.PRC_SVC_CD, "            ");
				inETMsgIcjkn.set(AC0171ETMsg.PRC_KMK_CD, "           ");
				
				// 対象料金グループ、対象料金コース、対象料金サービス、対象料金項目コードを設定する。
				inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_GRP_CD, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_GRP_CD));
				inETMsgIcjkn.set(AC0171ETMsg.TRGT_PCRS_CD, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PCRS_CD));
				inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_SVC_CD, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_SVC_CD));
				inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_KMK_CD, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_KMK_CD));
			}
			
			if("ECH0101D011".equals(tempID))
			{
				inETMsgIcjkn.set(AC0171ETMsg.ICJKN_SBT_CD, JACStrConst.ICJKN_SBT_CD_MANUAL_PRC_ADJ);
				inETMsgIcjkn.set(AC0171ETMsg.ICJKN_PRC, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_SAGAKU));
				inETMsgIcjkn.set(AC0171ETMsg.TRKM_ZUMI_AMNT, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_SAGAKU));
//v44.00.00 ANK-3514-00-00 ADD START
				// 調整区分が「変更」、料金グループコードが「マンションオーナー」、サービス契約番号が「未入居明細用サービス契約番号」の場合
				if(JACStrConst.PRC_ADJ_DIV_CHG.equals(sAjstDiv) && JACStrConst.MANSOWN_PRC_GRP_CD.equals(caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_PRC_GRP_CD))
						&& JACStrConst.MINYUKYO_SVCKEINO.equals(icjknSvcKeiNo))
				{
					String mansId = "";
					if(!JCRUtilCommon.isNull(caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_SEIRI_NO)))
					{
						// マンションIDに整理番号から空白除去した値を設定する。
						mansId = caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_SEIRI_NO).trim();
					}
					inETMsgIcjkn.set(AC0171ETMsg.MANSION_ID, mansId);
				}
//v44.00.00 ANK-3514-00-00 ADD END
			}
			else if ("ECH0101D012".equals(tempID))
			{
				inETMsgIcjkn.set(AC0171ETMsg.ICJKN_SBT_CD, JACStrConst.ICJKN_SBT_CD_MANUAL_PRC_CHG);
				inETMsgIcjkn.set(AC0171ETMsg.ICJKN_PRC, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_SAGAKU));
				inETMsgIcjkn.set(AC0171ETMsg.TRKM_ZUMI_AMNT, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_SAGAKU));
			}
			else if ("ECH0051D011".equals(tempID))
			{
				// 随時請求の場合
				if (inCBSMsg.getString(TEISEI_KBN).equals(ADJ))
				{
					// 調整として登録する場合
					inETMsgIcjkn.set(AC0171ETMsg.ICJKN_SBT_CD, JACStrConst.ICJKN_SBT_CD_MANUAL_PRC_ADJ);
				}
				else if (inCBSMsg.getString(TEISEI_KBN).equals(CHG))
				{
					// 変更として登録する場合
					inETMsgIcjkn.set(AC0171ETMsg.ICJKN_SBT_CD, JACStrConst.ICJKN_SBT_CD_MANUAL_PRC_CHG);
				}
				inETMsgIcjkn.set(AC0171ETMsg.ICJKN_PRC, caIcjknExecute.getString(AMNT));
				inETMsgIcjkn.set(AC0171ETMsg.TRKM_ZUMI_AMNT, caIcjknExecute.getString(AMNT));
			}
			
			inETMsgIcjkn.set(AC0171ETMsg.SEIKY_YM_SNST_STDARDYMD, JPCModelCommon.getOpeDate(inCBSMsg, inContext, null));
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_TRKM_STAT, JACStrConst.ICJKN_TRKM_STAT_ZUMI);
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_TRKM_RSLT_CD, "2");
			inETMsgIcjkn.set(AC0171ETMsg.TRKM_ZAN_AMNT, "0");
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_ADD_DTM, inCBSMsg.getString(ICJKN_DTM));
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_ADD_USER_ID, inCBSMsg.getObject(OPERATORID));
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_UPD_DTM, inCBSMsg.getString(ICJKN_DTM));
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_UPD_USER_ID, inCBSMsg.getObject(OPERATORID));
			inETMsgIcjkn.set(AC0171ETMsg.ADD_DTM, JSYejbSysDate.getDate("YYYYMMDDHHMMSSSSS"));
			inETMsgIcjkn.set(AC0171ETMsg.ADD_OPEACNT, inCBSMsg.getObject(OPERATORID));
			inETMsgIcjkn.set(AC0171ETMsg.UPD_DTM, JSYejbSysDate.getDate("YYYYMMDDHHMMSSSSS"));
			inETMsgIcjkn.set(AC0171ETMsg.UPD_OPEACNT, inCBSMsg.getObject(OPERATORID));
			inETMsgIcjkn.set(AC0171ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);
			
			if (!JACStrConst.SVC_DTL_SKBT_NO_SP.equals(caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_SVC_DTL_SKBT_NO)) 
					&& !JCRUtilCommon.isNull(caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_SVC_DTL_SKBT_NO)))
			{
				inETMsgIcjkn.set(AC0171ETMsg.SVC_DTL_SKBT_NO, caIcjknExecute.getString(JACStrConst.KEY_PRC_SHUK_SVC_DTL_SKBT_NO));
			}
			
			super.create(inETMsgIcjkn);
		} 
		catch (CAANException e) 
		{
			
			throw new CAANRuntimeException(e);
			
		}
		catch (Exception e)
		{
			
			throw new CAANRuntimeException(e);
		}
	}
	
	/**
	 * <p>
	 * 一時金削除時一時金登録処理
	 * 一時金削除時にカレントデータを引き継ぎ削除レコードを登録する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @throws CAANFinderException 
	 */
	public void ins_EAC0171C010(CAANMsg inCBSMsg, AgentDispatchContext inContext) throws CAANCreateException, CAANFinderException{
		
		/** カレントデータを取得する */
		
		// 検索条件を設定
		CAANMsg msg = new CAANMsg(AC0171ETMsg.class.getName());
		msg.set(AC0171ETMsg.ICJKN_ADD_SEQ, inCBSMsg.getString(EAC0171C010CBSMsg.ICJKN_ADD_SEQ));
		msg.set(AC0171ETMsg.ICJKN_UPD_SEQ, inCBSMsg.getString(EAC0171C010CBSMsg.ICJKN_UPD_SEQ));
		
		// 検索処理の実行
		CAANMsg ret = new JACejbAC0171DBABase().findByCurrent(msg);
		
		if (ret == null)
		{
			return;
		}
		
		/** 一時金更新枝番の採番 */
		String sIcjknUpdSeq = ret.getString(AC0171ETMsg.ICJKN_UPD_SEQ);
		
		sIcjknUpdSeq = String.valueOf(Integer.parseInt(sIcjknUpdSeq) + 1);
		
		if(sIcjknUpdSeq.length() == 1){
			sIcjknUpdSeq = "0" + sIcjknUpdSeq;
		}
		
		/** 引き継ぐ項目の取得 */
		String sIcjknAddDTM = ret.getString(AC0171ETMsg.ICJKN_ADD_DTM);
		String sIcjknAddUseID = ret.getString(AC0171ETMsg.ICJKN_ADD_USER_ID);
		
		// 運用日の取得
		String sOpeDate = (String) JACModelCommon.getOpeDateTimeStamp(inCBSMsg, inContext);
		
		/** 一時金の更新を行う */
		CAANMsg inAC0171ETMsg = new CAANMsg(AC0171ETMsg.class.getName());
		inAC0171ETMsg.set(AC0171ETMsg.ICJKN_ADD_SEQ, ret.getString(AC0171ETMsg.ICJKN_ADD_SEQ));
		inAC0171ETMsg.set(AC0171ETMsg.ICJKN_UPD_SEQ, sIcjknUpdSeq);
		inAC0171ETMsg.set(AC0171ETMsg.SEIKY_KEI_NO, ret.getString(AC0171ETMsg.SEIKY_KEI_NO));
		inAC0171ETMsg.set(AC0171ETMsg.SEIKY_YM, ret.getString(AC0171ETMsg.SEIKY_YM));
		inAC0171ETMsg.set(AC0171ETMsg.TONYU_DIV, ret.getString(AC0171ETMsg.TONYU_DIV));
		inAC0171ETMsg.set(AC0171ETMsg.SVC_KEI_NO, ret.getString(AC0171ETMsg.SVC_KEI_NO));
		inAC0171ETMsg.set(AC0171ETMsg.PRC_GRP_CD, ret.getString(AC0171ETMsg.PRC_GRP_CD));
		inAC0171ETMsg.set(AC0171ETMsg.PCRS_CD, ret.getString(AC0171ETMsg.PCRS_CD));
		inAC0171ETMsg.set(AC0171ETMsg.PRC_SVC_CD, ret.getString(AC0171ETMsg.PRC_SVC_CD));
		inAC0171ETMsg.set(AC0171ETMsg.PRC_KMK_CD, ret.getString(AC0171ETMsg.PRC_KMK_CD));
		inAC0171ETMsg.set(AC0171ETMsg.TRGT_PRC_GRP_CD, ret.getString(AC0171ETMsg.TRGT_PRC_GRP_CD));
		inAC0171ETMsg.set(AC0171ETMsg.TRGT_PCRS_CD, ret.getString(AC0171ETMsg.TRGT_PCRS_CD));
		inAC0171ETMsg.set(AC0171ETMsg.TRGT_PRC_SVC_CD, ret.getString(AC0171ETMsg.TRGT_PRC_SVC_CD));
		inAC0171ETMsg.set(AC0171ETMsg.TRGT_PRC_KMK_CD, ret.getString(AC0171ETMsg.TRGT_PRC_KMK_CD));
		inAC0171ETMsg.set(AC0171ETMsg.SEIKY_YM_SNST_STDARDYMD, ret.getString(AC0171ETMsg.SEIKY_YM_SNST_STDARDYMD));
		inAC0171ETMsg.set(AC0171ETMsg.ICJKN_PRC, ret.getString(AC0171ETMsg.ICJKN_PRC));
		inAC0171ETMsg.set(AC0171ETMsg.ICJKN_SBT_CD, ret.getString(AC0171ETMsg.ICJKN_SBT_CD));
		inAC0171ETMsg.set(AC0171ETMsg.ICJKN_TRKM_STAT, JACStrConst.ICJKN_TRKM_STAT_DEL);
		inAC0171ETMsg.set(AC0171ETMsg.ICJKN_TRKM_RSLT_CD, ret.getString(AC0171ETMsg.ICJKN_TRKM_RSLT_CD));
		inAC0171ETMsg.set(AC0171ETMsg.TRKM_ZUMI_AMNT, ret.getString(AC0171ETMsg.TRKM_ZUMI_AMNT));
		inAC0171ETMsg.set(AC0171ETMsg.TRKM_ZAN_AMNT, ret.getString(AC0171ETMsg.TRKM_ZAN_AMNT));
		inAC0171ETMsg.set(AC0171ETMsg.MANSION_ID, ret.getString(AC0171ETMsg.MANSION_ID));
		inAC0171ETMsg.set(AC0171ETMsg.TK_HOSHIKI_KEI_NO, ret.getString(AC0171ETMsg.TK_HOSHIKI_KEI_NO));
		inAC0171ETMsg.set(AC0171ETMsg.KANYU_KEI_PAY_HOSHIKI_CD, ret.getString(AC0171ETMsg.KANYU_KEI_PAY_HOSHIKI_CD));
		inAC0171ETMsg.set(AC0171ETMsg.SVC_DTL_SKBT_NO, ret.getString(AC0171ETMsg.SVC_DTL_SKBT_NO));
		inAC0171ETMsg.set(AC0171ETMsg.ICJKN_ADD_DTM, sIcjknAddDTM);
		inAC0171ETMsg.set(AC0171ETMsg.ICJKN_ADD_USER_ID, sIcjknAddUseID);
		inAC0171ETMsg.set(AC0171ETMsg.ICJKN_UPD_DTM, sOpeDate);
		inAC0171ETMsg.set(AC0171ETMsg.ICJKN_UPD_USER_ID, inCBSMsg.getObject(EAC0171C010CBSMsg.OPERATORID));
		inAC0171ETMsg.set(AC0171ETMsg.ADD_DTM, JCCModelCommon.getSysDateTimeStamp());
		inAC0171ETMsg.set(AC0171ETMsg.ADD_OPEACNT, inCBSMsg.getObject(EAC0171C010CBSMsg.OPERATORID));
		inAC0171ETMsg.set(AC0171ETMsg.UPD_DTM, JCCModelCommon.getSysDateTimeStamp());
		inAC0171ETMsg.set(AC0171ETMsg.UPD_OPEACNT, inCBSMsg.getObject(EAC0171C010CBSMsg.OPERATORID));
		inAC0171ETMsg.set(AC0171ETMsg.DEL_DTM, JCCModelCommon.getSysDateTimeStamp());
		inAC0171ETMsg.set(AC0171ETMsg.DEL_OPEACNT, inCBSMsg.getObject(EAC0171C010CBSMsg.OPERATORID));
		inAC0171ETMsg.set(AC0171ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);
		
		super.create(inAC0171ETMsg);
		
		// アウト項目の設定
		inCBSMsg.set(EAC0171C010CBSMsg.ICJKN_ADD_DTM, sOpeDate);
		inCBSMsg.set(EAC0171C010CBSMsg.ICJKN_UPD_SEQ, sIcjknUpdSeq);
		inCBSMsg.set(EAC0171C010CBSMsg.ICJKN_ADD_USER_ID, inCBSMsg.getObject(EAC0171C010CBSMsg.OPERATORID));
		inCBSMsg.set(EAC0171C010CBSMsg.ICJKN_UPD_DTM, sOpeDate);
		inCBSMsg.set(EAC0171C010CBSMsg.ICJKN_UPD_USER_ID, inCBSMsg.getObject(EAC0171C010CBSMsg.OPERATORID));
		inCBSMsg.set(EAC0171C010CBSMsg.ADD_DTM, JCCModelCommon.getSysDateTimeStamp());
		inCBSMsg.set(EAC0171C010CBSMsg.ADD_OPEACNT, inCBSMsg.getObject(EAC0171C010CBSMsg.OPERATORID));
		inCBSMsg.set(EAC0171C010CBSMsg.UPD_DTM, JCCModelCommon.getSysDateTimeStamp());
		inCBSMsg.set(EAC0171C010CBSMsg.UPD_OPEACNT, inCBSMsg.getObject(EAC0171C010CBSMsg.OPERATORID));
		
		/** 一時金削除データの更新 */
		// 一時金取込ステータスを"9"(削除)に更新
		ret.set(AC0171ETMsg.ICJKN_TRKM_STAT, JACStrConst.ICJKN_TRKM_STAT_DEL);
		ret.set(AC0171ETMsg.ICJKN_UPD_DTM, sOpeDate);
		ret.set(AC0171ETMsg.ICJKN_UPD_USER_ID, inCBSMsg.getObject(EAC0171C010CBSMsg.OPERATORID));
		ret.set(AC0171ETMsg.UPD_DTM, JCCModelCommon.getSysDateTimeStamp());
		ret.set(AC0171ETMsg.UPD_OPEACNT, inCBSMsg.getObject(EAC0171C010CBSMsg.OPERATORID));
		ret.set(AC0171ETMsg.DEL_DTM, JCCModelCommon.getSysDateTimeStamp());
		ret.set(AC0171ETMsg.DEL_OPEACNT, inCBSMsg.getObject(EAC0171C010CBSMsg.OPERATORID));
		
		super.update(ret);
		
	}
	
	/**
	 * <p>
	 * 一時金登録用マンション情報取得処理
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param svcKeiNo サービス契約番号
	 */
	public HashMap<String, String> getMansionInfo(CAANMsg inCBSMsg, AgentDispatchContext inContext, String svcKeiNo){
		
		// 返却マップ
		HashMap<String, String> retMap = new HashMap<String, String>();
		
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		
		/******************** 
		 * SQL文の作成
		 ********************/
		
		try
		{
			//コネクション取得
			con1 = JSYejbConnection.getConnection(KK0081ETMsg.getTableName());
			
			// SQL文_基本部1
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT ")
					.append(" 	KK0081.SVC_KEI_NO, ")
					.append(" 	KK0081.GENE_ADD_DTM, ")
					.append(" 	KK0891.TK_HOSHIKI_KEI_NO, ")
					.append(" 	KK0891.KANYU_KEI_PAY_HOSHIKI_CD, ")
					.append(" 	KK0891.MANSION_ID ")
					.append(" FROM ")
					.append(" 	KK_T_SVC_KEI KK0081 ")
					.append(" 	INNER JOIN ")
					.append(" 	( ")
					.append(" 		SELECT ")
					.append(" 			 KK2281.SVC_KEI_NO ")
					.append(" 		FROM ")
					.append(" 			KK_T_SVC_KEI_DUMMY KK2281 ")
					.append(" 		WHERE ")
					.append(" 			KK2281.GENE_ADD_DTM = ")
					.append(" 			( ")
					.append(" 				SELECT ")
					.append(" 					MAX(KK2281_GENE.GENE_ADD_DTM) AS KK2281_MAX ")
					.append(" 				FROM ")
					.append(" 					KK_T_SVC_KEI_DUMMY KK2281_GENE ")
					.append(" 				WHERE ")
					.append(" 					KK2281_GENE.SVC_KEI_NO = KK2281.SVC_KEI_NO AND ")
					.append(" 					KK2281_GENE.RSV_APLY_CD = '2' AND ")
					.append(" 					KK2281_GENE.MK_FLG = '0' ")
					.append(" 			) ")
					.append(" 	) KK2281 ")
					.append("     ON KK2281.SVC_KEI_NO = KK0081.SVC_KEI_NO ")
					.append(" 	INNER JOIN ")
					.append(" 	( ")
					.append(" 		SELECT ")
					.append(" 			KK0891_SUB.TK_HOSHIKI_KEI_NO, ")
					.append(" 			KK0891_SUB.KANYU_KEI_PAY_HOSHIKI_CD, ")
					.append(" 			KK0891_SUB.KAISEN_USE_KEI_NO, ")
					.append(" 			KK0881.MANSION_ID ")
					.append(" 		FROM ")
					.append(" 			KK_T_TK_HOSHIKI_KEI KK0891_SUB ")
					.append(" 			INNER JOIN ")
					.append(" 			( ")
					.append(" 				SELECT ")
					.append(" 					KK0881_SUB.KAISEN_USE_KEI_NO, ")
					.append(" 					KK0881_SUB.MANSION_ID ")
					.append(" 				FROM ")
					.append(" 					KK_T_KAISEN_USE_KEI KK0881_SUB ")
					.append(" 				WHERE ")
					.append(" 					KK0881_SUB.MK_FLG = '0' ")
					.append(" 			) KK0881 ")
					.append(" 			ON KK0881.KAISEN_USE_KEI_NO = KK0891_SUB.KAISEN_USE_KEI_NO ")
					.append(" 		WHERE ")
					.append(" 			KK0891_SUB.MK_FLG = '0' ")
					.append(" 	) KK0891 ")
					.append(" 	ON KK0891.TK_HOSHIKI_KEI_NO= KK0081.TK_HOSHIKI_KEI_NO ")
					.append(" WHERE ")
					.append(" 	KK0081.SVC_KEI_NO = ? AND ")
					.append(" 	KK0081.RSV_APLY_YMD || KK0081.GENE_ADD_DTM = ")
					.append(" 	( ")
					.append(" 		SELECT ")
					.append(" 			MAX(KK0081_GENE.RSV_APLY_YMD || KK0081_GENE.GENE_ADD_DTM) ")
					.append(" 		FROM ")
					.append(" 			KK_T_SVC_KEI KK0081_GENE ")
					.append(" 		WHERE ")
					.append(" 			KK0081_GENE.SVC_KEI_NO = KK0081.SVC_KEI_NO AND ")
					.append(" 			KK0081_GENE.RSV_APLY_YMD <= ? AND ")
					.append(" 			KK0081_GENE.RSV_APLY_CD  =  '2' AND ")
					.append(" 			KK0081_GENE.MK_FLG       =  '0' ")
					.append(" 	) ");

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, JACejbAC0171SecProc.class, sql_Buff);
			
			int i = 1;
			// パラメータの設定(サービス契約番号を指定)
			CAANJDBCUtil.setParam(pstmt, i++, svcKeiNo);
			// パラメータの設定(運用日付を指定)
			CAANJDBCUtil.setParam(pstmt, i++, JPCModelCommon.getOpeDate(inCBSMsg, inContext, null));
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			// 戻り値の判定
			if (null != rsltQuery && rsltQuery.next()) 
			{
				retMap.put("mansion_id", rsltQuery.getString("mansion_id"));
				retMap.put("tk_hoshiki_kei_no", rsltQuery.getString("tk_hoshiki_kei_no"));
				retMap.put("kanyu_kei_pay_hoshiki_cd", rsltQuery.getString("kanyu_kei_pay_hoshiki_cd"));
			}
		}
		catch(SQLException e) 
		{
			inCBSMsg.set(KK0081ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
			throw new CAANRuntimeException(e);
		} 
		finally 
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con1 != null)
				{
					CAANConnectionMgr.getInstance().close(con1);
				}
			}
			catch(SQLException e)
			{
				inCBSMsg.set(KK0081ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
		
		return retMap;
	}
	
	// v25.00.00 ADD START
	/**
	 * <p>
	 * 入金取消副次処理部品
	 * 随時入金の入金取消時に一時金の登録を行う。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param caIcjknExecute 一時金登録用一覧明細データ
	 * @param prcKmkCd 料金項目コード
	 * @param icjknSbtCd 一時金種別コード
	 */
	public void PaymentCansellationIcjknIns(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg caIcjknExecute, String prcKmkCd, String icjknSbtCd)
	{
		
		try {
			// 一時金登録番号を算出
			String sIcjknAddSeq = JACejbAC0171NumberParts.getIcjkinAddSeqNo();
			
			inCBSMsg.setPrivate(ICJKN_DTM, JPCModelCommon.getOpeDateTimeStamp(inCBSMsg, inContext, null));
			
			// 登録する値を設定
			CAANMsg inETMsgIcjkn = new CAANMsg(AC0171ETMsg.class.getName());
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_ADD_SEQ, sIcjknAddSeq);
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_UPD_SEQ, "01");
			inETMsgIcjkn.set(AC0171ETMsg.SEIKY_KEI_NO, caIcjknExecute.getString(CH0101ETMsg.SEIKY_KEI_NO));
			inETMsgIcjkn.set(AC0171ETMsg.SEIKY_YM, caIcjknExecute.getString(CH0101ETMsg.SEIKY_YM));
			inETMsgIcjkn.set(AC0171ETMsg.TONYU_DIV, JACStrConst.TONYU_DIV_SEIKY_MON);
			String icjknSvcKeiNo = "          ";
			if (!caIcjknExecute.isNull(CH0101ETMsg.SVC_KEI_NO))
			{
				icjknSvcKeiNo = caIcjknExecute.getString(CH0101ETMsg.SVC_KEI_NO);
			}
			inETMsgIcjkn.set(AC0171ETMsg.SVC_KEI_NO, icjknSvcKeiNo);
			inETMsgIcjkn.set(AC0171ETMsg.PRC_GRP_CD, "  ");
			inETMsgIcjkn.set(AC0171ETMsg.PCRS_CD, "   ");
			inETMsgIcjkn.set(AC0171ETMsg.PRC_SVC_CD, "            ");
			inETMsgIcjkn.set(AC0171ETMsg.PRC_KMK_CD, "           ");
			inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_GRP_CD, caIcjknExecute.getString(CH0101ETMsg.PRC_GRP_CD));
			inETMsgIcjkn.set(AC0171ETMsg.TRGT_PCRS_CD, caIcjknExecute.getString(CH0101ETMsg.PCRS_CD));
			inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_SVC_CD, caIcjknExecute.getString(CH0101ETMsg.PRC_SVC_CD));
			inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_KMK_CD, prcKmkCd);
			inETMsgIcjkn.set(AC0171ETMsg.SEIKY_YM_SNST_STDARDYMD, JPCModelCommon.getOpeDate(inCBSMsg, inContext, null));
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_TRKM_STAT, JACStrConst.ICJKN_TRKM_STAT_ZUMI);
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_TRKM_RSLT_CD, "2");
			inETMsgIcjkn.set(AC0171ETMsg.TRKM_ZAN_AMNT, "0");
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_ADD_DTM, inCBSMsg.getString(ICJKN_DTM));
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_ADD_USER_ID, inCBSMsg.getObject(OPERATORID));
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_UPD_DTM, inCBSMsg.getString(ICJKN_DTM));
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_UPD_USER_ID, inCBSMsg.getObject(OPERATORID));
			inETMsgIcjkn.set(AC0171ETMsg.ADD_DTM, JSYejbSysDate.getDate("YYYYMMDDHHMMSSSSS"));
			inETMsgIcjkn.set(AC0171ETMsg.ADD_OPEACNT, inCBSMsg.getObject(OPERATORID));
			inETMsgIcjkn.set(AC0171ETMsg.UPD_DTM, JSYejbSysDate.getDate("YYYYMMDDHHMMSSSSS"));
			inETMsgIcjkn.set(AC0171ETMsg.UPD_OPEACNT, inCBSMsg.getObject(OPERATORID));
			inETMsgIcjkn.set(AC0171ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_SBT_CD, icjknSbtCd);
			int amnt = Integer.parseInt(caIcjknExecute.getString(CH0101ETMsg.AMNT));
			int icjknPrc = -amnt;
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_PRC, Integer.toString(icjknPrc));
			inETMsgIcjkn.set(AC0171ETMsg.TRKM_ZUMI_AMNT, Integer.toString(icjknPrc));
			if (!JACStrConst.SVC_DTL_SKBT_NO_SP.equals(caIcjknExecute.getString(CH0101ETMsg.SVC_DTL_SKBT_NO)) 
					&& !JCRUtilCommon.isNull(caIcjknExecute.getString(CH0101ETMsg.SVC_DTL_SKBT_NO)))
			{
				inETMsgIcjkn.set(AC0171ETMsg.SVC_DTL_SKBT_NO, caIcjknExecute.getString(CH0101ETMsg.SVC_DTL_SKBT_NO));
			}
			
			super.create(inETMsgIcjkn);
		} 
		catch (CAANException e) 
		{
			
			throw new CAANRuntimeException(e);
			
		}
		catch (Exception e)
		{
			
			throw new CAANRuntimeException(e);
		}
	}
	// v25.00.00 ADD END
	// ANK-4305-00-00 ADD START
	/**
	 * <p>
	 * 前受金調整/変更時副次処理部品
	 * 前受金充当額変更時に一時金の登録を行う。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param caPrcShukReslt 登録対象明細
	 * @param prcKmkCd 料金項目コード
	 * @param icjknSbtCd 一時金種別コード
	 */
	// IT1-2023-0000003 MOD START
//	public void prcAjstIcjknMaeuke(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg caPrcShukReslt)
	public void prcAjstIcjknMaeuke(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg caPrcShukReslt, BigDecimal bfAmnt, String prcKmkCd)
	// IT1-2023-0000003 MOD END
	{
		
		// 一時金情報取得用料金項目コードリスト
		List<HashMap<String, String>> prcKmkList = null;
		
		// テンプレートID
		String tempID = inCBSMsg.getString(TEMPLATEID);
		// IT1-2023-0000003 DEL START
//		// 差額
//		BigDecimal sagaku = new BigDecimal(caPrcShukReslt.getString(JACStrConst.KEY_PRC_SHUK_SAGAKU));
//		// 変更前金額
//		BigDecimal bfAmnt = new BigDecimal(0);
//		
//		// 調整区分を取得する。
//		String sAjstDiv = caPrcShukReslt.getString(JACStrConst.KEY_PRC_SHUK_AJST_DIV);
//		
//		// 調整区分がない場合
//		if(null == sAjstDiv || JACStrConst.PRC_ADJ_DIV_NO_CHG.equals(sAjstDiv))
//		{
//			// 登録しない
//			return;
//		}
//		// 調整区分が追加の場合（※追加は料金調整/変更からできないため通らない）
//		else if(JACStrConst.PRC_ADJ_DIV_ADD.equals(sAjstDiv))
//		{
//			// 登録しない
//			return;
//		}
//		// 調整区分が変更の場合
//		else if(JACStrConst.PRC_ADJ_DIV_CHG.equals(sAjstDiv))
//		{
//			// 差額が0より小さい（前受金充当額が減額）場合
//			if(BigDecimal.ZERO.compareTo(sagaku) < 0)
//			{
//				// 処理済金（前受金充当）の料金項目コードを設定
//				prcKmkList = getPrcKmkCsChge(inCBSMsg, inContext, JACStrConst.WKPRA_CH_WKS_SRZ_MUK_AT_JT);
//				// 変更前金額を取得
//				bfAmnt = new BigDecimal(caPrcShukReslt.getString(JACStrConst.KEY_PRC_SHUK_BF_AMNT));
//			}
//			// 差額が0より大きい（前受金充当額が増額）場合
//			else if(BigDecimal.ZERO.compareTo(sagaku) > 0)
//			{
//				// 登録しない
//				return;
//			}
//			// 変更前後で変わらない場合(基本的に通らない）
//			else
//			{
//				// 登録しない
//				return;
//			}
//		}
//		// 調整区分が削除の場合
//		else if(JACStrConst.PRC_ADJ_DIV_DEL.equals(sAjstDiv))
//		{
//			// 処理済金（前受金充当）の料金項目コードを設定
//			prcKmkList = getPrcKmkCsChge(inCBSMsg, inContext, JACStrConst.WKPRA_CH_WKS_SRZ_MUK_AT_JT);
//			// 削除の場合、変更前金額を取得できないため、差額で代用する。
//			// 変更前金額を取得
//			bfAmnt = sagaku.negate();
//		}
//		// 上記以外の場合（基本的に通らない）
//		else
//		{
//			// 登録しない
//			return;
//		}
//		
//		// 料金計算日以降に登録された「処理済金（前受金充当）」の一時金が存在するかチェックする。
//		// (既に登録されている場合は、料金計算日に処理された処理済金（前受金充当）の金額分を
//		//  打ち消すための減額されているため、登録しない。)
//		String prcKmkCd = prcKmkList.get(0).get("PRC_KMK_CD");
//		ArrayList<CAANMsg> rsltMsgListMaeukeIcjkn = getIcjknAfKaikShori(inCBSMsg, inContext, prcKmkCd);
//		
//		if(rsltMsgListMaeukeIcjkn.size() != 0){
//			// 登録しない
//			return;
//		}
		// IT1-2023-0000003 DEL END
		if("ECH0101D011".equals(tempID))
		{
			// IT1-2023-0000003 DEL START
//			// 一時金が存在しなければ登録する。
//			// 一時金登録する金額を以下のように算出する。
//			// ・一時金スキーマから、直近会計処理日翌日以降に登録されている「前受金充当額(調整差額)」と「前受金充当額(変更差額)」の合計を取得する。
//			// ・変更前金額から、取得した調整差額/変更差額の合計を引いて、当月会計処理日時点の前受金充当額を算出する。
//			
//			// 抽出対象料金項目コード
//			String prcKmkCdMaeukeJt = caPrcShukReslt.getString(JACStrConst.KEY_PRC_SHUK_PRC_KMK_CD);
//			
//			// 調整差額/変更差額の合計額を取得する
//			BigDecimal sumPrcIcjkn = getIcjknAdjChgPrcSum(inCBSMsg, inContext, prcKmkCdMaeukeJt);
//			// 変更前金額から、合計金額を差し引く
//			bfAmnt = bfAmnt.subtract(sumPrcIcjkn);
			// IT1-2023-0000003 DEL END
			
			// 一時金を登録する
			executeAddIcjknMaeuke(inCBSMsg, inContext, caPrcShukReslt, prcKmkCd, bfAmnt, JACStrConst.ICJKN_SBT_CD_MANUAL_PRC_ADJ);
		}
		else if ("ECH0101D012".equals(tempID))
		{
			// IT1-2023-0000003 DEL START
//			// 一時金が存在しなければ登録する。
//			// 一時金登録する金額を以下のように算出する。
//			// ・一時金スキーマから、直近会計処理日翌日以降に登録されている「前受金充当額(調整差額)」と「前受金充当額(変更差額)」の合計を取得する。
//			// ・変更前金額から、取得した調整差額/変更差額の合計を引いて、当月会計処理日時点の前受金充当額を算出する。
//			
//			// 抽出対象料金項目コード
//			String prcKmkCdMaeukeJt = caPrcShukReslt.getString(JACStrConst.KEY_PRC_SHUK_PRC_KMK_CD);
//			
//			// 調整差額/変更差額の合計額を取得する
//			BigDecimal sumPrcIcjkn = getIcjknAdjChgPrcSum(inCBSMsg, inContext, prcKmkCdMaeukeJt);
//			// 変更前金額から、合計金額を差し引く
//			bfAmnt = bfAmnt.subtract(sumPrcIcjkn);
			// IT1-2023-0000003 DEL END
			
			// 一時金を登録する
			executeAddIcjknMaeuke(inCBSMsg, inContext, caPrcShukReslt, prcKmkCd, bfAmnt, JACStrConst.ICJKN_SBT_CD_MANUAL_PRC_CHG);
		}
		else
		{
			// 上記以外の呼出元の場合は登録しない。
			return;
		}
	}
	
	// IT1-2023-0000003 DEL START
//	/**
//	 * 直近会計処理日以降に登録された指定の一時金の調整差額/変更差額の合計を取得します。
//	 * 
//	 * @return
//	 */
//	private BigDecimal getIcjknAdjChgPrcSum(CAANMsg inCBSMsg, AgentDispatchContext inContext, String prcKmkCd)
//	{
//		
//		// 一時金合計金額
//		BigDecimal sumAmntIcjkn = new BigDecimal(0);
//		// 前受金充当額(調整額)の料金項目コード
//		String prcKmkCdAdj = prcKmkCd.substring(0, 9) + JACStrConst.PRC_KMK_CD_ADJ_SAGAKU;
//		// 前受金充当額(調整額)の料金項目コード
//		String prcKmkCdChg = prcKmkCd.substring(0, 9) + JACStrConst.PRC_KMK_CD_CHG_SAGAKU;
//		
//		// 直近会計処理日翌日以降に登録されている「前受金充当額(調整額)」を取得する
//		ArrayList<CAANMsg> rsltMsgListMaeukeAdjIcjkn = getIcjknAfKaikShori(inCBSMsg, inContext, prcKmkCdAdj);
//		// 直近会計処理日翌日以降に登録されている「前受金充当額(変更額)」を取得する
//		ArrayList<CAANMsg> rsltMsgListMaeukeChgIcjkn = getIcjknAfKaikShori(inCBSMsg, inContext, prcKmkCdChg);
//		
//		// 合計金額を算出する。
//		// 「前受金充当額(調整額)」計算する
//		for(CAANMsg childRsltMsgListMaeukeAdjIcjkn : rsltMsgListMaeukeAdjIcjkn)
//		{
//			String icjknPrc = childRsltMsgListMaeukeAdjIcjkn.getString(AC0171ETMsg.ICJKN_PRC);
//			BigDecimal bdIcjknPrc = new BigDecimal(icjknPrc);
//			sumAmntIcjkn = sumAmntIcjkn.add(bdIcjknPrc);
//		}
//		// 「前受金充当額(調整額)」計算する
//		for(CAANMsg childRsltMsgListMaeukeChgIcjkn : rsltMsgListMaeukeChgIcjkn)
//		{
//			String icjknPrc = childRsltMsgListMaeukeChgIcjkn.getString(AC0171ETMsg.ICJKN_PRC);
//			BigDecimal bdIcjknPrc = new BigDecimal(icjknPrc);
//			sumAmntIcjkn = sumAmntIcjkn.add(bdIcjknPrc);
//		}
//		
//		return sumAmntIcjkn;
//	}
//	
//	/**
//	 * 直近会計処理日以降に登録された指定の一時金を抽出します。
//	 * @param inCBSMsg 処理対象のメッセージキャリア
//	 * @param inContext Agentから渡されたAgentDispatchContext
//	 * @param prcKmkCd 料金項目コード
//	 * @return
//	 */
//	private ArrayList<CAANMsg> getIcjknAfKaikShori(CAANMsg inCBSMsg, AgentDispatchContext inContext, String prcKmkCd) {
//		
//		// コネクション
//		Connection con1 = null;
//		
//		// プリペアステートメント
//		PreparedStatement pstmt = null;
//		
//		// リザルトセット
//		ResultSet rsltQuery = null;
//		
//		// パラメータインデックス
//		int i = 1;
//		
//		// 照会結果保持リスト
//		ArrayList<CAANMsg> rsltMsgList = new ArrayList<CAANMsg>();
//		
//		try
//		{
//			/******************** 
//			 * SQL文の作成
//			 ********************/
//			
//			//コネクション取得
//			con1 = JSYejbConnection.getConnection(AC0171ETMsg.getTableName());
//			
//			StringBuffer sql_Buff = new StringBuffer();
//			
//			sql_Buff.append(" SELECT ")
//					.append("     AC0171.ICJKN_ADD_SEQ ")
//					.append("   , AC0171.ICJKN_UPD_SEQ ")
//					.append("   , AC0171.KICJKN_NO ")
//					.append("   , AC0171.SEIKY_KEI_NO ")
//					.append("   , AC0171.SEIKY_YM ")
//					.append("   , AC0171.TONYU_DIV ")
//					.append("   , AC0171.SVC_KEI_NO ")
//					.append("   , AC0171.PRC_GRP_CD ")
//					.append("   , AC0171.PCRS_CD ")
//					.append("   , AC0171.PRC_SVC_CD ")
//					.append("   , AC0171.PRC_KMK_CD ")
//					.append("   , AC0171.TRGT_PRC_GRP_CD ")
//					.append("   , AC0171.TRGT_PCRS_CD ")
//					.append("   , AC0171.TRGT_PRC_SVC_CD ")
//					.append("   , AC0171.TRGT_PRC_KMK_CD ")
//					.append("   , AC0171.SEIKY_YM_SNST_STDARDYMD ")
//					.append("   , AC0171.ICJKN_PRC ")
//					.append("   , AC0171.ICJKN_SBT_CD ")
//					.append("   , AC0171.ICJKN_TRKM_STAT ")
//					.append("   , AC0171.ICJKN_TRKM_RSLT_CD ")
//					.append("   , AC0171.TRKM_ZUMI_AMNT ")
//					.append("   , AC0171.TRKM_ZAN_AMNT ")
//					.append(" FROM ")
//					.append("     AC_T_ICJKN AC0171 ")
//					.append(" WHERE ")
//					.append("     AC0171.SEIKY_KEI_NO = ? ")
//					.append(" AND AC0171.SEIKY_YM = ? ")
//					.append(" AND AC0171.TONYU_DIV = '1' ")
//					;
//			if (!JCHStringUtil.isNullBlank(prcKmkCd))
//			{
//				sql_Buff.append(" AND (")
//						.append("             AC0171.PRC_KMK_CD = ?  ")
//						.append("         OR  AC0171.TRGT_PRC_KMK_CD = ? ")
//						.append("     ) ")
//						;
//			}
//			sql_Buff.append(" AND SUBSTR(AC0171.ICJKN_ADD_DTM,1,8) > ( ")
//					.append("     SELECT ")
//					.append("         MAX(EVENT_YMD)  ")
//					.append("     FROM ")
//					.append("         CH_M_PRC_SCHDL_TEIGI  ")
//					.append("     WHERE ")
//					.append("         EVENT_CD = '21'  ")
//					.append("     AND EVENT_YMD < ? ")
//					.append("     ) ")
//					.append(" AND   AC0171.ICJKN_SBT_CD IN ('2','3','5','6') ")
//					.append(" AND   AC0171.ICJKN_TRKM_STAT = '2' ")
//					.append(" ORDER BY 1,2 DESC ")
//					;
//			
//			//prepareStatementにSQL文をセット
//			pstmt = con1.prepareStatement(sql_Buff.toString());
//			
//			//ログ出力(SQL文の出力)
//			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
//			
//			// パラメータの設定(請求契約番号)
//			CAANJDBCUtil.setParam(pstmt, i++, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_KEI_NO));
//			// パラメータの設定(請求年月)
//			CAANJDBCUtil.setParam(pstmt, i++, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_YM));
//			// パラメータの設定(料金項目コード)
//			if (!JCHStringUtil.isNullBlank(prcKmkCd))
//			{
//				CAANJDBCUtil.setParam(pstmt, i++, prcKmkCd);
//				CAANJDBCUtil.setParam(pstmt, i++, prcKmkCd);
//			}
//			// パラメータの設定(運用日)
//			CAANJDBCUtil.setParam(pstmt, i++, JPCModelCommon.getOpeDate(inCBSMsg, inContext, null));
//			
//			// ResultSetの取得
//			rsltQuery = pstmt.executeQuery();
//			
//			String[] msgKeyList1 = {
//					AC0171ETMsg.ICJKN_ADD_SEQ,
//					AC0171ETMsg.ICJKN_UPD_SEQ,
//					AC0171ETMsg.KICJKN_NO,
//					AC0171ETMsg.SEIKY_KEI_NO,
//					AC0171ETMsg.SEIKY_YM,
//					AC0171ETMsg.TONYU_DIV,
//					AC0171ETMsg.SVC_KEI_NO,
//					AC0171ETMsg.PRC_GRP_CD,
//					AC0171ETMsg.PCRS_CD,
//					AC0171ETMsg.PRC_SVC_CD,
//					AC0171ETMsg.PRC_KMK_CD,
//					AC0171ETMsg.TRGT_PRC_GRP_CD,
//					AC0171ETMsg.TRGT_PCRS_CD,
//					AC0171ETMsg.TRGT_PRC_SVC_CD,
//					AC0171ETMsg.TRGT_PRC_KMK_CD,
//					AC0171ETMsg.SEIKY_YM_SNST_STDARDYMD,
//					AC0171ETMsg.ICJKN_PRC,
//					AC0171ETMsg.ICJKN_SBT_CD,
//					AC0171ETMsg.ICJKN_TRKM_STAT,
//					AC0171ETMsg.ICJKN_TRKM_RSLT_CD,
//					AC0171ETMsg.TRKM_ZUMI_AMNT,
//					AC0171ETMsg.TRKM_ZAN_AMNT
//			};
//
//			// 取得結果をメッセージに退避する。
//			// 結果を明細にセットする。
//			while (rsltQuery.next())
//			{
//				CAANMsg rsltMsg = new CAANMsg();
//				
//				for (int n = 0; n < msgKeyList1.length; n++)
//				{
//					String key = msgKeyList1[n];
//					
//					rsltMsg.setPrivate(key, CAANJDBCUtil.getString(rsltQuery, n + 1));
//				}
//				
//				rsltMsgList.add(rsltMsg);
//			}
//		}
//		catch (SQLException e)
//		{
//			inCBSMsg.set(AC0171ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
//			throw new CAANRuntimeException(e);
//		}
//		finally
//		{
//			// 資源の解放
//			try
//			{
//				if (rsltQuery != null)
//				{
//					rsltQuery.close();
//				}
//				if (pstmt != null)
//				{
//					pstmt.close();
//				}
//				if (con1 != null)
//				{
//					CAANConnectionMgr.getInstance().close(con1);
//				}
//			}
//			catch(SQLException e)
//			{
//				inCBSMsg.set(AC0171ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
//				throw new CAANRuntimeException(e);
//			}
//		}
//		
//	return rsltMsgList;
//	}
	// IT1-2023-0000003 DEL END

	/**
	 * 
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param caPrcShukReslt 登録対象明細
	 * @param prcKmkCd 料金項目コード
	 * @param bfAmnt 訂正前金額
	 * @return
	 */
	private void executeAddIcjknMaeuke(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg caPrcShukReslt, String prcKmkCd, BigDecimal bfAmnt, String icjknSbtCd)
	{
		try 
		{
			// 一時金登録番号を算出
			String sIcjknAddSeq = JACejbAC0171NumberParts.getIcjkinAddSeqNo();
			
			inCBSMsg.setPrivate(ICJKN_DTM, JPCModelCommon.getOpeDateTimeStamp(inCBSMsg, inContext, null));
			
			CAANMsg inETMsgIcjkn = new CAANMsg(AC0171ETMsg.class.getName());
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_ADD_SEQ			, sIcjknAddSeq);
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_UPD_SEQ			, "01");
			inETMsgIcjkn.set(AC0171ETMsg.SEIKY_KEI_NO			, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_KEI_NO));
			inETMsgIcjkn.set(AC0171ETMsg.SEIKY_YM				, inCBSMsg.getString(JACStrConst.ECH0101CBSMSG_SEIKY_YM));
			inETMsgIcjkn.set(AC0171ETMsg.TONYU_DIV				, JACStrConst.TONYU_DIV_SEIKY_MON);
			inETMsgIcjkn.set(AC0171ETMsg.SVC_KEI_NO				, "          ");
			inETMsgIcjkn.set(AC0171ETMsg.PRC_GRP_CD				, "  ");
			inETMsgIcjkn.set(AC0171ETMsg.PCRS_CD				, "   ");
			inETMsgIcjkn.set(AC0171ETMsg.PRC_SVC_CD				, "            ");
			inETMsgIcjkn.set(AC0171ETMsg.PRC_KMK_CD				, "           ");
			inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_GRP_CD		, "  ");
			inETMsgIcjkn.set(AC0171ETMsg.TRGT_PCRS_CD			, "   ");
			inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_SVC_CD		, "            ");
			inETMsgIcjkn.set(AC0171ETMsg.TRGT_PRC_KMK_CD		, prcKmkCd);
			inETMsgIcjkn.set(AC0171ETMsg.SEIKY_YM_SNST_STDARDYMD, JPCModelCommon.getOpeDate(inCBSMsg, inContext, null));
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_PRC				, bfAmnt.toString());
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_SBT_CD			, icjknSbtCd);
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_TRKM_STAT		, JACStrConst.ICJKN_TRKM_STAT_ZUMI);
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_TRKM_RSLT_CD		, JACStrConst.ICJKN_TRKM_RSLT_NON);
			inETMsgIcjkn.set(AC0171ETMsg.TRKM_ZUMI_AMNT			, bfAmnt.toString());// 登録する値を設定
			inETMsgIcjkn.set(AC0171ETMsg.TRKM_ZAN_AMNT			, "0");
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_ADD_DTM			, inCBSMsg.getString(ICJKN_DTM));
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_ADD_USER_ID		, inCBSMsg.getObject(OPERATORID));
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_UPD_DTM			, inCBSMsg.getString(ICJKN_DTM));
			inETMsgIcjkn.set(AC0171ETMsg.ICJKN_UPD_USER_ID		, inCBSMsg.getObject(OPERATORID));
			inETMsgIcjkn.set(AC0171ETMsg.ADD_DTM				, JSYejbSysDate.getDate("YYYYMMDDHHMMSSSSS"));
			inETMsgIcjkn.set(AC0171ETMsg.ADD_OPEACNT			, inCBSMsg.getObject(OPERATORID));
			inETMsgIcjkn.set(AC0171ETMsg.UPD_DTM				, JSYejbSysDate.getDate("YYYYMMDDHHMMSSSSS"));
			inETMsgIcjkn.set(AC0171ETMsg.UPD_OPEACNT			, inCBSMsg.getObject(OPERATORID));
			inETMsgIcjkn.set(AC0171ETMsg.MK_FLG					, JACStrConst.MK_FLG_YK);
			
			
			super.create(inETMsgIcjkn);

		}
		catch (CAANException ex) 
		{
			throw new CAANRuntimeException(ex);
		} 
		catch (Exception e) 
		{
			throw new CAANRuntimeException(e);
		}
	}

	/**
	 * <p>
	 * 料金項目抽出変換取得実行処理。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param workParamId 業務パラメータID
	 * @return 料金項目抽出変換リスト
	 */
	private List<HashMap<String, String>> getPrcKmkCsChge(CAANMsg inCBSMsg, AgentDispatchContext inContext, String workParamId)
	{
		// コネクション
		Connection con1 = null;

		// プリペアステートメント
		PreparedStatement pstmt = null;

		// リザルトセット
		ResultSet rsltQuery = null;

		/******************** 
		 * SQL文の作成
		 ********************/
		try
		{
			// 運用日付
			String opeDate = (String)JPCModelCommon.getOpeDate(inCBSMsg, inContext, null);

			//コネクション取得
			con1 = JSYejbConnection.getConnection(CH0401ETMsg.getTableName());

			// SQL文
			StringBuffer sql_Buff = JCHModelCommon.getPrcKmkCsChgeSql(false);

			// 返却用リスト
			List<HashMap<String, String>> retList = new ArrayList<HashMap<String, String>>();

			// パラメータ設定リスト
			List<Object> replaceListCnt = new ArrayList<Object>();
			replaceListCnt.add(JACStrConst.SYS_CD_CH);
			replaceListCnt.add(JACStrConst.CHSHT_CHG_CD_1);
			replaceListCnt.add(opeDate);
			replaceListCnt.add(workParamId);
			replaceListCnt.add(opeDate);

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());

			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, JCHejbCH0101SecProc.class, sql_Buff);

			// PreparedStatementの指定されたパラメータカラムに 指定された値を設定
			for (int idx = 0; idx < replaceListCnt.size(); idx++)
			{
				CAANJDBCUtil.setParam(pstmt, idx + 1, replaceListCnt.get(idx));
			}

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			if (rsltQuery.next())
			{
				HashMap<String, String> map = new HashMap<String, String>();
				map.put("PRC_GRP_CD", rsltQuery.getString("PRC_GRP_CD"));
				map.put("PCRS_CD", rsltQuery.getString("PCRS_CD"));
				map.put("PRC_SVC_CD", rsltQuery.getString("PRC_SVC_CD"));
				map.put("PRC_KMK_CD", rsltQuery.getString("PRC_KMK_CD"));
				retList.add(map);
			}

			return retList;
		}
		catch (SQLException e)
		{
			throw new CAANRuntimeException(e);
		}
		finally
		{
			// 資源の解放
			try
			{
				if (null != rsltQuery) 
				{
					rsltQuery.close();
				}
				if (null != pstmt) 
				{
					pstmt.close();
				}
				if (null != con1) 
				{
					CAANConnectionMgr.getInstance().close(con1);
				}
			}
			catch(SQLException e)
			{
				inCBSMsg.set(CH0401ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}
	// ANK-4305-00-00 ADD END
}
