/*********************************************************************
*	All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名		：eo顧客基幹システム
*	モジュール名	：JCHejbCH0201SecProc
*	ソースファイル名：JCHejbCH0201SecProc.java
*	作成者			：富士通
*	日付			：2011年08月16日
*＜機能概要＞
*	充当に対する副次処理を行う部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/16	富士通		新規作成
*	v23.00.00	2016/04/05	FJ)岡田    【OM-2016-0000639】
**********************************************************************/

package eo.ejb.common.db;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANException;
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.ejb.cbm.entity.CH0191ETMsg;
import eo.ejb.cbm.entity.CH0201ETMsg;
import eo.ejb.cbm.entity.CH0311ETMsg;
import eo.ejb.cbs.cbsmsg.ECH0011C012CBSMsg;
import eo.ejb.common.JCHModelCommon;
import eo.ejb.common.JPCModelCommon;
import eo.ejb.common.JSYejbSysDate;

/**
 * <p>
 * 充当に対する副次処理を行う部品です。
 * </p>
 * @author 富士通
 */
public class JCHejbCH0201SecProc extends JCHejbCH0201DBABase
{
	
	/**
	 * コンストラクタです。
	 */
	public JCHejbCH0201SecProc()
	{
		super();
	}

	/**
	 * <p>
	 * 充当を登録する。
	 * </p>
	 * @param cbsMsg CBSメッセージ
	 * @param inJUTO_NO 充当番号
	 * @param inJUTO_SBT_CD 充当種別コード
	 */
	public void insertJuto(CAANMsg cbsMsg, String inJUTO_NO, String inJUTO_SBT_CD)
	{
		try
		{
			// 充当を登録する。
			CAANMsg inETMsgJuto = new CAANMsg(CH0201ETMsg.class.getName());
			
			// メッセージデータを取得
			String sJUTO_YMD 	= cbsMsg.getString(ECH0011C012CBSMsg.SAIKEN_JUTO_YMD);	// 債権充当年月日
			String sJUTO_AMNT 	= cbsMsg.getString(ECH0011C012CBSMsg.JUTO_AMNT);		// 充当額
			String sNYUKIN_NO 	= cbsMsg.getString(ECH0011C012CBSMsg.NYUKIN_NO);		// 入金番号
			String sKNK_NO 		= cbsMsg.getString(ECH0011C012CBSMsg.KNK_NO);			// 金庫番号
			String sSAIKEN_NO 	= cbsMsg.getString(ECH0011C012CBSMsg.SAIKEN_NO);		// 債権番号
			
			// メッセージデータにセット
			inETMsgJuto.set(CH0201ETMsg.JUTO_NO, 		inJUTO_NO);		// 充当番号
			inETMsgJuto.set(CH0201ETMsg.JUTO_SBT_CD, 	inJUTO_SBT_CD);	// 充当種別コード
			inETMsgJuto.set(CH0201ETMsg.JUTO_YMD, 		sJUTO_YMD);		// 充当年月日
			inETMsgJuto.set(CH0201ETMsg.JUTO_AMNT, 		sJUTO_AMNT);	// 充当額
			inETMsgJuto.set(CH0201ETMsg.NYUKIN_NO, 		sNYUKIN_NO);	// 入金番号
			inETMsgJuto.set(CH0201ETMsg.KNK_NO, 		sKNK_NO);		// 金庫番号
			inETMsgJuto.set(CH0201ETMsg.SAIKEN_NO, 		sSAIKEN_NO);	// 債権番号
			inETMsgJuto.set(CH0201ETMsg.ADD_DTM, 		JCHModelCommon.getSysDateTimeStamp());				// 登録年月日時分秒
			inETMsgJuto.set(CH0201ETMsg.ADD_OPEACNT, 	cbsMsg.getString(ECH0011C012CBSMsg.OPERATORID));	// 登録オペレータアカウント
			inETMsgJuto.set(CH0201ETMsg.UPD_DTM, 		JCHModelCommon.getSysDateTimeStamp());				// 更新年月日時分秒
			inETMsgJuto.set(CH0201ETMsg.UPD_OPEACNT, 	cbsMsg.getString(ECH0011C012CBSMsg.OPERATORID));	// 更新オペレータアカウント
			inETMsgJuto.set(CH0201ETMsg.MK_FLG, 		"0");

			// 充当の登録を行う
			super.create(inETMsgJuto);
		}
		catch (CAANException e)
		{
			throw new CAANRuntimeException(e);
		}
		catch (Exception e)
		{
			throw new CAANRuntimeException(e);
		}
	}

