/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatSCVLANIDInfoNbRnkDataCrt
*	ソースファイル名	：JBSbatSCVLANIDInfoNbRnkDataCrt.java
*	作成者				：富士通　
*	作成日				：2013年10月01日
*＜機能概要＞
*　VLAN-ID情報内部連携データ作成部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v1.00.00	2013/10/01   富士通		新規作成
*   v21.00.00	2016/01/04   FJ)大山	OM-2015-0003366対応
*	v25.00.00   2016/04/13   FJ）阮     ANK-2768-00-00 対応
*********************************************************************/
package eo.business.service;

import eo.business.common.JBSbatBusinessService;
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.business.util.file.JBSbatKKIFI027;
import eo.business.util.table.JBSbatKK_T_KAISEN_TG_SVKEI;
import eo.business.util.table.JBSbatKU_T_SVKEI_KOJIAK;
import eo.business.util.table.JBSbatSC_T_TEL_VLAN_ORDER;
import eo.common.constant.JSCStrConstant;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatSCVLANIDInfoNbRnkDataCrt extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(電話用ＶＬＡＮオーダ)*/
	private static final String D_TBL_NAME_SC_T_TEL_VLAN_ORDER = "SC_T_TEL_VLAN_ORDER";

	/** テーブル(サービス契約＿工事案件)*/
	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";

	/** SQL定義キー(SC_SELECT_001)*/
	private static final String KK_T_KAISEN_TG_SVKEI_SC_SELECT_001 = "SC_SELECT_001";

	/** テーブルアクセスクラス(電話用ＶＬＡＮオーダ)*/
	private JBSbatSQLAccess db_SC_T_TEL_VLAN_ORDER = null;

	/** テーブルアクセスクラス(サービス契約＿工事案件)*/
	private JBSbatSQLAccess db_KU_T_SVKEI_KOJIAK = null;

	/** テーブルアクセスクラス(回線対象サービス契約)*/
	private JBSbatSQLAccess db_KK_T_KAISEN_TG_SVKEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_SC_T_TEL_VLAN_ORDER = new JBSbatSQLAccess(commonItem, D_TBL_NAME_SC_T_TEL_VLAN_ORDER);
		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);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// 依頼時工事案件番号の取得
		String reqJiKjakNo = inMap.getString(JBSbatSC_T_TEL_VLAN_ORDER.REQ_JI_KJAK_NO);
// OM-2015-0003366 ADD START 
		// マンションエラーフラグ
		boolean errFlag = false;
		// 工事案件エラーフラグ
		boolean errFlagKg = false;
