/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKikiMiaddCustListCst
*	ソースファイル名	：JBSbatKKKikiMiaddCustListCst.java
*	作成者				：富士通　
*	作成日				：2011年07月13日
*＜機能概要＞
*　機器未登録お客様チェックリスト抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/13	FJ）庭山	新規作成
*	v2.00.00	2012/04/09	FJ）神吉	【TAI-2012-0000027】排他制御対応
*	v3.00.00	2012/11/01	FJ）倉上	【ST1-2012-0000856】障害対応
*	v4.00.00	2013/01/26	FJ) 古内	【ST4-2013-0000080】性能障害対応
*	v4.01.00	2013/01/31	FJ) 古内	【ST4-2013-0000080】性能障害対応
*	v5.00.00	2013/03/21	FJ) 団		【IT1-2013-0000498】横展開対応
*   v14.00.00	2015/5/29	FJ) 大矢根	【OM-2015-0000584】排他制御対応
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM031;
import eo.business.util.table.JBSbatKK_T_KJ_FIN_WK;
import eo.business.util.table.JBSbatKK_T_KKTK_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVKEI_EXC_CTRL;
import eo.business.util.table.JBSbatKK_T_SVKEI_KAISEN_UW;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.util.JBSbatDateUtil;
import eo.framework.util.JBSbatStringUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKKikiMiaddCustListCst extends JBSbatBusinessService
{
	/**
	 * 工事案件種別コード（新設）
	 */
	private static final String KOJIAK_CD_NEWESTA = "001";

	/**
	 * 工事案件種別コード（面開発）
	 */
	private static final String KOJIAK_CD_MNKHT = "012";

	/**
	 * 工事案件種別コード（リンクSTB）
	 */
	private static final String KOJIAK_CD_STB = "008";

	/**
	 * 機器未登録リスト出力済フラグ（出力済）
	 */
	private static final String KIKI_MIADD_LIST_OPUTZM_FLG = "1";

	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約＿工事案件)*/
	private static final String D_TBL_NAME_KU_T_SVKEI_KOJIAK = "KU_T_SVKEI_KOJIAK";

	/** テーブル(回線対象サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KAISEN_TG_SVKEI = "KK_T_KAISEN_TG_SVKEI";

	/** テーブル(機器提供サービス契約)*/
	private static final String D_TBL_NAME_KK_T_KKTK_SVC_KEI = "KK_T_KKTK_SVC_KEI";

	/** テーブル(配送対象物品)*/
	private static final String D_TBL_NAME_DK_T_HAISO_TG_BPIN = "DK_T_HAISO_TG_BPIN";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** SQL定義キー(KK_SELECT_005)*/
	private static final String KK_T_KAISEN_TG_SVKEI_KK_SELECT_005 = "KK_SELECT_005";

	/** SQL定義キー(KK_SELECT_011)*/
	private static final String KK_T_KKTK_SVC_KEI_KK_SELECT_011 = "KK_SELECT_011";

	/** SQL定義キー(KK_SELECT_001)*/
	private static final String DK_T_HAISO_TG_BPIN_KK_SELECT_001 = "KK_SELECT_001";

	/** SQL定義キー(KK_SELECT_058)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_058 = "KK_SELECT_058";
	
	/** テーブル(サービス契約排他制御)*/
	private static final String D_TBL_NAME_KK_T_SVKEI_EXC_CTRL = "KK_T_SVKEI_EXC_CTRL";

	/** テーブルアクセスクラス(サービス契約＿工事案件)*/
	private JBSbatSQLAccess db_KU_T_SVKEI_KOJIAK = null;

	/** テーブルアクセスクラス(回線対象サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KAISEN_TG_SVKEI = null;

	/** テーブルアクセスクラス(機器提供サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KKTK_SVC_KEI = null;

	/** テーブルアクセスクラス(配送対象物品)*/
	private JBSbatSQLAccess db_DK_T_HAISO_TG_BPIN = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(サービス契約排他制御)*/
	private JBSbatSQLAccess db_KK_T_SVKEI_EXC_CTRL = null;
	
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/**
	 * 工事案件番号リスト
	 */
	private ArrayList<String> kojiak_list = null;
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KU_T_SVKEI_KOJIAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_SVKEI_KOJIAK);
		db_KK_T_KAISEN_TG_SVKEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KAISEN_TG_SVKEI);
		db_KK_T_KKTK_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_KKTK_SVC_KEI);
		db_DK_T_HAISO_TG_BPIN = new JBSbatSQLAccess(commonItem, D_TBL_NAME_DK_T_HAISO_TG_BPIN);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_SVKEI_EXC_CTRL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVKEI_EXC_CTRL);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		super.logPrint.printDebugLog("execute_START");

		JBSbatOutputItem out_bean = null;
		JBSbatCommonDBInterface db_map = null;
		JBSbatCommonDBInterface svc_map = null;

		String[] param = new String[1];
		String[] svc_prm = new String[2];
		String svc_kei_no = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO));

		// バインド変数設定
		param[0] = svc_kei_no;

		super.logPrint.printDebugLog("サービス契約番号:::::" + svc_kei_no);
		
		// 工事案件情報の状態確認を行います
		if (isKojiak(inMap))
		{
			JBSbatCommonDBInterface commonDb = null;
			
			JBSbatCommonDBInterface where_map = new JBSbatCommonDBInterface();
			
			where_map.setValue(JBSbatKK_T_SVKEI_EXC_CTRL.SVC_KEI_NO, svc_kei_no);
			
			// サービス契約排他制御の排他検索処理
			commonDb = db_KK_T_SVKEI_EXC_CTRL.selectByPrimaryKeysForUpdateWait(where_map);
			
			// 排他エラーの場合
			if(null == commonDb)
			{
				super.logPrint.printBusinessErrorLog("EKKB0360KE",
						new String[]{"サービス契約排他制御TBL", svc_kei_no});
						super.logPrint.printDebugLog("排他エラーが発生しました。{SVC_KEI_NO:" + svc_kei_no + "}");

						return null;
			}
			
			// サービス契約回線内訳の検索を行います
			executeKK_T_KAISEN_TG_SVKEI_KK_SELECT_005(param);
			db_map = db_KK_T_KAISEN_TG_SVKEI.selectNext();

			while (db_map != null)
			{

				// 機器提供サービス契約の存在確認を行います
				if (!isKktkSvcKei(svc_kei_no, db_map))
				{
					// ファイル出力処理を行います
					out_bean = executeOutFile(out_bean, inMap, db_map);
				}
				else
				{
					// 配送情報の存在確認を行います
					if (!isHaiso(db_map))
					{
						// ファイル出力処理を行います
						out_bean = executeOutFile(out_bean, inMap, db_map);
					}
				}

				db_map = db_KK_T_KAISEN_TG_SVKEI.selectNext();
			}

			// ファイル出力を行った場合、以下の処理を行います。
			if (out_bean != null)
			{
				// サービス契約番号のカレントに対して、更新処理を行います。
				executeSvcKei(svc_kei_no, inMap.getString(JBSbatKK_T_SVC_KEI.GENE_ADD_DTM));

				svc_prm[0] = svc_kei_no;
				svc_prm[1] = super.opeDate;

				// サービス契約番号の予約レコードを検索します。
				executeKK_T_SVC_KEI_KK_SELECT_058(svc_prm);
				svc_map = db_KK_T_SVC_KEI.selectNext();

				// 対象が存在する場合、以下の処理を行います。
				while (svc_map != null)
				{
					// サービス契約番号の予約レコードに対して、更新処理を行います。
					executeSvcKei(svc_kei_no, svc_map.getString(JBSbatKK_T_SVC_KEI.GENE_ADD_DTM));

					svc_map = db_KK_T_SVC_KEI.selectNext();
				}
				
				// サービス契約排他制御更新
				upDateSvkeiExcCtrl(svc_kei_no);
			}
		}
		
		// ++++++++++ v14.00.00 追加開始 ++++++++++ //
		super.commit();
		// ++++++++++ v14.00.00 追加終了 ++++++++++ //
		
		super.logPrint.printDebugLog("execute_END");

		return out_bean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KU_T_SVKEI_KOJIAK.close();
		db_KK_T_KAISEN_TG_SVKEI.close();
		db_KK_T_KKTK_SVC_KEI.close();
		db_DK_T_HAISO_TG_BPIN.close();
		db_KK_T_SVC_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/

	/**
	 * SQLKEY(KK_SELECT_005)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KAISEN_TG_SVKEI_KK_SELECT_005(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_KAISEN_TG_SVKEI.selectBySqlDefine(paramList, KK_T_KAISEN_TG_SVKEI_KK_SELECT_005);
	}

	/**
	 * SQLKEY(KK_SELECT_011)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約回線内訳番号
	 *		 	機器提供サービスコード
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_KKTK_SVC_KEI_KK_SELECT_011(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());
		paramList.setValue(param[2].toString());

		// DBアクセスを実行します
		db_KK_T_KKTK_SVC_KEI.selectBySqlDefine(paramList, KK_T_KKTK_SVC_KEI_KK_SELECT_011);
	}

	/**
	 * SQLKEY(KK_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 executeDK_T_HAISO_TG_BPIN_KK_SELECT_001(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_DK_T_HAISO_TG_BPIN.selectBySqlDefine(paramList, DK_T_HAISO_TG_BPIN_KK_SELECT_001);
	}

	/**
	 * SQLKEY(KK_SELECT_058)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	予約適用年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_KK_SELECT_058(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_058);
	}

	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	機器未登録リスト出力済フラグ				KIKI_MIADD_LIST_OPUTZM_FLG
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SVC_KEI_NO
	 *		 	GENE_ADD_DTM
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKK_T_SVC_KEI_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("KIKI_MIADD_LIST_OPUTZM_FLG", setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SVC_KEI_NO", whereParam[0]);
		whereMap.setValue("GENE_ADD_DTM", whereParam[1]);

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.updateByPrimaryKeys(whereMap, setMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 工事案件の状態確認を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.DBアクセスを実行します。<br>
	 *
	 * 2.工事案件種別コードが「新設」又は「面開発」又は「リンクSTB」か判定します。<br>
	 * 
	 * 3.工事案件実施年月日≦運用日か判定します。<br>
	 * 
	 * 4.条件を満たしている場合true、満たしていない場合falseを返します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param param　バインド変数リスト。
	 * @return boolean　判定結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean isKojiak(JBSbatServiceInterfaceMap param) throws Exception
	{
		kojiak_list = new ArrayList<String>();

		String cd = JBSbatStringUtil.Rtrim(param.getString(JBSbatKK_T_KJ_FIN_WK.KOJIAK_SBT_CD));
		String ymd = JBSbatStringUtil.Rtrim(param.getString(JBSbatKK_T_KJ_FIN_WK.KOJIAK_JSSI_YMD));
		String newChgeCd = JBSbatStringUtil.Rtrim(param.getString(JBSbatKK_T_KJ_FIN_WK.NEW_CHGE_CD));
		
		// 工事完了取消は対象外とする。
		if ("5".equals(newChgeCd) && "20991231".equals(ymd))
		{
			return false;
		}
		
		// 工事案件種別コードの判定をします
		if (!(KOJIAK_CD_NEWESTA.equals(cd) || KOJIAK_CD_MNKHT.equals(cd) || KOJIAK_CD_STB.equals(cd)))
		{
			return false;
		}
		
		if (JBSbatDateUtil.dayDiff(ymd, super.opeDate, "1") > 1)
		{
			return false;
		}

		kojiak_list.add(JBSbatStringUtil.Rtrim(param.getString(JBSbatKK_T_KJ_FIN_WK.KOJIAK_NO)));

		return true;
	}

	/**
	 * 機器提供サービス契約の存在確認を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.DBアクセスを実行します。<br>
	 *
	 * 2.存在している場合true、存在していない場合falseを返します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param svc_no　入力電文。
	 * @param db_map　回線内訳データ。
	 * @return boolean　判定結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean isKktkSvcKei(String svc_no, JBSbatCommonDBInterface db_map) throws Exception
	{
		boolean rtn_flg = false;
		JBSbatCommonDBInterface out_map = null;

		String[] param = new String[3];
		param[0] = JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_T_SVKEI_KAISEN_UW.SVC_KEI_KAISEN_UCWK_NO));
		param[1] = super.freeItem;
		param[2] = super.opeDate;

		// 検索実行
		executeKK_T_KKTK_SVC_KEI_KK_SELECT_011(param);

		// 検索結果を取得
		out_map = db_KK_T_KKTK_SVC_KEI.selectNext();

		if (out_map != null)
		{
			db_map.setValue(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO, JBSbatStringUtil.Rtrim(out_map.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO)));
			rtn_flg = true;
		}

		return rtn_flg;
	}

	/**
	 * 配送の存在確認を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.DBアクセスを実行します。<br>
	 *
	 * 2.存在している場合true、存在していない場合falseを返します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param db_map　機器提供データ。
	 * @return boolean　判定結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private boolean isHaiso(JBSbatCommonDBInterface db_map) throws Exception
	{
		boolean rtn_flg = false;
		JBSbatCommonDBInterface out_map = null;

		String[] param = new String[1];
		param[0] = JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_T_KKTK_SVC_KEI.KKTK_SVC_KEI_NO));

		// 検索実行
		executeDK_T_HAISO_TG_BPIN_KK_SELECT_001(param);

		// 検索結果を取得
		out_map = db_DK_T_HAISO_TG_BPIN.selectNext();

		if (out_map != null)
		{
			rtn_flg = true;
		}

		return rtn_flg;
	}

	/**
	 * サービス契約への更新処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.排他検索を実行します。<br>
	 *
	 * 2.更新処理を実行します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param key_no　サービス契約番号。
	 * @param key_dtm　世代登録年月日時分秒。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeSvcKei(String key_no, String key_dtm) throws Exception
	{
		JBSbatCommonDBInterface out_map = null;
		JBSbatCommonDBInterface where_map = new JBSbatCommonDBInterface();
		String[] value = new String[1];
		String[] param = new String[2];

		// PK検索を行います。
		where_map.setValue(JBSbatKK_T_SVC_KEI.SVC_KEI_NO, key_no);
		where_map.setValue(JBSbatKK_T_SVC_KEI.GENE_ADD_DTM, key_dtm);

		out_map = db_KK_T_SVC_KEI.selectByPrimaryKeys(where_map);

		if (out_map != null)
		{
			param[0] = key_no;
			param[1] = key_dtm;

			value[0] = KIKI_MIADD_LIST_OPUTZM_FLG;

			// 更新処理を行います
			executeKK_T_SVC_KEI_PKUPDATE(value, param);
		}
		else
		{
			// 検索結果が無い場合は、システムエラーにする。
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, 
					new String[]{"サービス契約", "サービス契約番号：" + key_no});
		}
	}

	/**
	 * ファイルへの出力処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.出力処理をします。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param bean　出力情報。
	 * @param in_map　入力電文。
	 * @param db_map　サービス契約回線内訳情報。
	 * @return JBSbatOutputItem　出力情報。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatOutputItem executeOutFile(JBSbatOutputItem bean,
											JBSbatServiceInterfaceMap in_map,
											JBSbatCommonDBInterface db_map) throws Exception
	{
		JBSbatServiceInterfaceMap out_map = new JBSbatServiceInterfaceMap();
		JBSbatOutputItem out_bean = bean;

		if (out_bean == null)
		{
			out_bean = new JBSbatOutputItem();
		}

		for (int i = 0; i < kojiak_list.size(); i++)
		{
			// 出力項目の設定をします
			out_map.setString(JBSbatKKIFM031.SVKEI_NO, JBSbatStringUtil.Rtrim(in_map.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_NO)));
			out_map.setString(JBSbatKKIFM031.KJAK_NO, kojiak_list.get(i));
			out_map.setString(JBSbatKKIFM031.SVC_STAYMD, JBSbatStringUtil.Rtrim(in_map.getString(JBSbatKK_T_SVC_KEI.SVC_STA_YMD)));
			out_map.setString(JBSbatKKIFM031.KISN_PLACE_AD_CD, JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AD_CD)));
			out_map.setString(JBSbatKKIFM031.KISN_PLACE_STATE_NM, JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_STATE_NM)));
			out_map.setString(JBSbatKKIFM031.KISN_PLACE_CITY_NM, JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_CITY_NM)));
			out_map.setString(JBSbatKKIFM031.KISN_PLACE_OAZTSU_NM, JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_OAZTSU_NM)));
			out_map.setString(JBSbatKKIFM031.KISN_PLACE_AZCHO_NM, JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_AZCHO_NM)));
			out_map.setString(JBSbatKKIFM031.KISN_PLACE_BNCHIGO, JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_BNCHIGO)));
			out_map.setString(JBSbatKKIFM031.KISN_PLACE_ADRTTM, JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRTTM)));
			out_map.setString(JBSbatKKIFM031.KISN_PLACE_ADRRM, JBSbatStringUtil.Rtrim(db_map.getString(JBSbatKK_T_SVKEI_KAISEN_UW.KAISEN_PLACE_ADRRM)));

			// 出力フラグを設定します
			out_map.setOutFlg(true);

			out_bean.addOutMapList(out_map);
		}

		return out_bean;
	}
	
	/**
	 * サービス契約排他制御への更新処理を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.更新処理を実行します。<br>
	 * 
	 * </pre>
	 * <p>
	 * @param svcKeiNo　サービス契約番号。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void upDateSvkeiExcCtrl(String svcKeiNo) throws Exception
	{
		// サービス契約排他制御の最終更新年月日時分秒の更新を行う。
		JBSbatCommonDBInterface paramMap = new JBSbatCommonDBInterface();
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		
		// サービス契約番号を設定
		whereMap.setValue(JBSbatKK_T_SVKEI_EXC_CTRL.SVC_KEI_NO, svcKeiNo);
		
		// 最終更新年月日時分秒を更新。
		paramMap.setValue(JBSbatKK_T_SVKEI_EXC_CTRL.LAST_UPD_DTM, JBSbatDateUtil.getSystemDateTimeStamp());
		db_KK_T_SVKEI_EXC_CTRL.updateByPrimaryKeys(whereMap, paramMap);
	}
	
}
