/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JFUejbFU0361NumberParts
*   ソースファイル名：JFUejbFU0361NumberParts.java
*   作成者          ：富士通
*   日付            ：2021年04月02日
*＜機能概要＞
*   フロント配送受付在庫更新採番部品です。
*＜修正履歴＞
*   バージョン  修正日       修正者      修正内容
*   v53.00      2021/04/02   FJ）大島    新規作成 ANK-4009-00-00_CX戦略WG方針対応
*   
**********************************************************************/
package eo.ejb.common.edit;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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.JSYejbLog;
import com.fujitsu.futurity.model.ejb.common.fw.AgentDispatchContext;

import eo.common.constant.JFUStrConst;
import eo.ejb.cbm.entity.FU0361ETMsg;
import eo.ejb.common.JCCModelCommon;
import eo.ejb.common.JPCModelCommon;

/**
 * <p>
 * WEB申込情報登録採番部品クラスです。
 * </p>
 * @author 富士通
 */
public class JFUejbFU0361NumberParts extends JFUejbNumberPartsBase
{
	public static void main(String[] args)
	{

	}

	/** シーケンス定義名(管理番号) */
	private static final String SEQ_NAME = "SEQ_KANRI_NO";
	/** シーケンス桁数 */
	private static final int SEQ_LENGTH = 12;
	/** 乱数発生桁数（8桁） */
	private static final int RANDOM_LENGTH_EIGHT = 16;

	/**
	 * コンストラクタです。
	 */
	public JFUejbFU0361NumberParts()
	{
	}

	/**
	 * <p>
	 * 管理番号の採番を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 採番された簡単ログイン設定番号
	 */
	public static Object getKanriNo(CAANMsg inMsg, AgentDispatchContext inContext)
	{

		// 機能コードのチェック（チェックモードの場合は採番しない）
		if (isFuncMode(inMsg))
		{
			return null;
		}

		String value = "";

		// 採番処理
		value = JCCModelCommon.getFormatedNextSeq(SEQ_NAME, JFUStrConst.EMPTY, SEQ_LENGTH);

		return value;

	}

	/**
	 * <p>
	 * 識別キーの採番を行います。
	 * </p>
	 * @param inMsg 処理対象のメッセージキャリア
	 * @param inContext Agentから渡されたAgentDispatchContext
	 * @return 採番された簡単ログイン設定番号
	 */
	public static Object getSkbtKey(CAANMsg inMsg, AgentDispatchContext inContext)
	{

		// 機能コードのチェック（チェックモードの場合は採番しない）
		if (isFuncMode(inMsg))
		{
			return null;
		}

		String skbtKey = "";

		
		boolean bSkbtKey = true;
		while (bSkbtKey)
		{
			// 採番処理
			skbtKey = JPCModelCommon.getRandomChar(RANDOM_LENGTH_EIGHT);
			bSkbtKey = chkSkbtKey(inMsg, inContext, skbtKey);
		}

		return skbtKey;

	}
	
	/**
	 * 識別キーが存在するかチェックする。
	 * 
	 * @param inMsg
	 * @param inContext
	 * @param skbtKey
	 * @return
	 */
	private static boolean chkSkbtKey(CAANMsg inMsg, AgentDispatchContext inContext, String skbtKey)
	{
		// コネクション
		Connection con1 = null;
		// プリペアステートメント
		PreparedStatement pstmt = null;
		// リザルトセット
		ResultSet rsltQuery = null;
		long lDataCnt = 0L;

		try
		{
			//コネクション取得
			con1 = JSYejbConnection.getConnection(FU0361ETMsg.getTableName());

			// SQL文
			StringBuffer sql_Buff = new StringBuffer();
			sql_Buff.append(" SELECT ");
			sql_Buff.append("     COUNT(*) AS CNT ");
			sql_Buff.append(" FROM ");
			sql_Buff.append("      FU_T_WEB_MSKM_INFO FU0361 ");
			sql_Buff.append(" WHERE ");
			sql_Buff.append("     FU0361.SKBT_KEY = ? ");
//			sql_Buff.append("     AND FU0361.MK_FLG= '0' ");

			//prepareStatementにSQL文をセット
			pstmt = con1.prepareStatement(sql_Buff.toString());

			// パラメータの設定(識別キーを指定)
			CAANJDBCUtil.setParam(pstmt, 1, skbtKey);

			// ResultSetの取得
			rsltQuery = pstmt.executeQuery();

			// 件数を返却する
			if (rsltQuery.next())
			{
				lDataCnt = rsltQuery.getLong("CNT");
			}

			// 対象データが存在する場合はtrueを返却する
			if (lDataCnt > 0)
			{
				return true;
			}

		}
		catch(SQLException se)
		{
			throw new CAANRuntimeException(se);
		}
		finally
		{
			// 資源の解放
			try
			{
				if(rsltQuery != null)
				{
					rsltQuery.close();
				}
				if(pstmt != null)
				{
					pstmt.close();
				}
				if(con1 != null)
				{
					CAANConnectionMgr.getInstance().close((java.sql.Connection)con1);
				}
			}
			catch(SQLException se)
			{
				throw new CAANRuntimeException(se);
			}
		}
		return false;
	}
}
