/*********************************************************************
 *  All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *	システム名			：eo顧客基幹システム
 *	モジュール名		：JBSbatFUFrntHisukZkup
 *	ソースファイル名	：JBSbatFUFrntHisukZkup.java
 *	作成者				：富士通
 *	作成日				：2013年02月18日
 *＜機能概要＞
 *　フロント配送受付在庫更新処理部品です。
 *＜修正履歴＞
 *	バージョン	修正日		修正者		修正内容
 *	v1.00.00	2013/02/18   富士通		新規作成
 *	v1.01.00	2013/05/15   FJ)岡井	【TAI-2013-0000026】日中バッチ運用日付対応
*********************************************************************/
package eo.business.service;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JFUBatCommon;
import eo.business.util.table.JBSbatFU_T_FRNT_HISUK_ZKUP;
import eo.common.constant.JFUStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.constant.JPCModelConstant;
import eo.framework.application.JBSbatBusinessBase;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.application.JCCbatFrameworkException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.util.JCCBatchEsbInterface;

/**
 * (クラスの機能概要)
 * <p>
 *<BR>
 *
 * @author 富士通
 */
@SuppressWarnings("unchecked")
public class JBSbatFUFrntHisukZkup extends JBSbatBusinessService
{
	/** メッセージキー */
	private static final String EFUB0180KE = JPCBatchMessageConstant.EFUB0180KE;

	/** サービスID */
	private static final String SERVICE_ID = "FUSV0268";

	/** Web受付機器受注数連携部品呼び出し時のCC名 */
	private static final String CC_TITLE = "FUSV026801CC";

	/** IN項目：機能コード */
	private static final String IN_PARAM_FUNC_CD = "func_code";
	/** IN項目：機器提供サービス契約番号 */
	private static final String IN_PARAM_KKTK_SVC_KEI_NO = "kktk_svc_kei_no";
	/** IN項目：機器変更番号 */
	private static final String IN_PARAM_KIKI_CHG_NO = "kiki_chg_no";
	/** IN項目：配送受付在庫更新種別コード */
	private static final String IN_PARAM_HISUK_ZKUP_SBT_CD = "hisuk_zkup_sbt_cd";

	/** OUT項目：在庫有無 */
	private static final String OUT_PARAM_ZK_UM = "zk_um";
	/** OUT項目：エラーレベル */
	private static final String OUT_PARAM_ERROR_LEVEL = "error_level";
	/** OUT項目：リターンコード */
	private static final String OUT_PARAM_RETURN_CD = "return_Cd";
	/** OUT項目：リターンメッセージ */
	private static final String OUT_PARAM_RETURN_MESSAGE = "return_Message";

	/** エラーレベル(400:排他) */
	private static final String ERROR_LEVEL_400 = "400";

	/** ログ出力文言 エラーレベル */
	private static final String OUT_LOG_ERROR_LEVEL = "エラーレベル：";
	/** ログ出力文言 リターンメッセージ */
	private static final String OUT_LOG_RETURN_MESSAGE = "：リターンメッセージ：";
	/** ログ出力文言 リターンコード */
	private static final String OUT_LOG_RETURN_CD = "：リターンコード：";

	/** フロント配送受付在庫チェック対象外の宅内機器種別コードリスト(カンマ区切り) */
	private static final String FU_EXCLUDE_HISUK_ZKUP_LIST = "FU_EXCLUDE_HISUK_ZKUP_LIST";

	/** 宅内機器種別コード */
	private static final String TAKNKIKI_SBT_CD = "TAKNKIKI_SBT_CD";

	/** ▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼ */

	/** テーブル(フロント配送受付在庫更新) */
	private static final String D_TBL_NAME_FU_T_FRNT_HISUK_ZKUP = "FU_T_FRNT_HISUK_ZKUP";

	/** SQL定義キー(FU_SELECT_001) */
	private static final String FU_T_FRNT_HISUK_ZKUP_FU_SELECT_001 = "FU_SELECT_001";

	/** SQL定義キー(FU_SELECT_003) */
	private static final String FU_T_FRNT_HISUK_ZKUP_FU_SELECT_003 = "FU_SELECT_003";

	/** SQL定義キー(FU_UPDATE_001) */
	private static final String FU_T_FRNT_HISUK_ZKUP_FU_UPDATE_001 = "FU_UPDATE_001";

	/** テーブルアクセスクラス(フロント配送受付在庫更新) */
	private JBSbatSQLAccess db_FU_T_FRNT_HISUK_ZKUP = null;

	/** ▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲ */

	/**
	 * 初期処理
	 *
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼ */
		/** ▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼ */
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_FU_T_FRNT_HISUK_ZKUP = new JBSbatSQLAccess(commonItem, D_TBL_NAME_FU_T_FRNT_HISUK_ZKUP);
		/** ▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲ */
		/** ▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲ */
	}

	/**
	 * 主処理
	 *
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute() throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼ */

		// JOBIDを取得する。
		String strJobid = commonItem.getJobid();
		initLog(strJobid);

		super.logPrint.printDebugLog(strJobid + "：-------- （１）在庫処理未済データ抽出処理 START --------：");

		// 在庫処理未済データ情報リスト
		ArrayList<HashMap<String, String>> frntHisukZkupInfoList = new ArrayList<HashMap<String, String>>();
		int recordCnt = getFrntHisukZkupInfo(frntHisukZkupInfoList);
		if (recordCnt == 0)
		{
			super.logPrint.printDebugLog(strJobid + "：対象データが0件の為、後続処理を行わずに終了。");
			return null;
		}

		super.logPrint.printDebugLog(strJobid + "：-------- （１）在庫処理未済データ抽出処理 END --------：");

		// メジャーアラーム出力メッセージ
		String initErrorMsg = null;

		// オンライン運用日を取得する。
		String strOpeDate = commonItem.getOnlineOpeDate();

		for (int i = 0; i < frntHisukZkupInfoList.size(); i++)
		{
			// 在庫処理未済データ情報リストの件数分処理を実行する。

			// 在庫処理未済データ情報
			HashMap<String, String> frntHisukZkupInfoMap = frntHisukZkupInfoList.get(i);

			// フロント配送受付在庫更新番号
			String frntHisukZkupNo = frntHisukZkupInfoMap.get(JBSbatFU_T_FRNT_HISUK_ZKUP.FRNT_HISUK_ZKUP_NO);
			// 機器提供サービス契約番号
			String kktkSvcKeiNo = frntHisukZkupInfoMap.get(JBSbatFU_T_FRNT_HISUK_ZKUP.KKTK_SVC_KEI_NO);
			// 機器変更番号
			String kikiChgNo = frntHisukZkupInfoMap.get(JBSbatFU_T_FRNT_HISUK_ZKUP.KIKI_CHG_NO);
			// 宅内機器種別コード
			String taknkikiSbtCd = frntHisukZkupInfoMap.get(TAKNKIKI_SBT_CD);
			// フロント配送受付在庫更新結果コード
			String bfHisukZkupRsltCd = frntHisukZkupInfoMap.get(JBSbatFU_T_FRNT_HISUK_ZKUP.HISUK_ZKUP_RSLT_CD);

			super.logPrint.printDebugLog(strJobid + "：フロント配送受付在庫更新番号：" + frntHisukZkupNo);
			super.logPrint.printDebugLog(strJobid + "：機器提供サービス契約番号：" + kktkSvcKeiNo);
			super.logPrint.printDebugLog(strJobid + "：機器変更番号：" + kikiChgNo);
			super.logPrint.printDebugLog(strJobid + "：宅内機器種別コード：" + taknkikiSbtCd);
			super.logPrint.printDebugLog(strJobid + "：フロント配送受付在庫更新結果コード：" + bfHisukZkupRsltCd);

			super.logPrint.printDebugLog(strJobid + "：-------- （２）宅内機器物流在庫一意照会処理 START --------：");
			// サービスの処理結果格納領域を生成
			HashMap<String, Object> selOutMap = new HashMap<String, Object>();

			// フロント配送受付在庫更新番号での行ロック処理(多重起動防止対応)
			JBSbatCommonDBInterface lockFrntHisukZkupInfo = new JBSbatCommonDBInterface();
			lockFrntHisukZkupInfo.setValue(frntHisukZkupNo);// フロント配送受付在庫更新番号
			executeFU_T_FRNT_HISUK_ZKUP_FU_SELECT_003(lockFrntHisukZkupInfo.getList().toArray());

			try
			{
				// 宅内機器物流在庫一意照会
				// サービス呼出
				selOutMap = getTaknkikiBrzikoInfo(strJobid, frntHisukZkupInfoMap, selOutMap);
			}
			catch (JCCbatFrameworkException je)
			{
				StringWriter sw = new StringWriter();
				je.printStackTrace(new PrintWriter(sw));
				super.logPrint.printDebugLog(strJobid + "：" + sw.toString());

				// システムエラーとして、メジャーログを出力する。
				// サービス結果情報確認処理
				throw new JBSbatBusinessException(EFUB0180KE, new String[] { setErrorMsg((HashMap<String, Object>)selOutMap.get(CC_TITLE),
						JPCModelConstant.FUNC_CD_2) });
			}
			catch (Exception je)
			{
				StringWriter sw = new StringWriter();
				je.printStackTrace(new PrintWriter(sw));
				super.logPrint.printDebugLog(strJobid + "：" + sw.toString());

				throw new JBSbatBusinessException(EFUB0180KE, new String[] { setErrorMsg((HashMap<String, Object>)selOutMap.get(CC_TITLE),
						JPCModelConstant.FUNC_CD_2) });
			}

			// システムエラーとして、メジャーログを出力する。
			HashMap<String, Object> selOutDtlMap = (HashMap<String, Object>)selOutMap.get(CC_TITLE);
			if (!JFUBatCommon.isNotNullCheck(initErrorMsg))
			{
				// メジャーアラーム出力メッセージが未設定の場合

				// サービス結果情報確認処理
				initErrorMsg = setInitErrorMsg(bfHisukZkupRsltCd, initErrorMsg, selOutDtlMap, JPCModelConstant.FUNC_CD_2);
			}
			super.logPrint.printDebugLog(strJobid + "：-------- （２）宅内機器物流在庫一意照会処理 END --------：");

			super.logPrint.printDebugLog(strJobid + "：-------- （３）在庫数チェック処理 START --------：");

			// フロント配送受付在庫チェック対象外リストを取得
			HashSet<String> excludeList = getExcludeHisuk_zkupList(strOpeDate);

			// 除外対象フラグ(true：除外対象、false：除外対象外)
			boolean excludeFlg = excludeList.contains(taknkikiSbtCd);

			// 在庫確認済フラグ(0：未済み、1：済み)
			String zaikoCfmZmFlg = JFUStrConst.CD00581_1;
			// 在庫確認年月日時分秒
			String zaikoCfmDtm = strOpeDate + JFUBatCommon.getSysDateTimeStamp().substring(8);
			// フロント配送受付在庫更新結果コード
			String hisukZkupRsltCd = JFUStrConst.CD01580_0;
			// フロント配送受付在庫更新結果詳細コード
			String hisukZkupRsltDtlCd = JFUStrConst.CD01581_000;

			if (selOutDtlMap == null)
			{
				// 宅内機器物流在庫一意照会のサービス結果の詳細情報を取得できない場合

				super.logPrint.printDebugLog(strJobid + "：在庫有無：異常終了");

				// 在庫確認済フラグ(0：未済み、1：済み)
				zaikoCfmZmFlg = JFUStrConst.CD00581_0;
				// 在庫確認年月日時分秒
				zaikoCfmDtm = strOpeDate + JFUBatCommon.getSysDateTimeStamp().substring(8);
				// フロント配送受付在庫更新結果コード
				hisukZkupRsltCd = JFUStrConst.CD01580_1;
				// フロント配送受付在庫更新結果詳細コード
				hisukZkupRsltDtlCd = JFUStrConst.CD01581_999;
			}
			else
			{
				// エラーレベル
				String errLevel = (String)selOutDtlMap.get(OUT_PARAM_ERROR_LEVEL);
				// 在庫有無
				String zkUm = (String)selOutDtlMap.get(OUT_PARAM_ZK_UM);

				super.logPrint.printDebugLog(strJobid + "：エラーレベル：" + errLevel);
				super.logPrint.printDebugLog(strJobid + "：在庫有無：" + zkUm);

				if (excludeFlg || JFUStrConst.CD00002_1.equals(zkUm))
				{
					// 除外対象、又は在庫有の場合

					// 在庫確認済フラグ(0：未済み、1：済み)
					zaikoCfmZmFlg = JFUStrConst.CD00581_1;
					// 在庫確認年月日時分秒
					zaikoCfmDtm = strOpeDate + JFUBatCommon.getSysDateTimeStamp().substring(8);
					// フロント配送受付在庫更新結果コード
					hisukZkupRsltCd = JFUStrConst.CD01580_0;
					// フロント配送受付在庫更新結果詳細コード
					hisukZkupRsltDtlCd = JFUStrConst.CD01581_000;

				}
				else if (JFUStrConst.CD00002_0.equals(zkUm))
				{
					// 在庫無の場合

					// 在庫確認済フラグ(0：未済み、1：済み)
					zaikoCfmZmFlg = JFUStrConst.CD00581_1;
					// 在庫確認年月日時分秒
					zaikoCfmDtm = strOpeDate + JFUBatCommon.getSysDateTimeStamp().substring(8);
					// フロント配送受付在庫更新結果コード
					hisukZkupRsltCd = JFUStrConst.CD01580_2;
					// フロント配送受付在庫更新結果詳細コード
					hisukZkupRsltDtlCd = JFUStrConst.CD01581_430;
				}
				else if (JFUStrConst.CD01581_999.equals(errLevel) || JFUStrConst.CD01581_444.equals(errLevel))
				{
					// システムエラー、異常終了の場合

					// 在庫確認済フラグ(0：未済み、1：済み)
					zaikoCfmZmFlg = JFUStrConst.CD00581_0;
					// 在庫確認年月日時分秒
					zaikoCfmDtm = null;
					// フロント配送受付在庫更新結果コード
					hisukZkupRsltCd = JFUStrConst.CD01580_1;
					// フロント配送受付在庫更新結果詳細コード
					hisukZkupRsltDtlCd = errLevel;
				}
				else if (!JFUBatCommon.isNotNullCheck(zkUm))
				{
					// テーブル取得エラー時

					// 在庫確認済フラグ(0：未済み、1：済み)
					zaikoCfmZmFlg = JFUStrConst.CD00581_0;
					// 在庫確認年月日時分秒
					zaikoCfmDtm = null;
					// フロント配送受付在庫更新結果コード
					hisukZkupRsltCd = JFUStrConst.CD01580_4;
					// フロント配送受付在庫更新結果詳細コード
					hisukZkupRsltDtlCd = JFUStrConst.CD01581_990;
				}
			}

			super.logPrint.printDebugLog(strJobid + "：-------- （３）在庫数チェック処理 END --------：");

			super.logPrint.printDebugLog(strJobid + "：-------- （４）フロント配送受付在庫結果更新処理 START --------：");

			// フロント配送受付在庫結果更新処理
			updFrntHisukZkupInfo(zaikoCfmZmFlg, zaikoCfmDtm, hisukZkupRsltCd, hisukZkupRsltDtlCd, frntHisukZkupNo);

			super.logPrint.printDebugLog(strJobid + "：-------- （４）フロント配送受付在庫結果更新処理 END --------：");

			// エラーレベル
			String errLevel = JFUStrConst.EMPTY;

			if (!(JFUStrConst.CD01580_1.equals(hisukZkupRsltCd) || JFUStrConst.CD01580_4.equals(hisukZkupRsltCd)))
			{
				// フロント配送受付在庫更新結果コードが異常、保留以外の場合

				super.logPrint.printDebugLog(strJobid + "：-------- （５）宅内機器物流在庫更新処理 START --------：");

				// サービスの処理結果が格納されるMAP
				HashMap<String, Object> updOutMap = new HashMap<String, Object>();
				try
				{
					// 宅内機器物流在庫更新
					// サービス呼出
					updOutMap = updTaknkikiBrzikoInfo(strJobid, frntHisukZkupInfoMap, updOutMap);
				}
				catch (JCCbatFrameworkException je)
				{
					StringWriter sw = new StringWriter();
					je.printStackTrace(new PrintWriter(sw));
					super.logPrint.printDebugLog(strJobid + "：" + sw.toString());

					throw new JBSbatBusinessException(EFUB0180KE, new String[] { setErrorMsg((HashMap<String, Object>)updOutMap.get(CC_TITLE),
							JPCModelConstant.FUNC_CD_1) });
				}
				catch (Exception je)
				{
					StringWriter sw = new StringWriter();
					je.printStackTrace(new PrintWriter(sw));
					super.logPrint.printDebugLog(strJobid + "：" + sw.toString());

					throw new JBSbatBusinessException(EFUB0180KE, new String[] { setErrorMsg((HashMap<String, Object>)updOutMap.get(CC_TITLE),
							JPCModelConstant.FUNC_CD_1) });
				}

				HashMap<String, Object> updOutDtlMap = (HashMap<String, Object>)updOutMap.get(CC_TITLE);
				if (updOutDtlMap != null)
				{
					// 排他の場合は、メジャーアラームは出力しない。

					errLevel = (String)updOutDtlMap.get(OUT_PARAM_ERROR_LEVEL);
					if (ERROR_LEVEL_400.equals(errLevel))
					{
						super.logPrint.printDebugLog(strJobid + "：-------- （４）フロント配送受付在庫結果更新処理 START --------：");

						// 排他エラー時

						// 在庫確認済フラグ(0：未済み、1：済み)
						zaikoCfmZmFlg = JFUStrConst.CD00581_0;
						// 在庫確認年月日時分秒
						zaikoCfmDtm = null;
						// フロント配送受付在庫更新結果コード
						hisukZkupRsltCd = JFUStrConst.CD01580_1;
						// フロント配送受付在庫更新結果詳細コード
						hisukZkupRsltDtlCd = ERROR_LEVEL_400;

						// フロント配送受付在庫結果更新処理
						updFrntHisukZkupInfo(zaikoCfmZmFlg, zaikoCfmDtm, hisukZkupRsltCd, hisukZkupRsltDtlCd, frntHisukZkupNo);
						// DBコミット処理
						JBSbatBusinessBase.dbcon.commit();

						super.logPrint.printDebugLog(strJobid + "：-------- （４）フロント配送受付在庫結果更新処理 END --------：");
						super.logPrint.printDebugLog(strJobid + "：-------- （５）宅内機器物流在庫更新処理 END --------：");

						// 排他エラー時はリラン対象として次の処理へ移る。
						continue;
					}
				}

				if (!JFUBatCommon.isNotNullCheck(initErrorMsg))
				{
					// メジャーアラーム出力メッセージが未設定の場合

					// サービス結果情報確認処理
					initErrorMsg = setInitErrorMsg(bfHisukZkupRsltCd, initErrorMsg, updOutDtlMap, JPCModelConstant.FUNC_CD_1);
				}

				if (updOutDtlMap != null)
				{
					// サービスの処理結果が存在する場合

					// エラーレベル
					errLevel = (String)updOutDtlMap.get(OUT_PARAM_ERROR_LEVEL);
				}

				if (!JFUStrConst.CD01581_000.equals(errLevel))
				{
					// 正常終了以外の場合

					super.logPrint.printDebugLog(strJobid + "：-------- （４）フロント配送受付在庫結果更新処理 START --------：");

					// 在庫確認済フラグ(0：未済み、1：済み)
					zaikoCfmZmFlg = JFUStrConst.CD00581_0;
					// 在庫確認年月日時分秒
					zaikoCfmDtm = null;
					// フロント配送受付在庫更新結果コード
					hisukZkupRsltCd = JFUStrConst.CD01580_1;
					// フロント配送受付在庫更新結果詳細コード
					hisukZkupRsltDtlCd = errLevel;

					// フロント配送受付在庫結果更新処理
					updFrntHisukZkupInfo(zaikoCfmZmFlg, zaikoCfmDtm, hisukZkupRsltCd, hisukZkupRsltDtlCd, frntHisukZkupNo);

					super.logPrint.printDebugLog(strJobid + "：-------- （４）フロント配送受付在庫結果更新処理 END --------：");
				}

				super.logPrint.printDebugLog(strJobid + "：-------- （５）宅内機器物流在庫更新処理 END --------：");
			}

			// DBコミット処理
			JBSbatBusinessBase.dbcon.commit();
		}

		if (JFUBatCommon.isNotNullCheck(initErrorMsg))
		{
			// エラー情報がある場合

			throw new JBSbatBusinessException(EFUB0180KE, new String[] { initErrorMsg });
		}

		return null;
		/** ▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲ */
	}

	/**
	 * 業務サービス終了処理
	 *
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
		/** ▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼ */
		/** ▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼ */
		// DBアクセスクラスをクローズします
		db_FU_T_FRNT_HISUK_ZKUP.close();
		/** ▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲ */
		/** ▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲ */
	}

	/** ▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼ */

	/**
	 * SQLKEY(FU_SELECT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 *
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数：
	 *		param：順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * </pre>
	 * <p>
	 *
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeFU_T_FRNT_HISUK_ZKUP_FU_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();

		// DBアクセスを実行します
		db_FU_T_FRNT_HISUK_ZKUP.selectBySqlDefine(paramList, FU_T_FRNT_HISUK_ZKUP_FU_SELECT_001);
	}

	/**
	 * SQLKEY(FU_SELECT_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 *
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数：
	 *		param：順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * </pre>
	 * <p>
	 *
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeFU_T_FRNT_HISUK_ZKUP_FU_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_FU_T_FRNT_HISUK_ZKUP.selectBySqlDefine(paramList, FU_T_FRNT_HISUK_ZKUP_FU_SELECT_003);
	}


	/**
	 * SQLKEY(FU_UPDATE_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 *
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 *
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数：
	 *		param：順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	在庫確認済フラグ
	 *		 	在庫確認年月日時分秒
	 *		 	フロント配送受付在庫更新結果コード
	 *		 	フロント配送受付在庫更新結果詳細コード
	 *		 	フロント配送受付在庫更新番号
	 * </pre>
	 * <p>
	 *
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeFU_T_FRNT_HISUK_ZKUP_FU_UPDATE_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());
		paramList.setValue(param[3].toString());
		paramList.setValue(param[4].toString());

		// DBアクセスを実行します
		db_FU_T_FRNT_HISUK_ZKUP.executeBySqlDefine(paramList, FU_T_FRNT_HISUK_ZKUP_FU_UPDATE_001);
	}

	/** ▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲ */

	/**
	 * 初期処理時のログ出力処理です。
	 *
	 * @param strJobid JOBID
	 */
	private void initLog(String strJobid)
	{
		String strBatchUserId = commonItem.getBatchUserId();
		String strSqlDefFilePath = commonItem.getSqlDefFilePath();
		super.logPrint.printDebugLog(strJobid + JFUStrConst.HALF_COLON + strBatchUserId);
		super.logPrint.printDebugLog(strJobid + JFUStrConst.HALF_COLON + strSqlDefFilePath);
	}

	/**
	 * フロント配送受付在庫チェック対象外リストの取得処理です。
	 *
	 * @param strOpeDate 運用日付
	 * @return フロント配送受付在庫チェック対象外リスト
	 */
	private HashSet<String> getExcludeHisuk_zkupList(String strOpeDate)
	{
		// フロント配送受付在庫チェック対象外を取得
		// 宅内機器種別コード;開始年月日;終了年月日,...
		String taknkikiList = JFUBatCommon.getApplicationConst(FU_EXCLUDE_HISUK_ZKUP_LIST);
		// 除外リスト
		HashSet<String> excludeList = new HashSet<String>();

		if (taknkikiList != null)
		{
			String[] blocks = taknkikiList.split(JFUStrConst.S_SEP_CAM);

			if (blocks != null)
			{

				for (int i = 0; i < blocks.length; i++)
				{
					String block = blocks[i];
					if (!JFUBatCommon.isNotNullCheck(block))
					{
						// 未設定の場合は、次の処理へ
						continue;
					}

					String[] lines = block.split(JFUStrConst.S_PARAM_DELIM);
					if (lines == null)
					{
						// 未設定の場合は、
						// 次の処理へ
						continue;
					}

					// 要素数
					int linesLen = lines.length;
					if (linesLen == 0 || linesLen > 3)
					{
						// 未設定、又は一ブロック内に区切り文字が4つ以上の場合は、
						// 次の処理へ
						continue;
					}

					if (linesLen == 1)
					{
						// 「宅内機器種別コード」のみが設定されている場合

						// 日付指定が未設定のは、除外対象とする。
						excludeList.add(lines[0]);
					}
					else if (linesLen == 2)
					{
						// 「宅内機器種別コード;開始年月日」が設定されている場合

						if (!JFUBatCommon.isNotNullCheck(lines[1]))
						{
							// 日付指定が未設定のは、除外対象外とする。
							continue;
						}
						else if (Integer.parseInt(lines[1]) <= Integer.parseInt(strOpeDate))
						{
							// 開始日付のみが設定されている場合、
							// 開始日付が運用日付以前であれば除外対象とする。
							excludeList.add(lines[0]);
						}
						else
						{
							// 開始日付のみが設定されている場合、
							// 開始日付が運用日付より未来日付の場合は除外対象外とする。
							continue;
						}
					}
					else if (linesLen == 3)
					{
						// 「宅内機器種別コード;開始年月日;終了年月日」が設定されている場合

						if (!JFUBatCommon.isNotNullCheck(lines[1]) || !JFUBatCommon.isNotNullCheck(lines[2]))
						{
							// 開始、終了日付指定が未設定のは、除外対象外とする。
							continue;
						}
						else if (Integer.parseInt(lines[1]) <= Integer.parseInt(strOpeDate)
								&& Integer.parseInt(strOpeDate) <= Integer.parseInt(lines[2]))
						{
							// 開始日付が運用日付以前で且つ、終了日付が運用日付以降あれば除外対象とする。
							excludeList.add(lines[0]);
						}
						else
						{
							// 開始日付が運用日付より未来日付、又は、終了日付が運用日付より過去日付あれば除外対象外とする。
							continue;
						}
					}
				}
			}
		}
		return excludeList;
	}

	/**
	 * 在庫処理未済情報の取得処理です。
	 *
	 * @param frntHisukZkupInfoList 在庫処理未済情報リスト
	 * @return 在庫処理未済情報リスト
	 * @throws Exception
	 */
	private int getFrntHisukZkupInfo(ArrayList<HashMap<String, String>> frntHisukZkupInfoList) throws Exception
	{
		// 在庫処理未済データ抽出結果格納領域を生成する。
		JBSbatCommonDBInterface selFrntHisukZkupInfo = new JBSbatCommonDBInterface();

		// 在庫処理未済データ抽出する。
		executeFU_T_FRNT_HISUK_ZKUP_FU_SELECT_001(selFrntHisukZkupInfo.getList().toArray());

		int recordCnt = 0;

		for (selFrntHisukZkupInfo = db_FU_T_FRNT_HISUK_ZKUP.selectNext(); null != selFrntHisukZkupInfo; selFrntHisukZkupInfo =
				db_FU_T_FRNT_HISUK_ZKUP.selectNext())
		{
			// 取得したレコードを1件づつ読込みSQL取得項目を各変数へ格納する。
			recordCnt++;

			// 在庫処理未済データリスト格納領域を生成する。
			HashMap<String, String> frntHisukZkupInfoMap = new HashMap<String, String>();

			// フロント配送受付在庫更新番号
			String frntHisukZkupNo = selFrntHisukZkupInfo.getString(JBSbatFU_T_FRNT_HISUK_ZKUP.FRNT_HISUK_ZKUP_NO);
			// 機器提供サービス契約番号
			String kktkSvcKeiNo = selFrntHisukZkupInfo.getString(JBSbatFU_T_FRNT_HISUK_ZKUP.KKTK_SVC_KEI_NO);
			// 機器変更番号
			String kikiChgNo = selFrntHisukZkupInfo.getString(JBSbatFU_T_FRNT_HISUK_ZKUP.KIKI_CHG_NO);
			// フロント配送受付在庫更新結果コード
			String hisukZkupRsltCd = selFrntHisukZkupInfo.getString(JBSbatFU_T_FRNT_HISUK_ZKUP.HISUK_ZKUP_RSLT_CD);
			// フロント配送受付在庫更新結果詳細コード
			String hisukZkupRsltDtlCd = selFrntHisukZkupInfo.getString(JBSbatFU_T_FRNT_HISUK_ZKUP.HISUK_ZKUP_RSLT_DTL_CD);
			// 在庫更新不可リスト出力済フラグ
			String zkupFailListOputzmFlg = selFrntHisukZkupInfo.getString(JBSbatFU_T_FRNT_HISUK_ZKUP.ZKUP_FAIL_LIST_OPUTZM_FLG);
			// 在庫更新不可リスト出力年月日
			String zkupFailListOputYmd = selFrntHisukZkupInfo.getString(JBSbatFU_T_FRNT_HISUK_ZKUP.ZKUP_FAIL_LIST_OPUT_YMD);
			// 宅内機器種別コード
			String taknkikiSbtCd = selFrntHisukZkupInfo.getString(TAKNKIKI_SBT_CD);
			// 配送受付在庫更新種別コード
			String hisukZkupSbtCd = selFrntHisukZkupInfo.getString(JBSbatFU_T_FRNT_HISUK_ZKUP.HISUK_ZKUP_SBT_CD);

			frntHisukZkupInfoMap.put(JBSbatFU_T_FRNT_HISUK_ZKUP.FRNT_HISUK_ZKUP_NO, frntHisukZkupNo);
			frntHisukZkupInfoMap.put(JBSbatFU_T_FRNT_HISUK_ZKUP.KKTK_SVC_KEI_NO, kktkSvcKeiNo);
			frntHisukZkupInfoMap.put(JBSbatFU_T_FRNT_HISUK_ZKUP.KIKI_CHG_NO, kikiChgNo);
			frntHisukZkupInfoMap.put(JBSbatFU_T_FRNT_HISUK_ZKUP.HISUK_ZKUP_RSLT_CD, hisukZkupRsltCd);
			frntHisukZkupInfoMap.put(JBSbatFU_T_FRNT_HISUK_ZKUP.HISUK_ZKUP_RSLT_DTL_CD, hisukZkupRsltDtlCd);
			frntHisukZkupInfoMap.put(JBSbatFU_T_FRNT_HISUK_ZKUP.ZKUP_FAIL_LIST_OPUTZM_FLG, zkupFailListOputzmFlg);
			frntHisukZkupInfoMap.put(JBSbatFU_T_FRNT_HISUK_ZKUP.ZKUP_FAIL_LIST_OPUT_YMD, zkupFailListOputYmd);
			frntHisukZkupInfoMap.put(TAKNKIKI_SBT_CD, taknkikiSbtCd);
			frntHisukZkupInfoMap.put(JBSbatFU_T_FRNT_HISUK_ZKUP.HISUK_ZKUP_SBT_CD, hisukZkupSbtCd);

			frntHisukZkupInfoList.add(frntHisukZkupInfoMap);
		}
		return recordCnt;
	}

	/**
	 * 宅内機器在庫一意照会の処理です。
	 *
	 * @param strJobid JOBID
	 * @param frntHisukZkupInfoMap 在庫処理未済情報[
	 * @param selOutMap サービスの処理結果格納領域
	 * @return 在庫処理未済情報
	 */
	private HashMap<String, Object> getTaknkikiBrzikoInfo(String strJobid, HashMap<String, String> frntHisukZkupInfoMap,
			HashMap<String, Object> selOutMap)
	{
		// 機器提供サービス契約番号
		String kktkSvcKeiNo = frntHisukZkupInfoMap.get(JBSbatFU_T_FRNT_HISUK_ZKUP.KKTK_SVC_KEI_NO);
		// 機器変更番号
		String kikiChgNo = frntHisukZkupInfoMap.get(JBSbatFU_T_FRNT_HISUK_ZKUP.KIKI_CHG_NO);

		// ユースケースIDを格納するMAP
		HashMap<String, Object> selParamMap = new HashMap<String, Object>();
		// ユースケースIDを設定
		selParamMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, SERVICE_ID);

		// サービスに渡す業務データを格納するMAP
		HashMap<String, Object> selChildMap = new HashMap<String, Object>();
		selChildMap.put(IN_PARAM_FUNC_CD, JPCModelConstant.FUNC_CD_2);
		selChildMap.put(IN_PARAM_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		selChildMap.put(IN_PARAM_KIKI_CHG_NO, kikiChgNo);

		// CC名のマップとして格納する。
		HashMap<String, Object> selInMap = new HashMap<String, Object>();
		selInMap.put(CC_TITLE, selChildMap);

		// 宅内機器物流在庫一意照会
		// サービス呼出
		JFUBatCommon.invokeService(super.commonItem, selParamMap, selInMap, selOutMap);

		return selOutMap;
	}

	/**
	 * 宅内機器在庫更新の処理です。
	 *
	 * @param strJobid JOBID
	 * @param frntHisukZkupInfoMap 在庫処理未済情報
	 * @param updOutMap サービスの処理結果格納領域
	 * @return 在庫処理未済情報
	 */
	private HashMap<String, Object> updTaknkikiBrzikoInfo(String strJobid, HashMap<String, String> frntHisukZkupInfoMap,
			HashMap<String, Object> updOutMap)
	{

		// 在庫処理未済データ抽出処理


		// 機器提供サービス契約番号
		String kktkSvcKeiNo = frntHisukZkupInfoMap.get(JBSbatFU_T_FRNT_HISUK_ZKUP.KKTK_SVC_KEI_NO);
		// 機器変更番号
		String kikiChgNo = frntHisukZkupInfoMap.get(JBSbatFU_T_FRNT_HISUK_ZKUP.KIKI_CHG_NO);
		// 配送受付在庫更新種別コード
		String hisukZkupSbtCd = frntHisukZkupInfoMap.get(JBSbatFU_T_FRNT_HISUK_ZKUP.HISUK_ZKUP_SBT_CD);

		if (!JFUBatCommon.isNotNullCheck(hisukZkupSbtCd))
		{
			// 未設定の場合は、配送受付在庫更新種別コードに配送受付:1を設定する。
			hisukZkupSbtCd = JFUStrConst.CD01617_1;
		}

		// ユースケースIDを格納するMAP
		HashMap<String, Object> updParamMap = new HashMap<String, Object>();
		// ユースケースIDを設定
		updParamMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, SERVICE_ID);

		// サービスに渡す業務データを格納するMAP
		HashMap<String, Object> updChildMap = new HashMap<String, Object>();
		updChildMap.put(IN_PARAM_FUNC_CD, JPCModelConstant.FUNC_CD_1);
		updChildMap.put(IN_PARAM_KKTK_SVC_KEI_NO, kktkSvcKeiNo);
		updChildMap.put(IN_PARAM_KIKI_CHG_NO, kikiChgNo);
		updChildMap.put(IN_PARAM_HISUK_ZKUP_SBT_CD, hisukZkupSbtCd);

		// CC名のマップとして格納する。
		HashMap<String, Object> updInMap = new HashMap<String, Object>();
		updInMap.put(CC_TITLE, updChildMap);

		// 宅内機器物流在庫更新
		// サービス呼出
		JFUBatCommon.invokeService(super.commonItem, updParamMap, updInMap, updOutMap);

		return updOutMap;
	}

	/**
	 * エラーメッセージの設定処理です。
	 *
	 * @param outDtlMap サービス処理結果の詳細情報
	 * @param funcCd 機能コード
	 * @return エラーメッセージ
	 */
	private String setErrorMsg(HashMap<String, Object> outDtlMap, String funcCd)
	{
		// エラーレベル、リターンコード、リターンメッセージ
		String errLevel = JFUStrConst.EMPTY;
		String returnCd = JFUStrConst.EMPTY;
		String returnMsg = JFUStrConst.EMPTY;

		if (outDtlMap != null)
		{
			// エラー情報が格納されている場合

			// エラーレベル
			errLevel = (String)outDtlMap.get(OUT_PARAM_ERROR_LEVEL);
			// リターンコード
			returnCd = (String)outDtlMap.get(OUT_PARAM_RETURN_CD);
			// リターンメッセージ
			returnMsg = (String)outDtlMap.get(OUT_PARAM_RETURN_MESSAGE);
		}

		String errMsg =
				new StringBuffer().append(OUT_LOG_ERROR_LEVEL).append(errLevel).append(OUT_LOG_RETURN_CD).append(returnCd).append(
						OUT_LOG_RETURN_MESSAGE).append(returnMsg).append(
						JPCModelConstant.FUNC_CD_2.equals(funcCd) ? "：Web受付機器受注数連携(在庫一意照会)" : "：Web受付機器受注数連携(在庫更新)").toString();
		return errMsg;
	}

	/**
	 * 初回エラーメッセージの設定処理です。
	 *
	 * @param hisukZkupRsltCd フロント配送受付在庫更新結果コード
	 * @param errMsg エラーメッセージ
	 * @param outDtlMap サービス処理結果の詳細情報
	 * @param funcCd 機能コード
	 * @return エラーメッセージ
	 */
	private String setInitErrorMsg(String hisukZkupRsltCd, String errMsg, HashMap<String, Object> outDtlMap, String funcCd)
	{
		if (!JFUStrConst.CD01580_1.equals(hisukZkupRsltCd))
		{
			// フロント配送受付在庫更新結果コードが異常以外で且つ、メジャーアラーム出力フラグが未の場合

			// エラーレベル、リターンコード、リターンメッセージ
			String errLevel = JFUStrConst.EMPTY;
			String returnCd = JFUStrConst.EMPTY;
			String returnMsg = JFUStrConst.EMPTY;

			if (outDtlMap != null)
			{
				// エラー情報が格納されている場合

				// エラーレベル
				errLevel = nvl((String)outDtlMap.get(OUT_PARAM_ERROR_LEVEL), JFUStrConst.EMPTY);
				// リターンコード
				returnCd = nvl((String)outDtlMap.get(OUT_PARAM_RETURN_CD), JFUStrConst.EMPTY);
				// リターンメッセージ
				returnMsg = nvl((String)outDtlMap.get(OUT_PARAM_RETURN_MESSAGE), JFUStrConst.EMPTY);
			}

			if (!JFUStrConst.CD01581_000.equals(errLevel))
			{
				// エラー情報が正常以外の場合

				errMsg =
						new StringBuffer().append(OUT_LOG_ERROR_LEVEL).append(errLevel).append(OUT_LOG_RETURN_CD).append(returnCd).append(
								OUT_LOG_RETURN_MESSAGE).append(returnMsg).append(
								JPCModelConstant.FUNC_CD_2.equals(funcCd) ? "：Web受付機器受注数連携(在庫一意照会)" : "：Web受付機器受注数連携(在庫更新)").toString();
			}
		}
		return errMsg;
	}

	/**
	 * null値変換処理です。
	 *
	 * @param arg1 引数１
	 * @param arg2 引数２
	 * @return 引数１がnullの場合は引数２、null以外の場合は引数１を返却する。
	 */
	public static String nvl(String arg1, String arg2)
	{
		return null == arg1 ? arg2 : arg1;
	}

	/**
	 * フロント配送受付在庫更新処理です。
	 *
	 * @param zaikoCfmZmFlg
	 * @param zaikoCfmDtm
	 * @param hisukZkupRsltCd
	 * @param hisukZkupRsltDtlCd
	 * @param frntHisukZkupNo
	 * @throws Exception
	 */
	private void updFrntHisukZkupInfo(String zaikoCfmZmFlg, String zaikoCfmDtm, String hisukZkupRsltCd, String hisukZkupRsltDtlCd,
			String frntHisukZkupNo) throws Exception
	{
		// 在庫処理未済内容
		JBSbatCommonDBInterface updFrntHisukZkupInfo = new JBSbatCommonDBInterface();
		updFrntHisukZkupInfo.setValue(zaikoCfmZmFlg);// 在庫確認済フラグ(0：未済み、1：済み)
		updFrntHisukZkupInfo.setValue(zaikoCfmDtm);// 在庫確認年月日時分秒
		updFrntHisukZkupInfo.setValue(hisukZkupRsltCd);// フロント配送受付在庫更新結果コード
		updFrntHisukZkupInfo.setValue(hisukZkupRsltDtlCd);// フロント配送受付在庫更新結果詳細コード
		updFrntHisukZkupInfo.setValue(frntHisukZkupNo);// フロント配送受付在庫更新番号
		executeFU_T_FRNT_HISUK_ZKUP_FU_UPDATE_001(updFrntHisukZkupInfo.getList().toArray());
	}
}
