/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom						 *
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKVcIns
*	ソースファイル名	：JBSbatKKVcIns.java
*	作成者				：富士通　
*	作成日				：2017年05月22日
*＜機能概要＞
*	メールウィルスチェック登録部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v32.00.00	2017/05/22  FJ)			新規作成(【ANK-3149-20-00】メールウイルスチェックの自動登録)
*	v32.01.00	2017/07/07  FJ)大崎		【IT2-2017-0000020】サービス呼出等でエラーが発生した場合に処理停止を抑止する
*	v32.02.00	2017/07/18  FJ)藤本		【ANK-3149-20-00】強制終了日、処理間隔を指定可能にする
*********************************************************************/
package eo.business.service;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.business.common.JKKBatConst;
import eo.business.util.file.JBSbatKKIFM736;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_SVKEI_EXC_CTRL;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.application.JBSbatBusinessBase;
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.JCCBatchEsbInterface;

/**
* メールウィルスチェック登録部品です。 <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKVcIns extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	
	/** テーブル(サービス契約排他制御)*/
	private static final String D_TBL_NAME_KK_T_SVKEI_EXC_CTRL = "KK_T_SVKEI_EXC_CTRL";
	
	/** テーブルアクセスクラス(サービス契約排他制御)*/
	private JBSbatSQLAccess db_KK_T_SVKEI_EXC_CTRL = null;
	
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	// Eメール情報変更CCマップ リクエストキー
	private static final String EmailInfoChgCfmCC = "EmailInfoChgCfmCC";
	
	// サービスオーダ発行CCマップ リクエストキー
	private static final String HakkoSODCC = "HakkoSODCC";
	
	// サービスオーダ発行CCマップ リクエストキー
	private static final String UpdMkmScinsprtWkCC = "UpdMkmScinsprtWkCC";
	
	// サービスワークマップ リクエストキー
	private static final String KKSV0428WORK = "KKSV0428WORK";
	
	/** フリー項目[終了時間] */
	private String free = null;
	
	/** テーブルアクセスクラス(サービス契約 KK_SELECT_333専用)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI_333 = null;
	
	/** Eメール情報変更確認サービス ユースケースID */
	private static final String USECASE_ID = "KKSV0428";
	
	/** Eメール情報変更確認 オペレーションID */
	private static final String OPERATION_ID = "KKSV0428OP";
	
	/** SQL定義キー(KK_SELECT_131) */
	private static final String KK_T_SVC_KEI_KK_SELECT_333 = "KK_SELECT_333";
	
	
	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/

		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);
		
		// DBアクセスクラスを生成します
		db_KK_T_SVKEI_EXC_CTRL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVKEI_EXC_CTRL);
		db_KK_T_SVC_KEI_333 = new JBSbatSQLAccess(commonItem, JBSbatKK_T_SVC_KEI.TABLE_NAME);
		
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap 入力電文
	 * @return JBSbatOutputItem 出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// システム日付の取得
		String sysDate = JCCBatCommon.getSysDateTimeStamp();
		Calendar calSys = Calendar.getInstance();
		
		// シェルから渡されたfreeの値を取得
		free = (String)commonItem.getFreeItem();
		String[] lines = free.split(JKKBatConst.S_PARAM_DELIM);
		
		// 処理終了時刻の設定
		String endTime = null;
		StringBuffer buf = new StringBuffer();
		// ANK-3149-20-00 MOD START