	/**
	 * <p>
	 * 充当を登録する。
	 * </p>
	 * @param cbsMsg CBSメッセージ
	 * @param inJUTO_NO 充当番号
	 * @param inJUTO_SBT_CD 充当種別コード
	 */
	public void insertJuto(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg inCAANMsg)
	{
		try
		{
			CAANMsg inETMsg = new CAANMsg(CH0201ETMsg.class.getName());

			// 充当番号
			inETMsg.set(CH0201ETMsg.JUTO_NO, inCAANMsg.getString(CH0201ETMsg.JUTO_NO));
			// 充当種別コード
			inETMsg.set(CH0201ETMsg.JUTO_SBT_CD, inCAANMsg.getString(CH0201ETMsg.JUTO_SBT_CD));
			// 充当年月日
			inETMsg.set(CH0201ETMsg.JUTO_YMD, inCAANMsg.getString(CH0201ETMsg.JUTO_YMD));
			// 充当額
			inETMsg.set(CH0201ETMsg.JUTO_AMNT, inCAANMsg.getString(CH0201ETMsg.JUTO_AMNT));
			// 取消年月日
			inETMsg.set(CH0201ETMsg.CL_YMD, inCAANMsg.getString(CH0201ETMsg.CL_YMD));
			// 入金番号
			inETMsg.set(CH0201ETMsg.NYUKIN_NO, inCAANMsg.getString(CH0201ETMsg.NYUKIN_NO));
			// 金庫番号
			inETMsg.set(CH0201ETMsg.KNK_NO, inCAANMsg.getString(CH0201ETMsg.KNK_NO));
			// 債権番号
			inETMsg.set(CH0201ETMsg.SAIKEN_NO, inCAANMsg.getString(CH0201ETMsg.SAIKEN_NO));
			inETMsg.set(CH0201ETMsg.ADD_DTM, JCHModelCommon.getSysDateTimeStamp());
			inETMsg.set(CH0201ETMsg.ADD_OPEACNT, inCAANMsg.getString(CH0201ETMsg.OPERATORID));
			inETMsg.set(CH0201ETMsg.UPD_DTM, JCHModelCommon.getSysDateTimeStamp());
			inETMsg.set(CH0201ETMsg.UPD_OPEACNT, inCAANMsg.getString(CH0201ETMsg.OPERATORID));
			inETMsg.set(CH0201ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);

			// 充当の登録を行う
			super.create(inETMsg);

		}
		catch (CAANException e)
		{
			throw new CAANRuntimeException(e);
		}
		catch (Exception e)
		{
			throw new CAANRuntimeException(e);
		}

	}