// OM-2015-0003366 ADD END
		
		// サービス契約回線内訳番号の取得
		String svcKeiKaisenUcwkNo = null;
		// 電話VLANオーダの依頼時工事案件番号が未設定の場合(＝マンション)
		if("".equals(reqJiKjakNo) || reqJiKjakNo == null)
		{
			// 回線対象サービス契約を格納するMap
			JBSbatCommonDBInterface kaisenTgData = new JBSbatCommonDBInterface();
			
			// 回線対象サービス契約スキーマより取得
			String[] paramKaisen =
			{
					inMap.getString(JBSbatSC_T_TEL_VLAN_ORDER.SVC_KEI_NO)
			};
			
			//回線対象サービス契約を検索
			executeKK_T_KAISEN_TG_SVKEI_SC_SELECT_001(paramKaisen);
			
			kaisenTgData = this.db_KK_T_KAISEN_TG_SVKEI.selectNext();
			
			if(kaisenTgData == null)
			{
				// OM-2015-0003366 ADD START 
				errFlag  = true;
				// OM-2015-0003366 ADD END
				// OM-2015-0003366 DEL START
//				String[] errMsg = {"サービス契約番号", inMap.getString(JBSbatSC_T_TEL_VLAN_ORDER.SVC_KEI_NO), JBSbatKK_T_KAISEN_TG_SVKEI.TABLE_NAME};
//				super.logPrint.printBusinessErrorLog("ESCB0490CW", errMsg);
//				throw new JBSbatBusinessError();
				// OM-2015-0003366 DEL END
			// OM-2015-0003366 MOD START 
			} else {
			
				// サービス契約回線内訳番号を取得する
				svcKeiKaisenUcwkNo = (String)kaisenTgData.getString(JBSbatKK_T_KAISEN_TG_SVKEI.SVC_KEI_KAISEN_UCWK_NO);
			}
			// OM-2015-0003366 MOD END
		}
		// 依頼時工事案件番号が設定されている場合
		else
		{
			// 工事案件を格納するMap
			JBSbatCommonDBInterface kojiakMap = new JBSbatCommonDBInterface();
			
			// サービス契約＿工事案件スキーマより取得
			String[] paramKJAK =
			{
					inMap.getString(JBSbatSC_T_TEL_VLAN_ORDER.SVC_KEI_NO),
					reqJiKjakNo
			};
			kojiakMap = executeKU_T_SVKEI_KOJIAK_PKSELECT(paramKJAK);
			
			if(kojiakMap == null)
			{
				// OM-2015-0003366 ADD START 
				errFlagKg  = true;
				// OM-2015-0003366 ADD END
				// OM-2015-0003366 DEL START
//				String[] errMsg = {inMap.getString(JBSbatSC_T_TEL_VLAN_ORDER.SVC_KEI_NO), reqJiKjakNo, JBSbatKU_T_SVKEI_KOJIAK.TABLE_NAME};
//				super.logPrint.printBusinessErrorLog("ESCB0490CW", errMsg);
//				throw new JBSbatBusinessError();
				// OM-2015-0003366 DEL End
			// OM-2015-0003366 MOD START 
			} else {
			
				// サービス契約回線内訳番号を取得する
				svcKeiKaisenUcwkNo = (String)kojiakMap.getString(JBSbatKU_T_SVKEI_KOJIAK.SVC_KEI_KAISEN_UCWK_NO);
			// OM-2015-0003366 MOD END
			}
		}
		
		// 電話用VLANオーダスキーマの更新
		// 更新する値を設定(SOD業務連携ステータス="004"(業務連携済み))
		Object[] setParam = new Object[1];
		setParam[0] = JSCStrConstant.SOD_RNKI_STAT_FIN;
		
		// 更新する条件を設定(電話用VLANオーダ番号(KEY))
		Object[] whereParam = new Object[1];
		whereParam[0] = inMap.get(JBSbatSC_T_TEL_VLAN_ORDER.TEL_VLAN_ORDER_NO);
		
		executeSC_T_TEL_VLAN_ORDER_PKUPDATE(setParam, whereParam);
		
		// VLAN-ID情報を格納するMap
		JBSbatServiceInterfaceMap vlanMap = new JBSbatServiceInterfaceMap();

		// OM-2015-0003366 ADD START 
		if(errFlag) {
			String[] errMsg = {"サービス契約番号", inMap.getString(JBSbatSC_T_TEL_VLAN_ORDER.SVC_KEI_NO), JBSbatKK_T_KAISEN_TG_SVKEI.TABLE_NAME};
			super.logPrint.printBusinessErrorLog("ESCB0490CW", errMsg);
			throw new JBSbatBusinessError();
			
		}
		
		if(errFlagKg) {
			String[] errMsg = {inMap.getString(JBSbatSC_T_TEL_VLAN_ORDER.SVC_KEI_NO), reqJiKjakNo, JBSbatKU_T_SVKEI_KOJIAK.TABLE_NAME};
			super.logPrint.printBusinessErrorLog("ESCB0490CW", errMsg);
			throw new JBSbatBusinessError();
		}
		// OM-2015-0003366 ADD END
		
		vlanMap.setString(JBSbatKKIFI027.SVC_KEI_NO            , inMap.getString(JBSbatSC_T_TEL_VLAN_ORDER.SVC_KEI_NO));
		vlanMap.setString(JBSbatKKIFI027.SVC_KEI_KAISEN_UCWK_NO, svcKeiKaisenUcwkNo);
		vlanMap.setString(JBSbatKKIFI027.IRAI_FLG              , JSCStrConstant.VLAN_ID_IRAI_FLG_ELSE);
		vlanMap.setString(JBSbatKKIFI027.TEL_BAS_HOST_ID       , inMap.getString(JBSbatSC_T_TEL_VLAN_ORDER.BAS_HOST_ID));
		vlanMap.setString(JBSbatKKIFI027.TEL_VLAN_ID           , inMap.getString(JBSbatSC_T_TEL_VLAN_ORDER.TEL_VLAN_ID));
		vlanMap.setString(JBSbatKKIFI027.TEL_VLAN_TRKM_YMD     , opeDate);
		// ANK-2768-00-00 ADD START
		// 電話ＶＬＡＮ−ＩＤ依頼時工事案件番号
		vlanMap.setString(JBSbatKKIFI027.TEL_VLAN_REQ_JI_KJAK_NO, reqJiKjakNo);
		// ANK-2768-00-00 ADD END
		
		// VLAN-ID情報（内部連携用）ファイルの作成
		JBSbatOutputItem outputBean = createOutputData(vlanMap);
		
		return outputBean;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_SC_T_TEL_VLAN_ORDER.close();
		db_KU_T_SVKEI_KOJIAK.close();
		db_KK_T_KAISEN_TG_SVKEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * ファイル出力データを作成します。
	 * @param inMap 入力電文
	 * @return ファイル出力データ
	 * @throws Exception
	 */
	private JBSbatOutputItem createOutputData(JBSbatServiceInterfaceMap inMap) throws Exception
	{
		// 入出力インターフェースオブジェクトを生成
		JBSbatServiceInterfaceMap outMap = new JBSbatServiceInterfaceMap();

		// ファイル出力データの設定
		outMap.setString(JBSbatKKIFI027.SVC_KEI_NO            , inMap.getString(JBSbatKKIFI027.SVC_KEI_NO));
		outMap.setString(JBSbatKKIFI027.SVC_KEI_KAISEN_UCWK_NO, inMap.getString(JBSbatKKIFI027.SVC_KEI_KAISEN_UCWK_NO));
		outMap.setString(JBSbatKKIFI027.IRAI_FLG              , inMap.getString(JBSbatKKIFI027.IRAI_FLG));
		outMap.setString(JBSbatKKIFI027.TEL_BAS_HOST_ID       , inMap.getString(JBSbatKKIFI027.TEL_BAS_HOST_ID));
		outMap.setString(JBSbatKKIFI027.TEL_VLAN_ID           , inMap.getString(JBSbatKKIFI027.TEL_VLAN_ID));
		outMap.setString(JBSbatKKIFI027.TEL_VLAN_TRKM_YMD     , inMap.getString(JBSbatKKIFI027.TEL_VLAN_TRKM_YMD));
		// ANK-2768-00-00 ADD START
		outMap.setString(JBSbatKKIFI027.TEL_VLAN_REQ_JI_KJAK_NO     , inMap.getString(JBSbatKKIFI027.TEL_VLAN_REQ_JI_KJAK_NO));
		// ANK-2768-00-00 ADD END
		
		// 出力フラグを設定
		outMap.setOutFlg(true);
		
		// 出力共通電文を生成する
		JBSbatOutputItem outputBean = new JBSbatOutputItem();
		
		// 出力共通電文に入出力インターフェースを設定する
		outputBean.addOutMapList(outMap);
		
		return outputBean;
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * PK(ＰＫ　更新)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数で設定項目マップを作ります。<br>
	 *
	 * 2.引数で条件マップを作ります。<br>
	 *
	 * 3.DBアクセスを実行します。<br>
	 * 
	 * 4.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		setParam:設定したい項目の(項目、値)を(key、value)として、setParamマップに入れます。項目キーは以下に説明します。
	 *		 	ＳＯＤ業務連携ステータス				SOD_WORK_RNKI_STAT
	 *		whereParam:PK項目の(項目、値)を(key、value)として,格納された配列です。PK項目は以下に説明します。
	 *		 	TEL_VLAN_ORDER_NO
	 * </pre>
	 * <p>
	 * @param setParam 設定項目の値。
	 * @param whereParam 条件項目の値。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeSC_T_TEL_VLAN_ORDER_PKUPDATE(Object[] setParam, Object[] whereParam) throws Exception
	{
		// 設定値のマップを作成します
		JBSbatCommonDBInterface setMap = new JBSbatCommonDBInterface();
		setMap.setValue("SOD_WORK_RNKI_STAT", setParam[0]);
	
		// 条件のマップを作成します
		JBSbatCommonDBInterface whereMap = new JBSbatCommonDBInterface();
		whereMap.setValue("TEL_VLAN_ORDER_NO", whereParam[0]);

		// DBアクセスを実行します
		db_SC_T_TEL_VLAN_ORDER.updateByPrimaryKeys(whereMap, setMap);
	}

	/**
	 * 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);
	}

	/**
	 * SQLKEY(SC_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 executeKK_T_KAISEN_TG_SVKEI_SC_SELECT_001(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_SC_SELECT_001);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
}
