/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatWCCtrltekkyoInfGet
*	ソースファイル名	：JBSbatWCCtrltekkyoInfGet.java
*	作成者				：富士通　
*	作成日				：2012年02月08日
*＜機能概要＞
*　制御_STB撤去_情報取得部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2012/02/08   富士通		新規作成
*	v3.00.00	2012/05/01	 FJ)大山	【ANK-0315-00-00】宅内対応を実施
*	v3.01.00	2012/12/10	 FJ)水谷	【TAI-2012-0000138】対応を実施
*	v3.01.01	2012/12/18	 FJ)水谷	【IT1-2012-0002482】対応を実施
*	v54.00.00	2021/08/12	 GDC)オーヴィー	【ANK-4069-00-00】EOL対応(バッチ・DBサーバリプレース対応)
*
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JWCBatCommon;
import eo.common.constant.JPCBatchMessageConstant;
import eo.common.constant.JWCStrConst;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.file.JBSbatOutputFileUtil;
import eo.framework.util.JBSbatCheckUtil;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatWCCtrltekkyoInfGet extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(視聴制御ＨＵＬＦＴ送信実績)*/
	private static final String D_TBL_NAME_WC_T_WC_HULFT_SDJSK = "WC_T_WC_HULFT_SDJSK";

	/** SQL定義キー(WC_INSERT_001)*/
	private static final String WC_T_WC_HULFT_SDJSK_WC_INSERT_001 = "WC_INSERT_001";

	/** テーブルアクセスクラス(視聴制御ＨＵＬＦＴ送信実績)*/
	private JBSbatSQLAccess db_WC_T_WC_HULFT_SDJSK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** ログ出力用項目名 */
	private HashMap<String, String> messageMap = new HashMap<String, String>(24);

	/**
	 * 出力ファイル名
	 */
	private String str_outputFile = "";
	
	/**
	 * 入力ファイル名
	 */
	private String str_inputFile = "";

	/**
	 * ファイル出力件数
	 */
	int outputCount = 0;

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EWCB0010AI, 
				new String[]{"制御＿STB撤去＿情報取得"});

		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_WC_T_WC_HULFT_SDJSK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_WC_T_WC_HULFT_SDJSK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
		String freeItem = commonItem.getFreeItem();
		String[] strArray = freeItem.split(JWCStrConst.FREE_PARAM_DELM);
		
		// 出力ファイル名をフリー項目から取得
		this.str_inputFile = strArray[0];
		this.str_outputFile = strArray[1];
		
		this.logPrint.printDebugLog("*******************************************");
		this.logPrint.printDebugLog("入力ファイル名      =" + this.str_inputFile);
		this.logPrint.printDebugLog("出力ファイル名      =" + this.str_outputFile);
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		// ダブルクォーテーション削除
		inMap.setMap(JWCBatCommon.deleteDblQuote(inMap.getMap()));

		// 入力データの単項目チェック
		messageMap = createMessageMap(inMap.getMap());
		
		boolean rtn = isSingleCheckWCIFM002_INF1(inMap.getMap(), messageMap);
		if(rtn == false)
		{
			throw new JBSbatBusinessError();
		}

		// 入力ファイルの項目を退避
		String wctrl_req_trn_cd = (String)inMap.get("WCTRL_REQ_TRN_CD"); 		// 依頼処理コード
		String inmap_stb_taknkiki_model_cd = 
							(String)inMap.get("STB_TAKNKIKI_MODEL_CD");	// 宅内機器型式コード
		String inmap_stb_kiki_seizo_no = 
							(String)inMap.get("STB_ID");				// 機器製造番号

		this.logPrint.printDebugLog("*******************************************");
		this.logPrint.printDebugLog("依頼処理コード      =" + wctrl_req_trn_cd);
		this.logPrint.printDebugLog("宅内機器型式コード  =" + inmap_stb_taknkiki_model_cd);
		this.logPrint.printDebugLog("機器製造番号        =" + inmap_stb_kiki_seizo_no);

		// 宅内機器情報抽出送信ファイルのデータを設定する。
		JBSbatOutputFileUtil outpututil =  this.commonItem.getOutPutFile();
		// in項目から必要な値を取得する。
		JBSbatOutputItem  outputBean = new JBSbatOutputItem();
		// 出力ファイル設定メソッドを呼び出す。
		JBSbatServiceInterfaceMap outmap = JWCBatCommon.setJBSbatWCIFE006param(commonItem, this.outputCount + 1, inmap_stb_taknkiki_model_cd, inmap_stb_kiki_seizo_no,"");
		outmap.setOutFlg(true);

		outputBean.addOutMapList(outmap);
		
		this.outputCount++;
		
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		if(this.outputCount != 0) 
		{
/**
			// 視聴制御HULFT送信管理テーブルを登録する。
			String str_datetimestamp = JCCBatCommon.getSysDateTimeStamp();
	
			String str_seq_hulft_no = JBSbatOracleSeqUtil.getFormatedNextSeq(commonItem.getConnection() ,JWCStrConst.SEQ_WC_HULFT_SDJSK_NO , "",10);
			
			// HULFT送信実績の書き込みを行う。
			String[] paramList = new String[14];
			
			//視聴制御HULFT送信実績番号
			paramList[0] = str_seq_hulft_no;
			//HULFT送信年月日時分秒
			paramList[1] = JWCBatCommon.getTknFileTimeStamp(commonItem, this.str_outputFile) ;
			//送信ファイル名
			paramList[2] = this.str_outputFile;
			//連携ファイル名
			paramList[3] = this.str_inputFile;
			//継続処理ジョブＩＤ(制御＿ＳＴＢ撤去）
			paramList[4] = JWCStrConst.KEIZKJOB_EOC0A0210J0;
			//ディレイド処理依頼番号
			paramList[5] = "";
			//宅内機器情報抽出ファイル名
			paramList[6] = "";
			//登録年月日時分秒
			paramList[7] = str_datetimestamp;
			//登録オペレータアカウント
			paramList[8] = super.commonItem.getBatchUserId();
			//更新年月日時分秒
			paramList[9] = str_datetimestamp;
			//更新オペレータアカウント
			paramList[10] = super.commonItem.getBatchUserId();
			//削除年月日時分秒
			paramList[11] = "";
			//削除オペレータアカウント
			paramList[12] = "";
			//無効フラグ
			paramList[13] = "0";
**/
		}
		String[] paramList = JWCBatCommon.createWC_T_WC_HULFT_SDJSK_WC_INSERT_001(commonItem, JWCBatCommon.getTknFileTimeStamp(commonItem, this.str_outputFile), this.str_outputFile, this.str_inputFile, JWCStrConst.KEIZKJOB_EOC0A0210J0, "", "");
		JWCBatCommon.executeWC_T_WC_HULFT_SDJSK_WC_INSERT_001(commonItem , paramList, db_WC_T_WC_HULFT_SDJSK);

		// ＦＴＰ転送共通部品を呼び出す
		super.commonItem.getOutPutFile().close();
		// ANK-4069-00-00 DEL START
		//JWCBatCommon.putFtp(commonItem, this.str_outputFile, JWCStrConst.FILEID_WCIFE006, this.outputCount);
		// ANK-4069-00-00 DEL END

		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_WC_T_WC_HULFT_SDJSK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
		commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EWCB0020AI, 
				new String[]{"制御＿STB撤去＿情報取得"});
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 *入力情報（ＳＴＢ撤去情報）の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 *			 TXT-WCIFM002-INF1.WCTRL_REQ_TRN_CD			ＳＴＢ撤去情報.依頼処理コード
	 *			 TXT-WCIFM002-INF1.WCTRL_REQ_TRN_CD			ＳＴＢ撤去情報.依頼処理コード
	 *			 TXT-WCIFM002-INF1.SVC_KEI_NO			ＳＴＢ撤去情報.工事案件番号
	 *			 TXT-WCIFM002-INF1.SVC_KEI_NO			ＳＴＢ撤去情報.工事案件番号
	 *			 TXT-WCIFM002-INF1.STB_TAKNKIKI_MODEL_CD			ＳＴＢ撤去情報.宅内機器型式コード
	 *			 TXT-WCIFM002-INF1.STB_TAKNKIKI_MODEL_CD			ＳＴＢ撤去情報.宅内機器型式コード
	 *			 TXT-WCIFM002-INF1.STB_ID			ＳＴＢ撤去情報.機器製造番号
	 *			 TXT-WCIFM002-INF1.STB_ID			ＳＴＢ撤去情報.機器製造番号
	 *			 TXT-WCIFM002-INF1.DLYD_FLG			ＳＴＢ撤去情報.工事移動フラグ
	 *			 TXT-WCIFM002-INF1.DLYD_FLG			ＳＴＢ撤去情報.工事移動フラグ
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckWCIFM002_INF1(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// 依頼処理コード項目チェック
		strValue = (String)rsMap.get("WCTRL_REQ_TRN_CD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0070TW", new String[]{
															"依頼処理コード"});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0080TW", new String[]{
															"依頼処理コード",
															(String)itemvalueMap.get("TXT-WCIFM002-INF1.WCTRL_REQ_TRN_CD")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0090TW", new String[]{
															"依頼処理コード",
															(String)itemvalueMap.get("TXT-WCIFM002-INF1.WCTRL_REQ_TRN_CD")});
			return false;
		}

		// 工事案件番号項目チェック
		strValue = (String)rsMap.get("SVC_KEI_NO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0070TW", new String[]{
															"工事案件番号"});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "20"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0080TW", new String[]{
															"工事案件番号",
															(String)itemvalueMap.get("TXT-WCIFM002-INF1.SVC_KEI_NO")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0090TW", new String[]{
															"工事案件番号",
															(String)itemvalueMap.get("TXT-WCIFM002-INF1.SVC_KEI_NO")});
			return false;
		}

		// 宅内機器型式コード項目チェック
		strValue = (String)rsMap.get("STB_TAKNKIKI_MODEL_CD");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0070TW", new String[]{
															"宅内機器型式コード"});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "20"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0080TW", new String[]{
															"宅内機器型式コード",
															(String)itemvalueMap.get("TXT-WCIFM002-INF1.STB_TAKNKIKI_MODEL_CD")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0090TW", new String[]{
															"宅内機器型式コード",
															(String)itemvalueMap.get("TXT-WCIFM002-INF1.STB_TAKNKIKI_MODEL_CD")});
			return false;
		}

		// 機器製造番号項目チェック
		strValue = (String)rsMap.get("STB_ID");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0070TW", new String[]{
															"機器製造番号"});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "20"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0080TW", new String[]{
															"機器製造番号",
															(String)itemvalueMap.get("TXT-WCIFM002-INF1.STB_ID")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0090TW", new String[]{
															"機器製造番号",
															(String)itemvalueMap.get("TXT-WCIFM002-INF1.STB_ID")});
			return false;
		}

		// 工事移動フラグ項目チェック
		strValue = (String)rsMap.get("DLYD_FLG");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0070TW", new String[]{
															"工事移動フラグ"});
			return false;
		}
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "2"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0080TW", new String[]{
															"工事移動フラグ",
															(String)itemvalueMap.get("TXT-WCIFM002-INF1.DLYD_FLG")});
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
			commonItem.getLogPrint().printBusinessErrorLog("EWCB0090TW", new String[]{
															"工事移動フラグ",
															(String)itemvalueMap.get("TXT-WCIFM002-INF1.DLYD_FLG")});
			return false;
		}

		return true;
	}

	/**
	 * SQLKEY(WC_INSERT_001)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	視聴制御HULFT送信実績番号
	 *		 	HULFT_SEND_DTM
	 *		 	送信ファイル名
	 *		 	連携ファイル名
	 *		 	継続ジョブID
	 *		 	ディレイド処理依頼番号
	 *		 	宅内機器情報抽出ファイル名
	 *		 	登録年月日時分秒
	 *		 	登録オペレータアカウント
	 *		 	更新年月日時分秒
	 *		 	更新オペレータアカウント
	 *		 	削除年月日時分秒
	 *		 	削除オペレータアカウント
	 *		 	無効フラグ
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeWC_T_WC_HULFT_SDJSK_WC_INSERT_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());
		paramList.setValue(param[5].toString());
		paramList.setValue(param[6].toString());
		paramList.setValue(param[7].toString());
		paramList.setValue(param[8].toString());
		paramList.setValue(param[9].toString());
		paramList.setValue(param[10].toString());
		paramList.setValue(param[11].toString());
		paramList.setValue(param[12].toString());
		paramList.setValue(param[13].toString());

		// DBアクセスを実行します
		db_WC_T_WC_HULFT_SDJSK.executeBySqlDefine(paramList, WC_T_WC_HULFT_SDJSK_WC_INSERT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/

	/**
	 * 項目チェックで使用するmessageMapを生成します。
	 * @param rsMap 項目名が格納されたHashMap
	 * @return messageMap 埋め込み文字の値
	 */
	private HashMap<String, String> createMessageMap(HashMap rsMap)
	{
		messageMap.put("TXT-WCIFM002-INF1.WCTRL_REQ_TRN_CD", (String)rsMap.get("WCTRL_REQ_TRN_CD"));
		messageMap.put("TXT-WCIFM002-INF1.SVC_KEI_NO", (String)rsMap.get("SVC_KEI_NO"));
		messageMap.put("TXT-WCIFM002-INF1.STB_TAKNKIKI_MODEL_CD", (String)rsMap.get("STB_TAKNKIKI_MODEL_CD"));
		messageMap.put("TXT-WCIFM002-INF1.STB_ID", (String)rsMap.get("STB_ID"));
		messageMap.put("TXT-WCIFM002-INF1.DLYD_FLG", (String)rsMap.get("DLYD_FLG"));
		return messageMap;
	}
}
