/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKSmtvlKojiShohenko
*	ソースファイル名	：JBSbatKKSmtvlKojiShohenko.java
*	作成者				：富士通　
*	作成日				：2014年07月10日
*＜機能概要＞
*　スマートバリュー工事諸変更部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v10.00.00	2014/07/16  FJ) 谷口	新規作成(【ANK-1918-00-00】ＵＳ管理Ｓ向けｅｏ顧客ＳのＩ／Ｆ改修)
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.util.file.JBSbatKKIFM603;
import eo.business.util.table.JBSbatKK_T_MANSION_BUKKEN;
import eo.business.util.table.JBSbatKK_T_MSKM_DTL;
import eo.business.util.table.JBSbatKK_T_SVC_KEI;
import eo.business.util.table.JBSbatKK_T_TK_HOSHIKI_KEI;
import eo.common.constant.JKKStrConst;
import eo.common.constant.JPCBatchMessageConstant;
import eo.framework.item.JBSbatCommonItem;
import eo.framework.item.JBSbatServiceInterfaceMap;
import eo.framework.item.JBSbatOutputItem;
import eo.framework.item.JBSbatCommonDBInterface;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JCCBatchEsbInterface;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKSmtvlKojiShohenko extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** テーブル(申込明細)*/
	private static final String D_TBL_NAME_KK_T_MSKM_DTL = "KK_T_MSKM_DTL";

	/** SQL定義キー(KK_SELECT_301)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_301 = "KK_SELECT_301";

	/** SQL定義キー(KK_SELECT_303)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_303 = "KK_SELECT_303";


	/** SQL定義キー(KK_SELECT_035)*/
	private static final String KK_T_MSKM_DTL_KK_SELECT_035 = "KK_SELECT_035";

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;

	/** テーブルアクセスクラス(申込明細)*/
	private JBSbatSQLAccess db_KK_T_MSKM_DTL = null;

	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/
	
	/** ユースケースID（工事諸変更連携）*/
	private static final String USECASE_ID_0794 = "KKSV0794";
	
	/** オペレーションID（工事諸変更連携）*/
	private static final String OPARATION_ID_0794 = "KKSV0794OP";
	
	/** 工事諸変更連携-工事案件CC */
	private static final String KKSV079401CC = "KKSV079401CC";
	
	/** サービス契約番号 **/
	private static final String SVC_KEI_NO = "svc_kei_no";
	
	/** SYSID **/
	private static final String SYSID = "sysid";
	
	/** 申込明細番号 **/
	private static final String MSKM_DTL_NO = "mskm_dtl_no";
	
	/** 申込番号 **/
	private static final String MSKM_NO = "mskm_no";
	
	/** 異動区分 **/
	private static final String IDO_DIV = "ido_div";
	
	/** スマートバリュー契約有無 **/
	private static final String SMTVL_KEI_UM = "smtvl_kei_um";
	
	/** 工事受付コード **/
	public static final String KOJI_UK_CD = "koji_uk_cd";
	
	/** 工事受付詳細コード **/
	public static final String KOJI_UK_DTL_CD = "koji_uk_dtl_cd";
	
	/** 異動区分：スマートバリュー登録・変更 **/
	public static final String IDO_DIV_SMTVL_ADD = "00070";
	
	/** 異動区分：スマートバリュー解約 **/
	public static final String IDO_DIV_SMTVL_DSL = "00071";
	
	/** マンション物件コード **/
	public static final String MANSION_BUKKEN_CD = "001";

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		db_KK_T_MSKM_DTL = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_MSKM_DTL);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		HashMap<String, Object> outputMap = new HashMap<String, Object>();
		JBSbatCommonDBInterface dbkkSelect301 = null;
		JBSbatCommonDBInterface dbkkSelect035 = null;
		JBSbatCommonDBInterface dbkkSelect303 = null;
		
		// サービス契約から該当レコード取得
		Object[] kkSelect301 = {super.opeDate,inMap.getString(JBSbatKKIFM603.SVC_KEI_NO)};
		executeKK_T_SVC_KEI_KK_SELECT_301(kkSelect301);
		dbkkSelect301 = db_KK_T_SVC_KEI.selectNext();
		
		// SYSID
		String sysid = dbkkSelect301.getString(JBSbatKK_T_SVC_KEI.SYSID);
		
		// 申込明細から該当レコード取得
		Object[] kkSelect035 = {inMap.getString(JBSbatKKIFM603.MSKM_DTL_NO)};
		executeKK_T_MSKM_DTL_KK_SELECT_035(kkSelect035);
		dbkkSelect035 = db_KK_T_MSKM_DTL.selectNext();
		
		// 申込番号
		String mskmNo = dbkkSelect035.getString(JBSbatKK_T_MSKM_DTL.MSKM_NO);
		
		// サービス契約番号から提供方式コードとマンション物件コードを取得
		Object[] kkSelect303 = {super.opeDate,inMap.getString(JBSbatKKIFM603.SVC_KEI_NO)};
		executeKK_T_SVC_KEI_KK_SELECT_303(kkSelect303);
		dbkkSelect303 = db_KK_T_SVC_KEI.selectNext();
		
		// 取得結果がNULLの場合は処理対象外
		if (dbkkSelect303 != null)
		{
			// 提供方式コード
			String tkHoshikiCd = dbkkSelect303.getString(JBSbatKK_T_TK_HOSHIKI_KEI.TK_HOSHIKI_CD);
			// マンション物件コード
			String mtBukkenCd = dbkkSelect303.getString(JBSbatKK_T_MANSION_BUKKEN.MANSION_BUKKEN_CD);
			
			// マンション物件コードがマンションで提供方式コードがVDSLかイーサか判定し、
			// 左記の場合は工事諸変更連携サービスから工事案件CCを呼び出す
			if(!checkKojiShohenkoRnktg(mtBukkenCd, tkHoshikiCd))
			{
				// 対象外なので処理を抜ける
				return null;
			}
			// 工事諸変更連携サービス呼出
			this.invokeService(inMap, sysid, mskmNo, outputMap);
			
			// サービスの処理結果を判定
			String returnCode = outputMap.get(JCCBatchEsbInterface.RETURN_CODE).toString();
			// 正常またはワーニング以外の場合
			if(JCCBatchEsbInterface.RETURN_CODE_SUCCESS.equals(returnCode))
			{
				// ログにサービス契約番号を出力(メッセージ区分:情報)
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB1200AI, new String[]{"サービス契約番号:" + inMap.getString(JBSbatKKIFM603.SVC_KEI_NO) + "は正常に工事諸変更登録されました。"});
			}
			else
			{
				// エラーログ出力
				commonItem.getLogPrint().printBusinessErrorLog(JPCBatchMessageConstant.EKKB0270CE, new String[]{"工事諸変更連携"});
				// エラーフラグ設定
				super.commonItem.setErrFlg(true);
			}
		}
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KK_T_SVC_KEI.close();
		db_KK_T_MSKM_DTL.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_301)で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_SVC_KEI_KK_SELECT_301(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_301);
	}

	/**
	 * SQLKEY(KK_SELECT_303)で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_SVC_KEI_KK_SELECT_303(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());
		paramList.setValue(param[1].toString());

		// DBアクセスを実行します
		db_KK_T_SVC_KEI.selectBySqlDefine(paramList, KK_T_SVC_KEI_KK_SELECT_303);
	}

	/**
	 * SQLKEY(KK_SELECT_035)で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_MSKM_DTL_KK_SELECT_035(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KK_T_MSKM_DTL.selectBySqlDefine(paramList, KK_T_MSKM_DTL_KK_SELECT_035);
	}

	/**
	 * 工事諸変更連携対象か判定を行います。
	 * @param mtBukkenCd マンション物件コード
	 * @param tkHoshikiCd 提供方式コード
	 * @return true 対象、false 対象外
	 * @throws Exception 業務サービス内で発生した例外全般。 
	 */
	public boolean checkKojiShohenkoRnktg(String mtBukkenCd, String tkHoshikiCd) throws Exception
	{
		// マンション
		if (MANSION_BUKKEN_CD.equals(mtBukkenCd))
		{
			// イーサネット
			if (JKKStrConst.CD00590_ETHERNET.equals(tkHoshikiCd) || JKKStrConst.CD00590_GIGA_ETHERNET.equals(tkHoshikiCd))
			{
				return true;
			}
			// VDSL
			else if (JKKStrConst.CD00590_VDSL1.equals(tkHoshikiCd) || JKKStrConst.CD00590_VDSL2.equals(tkHoshikiCd) ||
					  JKKStrConst.CD00590_VDSL3.equals(tkHoshikiCd) || JKKStrConst.CD00590_VDSL4.equals(tkHoshikiCd) ||
					  JKKStrConst.CD00590_VDSL5.equals(tkHoshikiCd))
			{
				return true;
			}
			// 上記以外(光配線、DOCSIS)
			else
			{
				return false;
			}

		}
		else
		{
			return false;
		}
	}
	
	/**
	 * 工事諸変更連携サービスを呼び出します。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.工事諸変更連携サービスの上りマッピングを行います。<br>
	 *
	 * 2.工事諸変更連携サービスを呼び出します。<br>
	 *
	 * 3.工事諸変更連携のリターンコードを参照し、エラー有無を確認します。<br>
	 * </pre>
	 * <p>
	 * @param inMap 入力電文
	 * @param sysid SYSID
	 * @param mskmNo 申込番号
	 * @param outputMap 結果格納Map
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private HashMap<String, Object> invokeService(JBSbatServiceInterfaceMap inMap, String sysid, String mskmNo, HashMap<String, Object> outputMap) throws Exception
	{
		HashMap<String, Object> paramMap = new HashMap<String, Object>();
		HashMap<String, Object> inputMap = new HashMap<String, Object>();
		HashMap<String, Object> kojiShohenkoMap = new HashMap<String, Object>();
		
		// ユースケースIDを設定
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, USECASE_ID_0794);
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, OPARATION_ID_0794);
		
		String smtvlKeiUm = (String)inMap.getString(JBSbatKKIFM603.SMTVL_KEI_UM);
		
		// 上りマッピング
		// サービス契約番号
		kojiShohenkoMap.put(SVC_KEI_NO, inMap.getString(JBSbatKKIFM603.SVC_KEI_NO));
		// SYSID
		kojiShohenkoMap.put(SYSID, sysid);
		// 申込明細番号
		kojiShohenkoMap.put(MSKM_DTL_NO, inMap.getString(JBSbatKKIFM603.MSKM_DTL_NO));
		// 申込番号
		kojiShohenkoMap.put(MSKM_NO, mskmNo);
		// 工事受付コード（内容変更）
		kojiShohenkoMap.put(KOJI_UK_CD, "070");
		// 工事受付詳細コード（スマートバリュー契約変える）
		kojiShohenkoMap.put(KOJI_UK_DTL_CD, "AA");
		// スマートバリュー契約有無
		kojiShohenkoMap.put(SMTVL_KEI_UM, inMap.getString(JBSbatKKIFM603.SMTVL_KEI_UM));
		// 異動区分
		// スマートバリュー契約有無の値によって異動区分を設定
		if (JKKStrConst.CD_DIV_UM_ARI.equals(smtvlKeiUm))
		{
			kojiShohenkoMap.put(IDO_DIV, IDO_DIV_SMTVL_ADD);
		}
		else
		{
			kojiShohenkoMap.put(IDO_DIV, IDO_DIV_SMTVL_DSL);
		}
		
		//工事諸変更連携対象リストをセット
		inputMap.put(KKSV079401CC, kojiShohenkoMap);

		try
		{
			// サービスを実行
			JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inputMap, outputMap);
		}
		catch (Exception e)
		{
			// エラーコードをセット（空文字）
			outputMap.put(JCCBatchEsbInterface.RETURN_CODE, "");
		}
		return outputMap;
	}
}
