/*********************************************************************
*	All Rights reserved,Copyright c Fujitsu, 2011
**********************************************************************
*＜プログラム内容＞
*	システム名		：プロジェクト共通
*	モジュール名	：JCHejbCH0191KnkMoveCdEdit
*	ソースファイル名：JCHejbCH0191KnkMoveCdEdit.java
*	作成者			：富士通
*	日付			：2011年08月11日
*＜機能概要＞
*	金庫移動コードを編集する部品
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/08/11	富士通		新規作成
*   v5.00.00	2013/08/03  FJ) 河井   【IT1-2013-0001509】金庫移動コード取得処理追加
*	v41.00.00	2019/02/22	FJ) 吉田   【ANK-3416-00-00】【返金不可案件】金庫ステータス追加対応
*
**********************************************************************/
package eo.ejb.common.edit;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
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.StatusCodes;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.constant.JACStrConst;
import eo.ejb.cbm.entity.CH0401ETMsg;
import eo.ejb.common.JPCModelCommon;


/**
 * 金庫移動コードを編集する部品<p>
 * <br>
 * @author 富士通
 */
public class JCHejbCH0191KnkMoveCdEdit
{
	/**
	 * 抽出変換マスタ（金庫移動コード特定用）取得処理<br>
	 * <br>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return HashMap
	 */
	public static HashMap<String, String> getPrcKmkCsChge(CAANMsg inMsg, AgentDispatchContext inContext)
	{
		HashMap<String, String> csChgeMap = new HashMap<String, String>();

		// コネクション
		Connection con1 = null;

		// プリペアステートメント
		PreparedStatement pstmt = null;

		// リザルトセット
		ResultSet rsltQuery = null;

		/******************** 
		 * SQL文の作成
		 ********************/
		try
		{
			//コネクション取得
			con1 = JSYejbConnection.getConnection(CH0401ETMsg.getTableName());

			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT ")
					.append("     CH0401.WORK_KINO_SKBT_CD, ")
					.append("     CH0401.PRC_KMK_CD ")
					.append("  FROM CH_M_PRC_KMK_CS_CHGE CH0401 ")
					.append(" WHERE CH0401.SYS_CD = ? ")
					.append("     AND CH0401.WORK_KINO_SKBT_CD IN (").append(getWorkKinoSkbtCd()).append(")")
					.append("     AND CH0401.CHSHT_CHG_CD = ? ")
					.append("     AND ? BETWEEN CH0401.PRC_KMK_CS_CHGE_TSTAYMD AND CH0401.PRC_KMK_CS_CHGE_TENDYMD ")
					.append("     AND CH0401.MK_FLG = '0' ")
					.append("     AND CH0401.RSV_APLY_YMD || CH0401.GENE_ADD_DTM = ")
					.append("         ( SELECT MAX(CH0401_GENE.RSV_APLY_YMD || CH0401_GENE.GENE_ADD_DTM) AS CH0401_MAX ")
					.append("             FROM CH_M_PRC_KMK_CS_CHGE CH0401_GENE ")
					.append("           WHERE CH0401_GENE.SYS_CD = CH0401.SYS_CD ")
					.append("               AND CH0401_GENE.WORK_KINO_SKBT_CD = CH0401.WORK_KINO_SKBT_CD ")
					.append("               AND CH0401_GENE.CHSHT_CHG_CD = CH0401.CHSHT_CHG_CD ")
					.append("               AND CH0401_GENE.PRC_GRP_CD = CH0401.PRC_GRP_CD ")
					.append("               AND CH0401_GENE.PCRS_CD = CH0401.PCRS_CD ")
					.append("               AND CH0401_GENE.PRC_SVC_CD = CH0401.PRC_SVC_CD ")
					.append("               AND CH0401_GENE.PRC_KMK_CD = CH0401.PRC_KMK_CD ")
					.append("               AND CH0401_GENE.OUTPUT_PRC_GRP_CD = CH0401.OUTPUT_PRC_GRP_CD ")
					.append("               AND CH0401_GENE.OUT_PCRS_CD = CH0401.OUT_PCRS_CD ")
					.append("               AND CH0401_GENE.OUT_PRC_SVC_CD = CH0401.OUT_PRC_SVC_CD ")
					.append("               AND CH0401_GENE.OUT_PRC_KMK_CD = CH0401.OUT_PRC_KMK_CD ")
					.append("               AND CH0401_GENE.RSV_APLY_YMD <= ? ")
					.append("               AND CH0401_GENE.MK_FLG = '0' )");

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());

			int i = 1;
			// パラメータの設定(SYS_CDを指定)
			CAANJDBCUtil.setParam(pstmt, i++, JACStrConst.SYS_CD_CH);
			// パラメータの設定(CHSHT_CHG_CDを指定)
			CAANJDBCUtil.setParam(pstmt, i++, JACStrConst.CHSHT_CHG_CD_1);
			// パラメータの設定(運用日を指定)
			CAANJDBCUtil.setParam(pstmt, i++, JPCModelCommon.getOpeDate(inMsg, inContext, null));
			// パラメータの設定(運用日を指定)
			CAANJDBCUtil.setParam(pstmt, i++, JPCModelCommon.getOpeDate(inMsg, inContext, null));

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 取得結果の設定
			while (rsltQuery.next())
			{
				csChgeMap.put(rsltQuery.getString(CH0401ETMsg.PRC_KMK_CD),rsltQuery.getString(CH0401ETMsg.WORK_KINO_SKBT_CD)); 
			}
		} 
		catch (SQLException e) 
		{
			inMsg.set(CH0401ETMsg.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) 
			{
				inMsg.set(CH0401ETMsg.STATUS, StatusCodes.FIND_DB_ERR);
				throw new CAANRuntimeException(e);
			}
		}

