/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatSCEMIdoIfTmpStpCss
*	ソースファイル名	：JBSbatSCEMIdoIfTmpStpCss.java
*	作成者				：富士通　
*	作成日				：2011年07月20日
*＜機能概要＞
*　ＥＭ異動依頼（一時中断・中断解除）抽出部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/07/20   富士通		新規作成
*********************************************************************/
package eo.business.service;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JCCBatCommon;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessException;
import eo.framework.db.JBSbatSQLAccess;

import eo.common.constant.JSCStrConstant;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatSCEMIdoIfTmpStpCss extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(ＥＭオーダ送受信情報)*/
	private static final String D_TBL_NAME_SC_T_EM_ODR_SRINF = "SC_T_EM_ODR_SRINF";

	/** テーブル(モバイルオーダ)*/
	private static final String D_TBL_NAME_SC_T_MOBILE_ORDER = "SC_T_MOBILE_ORDER";

	/** SQL定義キー(SC_SELECT_005)*/
	private static final String SC_T_EM_ODR_SRINF_SC_SELECT_005 = "SC_SELECT_005";

	/** SQL定義キー(SC_SELECT_006)*/
	private static final String SC_T_EM_ODR_SRINF_SC_SELECT_006 = "SC_SELECT_006";
	
	/** SQL定義キー(SC_SELECT_007)*/
	private static final String SC_T_EM_ODR_SRINF_SC_SELECT_007 = "SC_SELECT_007";
	
	/** SQL定義キー(SC_UPDATE_003)*/
	private static final String SC_T_EM_ODR_SRINF_SC_UPDATE_003 = "SC_UPDATE_003";

	/** SQL定義キー(SC_SELECT_003)*/
	private static final String SC_T_MOBILE_ORDER_SC_SELECT_003 = "SC_SELECT_003";

	/** SQL定義キー(SC_UPDATE_003)*/
	private static final String SC_T_MOBILE_ORDER_SC_UPDATE_003 = "SC_UPDATE_003";
	
	/** SQL定義キー(SC_SELECT_008)*/
	private static final String SC_T_EM_ODR_SRINF_SC_SELECT_008 = "SC_SELECT_008";

	/** テーブルアクセスクラス(ＥＭオーダ送受信情報)*/
	private JBSbatSQLAccess db_SC_T_EM_ODR_SRINF = null;

	/** テーブルアクセスクラス(モバイルオーダ)*/
	private JBSbatSQLAccess db_SC_T_MOBILE_ORDER = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** EM送受信情報テーブルとモバイルオーダテーブルの更新モードを
	 *  正常応答、業務連携待ちSOD応答済み
	 *  にする場合
	 */
	private static final char FLG_CANCEL = '1';
	
	/** EM送受信情報テーブルとモバイルオーダテーブルの更新モードを
	 *  送信済み、業務連携待ちSOD応答未
	 *  にする場合
	 */
	private static final char FLG_NORMAL = '0';
	
	/** 一時中断のファイル出力件数*/
	private int outSTP = 0;
	
	/** 中断解除のファイル出力件数*/
	private int outRST = 0;
	
	/** EM送受信テーブル用抽出結果取得用オブジェクト*/
	JBSbatCommonDBInterface emMap = new JBSbatCommonDBInterface();
	
	 /** モバイルオーダテーブル用抽出結果取得用オブジェクト*/
	JBSbatCommonDBInterface moMap = new JBSbatCommonDBInterface();

	/** バッチ運用日時*/
	//private String unyoDateTime = null;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_SC_T_EM_ODR_SRINF = new JBSbatSQLAccess(commonItem, D_TBL_NAME_SC_T_EM_ODR_SRINF);
		db_SC_T_MOBILE_ORDER = new JBSbatSQLAccess(commonItem, D_TBL_NAME_SC_T_MOBILE_ORDER);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		

		// バッチ運用日時を設定
		String opeDate = commonItem.getOpeDate();
		String opeTime = JCCBatCommon.getSysDateTimeStamp();
		String unyoDateTime = opeDate + opeTime.substring(8, 17);

		// システム日付の取得
		String sysDateTimeStamp = JCCBatCommon.getSysDateTimeStamp();

		// 更新オペレータアカウント取得
		String upAccount = commonItem.getBatchUserId();
		

		executeSC_T_EM_ODR_SRINF_SC_SELECT_008(null);
		
		while((emMap = db_SC_T_EM_ODR_SRINF.selectNext()) != null)	// バッチコーディングガイドに準拠
		{
			// EMオーダ送受信情報とモバイルオーダテーブルの更新
			// モバイルオーダテーブルのロック
			executeSC_T_MOBILE_ORDER_SC_SELECT_003(new String[] {emMap.getString("SOD_RENKEI_SEQ")});
			
			// モバイルオーダテーブルにレコードが存在しなければ、エラーとする
			moMap = db_SC_T_MOBILE_ORDER.selectNext();
			if(null == moMap)
			{
				super.logPrint.printDebugLog("モバイルオーダテーブルにレコードが存在しません。");
				throw new JBSbatBusinessException("ESCB0100CE",
						new String[] {emMap.getString("SVC_KEI_NO"),
						emMap.getString("EM_KEISHA_CD"),
						"SC_T_MOBILE_ORDER"});
			}
			
			upEM_ODR_SRIN_and_MOBILE_ORDER(emMap.getString("SRINF_KANRI_NO"),	// 送受信情報管理番号
							emMap.getString("SOD_RENKEI_SEQ"),					// モバイルオーダ番号
							emMap.getString("SVC_KEI_NO"),						// サービス契約者番号
							emMap.getString("EM_KEISHA_CD"),					// EM契約者コード
							sysDateTimeStamp,									// システム日付
							unyoDateTime,										// 運用日付
							upAccount,											// 更新オペレータアカウント
							FLG_CANCEL);			
		}
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		logPrint.printDebugLog("JBSbatSCEMIdoIfTmpStpCss#execute START");

		// 出力共通電文を生成する
		JBSbatOutputItem outputBean = new JBSbatOutputItem();

		// 入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap stpOutmap = new JBSbatServiceInterfaceMap();	// 一時中断用
		
		// 入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap rstOutmap = new JBSbatServiceInterfaceMap();	// 中断解除用

		// バッチ運用日時を設定
		String opeDate = commonItem.getOpeDate();
		String opeTime = JCCBatCommon.getSysDateTimeStamp();
		String unyoDateTime = opeDate + opeTime.substring(8, 17);

		// システム日付の取得
		String sysDateTimeStamp = JCCBatCommon.getSysDateTimeStamp();

		// 更新オペレータアカウント取得
		String upAccount = commonItem.getBatchUserId();
		
		// EM契約者コード
		if(null == inMap.getString("EM_KEISHA_CD"))
		{
			super.logPrint.printDebugLog("EMオーダ送受信テーブルにEM契約者コードが存在しません。");
			throw new JBSbatBusinessException("ESCB0020CE",
					new String[] {"EMオーダ送受信のEM契約者コード"});
		}
		
		// 一時中断のSOD投入年月日時分秒の取得
		String maxStpDtm = inMap.getString("MAX_STP_DTM");
		
		// 一時中断の件数の取得
		int cntStp = Integer.parseInt(inMap.getString("CNT_STP"));
		
		// 中断解除のSOD投入年月日時分秒の取得
		String maxRstDtm = inMap.getString("MAX_RST_DTM");
		
		// 中断解除の件数の取得
		int cntRst = Integer.parseInt(inMap.getString("CNT_RST"));
		
		// 一時中断申請の後に中断解除申請がある場合
		if(Long.parseLong(maxStpDtm) < Long.parseLong(maxRstDtm))
		{

			if(cntStp == cntRst)
			{
				// 一時中断申請の件数と中断解除申請の件数が一致する場合
				// ファイルには出力せず、DBの値を更新する。
				// 更新対象データの抽出
				String[] param1 = 
				{
						inMap.getString("SVC_KEI_NO"),		// サービス契約者番号
						inMap.getString("EM_KEISHA_CD"),	// EM契約者コード
						JSCStrConstant.SOD_STAT_SND_WAIT,	// SODステータス(送信待ち)
						maxRstDtm,							// 中断解除受付日時
				};
				executeSC_T_EM_ODR_SRINF_SC_SELECT_005(param1);
				
				while((emMap = db_SC_T_EM_ODR_SRINF.selectNext()) != null)	// バッチコーディングガイドに準拠
				{
					// EMオーダ送受信情報とモバイルオーダテーブルの更新
					// モバイルオーダテーブルのロック
					executeSC_T_MOBILE_ORDER_SC_SELECT_003(new String[] {emMap.getString("SOD_RENKEI_SEQ")});
					
					// モバイルオーダテーブルにレコードが存在しなければ、エラーとする
					moMap = db_SC_T_MOBILE_ORDER.selectNext();
					if(null == moMap)
					{
						super.logPrint.printDebugLog("モバイルオーダテーブルにレコードが存在しません。");
						throw new JBSbatBusinessException("ESCB0100CE",
								new String[] {inMap.getString("SVC_KEI_NO"),
								inMap.getString("EM_KEISHA_CD"),
								D_TBL_NAME_SC_T_MOBILE_ORDER});
					}
					
					upEM_ODR_SRIN_and_MOBILE_ORDER(emMap.getString("SRINF_KANRI_NO"),	// 送受信情報管理番号
									emMap.getString("SOD_RENKEI_SEQ"),					// モバイルオーダ番号
									emMap.getString("SVC_KE_NO"),						// サービス契約番号
									emMap.getString("EM_KEISHA_CD"),					// EM契約者コード
									sysDateTimeStamp,									// システム日付
									unyoDateTime,										// 運用日付
									upAccount,											// 更新オペレータアカウント
									FLG_CANCEL);
				}
			}
			else
			{
				// 件数が一致しない場合、
				// 最新の中断解除申請が有効だと判断して、ファイルに出力する。
				
				// ファイルに出力するデータの抽出
				String[] param1 = 
				{
						inMap.getString("SVC_KEI_NO"),		// サービス契約者番号
						inMap.getString("EM_KEISHA_CD"),	// EM契約者コード
						JSCStrConstant.SOD_STAT_SND_WAIT,	// SODステータス(送信待ち)
						maxRstDtm,							// 中断解除受付日時
						JSCStrConstant.MOBILE_ODER_CD_RLS	// モバイルオーダコード(中断解除)
				};
				executeSC_T_EM_ODR_SRINF_SC_SELECT_006(param1);
				
				emMap = db_SC_T_EM_ODR_SRINF.selectNext();
				// 中断解除データ部の出力開始
				//項目を設定
				rstOutmap.setString("EM_REC_SBT_CD", JSCStrConstant.EM_RECORD_TYPE_BODY); // EMレコード種別コード:データ部
				rstOutmap.setString("SVC_KEI_NO", inMap.getString("SVC_KEI_NO")); // サービス契約者コード
				rstOutmap.setString("YOBI_2", ""); // null
				rstOutmap.setString("YOBI_3", ""); // null
				rstOutmap.setString("YOBI_4", ""); // null
				rstOutmap.setString("EM_KEISHA_CD", inMap.getString("EM_KEISHA_CD")); // EM契約者コード
				rstOutmap.setString("YOBI_5", ""); // null
				rstOutmap.setString("EM_SET_YMD_2", ""); // EM設定年月日2ではなく、nullを設定
				rstOutmap.setString("EM_SET_YMD_3", ""); // EM設定年月日3ではなく、nullを設定
				rstOutmap.setString("YOBI_6", ""); // 予備6 Null
				rstOutmap.setString("UK_TRAN_RSLT_CD", ""); // 受付処理結果コード Null
				rstOutmap.setString("TRN_DATE", ""); // 異動日付 Null
				rstOutmap.setString("TRN_TIME", ""); // 異動時刻 Null
				rstOutmap.setString("YOBI_7", ""); // 予備7 Null
				// 出力フラグを設定
				rstOutmap.setOutFlg(true);
				// 出力共通電文に入出力インターフェースを設定する
				outputBean.addOutMapList_2(rstOutmap);

				outRST++;	// 中断解除の出力件数をカウントアップ
				
				// モバイルオーダテーブルのロック
				executeSC_T_MOBILE_ORDER_SC_SELECT_003(new String[] {emMap.getString("SOD_RENKEI_SEQ")});
				
				// モバイルオーダテーブルにレコードが存在しなければ、エラーとする
				moMap = db_SC_T_MOBILE_ORDER.selectNext();
				if(null == moMap)
				{
					super.logPrint.printDebugLog("モバイルオーダテーブルにレコードが存在しません。");
					throw new JBSbatBusinessException("ESCB0100CE",
							new String[] {inMap.getString("SVC_KEI_NO"),
							inMap.getString("EM_KEISHA_CD"),
							D_TBL_NAME_SC_T_MOBILE_ORDER});
				}
				upEM_ODR_SRIN_and_MOBILE_ORDER(
							emMap.getString("SRINF_KANRI_NO"),	// 送受信情報管理番号
							emMap.getString("SOD_RENKEI_SEQ"),	// SOD業務連携通番
							emMap.getString("SVC_KEI_NO"),		// サービス契約番号
							emMap.getString("EM_KEISHA_CD"),	// EM契約者コード
							sysDateTimeStamp,
							unyoDateTime,						// 運用日付
							upAccount,
							FLG_NORMAL);


				// ファイルに出力しないが、更新するデータの抽出
				String[] param4 =
				{
						inMap.getString("SVC_KEI_NO"),		// サービス契約者番号
						inMap.getString("EM_KEISHA_CD"),		// EM契約者コード
						JSCStrConstant.SOD_STAT_SND_WAIT,		// SODステータス(送信待ち)
						maxRstDtm		// 中断解除受付日時
				};
				executeSC_T_EM_ODR_SRINF_SC_SELECT_007(param4);
				while((emMap = db_SC_T_EM_ODR_SRINF.selectNext()) != null)	// バッチコーディングガイドに準拠
				{
					// モバイルオーダテーブルにレコードが存在しなければ、エラーとする
					moMap = db_SC_T_MOBILE_ORDER.selectNext();
					if(null == moMap)
					{
						super.logPrint.printDebugLog("モバイルオーダテーブルにレコードが存在しません。");
						throw new JBSbatBusinessException("ESCB0100CE",
								new String[] {inMap.getString("SVC_KEI_NO"),
								inMap.getString("EM_KEISHA_CD"),
								D_TBL_NAME_SC_T_MOBILE_ORDER});
					}
					
					upEM_ODR_SRIN_and_MOBILE_ORDER(emMap.getString("SRINF_KANRI_NO"),	// 送受信管理番号
							emMap.getString("SOD_RENKEI_SEQ"),							// SOD業務連携通番
							emMap.getString("SVC_KEI_NO"),								// サービス契約番号
							emMap.getString("EM_KEISHA_CD"),							// EM契約者コード
							sysDateTimeStamp,
							unyoDateTime,												// 運用日付
							upAccount,
							FLG_CANCEL);
				}
			}
		}
		else
		{
			// 中断解除のあとに中断申請がある場合、
			if(cntStp == cntRst)
			{	// 一時中断申請の件数と中断解除申請の件数が一致する場合
				// ファイルには出力せず、DBの値を更新する。
				// 更新対象データの抽出
				String[] param1 = 
				{
						inMap.getString("SVC_KEI_NO"),		// サービス契約者番号
						inMap.getString("EM_KEISHA_CD"),	// EM契約者コード
						JSCStrConstant.SOD_STAT_SND_WAIT,	// SODステータス(送信待ち)
						maxStpDtm,							// 一時中断受付日時
				};
				executeSC_T_EM_ODR_SRINF_SC_SELECT_005(param1);
				while((emMap = db_SC_T_EM_ODR_SRINF.selectNext()) != null)	// バッチコーディングガイドに準拠
				{
					// EMオーダ送受信情報とモバイルオーダテーブルの更新
					// モバイルオーダテーブルのロック
					executeSC_T_MOBILE_ORDER_SC_SELECT_003(new String[] {emMap.getString("SOD_RENKEI_SEQ")});
					
					// モバイルオーダテーブルにレコードが存在しなければ、エラーとする
					moMap = db_SC_T_MOBILE_ORDER.selectNext();
					if(null == moMap)
					{
						super.logPrint.printDebugLog("モバイルオーダテーブルにレコードが存在しません。");
						throw new JBSbatBusinessException("ESCB0100CE",
								new String[] {inMap.getString("SVC_KEI_NO"),
								inMap.getString("EM_KEISHA_CD"),
								D_TBL_NAME_SC_T_MOBILE_ORDER});
					}
					
					upEM_ODR_SRIN_and_MOBILE_ORDER(emMap.getString("SRINF_KANRI_NO"),	// 送受信情報管理番号
									emMap.getString("SOD_RENKEI_SEQ"),					// モバイルオーダ番号
									emMap.getString("SVC_KEI_NO"),						// サービス契約番号
									emMap.getString("EM_KEISHA_CD"),					// EM契約者コード
									sysDateTimeStamp,									// システム日付
									unyoDateTime,										// 運用日付
									upAccount,											// 更新オペレータアカウント
									FLG_CANCEL);
				}
			}
			else
			{
				// ファイルに出力するデータの抽出
				String[] param1 = 
				{
						inMap.getString("SVC_KEI_NO"),		// サービス契約者番号
						inMap.getString("EM_KEISHA_CD"),	// EM契約者コード
						JSCStrConstant.SOD_STAT_SND_WAIT,	// SODステータス(送信待ち)
						maxStpDtm,							// 一時中断受付日時
						JSCStrConstant.MOBILE_ODER_CD_STP	// モバイルオーダコード(一時中断)
				};
				executeSC_T_EM_ODR_SRINF_SC_SELECT_006(param1);
				emMap = db_SC_T_EM_ODR_SRINF.selectNext();

				// 一時中断データ部の出力開始
				//項目を設定
				stpOutmap.setString("EM_REC_SBT_CD", JSCStrConstant.EM_RECORD_TYPE_BODY); // EMレコード種別コード:データ部
				stpOutmap.setString("SVC_KEI_NO", inMap.getString("SVC_KEI_NO")); // サービス契約者コード
				stpOutmap.setString("YOBI_2", ""); // null
				stpOutmap.setString("YOBI_3", ""); // null
				stpOutmap.setString("YOBI_4", ""); // null
				stpOutmap.setString("EM_KEISHA_CD", inMap.getString("EM_KEISHA_CD")); // EM契約者コード
				stpOutmap.setString("YOBI_5", ""); // null
				stpOutmap.setString("EM_SET_YMD_2", ""); // EM設定年月日2ではなく、nullを設定
				stpOutmap.setString("EM_SET_YMD_3", ""); // EM設定年月日3ではなく、nullを設定
				stpOutmap.setString("YOBI_6", ""); // 予備6 Null
				stpOutmap.setString("UK_TRAN_RSLT_CD", ""); // 受付処理結果コード Null
				stpOutmap.setString("TRN_DATE", ""); // 異動日付 Null
				stpOutmap.setString("TRN_TIME", ""); // 異動時刻 Null
				stpOutmap.setString("YOBI_7", ""); // 予備7 Null
				// 出力フラグを設定
				stpOutmap.setOutFlg(true);
				// 出力共通電文に入出力インターフェースを設定する
				outputBean.addOutMapList(stpOutmap);

				outSTP++;	// 一時中断の出力件数のカウントアップ
				
				// モバイルオーダテーブルのロック
				executeSC_T_MOBILE_ORDER_SC_SELECT_003(new String[] {emMap.getString("SOD_RENKEI_SEQ")});
				
				// モバイルオーダテーブルにレコードが存在しなければ、エラーとする
				moMap = db_SC_T_MOBILE_ORDER.selectNext();
				if(null == moMap)
				{
					super.logPrint.printDebugLog("モバイルオーダテーブルにレコードが存在しません。");
					throw new JBSbatBusinessException("ESCB0100CE",
							new String[] {inMap.getString("SVC_KEI_NO"),
							inMap.getString("EM_KEISHA_CD"),
							D_TBL_NAME_SC_T_MOBILE_ORDER});
				}
				
				upEM_ODR_SRIN_and_MOBILE_ORDER(
						emMap.getString("SRINF_KANRI_NO"),	// 送受信情報管理番号
						emMap.getString("SOD_RENKEI_SEQ"),	// モバイルオーダ番号
						emMap.getString("SVC_KEI_NO"),		// サービス契約番号
						emMap.getString("EM_KEISHA_CD"),	// EM契約者コード
						sysDateTimeStamp,					// システム日付
						unyoDateTime,						// 運用日付
						upAccount,							// 更新オペレータアカウント
						FLG_NORMAL);

				// ファイルに出力しないが、更新するデータの抽出
				String[] param4 =
				{
						inMap.getString("SVC_KEI_NO"),		// サービス契約者番号
						inMap.getString("EM_KEISHA_CD"),		// EM契約者コード
						JSCStrConstant.SOD_STAT_SND_WAIT,		// SODステータス(送信待ち)
						maxStpDtm		// 一時中断受付日時
				};
				executeSC_T_EM_ODR_SRINF_SC_SELECT_007(param4);
				while((emMap = db_SC_T_EM_ODR_SRINF.selectNext()) != null)	// バッチコーディングガイドに準拠
				{
					// EMオーダ送受信情報とモバイルオーダテーブルの更新
					// モバイルオーダテーブルのロック
					executeSC_T_MOBILE_ORDER_SC_SELECT_003(new String[] {emMap.getString("SOD_RENKEI_SEQ")});
					
					// モバイルオーダテーブルにレコードが存在しなければ、エラーとする
					moMap = db_SC_T_MOBILE_ORDER.selectNext();
					if(null == moMap)
					{
						super.logPrint.printDebugLog("モバイルオーダテーブルにレコードが存在しません。");
						throw new JBSbatBusinessException("ESCB0100CE",
								new String[] {inMap.getString("SVC_KEI_NO"),
								inMap.getString("EM_KEISHA_CD"),
								D_TBL_NAME_SC_T_MOBILE_ORDER});
					}

					upEM_ODR_SRIN_and_MOBILE_ORDER(
							emMap.getString("SRINF_KANRI_NO"),	// 送受信管理番号
							emMap.getString("SOD_RENKEI_SEQ"),	// SOD業務連携通番
							emMap.getString("SVC_KEI_NO"),		// サービス契約番号
							emMap.getString("EM_KEISHA_CD"),	// EM契約者コード
							sysDateTimeStamp,					// システム日付
							unyoDateTime,						// 運用日付
							upAccount,							// 更新オペレータアカウント
							FLG_CANCEL);
				}
			}
		}
		logPrint.printDebugLog("JBSbatSCEMIdoIfTmpStpCss#execute END");
		return outputBean;	// ファイル出力する
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/

		// EM異動依頼(一時中断)ヘッダー部の出力
		outHeader(JSCStrConstant.EM_JGYOSHA_SKBT_CD, JSCStrConstant.EM_STP_HEADER, commonItem.getFreeItem(), "STP");
		if(0 < outSTP)
		{
			// EM異動依頼(一時中断)トレーラ部の出力
			outTrailer(outSTP, JSCStrConstant.EM_STP_TRAILER, commonItem.getFreeItem());
		}
		else
		{
			// EM異動依頼(一時中断)トレーラ部の出力
			outTrailer(0, JSCStrConstant.EM_STP_TRAILER, commonItem.getFreeItem());
			super.logPrint.printLogMsg("ESCB0080AI", "EM異動依頼(一時中断)");
		}
		
		// EM異動依頼(中断解除)ヘッダー部の出力
		outHeader(JSCStrConstant.EM_JGYOSHA_SKBT_CD, JSCStrConstant.EM_RST_HEADER, commonItem.getFreeItem(), "RST");
		if(0 < outRST)
		{
			// EM異動依頼(中断解除)トレーラ部の出力
			outTrailer(outRST, JSCStrConstant.EM_RST_TRAILER, commonItem.getFreeItem());
		}
		else
		{
			// EM異動依頼(中断解除)トレーラ部の出力
			outTrailer(0, JSCStrConstant.EM_RST_TRAILER, commonItem.getFreeItem());
			super.logPrint.printLogMsg("ESCB0080AI", "EM異動依頼(中断解除)");
		}
		
		super.commit();
		
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_SC_T_EM_ODR_SRINF.close();
		db_SC_T_MOBILE_ORDER.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}
	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	
	/**
	 * SQLKEY(SC_SELECT_005)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	EM契約者コード
	 *		 	SODステータス
	 *		 	SOD受付年月日
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeSC_T_EM_ODR_SRINF_SC_SELECT_005(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());

		// DBアクセスを実行します
		db_SC_T_EM_ODR_SRINF.selectBySqlDefine(paramList, SC_T_EM_ODR_SRINF_SC_SELECT_005);
	}

	/**
	 * SQLKEY(SC_SELECT_006)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約者番号
	 *		 	EM契約者コード
	 *		 	SODステータス
	 *		 	SOD受付年月日
	 *		 	モバイルオーダコード
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeSC_T_EM_ODR_SRINF_SC_SELECT_006(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_SC_T_EM_ODR_SRINF.selectBySqlDefine(paramList, SC_T_EM_ODR_SRINF_SC_SELECT_006);
	}

	/**
	 * SQLKEY(SC_SELECT_007)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	サービス契約番号
	 *		 	EM契約者コード
	 *		 	SODステータス
	 *		 	SOD受付年月日時分秒
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeSC_T_EM_ODR_SRINF_SC_SELECT_007(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());

		// DBアクセスを実行します
		db_SC_T_EM_ODR_SRINF.selectBySqlDefine(paramList, SC_T_EM_ODR_SRINF_SC_SELECT_007);
	}

	/**
	 * SQLKEY(SC_UPDATE_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	SODステータス
	 *		 	SOD業務連携ステータス
	 *		 	SOD投入年月日
	 *		 	更新日時
	 *		 	更新オペレータ
	 *		 	送受信情報管理番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeSC_T_EM_ODR_SRINF_SC_UPDATE_003(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());
		paramList.setValue(param[5].toString());

		// DBアクセスを実行します
		db_SC_T_EM_ODR_SRINF.executeBySqlDefine(paramList, SC_T_EM_ODR_SRINF_SC_UPDATE_003);
	}

	/**
	 * SQLKEY(SC_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 executeSC_T_MOBILE_ORDER_SC_SELECT_003(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_SC_T_MOBILE_ORDER.selectBySqlDefine(paramList, SC_T_MOBILE_ORDER_SC_SELECT_003);
	}

	/**
	 * SQLKEY(SC_UPDATE_003)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	モバイルオーダステータス
	 *		 	SOD業務連携ステータス
	 *		 	更新日時
	 *		 	更新オペレータアカウント
	 *		 	モバイルオーダ番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeSC_T_MOBILE_ORDER_SC_UPDATE_003(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_SC_T_MOBILE_ORDER.executeBySqlDefine(paramList, SC_T_MOBILE_ORDER_SC_UPDATE_003);
	}
	
	/**
	 * SQLKEY(SC_SELECT_008)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeSC_T_EM_ODR_SRINF_SC_SELECT_008(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();

		// DBアクセスを実行します
		db_SC_T_EM_ODR_SRINF.selectBySqlDefine(paramList, SC_T_EM_ODR_SRINF_SC_SELECT_008);
	}
	
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * EM異動依頼(一時中断または中断解除)ファイルのヘッダー部出力を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.ヘッダー部の出力を行います。<br>
	 * </pre>
	 * <p>
	 * @param s EM事業者識別コード
	 * @param outFileName ファイル出力名
	 * @param outFilePath パス名
	 * @param mYokyu 一時中断か中断解除か指定する
	 * @return なし
	 * @exception JBSbatBusinessException 業務サービス内で発生した例外全般。
	 */
	private void outHeader(String s, String outFileName, String outFilePath, String mYokyu) throws JBSbatBusinessException
	{
		StringBuffer outString = new StringBuffer(29);

		// レコード種別を追加
		outString.append(JSCStrConstant.EM_RECORD_TYPE_HEADER);
		outString.append('\t');

		// モバイル要求種別コードを追加
		if("STP".equals(mYokyu))
		{
			outString.append(JSCStrConstant.MOBILE_YOKYU_TMP_STP_SHIN);
		}
		else if("RST".equals(mYokyu))
		{
			outString.append(JSCStrConstant.MOBILE_YOKYU_STP_RLS_SHIN);
		}
		
		outString.append('\t');
		// ファイル作成年月日を追加
		outString.append(commonItem.getOpeDate());
		outString.append('\t');

		// EM事業者識別コードを追加
		outString.append(s);
		outString.append('\t');

		String outFile = outFilePath + outFileName;
		try
		{
			// PGReliefの規約に従っていないが、
			// バッチから渡される引数を使用するので
			// 問題ない
			FileWriter file = new FileWriter(outFile);
			BufferedWriter buf = new BufferedWriter(file);
			PrintWriter writer = new PrintWriter(buf);
			writer.println(outString);
			writer.close(); // ファイルクローズ
		}
		catch (IOException e)
		{
			super.logPrint.printDebugLog("出力ファイルヘッダー部書き込み失敗");
			throw new JBSbatBusinessException("ESCB0030CE", new String[] {outFile});
		}
	}

	/**
	 * EM異動依頼(一時中断または中断解除)ファイルのトレーラ部出力を行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.トレーラ部の出力を行います。<br>
	 * </pre>
	 * <p>
	 * @param idx レコード件数
	 * @param outFileName ファイル出力名。
	 * @param outFilePath パス名
	 * @return なし。
	 * @throws JBSbatBusinessException 業務サービス内で発生した例外全般。
	 */
	private void outTrailer(int idx, String outFileName, String outFilePath) throws JBSbatBusinessException
	{

		StringBuffer outString = new StringBuffer(15);

		// レコード種別を追加
		outString.append(JSCStrConstant.EM_RECORD_TYPE_TRAILER);

		// 区切り文字(タブ)を追加
		outString.append('\t');

		// レコード件数を追加
		String s = Integer.toString(idx); // 件数を文字列化
		outString.append(s);

		// 区切り文字(タブを追加)
		outString.append('\t');

		// 予備8の出力(なし)

		String outFile = outFilePath + outFileName;
		try
		{
			// PGReliefの規約に従っていないが、
			// バッチから渡される引数を使用するので
			// 問題ない
			FileWriter file = new FileWriter(outFile);
			BufferedWriter buf = new BufferedWriter(file);
			PrintWriter writer = new PrintWriter(buf);
			writer.println(outString);
			writer.close(); // ファイルクローズ

		}
		catch (IOException e)
		{
			super.logPrint.printDebugLog("出力ファイルトレーラ部書き込み失敗");
			throw new JBSbatBusinessException("ESCB0030CE", new String[] {outFile});
		}
	}
	
	
	/**
	 * データを無効化します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.EMオーダ送受信情報とモバイルオーダのレコードを無効化します。<br>
	 * </pre>
	 * <p>
	 * @param s1 送受信情報管理番号
	 * @param s2 モバイルオーダ番号
	 * @param svcKeiNo サービス契約番号
	 * @param emKeishaCd EM契約者コード
	 * @param sysDateTimeStamp システム日付
	 * @param inUnyoDateTime 運用日付
	 * @param upAccount 更新オペレータアカウント
	 * @param flg フラグ
	 * @return なし
	 * @throws JBSbatBusinessException 
	 */

	private void upEM_ODR_SRIN_and_MOBILE_ORDER(String s1,
			String s2, String svcKeiNo, String emKeishaCd,
			String sysDateTimeStamp, String inUnyoDateTime, String upAccount, char flg)
	throws JBSbatBusinessException
	{
		String sodStatus = "";		// SODステータス
		String sodRnkiStat = "";	// SOD業務連携ステータス
		
		if(flg == FLG_CANCEL)
		{
			// EMオーダ送受信情報のSODステータスを正常応答、
			// SOD業務連携ステータスを業務連携待ちSOD応答済みに変更する
			sodStatus = JSCStrConstant.SOD_STAT_ACK_NORMAL;		// SODステータス(正常応答)
			sodRnkiStat = JSCStrConstant.SOD_RNKI_STAT_WAIT_FIN;	// SOD業務連携ステータス(業務連携待ちSOD応答済み)
		}
		else if(flg == FLG_NORMAL)
		{
			
			sodStatus = JSCStrConstant.SOD_STAT_ACK_WAIT;		// SODステータス(送信済み)
			sodRnkiStat = JSCStrConstant.SOD_RNKI_STAT_WAIT_RES;		// SOD業務連携ステータス(業務連携待ちSOD応答未)
		}
		
		String[] param1 = 
		{
				sodStatus,			// SODステータス
				sysDateTimeStamp,	// SOD投入年月日
				sodRnkiStat,		// SOD業務連携ステータス
				sysDateTimeStamp,	// 更新日時
				upAccount,			// 更新オペレータ
				s1					// 送受信情報管理番号
		};
		try
		{
			executeSC_T_EM_ODR_SRINF_SC_UPDATE_003(param1);
		}
		catch(Exception e)
		{
			// PGReliefの規約に従っていないが、フレームワークで実行する
			// executeSC_T_EM_ODR_SRINF_SC_UPDATE_003(param1)
			// がExceptionをthrowするので、対応できない
			super.logPrint.printDebugLog("EMオーダ送受信情報更新失敗" + flg);
			throw new JBSbatBusinessException("ESCB0040CE", new String[] {svcKeiNo, emKeishaCd, D_TBL_NAME_SC_T_EM_ODR_SRINF});
		}
		String[] param2 = {
				sodStatus,			// SODステータス
				sodRnkiStat,		// SOD業務連携ステータス
				sysDateTimeStamp,						// 更新日時
				upAccount,								// 更新オペレータ
				s2										// モバイルオーダ番号
		};
		try
		{
			executeSC_T_MOBILE_ORDER_SC_UPDATE_003(param2);
		}
		catch(Exception e)
		{
			// PGReliefの規約に従っていないが、フレームワークで実行する
			// executeSC_T_MOBILE_ORDER_SC_UPDATE_003(param2)
			// がExceptionをthrowするので、対応できない
			super.logPrint.printDebugLog("モバイルオーダテーブル更新失敗" + flg);
			throw new JBSbatBusinessException("ESCB0040CE", new String[] {svcKeiNo, emKeishaCd, D_TBL_NAME_SC_T_MOBILE_ORDER});
		}
	}
	

}