//		buf.append(lines[1]);
		String endDate = lines[1];
		// 強制終了日(起動日からの日数)を取得
		int endDays = Integer.parseInt(lines[2]);
		if (0 < endDays)
		{
			endDate = JBSbatDateUtil.adjustDate(endDate, endDays);
		}
		buf.append(endDate);
		// ANK-3149-20-00 MOD END
		
		// シェルから渡された時刻から、処理終了時刻を設定する
		if (lines[0].length() == 4) {
			// 4桁の場合、パラメータから取得した時分を設定する
			buf.append(lines[0]);
			buf.append("00000");
			endTime = buf.toString();
		}
		else {
			// 4桁以外の場合、時分に「22時50分」を設定する
			buf.append("225000000");
			endTime = buf.toString();
		}
		// ANK-3149-20-00 ADD START
		super.logPrint.printLogMsg(JBSbatBusinessBase.SYSTEM_INFORMATION, "強制終了時刻：" + endTime);
		// ANK-3149-20-00 ADD END

		Calendar calEnd = Calendar.getInstance();
		calEnd.set(Integer.parseInt(endTime.substring(0,4)), Integer.parseInt(endTime.substring(4,6)) - 1
					, Integer.parseInt(endTime.substring(6,8)), Integer.parseInt(endTime.substring(8,10))
					, Integer.parseInt(endTime.substring(10,12)), Integer.parseInt(endTime.substring(12,14)));
		
		// 強制終了時刻を過ぎていれば、以降の処理を行わず終了する。
		if (calSys.compareTo(calEnd) > 0) {
			// ANK-3149-20-00 MOD START
//			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB1270CW, new String[] {"夜間バッチ開始10分前のため、VC登録処理を強制終了します。"});
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB1270CW, new String[] {"強制終了時刻を過ぎたため、VC登録処理を強制終了します。"});
			// ANK-3149-20-00 MOD END
		}
		
		// 処理開始時間と入力ファイル情報をログ出力
		super.logPrint.printLogMsg(JBSbatBusinessBase.SYSTEM_INFORMATION, "開始時刻：" + sysDate);
		super.logPrint.printLogMsg(JBSbatBusinessBase.SYSTEM_INFORMATION, 
										"SVC_KEI_NO="           + inMap.getString(JBSbatKKIFM736.SVC_KEI_NO)
										+ ", SYSID="            + inMap.getString(JBSbatKKIFM736.SYSID)
										+ ", OP_SVC_KEI_NO="    + inMap.getString(JBSbatKKIFM736.OP_SVC_KEI_NO)
										+ ", OP_UPD_DTM="       + inMap.getString(JBSbatKKIFM736.OP_UPD_DTM)
										+ ", GENE_ADD_DTM="     + inMap.getString(JBSbatKKIFM736.GENE_ADD_DTM)
										+ ", OP_SVC_KEI_STAT="  + inMap.getString(JBSbatKKIFM736.OP_SVC_KEI_STAT)
										+ ", DSP_SVCTK_STAYMD=" + inMap.getString(JBSbatKKIFM736.DSP_SVCTK_STAYMD)
										+ ", MLAD="             + inMap.getString(JBSbatKKIFM736.MLAD)
										+ ", CAPA="             + inMap.getString(JBSbatKKIFM736.CAPA)
										+ ", WRIB_SVC_KEI_NO="  + inMap.getString(JBSbatKKIFM736.WRIB_SVC_KEI_NO)
										+ ", WRIB_UPD_DTM="     + inMap.getString(JBSbatKKIFM736.WRIB_UPD_DTM));
		
		// IT2-2017-0000020 ADD START
		try {
		// IT2-2017-0000020 ADD END
			// SQL実行結果のサービス契約ステータスを取得する(更新が行われている場合はNULL)
			String svcKeiStat = chkUpdate(inMap, super.opeDate);
			
			// 移行対象のデータが更新されている場合、登録処理を行わず終了する。
			if (svcKeiStat == null) {
				// コメントをログ出力する
				super.logPrint.printLogMsg(JBSbatBusinessBase.SYSTEM_INFORMATION, "登録処理が行われませんでした。");
			}
			else {
				HashMap<String, Object> paramMap = new HashMap<String, Object>();
				// サービスに渡す業務データを格納するMAP
				HashMap<String, Object> inputMap = new HashMap<String, Object>();
				// サービスの処理結果が格納されるMAP
				HashMap<String, Object> outputMap = new HashMap<String, Object>();
				
				// サービスＩＤのセット
				paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, USECASE_ID);
				paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, OPERATION_ID);
				
				// inputMapにCCに必要な情報をセットする
				inputMap.put(EmailInfoChgCfmCC, setEmailInfoChgCfmCC(inMap));
				inputMap.put(HakkoSODCC, setJKKHakkoSODCC(inMap));
				inputMap.put(UpdMkmScinsprtWkCC, setUpdMkmScinsprtWkCC(inMap));
				
				HashMap<String, Object> workMap = new HashMap<String, Object>();
				
				// ワークマップに値を設定する
				workMap.put("svc_kei_stat", svcKeiStat);
				workMap.put("func_code", "1");
				inputMap.put(KKSV0428WORK, workMap);
				
				// Eメール情報変更確認サービスを呼び出す
				JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inputMap, outputMap);
				
				// IT2-2017-0000020 ADD START
				// BPサービスの戻り値をチェック
				String returnCode = outputMap.get(JCCBatchEsbInterface.RETURN_CODE).toString();
				if (!JCCBatchEsbInterface.RETURN_CODE_SUCCESS.equals(returnCode))
				{
					throw new Exception();
				}
				//IT2-2017-0000020 ADD END
				
				// コメントをログ出力する。
				super.logPrint.printLogMsg(JBSbatBusinessBase.SYSTEM_INFORMATION, "登録処理が正常終了しました。");
			}
		// IT2-2017-0000020 ADD START
		} 
		catch (Exception e) 
		{
			String opSvcKeiNo = inMap.getString(JBSbatKKIFM736.OP_SVC_KEI_NO);
			String svcKeiNo = inMap.getString(JBSbatKKIFM736.SVC_KEI_NO);
			// エラーログ出力
			commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW, new String[]{"オプションサービス契約番号：" + opSvcKeiNo + "　サービス契約番号：" + svcKeiNo});
			
			// エラーフラグ設定
			super.commonItem.setErrFlg(true);
		}
		// IT2-2017-0000020 ADD END
		
		// 処理終了時間をログ出力する。
		super.logPrint.printLogMsg(JBSbatBusinessBase.SYSTEM_INFORMATION, "終了時刻：" + JCCBatCommon.getSysDateTimeStamp());

		// ANK-3149-20-00 ADD START
		// 1データごとの処理間隔(秒数)でSleepする
		long millis = (long)(Double.parseDouble(lines[3]) * 1000);
		Thread.sleep(millis);
		// ANK-3149-20-00 ADD END

		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVKEI_EXC_CTRL.close();
		db_KK_T_SVC_KEI_333.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	
	/**
	 * 上りマッピングをする
	 * @param inMap 入力電文
	 * @return HashMap<String, Object> 処理結果
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> setEmailInfoChgCfmCC(JBSbatServiceInterfaceMap inMap) throws Exception 
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		
		// 入力ファイル.ＳＹＳＩＤ → Eメール情報変更CCマップ.SYSID
		parentMap.put("sysid", inMap.getString(JBSbatKKIFM736.SYSID));
		// "00031" → Eメール情報変更CCマップ.異動区分
		parentMap.put("ido_div", "00031");
		// 入力ファイル.サービス契約番号 → Eメール情報変更CCマップ.サービス契約番号
		parentMap.put("svc_kei_no", inMap.getString(JBSbatKKIFM736.SVC_KEI_NO));
		// 入力ファイル.オプションサービス契約番号 → Eメール情報変更CCマップ.オプションサービス契約番号
		parentMap.put("op_svc_kei_no", inMap.getString(JBSbatKKIFM736.OP_SVC_KEI_NO));
		// 入力ファイル.更新前年月日時分秒＿オプションサービス契約 → Eメール情報変更CCマップ.オプション更新前年月日時分秒
		parentMap.put("upd_dtm_bf_op", getSvkeiLastUpdDtm(inMap.getString(JBSbatKKIFM736.SVC_KEI_NO)));
		// "B01" → Eメール情報変更CCマップ.料金コースコード
		parentMap.put("pcrs_cd", "B01");
		// "PB0101" → Eメール情報変更CCマップ.料金プランコード
		parentMap.put("pplan_cd", "PB0101");
		// 入力ファイル.変更後メールアドレス → Eメール情報変更CCマップ.メールアドレス
		parentMap.put("mlad", inMap.getString(JBSbatKKIFM736.MLAD));
		// 入力ファイル.変更後メールＢＯＸ容量 → Eメール情報変更CCマップ.容量
		parentMap.put("capa", inMap.getString(JBSbatKKIFM736.CAPA));
		// "0" → Eメール情報変更CCマップ.追加容量
		parentMap.put("add_capa", "0");
		// ""→ Eメール情報変更CCマップ.エイリアス
		parentMap.put("alias", "");
		// "0"→ Eメール情報変更CCマップ.メール容量変更状態
		parentMap.put("capa_chg_flg", "0");
		// "0"→ Eメール情報変更CCマップ.メールエイリアス変更フラグ
		parentMap.put("alias_chg_flg", "0");
		// "1"→ Eメール情報変更CCマップ.ウイルスチェック変更フラグ
		parentMap.put("virus_chk_chg_flg", "1");
		// 入力ファイル.メールアドレス → Eメール情報変更CCマップ.更新前メールアドレス
		parentMap.put("mlad_bf", inMap.getString(JBSbatKKIFM736.MLAD));
		// ""→ Eメール情報変更CCマップ.更新前メールエイリアス
		parentMap.put("alias_bf", "");
		// ""→ Eメール情報変更CCマップ.希望メールアカウント１
		parentMap.put("kibo_ml_account_1", "");
		// ""→ Eメール情報変更CCマップ.希望メールアカウント２
		parentMap.put("kibo_ml_account_2", "");
		// ""→ Eメール情報変更CCマップ.希望メールアカウント３
		parentMap.put("kibo_ml_account_3", "");
		// ""→ Eメール情報変更CCマップ.解約時課金フラグ
		parentMap.put("dslji_chrg_flg", "");	
		// Ｅメール情報変更→ Eメール情報変更CCマップ.進捗特記事項1
		parentMap.put("prg_tkjk_1", "Ｅメール情報変更");
		// 入力ファイル.表示用サービス提供開始年月日 → Eメール情報変更CCマップ.表示用サービス提供開始年月日
		parentMap.put("dsp_svctk_staymd", inMap.getString(JBSbatKKIFM736.DSP_SVCTK_STAYMD));
		// 最終更新年月日時分秒 → Eメール情報変更CCマップ.最終更新年月日時分秒
		parentMap.put("upd_dtm_bf", "");
		// 入力ファイル.オプションサービス契約ステータス→ Eメール情報変更CCマップ.オプションサービス契約ステータス
		parentMap.put("op_svc_kei_stat", inMap.getString(JBSbatKKIFM736.OP_SVC_KEI_STAT));
		// ""→ Eメール情報変更CCマップ.メールアドレス変更時メール転送フラグ
		parentMap.put("mlad_chgj_ml_tns_flg", "");
		// "1"→ Eメール情報変更CCマップ.機能コード
		parentMap.put("func_code", "1");
		// ""→ Eメール情報変更CCマップ.メール各種設定引継フラグ
		parentMap.put("ml_vrsette_hktgi_flg", "");
		// ""→ Eメール情報変更CCマップ.メールエイリアス変更日
		parentMap.put("alias_chge_ymd", "");
		
		ArrayList list = new ArrayList();
		HashMap childMap = new HashMap();

		// サブオプションサービス契約リスト.サブプションサービス契約番号 → Eメール情報変更CCマップ.サブオプション一覧情報.サブオプションサービス契約番号
		childMap.put("sbop_svc_kei_no", "");
		// サブオプションサービス契約リスト.世代登録年月日時分秒 → Eメール情報変更CCマップ.サブオプション一覧情報.サブオプション世代登録年月日時分秒
		childMap.put("sbop_gene_add_dtm","");
		// サブオプションサービス契約リスト.サブオプションサービスコード → Eメール情報変更CCマップ.サブオプション一覧情報.サブオプションサービスコード
		childMap.put("sbop_svc_cd", "D03");
		// サブオプションサービス契約リスト.更新年月日時分秒 → Eメール情報変更CCマップ.サブオプション一覧情報.サブオプション更新前年月日時分秒
		childMap.put("upd_dtm_bf_sbop", "");
		// サービス課金終了年月日（サブオプションサービス契約：ウイルスチェック用） → Eメール情報変更CCマップ.サブオプション一覧情報.サービス課金終了年月日
		childMap.put("svc_chrg_endymd", "");
		
		list.add(childMap);
		parentMap.put("sbob_svc_kei_info_list", list);

		list = new ArrayList();
		childMap = new HashMap();

		// エイジング情報.エイジング種別コード → オプションサービス契約解約CCマップ.エイジング情報リスト.エイジング種別コード
		childMap.put("aging_sbt_cd", "");
		// エイジング情報.エイジング対象値 → オプションサービス契約解約CCマップ.エイジング情報リスト.エイジング対象値
		childMap.put("aging_tg_value", "");

		list.add(childMap);
		parentMap.put("aging_info_list", list);

		// 
		list = new ArrayList();
		childMap = new HashMap();

		// 異動理由リスト.異動理由コード → Eメール情報変更CCマップ.異動理由明細.異動理由コード
		childMap.put("ido_rsn_cd", "56");
		// 異動理由リスト.異動理由メモ → Eメール情報変更CCマップ.異動理由明細.異動理由メモ
		childMap.put("ido_rsn_memo", "");
		
		list.add(childMap);
		parentMap.put("EKK1091D010CBSMsg1List", list);
		
		return parentMap;
	}

	/**
	 * 上りマッピングをする
	 * @param inMap 入力電文
	 * @return HashMap<String, Object> 処理結果
	 * @throws Exception 
	 */
	@SuppressWarnings("unchecked")
	private HashMap<String, Object> setJKKHakkoSODCC(JBSbatServiceInterfaceMap inMap) throws Exception 
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();
		ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String,Object>>();
		HashMap<String, Object> ccMap = new HashMap<String, Object>();
		HashMap childMap = new HashMap();

		// SYSID
		childMap.put("sysid", inMap.getString(JBSbatKKIFM736.SYSID));
		// 異動区分
		childMap.put("ido_div", "00031");
		//SODマップ
		parentMap.put("sod_kihon_info", childMap);
		
		childMap = new HashMap();

		// サービス契約番号
		childMap.put("svc_kei_no", inMap.getString(JBSbatKKIFM736.SVC_KEI_NO));
		// 先サービス契約番号
		childMap.put("saki_svc_kei_no", "");
		//サービス契約情報
		parentMap.put("svc_kei_info", childMap);
		
		childMap = new HashMap();
		
		//サービス契約内訳情報
		parentMap.put("svc_kei_ucwk_info", childMap);
		
		childMap = new HashMap();
		
		//変更前オプションサービス契約番号
		childMap.put("chbf_opsvkei_no", inMap.getString(JBSbatKKIFM736.OP_SVC_KEI_NO));
		//変更前オプションサービス契約世代登録年月日時分秒
		childMap.put("chbf_opsvkei_gene_add_dtm", inMap.getString(JBSbatKKIFM736.GENE_ADD_DTM));
		//変更後オプションサービス契約番号
		childMap.put("chaf_opsvkei_no", inMap.getString(JBSbatKKIFM736.OP_SVC_KEI_NO));
		//変更前サブオプションサービス契約番号
		childMap.put("chbf_sbopsvkei_no", "");
		//変更前サブオプションサービス契約世代登録年月日時分秒
		childMap.put("chbf_sbopsvkei_gene_add_dtm", "");
		//オプションサービス契約情報
		parentMap.put("opsvkei_info", childMap);
		
		childMap = new HashMap();
		
		//機器提供サービス契約情報
		parentMap.put("kktsvkei_info", childMap);
		
		list.add(parentMap);
		// 対象データリスト
		ccMap.put("trgt_data_list", list);
		// 共通情報のマッピング
		ccMap.put("func_code", "1");
		
		return ccMap;
	}

	
	/**
	 * 上りマッピングをする
	 * @param inMap 入力電文
	 * @return HashMap<String, Object> 処理結果
	 * @throws Exception 
	 */
	private HashMap<String, Object> setUpdMkmScinsprtWkCC(JBSbatServiceInterfaceMap inMap) throws Exception 
	{
		HashMap<String, Object> parentMap = new HashMap<String, Object>();

		// 共通情報のマッピング
		parentMap.put("func_code", "1");
		// 入力ファイル.サービス契約番号 → 申込画面入力支援ワーク情報更新マップ.ＫＥＹ＿サービス契約番号
		parentMap.put("key_svc_kei_no", inMap.getString(JBSbatKKIFM736.SVC_KEI_NO));
		// "1" → 申込画面入力支援ワーク情報更新マップ.ネットタブオプション情報制御コード
		parentMap.put("net_tab_kiki_if_ctl_cd", "1");
		
		return parentMap;
	}
	
	/**
	 * サービス契約排他制御テーブルの検索を行います。
	 * <br>
	 * @param  svc_kei_no サービス契約番号
	 * @return 最終更新年月日時分秒
	 * @throws Exception 
	 */
	private String getSvkeiLastUpdDtm(String svc_kei_no) throws Exception
	{
		// PK検索を行う
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SVC_KEI_NO", svc_kei_no);

		// DBアクセスを実行します
		JBSbatCommonDBInterface outMap = db_KK_T_SVKEI_EXC_CTRL.selectByPrimaryKeys(whereMap);
		
		if (outMap == null)
		{
			throw new JBSbatBusinessException(JPCBatchMessageConstant.EKKB0210CE, new String[]{"サービス契約排他制御", "サービス契約番号:" + svc_kei_no});
		}
	
		return outMap.getString(JBSbatKK_T_SVKEI_EXC_CTRL.LAST_UPD_DTM);
	}
	
	/**
	 * 対象データ抽出後にオプション、割引サービスの更新が行われてなければ、サービス契約ステータスを返却します
	 * <br>
	 * @param opSvcKeiNo オプションサービス契約番号
	 * @param arg1 シード値
	 * @return String 変換後の文字列
	 */
	private String chkUpdate(JBSbatServiceInterfaceMap inMap, String opDate) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(opDate);
		paramList.setValue(opDate);
		paramList.setValue(opDate);
		paramList.setValue(inMap.getString(JBSbatKKIFM736.WRIB_SVC_KEI_NO));
		paramList.setValue(inMap.getString(JBSbatKKIFM736.WRIB_UPD_DTM));
		paramList.setValue(opDate);
		paramList.setValue(opDate);
		paramList.setValue(inMap.getString(JBSbatKKIFM736.OP_SVC_KEI_NO));
		paramList.setValue(inMap.getString(JBSbatKKIFM736.OP_UPD_DTM));
		paramList.setValue(opDate);

		// DBアクセスを実行します
		db_KK_T_SVC_KEI_333.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_333);
		
		JBSbatCommonDBInterface resultMap = db_KK_T_SVC_KEI_333.selectNext();
		
		// DBから取得したサービス契約ステータスを返却
		if (resultMap == null) {
			return null;
		}
		else {
			return resultMap.getString(JBSbatKK_T_SVC_KEI.SVC_KEI_STAT);
		}
	}
}