		return csChgeMap;
	}

	/**
	 * 金庫移動コード取得処理（金庫移動登録）<br>
	 * 移動元金庫料金項目コードと移動先金庫料金項目コードより金庫移動コードを特定する。
	 * <br>
	 * @param csChgeMap 抽出変換マスタ（金庫移動コード特定用）データ
	 * @param idoMtPrcKmkCd 移動元金庫料金項目コード
	 * @param idoSkPrcKmkCd 移動先金庫料金項目コード
	 * @return 金庫移動コード
	 */
	public static String getKnkMoveCd(HashMap<String, String> csChgeMap, String idoMtPrcKmkCd, String idoSkPrcKmkCd) 
	{
		String KnkModeCd = "";

		if (idoMtPrcKmkCd.equals(idoSkPrcKmkCd))
		{
			// 金庫移動コード（金庫分割）03
			KnkModeCd = JACStrConst.KINKO_IDO_BNKT;
			return KnkModeCd;
		}

		boolean idoMtKnkStats = false;
		boolean idoSkKnkStats = false;

		String idoMtWorkKnoSkbtCd = csChgeMap.get(idoMtPrcKmkCd);
		String idoSkWorkKnoSkbtCd = csChgeMap.get(idoSkPrcKmkCd);

		if (JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT01.equals(idoMtWorkKnoSkbtCd)
			|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT02.equals(idoMtWorkKnoSkbtCd)
			|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT03.equals(idoMtWorkKnoSkbtCd)
			// ▼▼▼ ANK-3416-00-00 MOD START ▼▼▼
//			|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT04.equals(idoMtWorkKnoSkbtCd))
			|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT04.equals(idoMtWorkKnoSkbtCd)
			|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT05.equals(idoMtWorkKnoSkbtCd))
			// ▲▲▲ ANK-3416-00-00 MOD END ▲▲▲
		{
			// 未処理金
			idoMtKnkStats = false;
		}
		else if (JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT11.equals(idoMtWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT12.equals(idoMtWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT13.equals(idoMtWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT14.equals(idoMtWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT15.equals(idoMtWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT16.equals(idoMtWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT17.equals(idoMtWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT21.equals(idoMtWorkKnoSkbtCd)
				// ▼▼▼ ANK-3416-00-00 MOD START ▼▼▼
//				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT22.equals(idoMtWorkKnoSkbtCd))
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT22.equals(idoMtWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT23.equals(idoMtWorkKnoSkbtCd))
				// ▲▲▲ ANK-3416-00-00 MOD END ▲▲▲
		{
			// 処理済金
			idoMtKnkStats = true;
		}
		
		if (JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT01.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT02.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT03.equals(idoSkWorkKnoSkbtCd)
				// ▼▼▼ ANK-3416-00-00 MOD START ▼▼▼
//				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT04.equals(idoSkWorkKnoSkbtCd))
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT04.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT05.equals(idoSkWorkKnoSkbtCd))
				// ▲▲▲ ANK-3416-00-00 MOD END ▲▲▲
		{
			// 未処理金
			idoSkKnkStats = false;
		}
		else if (JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT11.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT12.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT13.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT14.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT15.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT16.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT17.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT21.equals(idoSkWorkKnoSkbtCd)
				// ▼▼▼ ANK-3416-00-00 MOD START ▼▼▼
//				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT22.equals(idoSkWorkKnoSkbtCd))
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT22.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT23.equals(idoSkWorkKnoSkbtCd))
				// ▲▲▲ ANK-3416-00-00 MOD END ▲▲▲
		{
			// 処理済金
			idoSkKnkStats = true;
		}

		// 未処理金 → 処理済金
		if (!idoMtKnkStats && idoSkKnkStats)
		{
			// 金庫移動コード（処理済移動）05
			KnkModeCd = JACStrConst.KINKO_IDO_SYORI_ZUMI;
		}
		// 処理済金 → 未処理金
		else if (idoMtKnkStats && !idoSkKnkStats)
		{
			// 金庫移動コード（未処理移動）06
			KnkModeCd = JACStrConst.KINKO_IDO_SYORI_MI;
		}
		// 未処理金 → 未処理金
		else if(!idoMtKnkStats && !idoSkKnkStats)
		{
			// 金庫移動コード（金庫移動） 02
			KnkModeCd = JACStrConst.KINKO_IDO_CD;
		}

		return KnkModeCd;
	}

	/**
	 * 金庫移動コード取得処理（金庫統合登録）<br>
	 * 移動先金庫料金項目コードより金庫移動コードを特定する。
	 * <br>
	 * @param csChgeMap 抽出変換マスタ（金庫移動コード特定用）データ
	 * @param idoSkPrcKmkCd 移動先金庫料金項目コード
	 * @return 金庫移動コード
	 */
	public static String getKnkMoveCd(HashMap<String, String> csChgeMap, String idoSkPrcKmkCd) 
	{
		String KnkMoveCd = "";

		String idoSkWorkKnoSkbtCd = csChgeMap.get(idoSkPrcKmkCd);

		if (JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT01.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT02.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT03.equals(idoSkWorkKnoSkbtCd)
				// ▼▼▼ ANK-3416-00-00 MOD START ▼▼▼
//				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT04.equals(idoSkWorkKnoSkbtCd))
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT04.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT05.equals(idoSkWorkKnoSkbtCd))
				// ▲▲▲ ANK-3416-00-00 MOD END ▲▲▲
		{
			// 金庫移動コード（金庫統合）04
			KnkMoveCd = JACStrConst.KINKO_IDO_TOGO;
		}
		else if (JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT11.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT12.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT13.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT14.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT15.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT16.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT17.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT21.equals(idoSkWorkKnoSkbtCd)
				// ▼▼▼ ANK-3416-00-00 MOD START ▼▼▼
//				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT22.equals(idoSkWorkKnoSkbtCd))
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT22.equals(idoSkWorkKnoSkbtCd)
				|| JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT23.equals(idoSkWorkKnoSkbtCd))
				// ▲▲▲ ANK-3416-00-00 MOD END ▲▲▲
			
		{
			// 金庫移動コード（処理済移動）05
			KnkMoveCd = JACStrConst.KINKO_IDO_SYORI_ZUMI;
		}

		return KnkMoveCd;
	}

	private static String getWorkKinoSkbtCd() 
	{
		StringBuffer str_Buff = new StringBuffer();
		
		str_Buff.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT01).append("',")
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT02).append("',")
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT03).append("',")
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT04).append("',")
				// ▼▼▼ ANK-3416-00-00 ADD START ▼▼▼
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT05).append("',")
				// ▲▲▲ ANK-3416-00-00 ADD END ▲▲▲
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT11).append("',")
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT12).append("',")
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT13).append("',")
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT14).append("',")
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT15).append("',")
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT16).append("',")
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT17).append("',")
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT21).append("',")
				// ▼▼▼ ANK-3416-00-00 MOD START ▼▼▼
//				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT22).append("'");
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT22).append("',")
				.append("'").append(JACStrConst.WORK_KINO_SKBT_CD_KNKSTAT23).append("'");
				// ▲▲▲ ANK-3416-00-00 MOD END ▲▲▲
		return str_Buff.toString();
	}
}