	// v23.00.00 ADD START
	/**
	 * <p>
	 * 充当、領収データを取得する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext ディスパッチコンテキスト
	 * @param saikenNo 債権番号
	 */
	public CAANMsg[] getjutoReceiptInfo(CAANMsg inCBSMsg, AgentDispatchContext inContext, String saikenNo)
	{
		// コネクション
		Connection con1 = null;
		
		// プリペアステートメント
		PreparedStatement pstmt = null;
		
		// リザルトセット
		ResultSet rsltQuery = null;
		
		
		try
		{
			//コネクション取得
			con1 = JSYejbConnection.getConnection(CH0201ETMsg.getTableName());
			
			StringBuffer sql_Buff = new StringBuffer();
			
    		sql_Buff.append(" SELECT ")
					.append("      CH0201.JUTO_NO, ")
					.append("      CH0201.JUTO_SBT_CD, ")
					.append("      CH0201.JUTO_YMD, ")
					.append("      CH0201.JUTO_AMNT, ")
					.append("      CH0201.CL_YMD, ")
					.append("      CH0201.NYUKIN_NO, ")
					.append("      CH0201.KNK_NO, ")
					.append("      CH0201.SAIKEN_NO, ")
					.append("      CH0311.RECEIPT_NO, ")
					.append("      CH0311.SEIKY_KEI_NO, ")
					.append("      CH0311.NYUKIN_NO, ")
					.append("      CH0311.NYUKIN_ROUTE_CD, ")
					.append("      CH0311.NYUKIN_TRN_YMD, ")
					.append("      CH0311.NYUKIN_TRN_HMS, ")
					.append("      CH0311.RECEIPT_YMD, ")
					.append("      CH0311.RECEIPT_HMS, ")
					.append("      CH0311.SAIKEN_YM, ")
					.append("      CH0311.SEIKY_WAY_CD, ")
					.append("      CH0311.JUTO_AMNT, ")
					.append("      CH0311.JUTO_AMNT_UCHI_STAX, ")
					.append("      CH0311.SAIKEN_NO, ")
					.append("      CH0311.SEIKY_SBT_CD, ")
					.append("      CH0311.JUTO_NO, ")
					.append("      CH0191.KNK_NO, ")
					.append("      CH0191.GENE_ADD_DTM, ")
					.append("      CH0191.KNK_MOVE_CD, ")
					.append("      CH0191.SEIKY_KEI_NO, ")
					.append("      CH0191.KNK_IDO_YMD, ")
					.append("      CH0191.IDOMOTO_KNK_NO, ")
					.append("      CH0191.TOGO_KNK_NO, ")
					.append("      CH0191.NYUKIN_NO, ")
					.append("      CH0191.KNK_PRC_KMK_CD, ")
					.append("      CH0191.KNK_AMNT, ")
					.append("      CH0191.SSN_WAY_CD, ")
					.append("      CH0191.RIREKI_DATA_FLG ")
					.append("   FROM ")
					.append("      CH_T_JUTO CH0201 ")
					.append("      INNER JOIN ")
					.append("            CH_T_RECEIPT CH0311 ")
					.append("            ON  CH0201.JUTO_NO = CH0311.JUTO_NO ")
					.append("            AND CH0201.SAIKEN_NO = CH0311.SAIKEN_NO ")
					.append("            AND CH0311.MK_FLG = '0' ")
					.append("      INNER JOIN ")
					.append("            CH_T_KNK CH0191 ")
					.append("            ON  CH0201.KNK_NO = CH0191.KNK_NO ")
					.append("            AND CH0191.MK_FLG = '0' ")
					.append("  WHERE ")
					.append("      CH0201.SAIKEN_NO = ? ")
					.append("      AND CH0201.CL_YMD IS NULL ")
					.append("      AND CH0201.MK_FLG = '0' ");
    		
			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());
			
			//ログ出力(SQL文の出力)
			JSYejbLog.outlog(inContext, JSYejbLog.DBACCESS, this.getClass(), sql_Buff);
			
			// パラメータの設定
			CAANJDBCUtil.setParam(pstmt, 1, saikenNo);
			
			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();
			
			String[] msgKeyList1 = {
					CH0201ETMsg.JUTO_NO,
					CH0201ETMsg.JUTO_SBT_CD,
					CH0201ETMsg.JUTO_YMD,
					CH0201ETMsg.JUTO_AMNT,
					CH0201ETMsg.CL_YMD,
					CH0201ETMsg.NYUKIN_NO,
					CH0201ETMsg.KNK_NO,
					CH0201ETMsg.SAIKEN_NO,
					CH0311ETMsg.RECEIPT_NO,
					CH0311ETMsg.SEIKY_KEI_NO,
					CH0311ETMsg.NYUKIN_NO,
					CH0311ETMsg.NYUKIN_ROUTE_CD,
					CH0311ETMsg.NYUKIN_TRN_YMD,
					CH0311ETMsg.NYUKIN_TRN_HMS,
					CH0311ETMsg.RECEIPT_YMD,
					CH0311ETMsg.RECEIPT_HMS,
					CH0311ETMsg.SAIKEN_YM,
					CH0311ETMsg.SEIKY_WAY_CD,
					CH0311ETMsg.JUTO_AMNT,
					CH0311ETMsg.JUTO_AMNT_UCHI_STAX,
					CH0311ETMsg.SAIKEN_NO,
					CH0311ETMsg.SEIKY_SBT_CD,
					CH0311ETMsg.JUTO_NO,
					CH0191ETMsg.KNK_NO,
					CH0191ETMsg.GENE_ADD_DTM,
					CH0191ETMsg.KNK_MOVE_CD,
					CH0191ETMsg.SEIKY_KEI_NO,
					CH0191ETMsg.KNK_IDO_YMD,
					CH0191ETMsg.IDOMOTO_KNK_NO,
					CH0191ETMsg.TOGO_KNK_NO,
					CH0191ETMsg.NYUKIN_NO,
					CH0191ETMsg.KNK_PRC_KMK_CD,
					CH0191ETMsg.KNK_AMNT,
					CH0191ETMsg.SSN_WAY_CD,
					CH0191ETMsg.RIREKI_DATA_FLG
			};

			// 返却用リスト
			ArrayList<CAANMsg> retArray = new ArrayList<CAANMsg>();

			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));
				}
				retArray.add(rsltMsg);
			}
			return retArray.toArray(new CAANMsg[0]);
		}
		catch (SQLException e)
		{
			inCBSMsg.set(CH0201ETMsg.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(CH0201ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}
	}

	/**
	 * <p>
	 * 充当をキャンセルする。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param caPrcShukResltSaiken 登録対象明細
	 * @param jutoReceiptInfo 充当領収情報
	 */
	public void cslJuto(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg caPrcShukResltSaiken, CAANMsg jutoReceiptInfo)
	{
		try
		{
			String opeDate = (String)JPCModelCommon.getOpeDate(inCBSMsg, inContext, null);
			
			CAANMsg cslMsg = new CAANMsg(CH0201ETMsg.class.getName());
			
			//メッセージを設定
			cslMsg.set(CH0201ETMsg.JUTO_NO,     jutoReceiptInfo.getString(CH0201ETMsg.JUTO_NO));    // 充当番号
			cslMsg.set(CH0201ETMsg.CL_YMD,      opeDate);                                           // 取消年月日
			cslMsg.set(CH0201ETMsg.UPD_DTM,     JCHModelCommon.getSysDateTimeStamp());              // 更新年月日時分秒
			cslMsg.set(CH0201ETMsg.UPD_OPEACNT, inCBSMsg.getString(CH0201ETMsg.OPERATORID));        // 更新オペレータアカウント
			cslMsg.set(CH0201ETMsg.MK_FLG,      JACStrConst.MK_FLG_YK);                             // 無効フラグ
			
			super.update(cslMsg);
		}
		catch (CAANException e) 
		{
			throw new CAANRuntimeException(e);
		} 
		catch (Exception e) 
		{
			throw new CAANRuntimeException(e);
		}
	}

	/**
	 * <p>
	 * 充当を更新する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @param knkInfo 金庫情報
	 * @param jutoReceiptInfo 充当領収情報
	 * @param sJutoNo 充当番号
	 */
	public void insJuto(CAANMsg inCBSMsg, AgentDispatchContext inContext, CAANMsg knkInfo, CAANMsg jutoReceiptInfo, String sJutoNo)
	{
		String saikenNo = jutoReceiptInfo.getString(CH0201ETMsg.SAIKEN_NO);
		String jutoSbtCd = jutoReceiptInfo.getString(CH0201ETMsg.JUTO_SBT_CD);
		
		insJuto(inCBSMsg, knkInfo, sJutoNo, saikenNo, jutoSbtCd);
	}
	/**
	 * <p>
	 * 充当を更新する。
	 * </p>
	 * @param inCBSMsg 処理対象のメッセージキャリア
	 * @param knkInfo 金庫情報
	 * @param jutoReceiptInfo 充当領収情報
	 * @param sJutoNo 充当番号
	 * @param saikenNo 債権番号
	 * @param jutoSbtCd 充当種別番号
	 */
	public void insJuto(CAANMsg inCBSMsg, CAANMsg knkInfo, String sJutoNo, String saikenNo, String jutoSbtCd) {
		
		try
		{
			CAANMsg inETMsg = new CAANMsg(CH0201ETMsg.class.getName());
			
			inETMsg.set(CH0201ETMsg.JUTO_NO, sJutoNo);
			inETMsg.set(CH0201ETMsg.JUTO_SBT_CD, jutoSbtCd);
			inETMsg.set(CH0201ETMsg.JUTO_YMD, JSYejbSysDate.getDate("YYYYMMDD"));
			inETMsg.set(CH0201ETMsg.JUTO_AMNT, knkInfo.getString(CH0191ETMsg.KNK_AMNT));
			inETMsg.setNull(CH0201ETMsg.CL_YMD);
			inETMsg.set(CH0201ETMsg.NYUKIN_NO, knkInfo.getString(CH0191ETMsg.NYUKIN_NO));
			inETMsg.set(CH0201ETMsg.KNK_NO, knkInfo.getString(CH0191ETMsg.KNK_NO));
			inETMsg.set(CH0201ETMsg.SAIKEN_NO, saikenNo);
			inETMsg.set(CH0201ETMsg.ADD_DTM, JCHModelCommon.getSysDateTimeStamp());
			inETMsg.set(CH0201ETMsg.ADD_OPEACNT, inCBSMsg.getString(CH0201ETMsg.OPERATORID));
			inETMsg.set(CH0201ETMsg.UPD_DTM, JCHModelCommon.getSysDateTimeStamp());
			inETMsg.set(CH0201ETMsg.UPD_OPEACNT, inCBSMsg.getString(CH0201ETMsg.OPERATORID));
			inETMsg.set(CH0201ETMsg.MK_FLG, JACStrConst.MK_FLG_YK);

			// 充当の登録を行う
			super.create(inETMsg);
		}
		catch (CAANException e) 
		{
			throw new CAANRuntimeException(e);
		} 
		catch (Exception e) 
		{
			throw new CAANRuntimeException(e);
		}
	}
	// v23.00.00 ADD END
}
