/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatSCVLANIDInfoMiJissiTrkm
*	ソースファイル名	：JBSbatSCVLANIDInfoMiJissiTrkm.java
*	作成者				：富士通　
*	作成日				：2011年10月13日
*＜機能概要＞
*　VLAN-ID情報（依頼未実施分）取込部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2011/10/13   富士通		新規作成
*	v3.00.00	2012/06/01	FJ)前岡		【KAD-2012-0000092】VLAN-ID情報の連携方法を、データベースの更新から内部連携ファイルでの連携へ変更
*	v37.00.00	2018/05/21	FJ)河邊		【OM-2018-0000397】VLAN取込メジャー⇒マイナー対応
*	v37.00.01	2018/05/24	FJ)河邊		【OM-2018-0000397】VLAN取込メジャー⇒マイナー対応
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatSCIFE014;
import eo.common.constant.JPCModelConstant;
import eo.common.constant.JSCStrConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.application.JBSbatBusinessError;
import eo.framework.util.JCCBatchEsbInterface;
import eo.framework.util.JBSbatCheckUtil;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.application.JBSbatBusinessException;

import eo.framework.item.JBSbatCommonDBInterface;
import eo.business.util.table.JBSbatKU_T_SVKEI_KOJIAK;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatSCVLANIDInfoMiJissiTrkm extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約＿工事案件)*/
	private static final String D_TBL_NAME_KU_T_SVKEI_KOJIAK = "KU_T_SVKEI_KOJIAK";

	/** テーブル(法人サービス契約＿工事案件)*/
	private static final String D_TBL_NAME_KU_T_HOJINSVKEI_KJAK = "KU_T_HOJINSVKEI_KJAK";

	/** テーブルアクセスクラス(サービス契約＿工事案件)*/
	private JBSbatSQLAccess db_KU_T_SVKEI_KOJIAK = null;

	/** テーブルアクセスクラス(法人サービス契約＿工事案件)*/
	private JBSbatSQLAccess db_KU_T_HOJINSVKEI_KJAK = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/** サービスIFのリターンコード(正常) */
	private static final String RETURN_CODE_SUCCESS = "0000";
	
	/**
	 * 初期処理
	 * @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_KU_T_HOJINSVKEI_KJAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_HOJINSVKEI_KJAK);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		logPrint.printDebugLog("JBSbatSCVLANIDInfoMiJissiTrkm#execute START");
		
		// ファイルレイアウトに異常がないかチェックする
		if(inMap.isInputErrorFlg())
		{
			super.logPrint.printDebugLog("入力レコードエラー");
			super.commonItem.setErrFlg(true);					// エラーフラグ設定
			throw new JBSbatBusinessError("ESCB0060CE");
		}
		
		// 単項目チェック
		if(!this.isSingleCheckSCIFE014_INF1(inMap.getMap(), null))
		{
// OM-2018-0000397 2018/05/21 MOD START
//			throw new JBSbatBusinessError();
			// エラーが発生しましたが、処理を継続します。エラー内容(%1%)
			String mesInfo = "入力レコードに異常がありました。";
			super.logPrint.printBusinessErrorLog("EKKB0010CW", new String[]{mesInfo});
// OM-2018-0000397 2018/05/24 MOD START
//			commonItem.addErrorCount(1);
			commonItem.setErrFlg(true);
// OM-2018-0000397 2018/05/24 MOD END
			
			return null;
// OM-2018-0000397 2018/05/21 MOD END
		}
		
		// 工事案件を格納するMap
		JBSbatCommonDBInterface kojiakMap = new JBSbatCommonDBInterface();
		
		String[] paramKJAK =
		{
				inMap.getString("SVC_KEI_NO"), 	// サービス契約番号
				inMap.getString("KOJIAK_NO") 	// 工事案件番号
		};
		
		boolean officeFlg = false;
		
		//サービス契約_工事案件を検索
		kojiakMap = executeKU_T_SVKEI_KOJIAK_PKSELECT(paramKJAK);
		
		if(null == kojiakMap)
		{
			//法人サービス契約_工事案件を検索
			kojiakMap = executeKU_T_HOJINSVKEI_KJAK_PKSELECT(paramKJAK);
			//オフィスフラグを立てる
			officeFlg = true;
		}
		
		// サービス契約_工事案件からも法人サービス契約_工事案件も結果が取得できなかった場合エラー
		if(null == kojiakMap)
		{
			super.logPrint.printDebugLog("サービス契約_工事案件テーブルにレコードが存在しません。");
// OM-2018-0000397 2018/05/21 MOD START
//			String[] errMsg = {inMap.getString("SVC_KEI_NO"), inMap.getString("KOJIAK_NO"), JBSbatKU_T_SVKEI_KOJIAK.TABLE_NAME};
//			
//			throw new JBSbatBusinessException("ESCB0180CE", errMsg);
			// エラーが発生しましたが、処理を継続します。エラー内容(%1%)
			String mesInfo = inMap.getString("SVC_KEI_NO") 
								+ "(" + inMap.getString("KOJIAK_NO") + ")に"
								+ "対応するレコードが"
								+ "テーブル名(" + JBSbatKU_T_SVKEI_KOJIAK.TABLE_NAME + ")"
								+ "に存在しません。";
			super.logPrint.printBusinessErrorLog("EKKB0010CW", new String[]{mesInfo});
			commonItem.addErrorCount(1);
			
			return null;
// OM-2018-0000397 2018/05/21 MOD END
		}
		
		HashMap<String, Object> paramMap  = new HashMap<String, Object>();
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		HashMap<String, Object> dataMap = new HashMap<String, Object>();
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, "SCSV0005");
		
		// チェック&登録
		dataMap.put("func_code", JPCModelConstant.FUNC_CD_7);
		
		if(officeFlg)
		{
			dataMap.put("yokyu_mt_apl_sbt_cd", JSCStrConstant.YOKYU_SBT_CD_CLARIS);		// 要求元アプリ種別(Claris)
		}
		else
		{
			dataMap.put("yokyu_mt_apl_sbt_cd", JSCStrConstant.YOKYU_SBT_CD_BATCH);		// 要求元アプリ種別(バッチ)
		}
		
		dataMap.put("yokyu_sbt_cd", JSCStrConstant.YOKYU_SBT_NEW);					// 要求種別コード(新規)
		dataMap.put("vlan_order_cd", JSCStrConstant.VLAN_NEW);						// VLANコード
		dataMap.put("svc_kei_no", inMap.getString(JBSbatSCIFE014.SVC_KEI_NO));		// サービス契約番号
		dataMap.put("req_ji_kjak_no", inMap.getString(JBSbatSCIFE014.KOJIAK_NO));	// 依頼時工事案件番号
		dataMap.put("tel_vlan_id", getTelVlanId(inMap));							// 電話用VLAN-ID
		dataMap.put("bas_host_id", inMap.getString(JBSbatSCIFE014.BAS_HOST_ID));	// BASホストID
		dataMap.put("vlan_server_cd", JSCStrConstant.VLAN_SVRCD_SETSUBI);			// VLANサーバーコード(設備管理)
		dataMap.put("tel_vlan_order_stat", JSCStrConstant.SOD_STAT_ACK_NORMAL);		// 電話用VLANオーダステータス(応答正常)
		
		inputMap.put("SCSV000501SC", dataMap);
		
		// サービス・インターフェイスの呼び出し
		JCCBatchEsbInterface.invokeService(commonItem, paramMap, inputMap, outputMap);
		
		// outputMapのリターンコードから調べて、エラー処理をする
		String returnCode = JCCBatchEsbInterface.getReturnCode(outputMap);		// リターンコードの取得
		
		logPrint.printDebugLog("returnCode=" + returnCode);
		
		if(!RETURN_CODE_SUCCESS.equals(returnCode))
		{
			super.logPrint.printDebugLog("業務エラー。リターンコードは" + returnCode);
			super.logPrint.printBusinessErrorLog("ESCB0140CE",
					new String[] {inMap.getString(JBSbatSCIFE014.SVC_KEI_NO)});
			
			throw new JBSbatBusinessError();
		}
		
		logPrint.printDebugLog("JBSbatSCVLANIDInfoMiJissiTrkm#execute END");  
		
		return null;
		/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 入力ファイルデータより電話用VLAN-IDを取得します。値がnullの場合は"NULL"を返します。
	 * 
	 * @param inMap 入力ファイルデータ
	 * @return 電話用VLAN-ID
	 * @throws Exception 
	 */
	private String getTelVlanId(JBSbatServiceInterfaceMap inMap) throws Exception 
	{
		String telVlanId = inMap.getString(JBSbatSCIFE014.TEL_VLAN_ID);
		return isNullOrBlank(telVlanId) ? "NULL" : telVlanId;
	}

	/**
	 * 文字列のnullもしくは空文字のチェック
	 * @param value 対象文字列
	 * @return 文字列がnullもしくは空文字の場合true
	 */
	private boolean isNullOrBlank(String value) 
	{
		return value == null || value.trim().length() == 0;
	}
	
	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KU_T_SVKEI_KOJIAK.close();
		db_KU_T_HOJINSVKEI_KJAK.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 *入力情報（ＶＬＡＮ−ＩＤ情報受信（依頼未実施分））の単項目チェックを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.単項目チェックを行います。<br>
	 * 
	 * 2.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		rsMap:(項目、値)を(key、value)として、データをrsMapに入れます
	 *		itemvalueMap:埋め込み文字の値をitemvalueMapに入れます。キーの値は、以下に説明します。
	 * </pre>
	 * <p>
	 * @param rsMap 入力データ（TXT又はDB）を格納されたHashMap。
	 * @param itemvalueMap エラーメッセージに関する項目値を格納されたHashMap。
	 * @return  boolean trueである場合、エラーがありません。falseである場合、エラーを発生しました。
	 */
	private boolean isSingleCheckSCIFE014_INF1(HashMap rsMap, HashMap itemvalueMap)
	{
		// 単項目チェックを行います
		String strValue = null;

		// サービス契約番号項目チェック
		strValue = (String)rsMap.get("SVC_KEI_NO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
// OM-2018-0000397 2018/05/21 DEL START
//			commonItem.getLogPrint().printBusinessErrorLog("ESCB0060CE", new String[]{});
// OM-2018-0000397 2018/05/21 DEL END
			return false;
		}
		// 桁数チェック
// OM-2018-0000397 2018/05/21 MOD START
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "10", "10"}))
// OM-2018-0000397 2018/05/21 MOD END
		{
// OM-2018-0000397 2018/05/21 DEL START
//			commonItem.getLogPrint().printBusinessErrorLog("ESCB0060CE", new String[]{});
// OM-2018-0000397 2018/05/21 DEL END
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
// OM-2018-0000397 2018/05/21 DEL START
//			commonItem.getLogPrint().printBusinessErrorLog("ESCB0060CE", new String[]{});
// OM-2018-0000397 2018/05/21 DEL END
			return false;
		}

		// 電話ＶＬＡＮ−ＩＤ項目チェック
		strValue = (String)rsMap.get("TEL_VLAN_ID");
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "4"}))
		{
// OM-2018-0000397 2018/05/21 DEL START
//			commonItem.getLogPrint().printBusinessErrorLog("ESCB0060CE", new String[]{});
// OM-2018-0000397 2018/05/21 DEL END
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
// OM-2018-0000397 2018/05/21 DEL START
//			commonItem.getLogPrint().printBusinessErrorLog("ESCB0060CE", new String[]{});
// OM-2018-0000397 2018/05/21 DEL END
			return false;
		}

		// ＢＡＳ−ホストＩＤ項目チェック
		strValue = (String)rsMap.get("BAS_HOST_ID");
		// 桁数チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "15"}))
		{
// OM-2018-0000397 2018/05/21 DEL START
//			commonItem.getLogPrint().printBusinessErrorLog("ESCB0060CE", new String[]{});
// OM-2018-0000397 2018/05/21 DEL END
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji2"}))
		{
// OM-2018-0000397 2018/05/21 DEL START
//			commonItem.getLogPrint().printBusinessErrorLog("ESCB0060CE", new String[]{});
// OM-2018-0000397 2018/05/21 DEL END
			return false;
		}

		// 依頼時工事案件番号項目チェック
		strValue = (String)rsMap.get("KOJIAK_NO");
		// 必須チェック
		if(strValue == null || "".equals(strValue))
		{
// OM-2018-0000397 2018/05/21 DEL START
//			commonItem.getLogPrint().printBusinessErrorLog("ESCB0060CE", new String[]{});
// OM-2018-0000397 2018/05/21 DEL END
			return false;
		}
		// 桁数チェック
// OM-2018-0000397 2018/05/21 MOD START
//		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "0", "10"}))
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"ketasuu2", "10", "10"}))
// OM-2018-0000397 2018/05/21 MOD END
		{
// OM-2018-0000397 2018/05/21 DEL START
//			commonItem.getLogPrint().printBusinessErrorLog("ESCB0060CE", new String[]{});
// OM-2018-0000397 2018/05/21 DEL END
			return false;
		}
		// 属性チェック
		if(!JBSbatCheckUtil.invoke(strValue, new String[]{"hannkakuesuuji1"}))
		{
// OM-2018-0000397 2018/05/21 DEL START
//			commonItem.getLogPrint().printBusinessErrorLog("ESCB0060CE", new String[]{});
// OM-2018-0000397 2018/05/21 DEL END
			return false;
		}

		return true;
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	SVC_KEI_NO
	 *		 	KOJIAK_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKU_T_SVKEI_KOJIAK_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("SVC_KEI_NO", whereParam[0]);
		whereMap.setValue("KOJIAK_NO", whereParam[1]);

		// DBアクセスを実行します
		return db_KU_T_SVKEI_KOJIAK.selectByPrimaryKeys(whereMap);
	}

	/**
	 * PK(ＰＫ　検索)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で条件マップを作ります。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	HJIN_EO_YKAE_SVKEI_NO
	 *		 	KOJIAK_NO
	 * </pre>
	 * <p>
	 * @param whereParam 条件項目の値。
	 * @return JBSbatCommonDBInterface 検索の結果。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private JBSbatCommonDBInterface executeKU_T_HOJINSVKEI_KJAK_PKSELECT(Object[] whereParam) throws Exception
	{
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("HJIN_EO_YKAE_SVKEI_NO", whereParam[0]);
		whereMap.setValue("KOJIAK_NO", whereParam[1]);

		// DBアクセスを実行します
		return db_KU_T_HOJINSVKEI_KJAK.selectByPrimaryKeys(whereMap);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
