/*********************************************************************
*  All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*	システム名			：eo顧客基幹システム
*	モジュール名		：JBSbatKKKjKrClUkSmtvlIdoIfAdd
*	ソースファイル名	：JBSbatKKKjKrClUkSmtvlIdoIfAdd.java
*	作成者				：富士通　
*	作成日				：2017年11月06日
*＜機能概要＞
*　工事仮キャンセル受付時スマートバリュー異動情報登録部品です。
*＜修正履歴＞
*	バージョン	修正日		修正者		修正内容
*	v31.00.00	2017/11/06	FJ)永井		【ANK-3136-00-00】OPMSハードウエア保守切れ対応
*	v31.00.01	2018/07/17	FJ)黒田(耕)	【IT2-2018-0000067】スマートバリュー異動情報登録時の異常終了
*********************************************************************/
package eo.business.service;

import java.util.HashMap;

import eo.business.common.JBSbatBusinessService;
import eo.business.common.JBSbatKKConst;
import eo.business.util.file.JBSbatKKIFM767;
import eo.business.util.table.JBSbatKU_T_KOJIAK;
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.application.JBSbatBusinessError;
import eo.framework.db.JBSbatSQLAccess;
import eo.framework.util.JBSbatStringUtil;
import eo.framework.util.JCCBatchEsbInterface;

/**
* (クラスの機能概要) <p>
*<BR>
* @author 富士通
*/
public class JBSbatKKKjKrClUkSmtvlIdoIfAdd extends JBSbatBusinessService
{
	/**▼▼▼▼▼▼ツールから生成した宣言です 開始▼▼▼▼▼▼*/
	/** テーブル(工事案件)*/
	private static final String D_TBL_NAME_KU_T_KOJIAK = "KU_T_KOJIAK";

	/** テーブル(サービス契約)*/
	private static final String D_TBL_NAME_KK_T_SVC_KEI = "KK_T_SVC_KEI";

	/** SQL定義キー(KK_SELECT_041)*/
	private static final String KU_T_KOJIAK_KK_SELECT_041 = "KK_SELECT_041";

	/** SQL定義キー(KK_SELECT_343)*/
	private static final String KK_T_SVC_KEI_KK_SELECT_343 = "KK_SELECT_343";

	/** テーブルアクセスクラス(工事案件)*/
	private JBSbatSQLAccess db_KU_T_KOJIAK = null;

	/** テーブルアクセスクラス(サービス契約)*/
	private JBSbatSQLAccess db_KK_T_SVC_KEI = null;
	/**▲▲▲▲▲▲ツールから生成した宣言です 終了▲▲▲▲▲▲*/

	/**
	 * 初期処理
	 * @param JBSbatCommonItem commonItem　バッチ共通パラメータ電文
	 * @throws Exception
	 */
	public void initial(JBSbatCommonItem commonItem) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの初期処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した初期化のソースです 開始▼▼▼▼▼▼*/
		// 共通パラメータを設定します
		super.setCommonInfo(commonItem);

		// DBアクセスクラスを生成します
		db_KU_T_KOJIAK = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KU_T_KOJIAK);
		db_KK_T_SVC_KEI = new JBSbatSQLAccess(commonItem, D_TBL_NAME_KK_T_SVC_KEI);
		/**▲▲▲▲▲▲ツールから生成した初期化のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの初期処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 主処理
	 * @param inMap　入力電文
	 * @return JBSbatOutputItem　出力情報
	 * @throws Exception
	 */
	public JBSbatOutputItem execute(JBSbatServiceInterfaceMap inMap) throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの主処理を記述してください。▼▼▼▼▼▼*/
		
		// レコード区分
		String recDiv = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM767.REC_DIV));
		// 新規変更区分
		String  newChgDiv = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM767.NEW_CHG_DIV));
		// 工事案件種別
		String  kojiakSbtCd = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM767.KOJIAK_SBT_CD));
		
		// 仮キャンセル情報ファイルのレコード区分が「工事仮キャンセル受付情報」、
		// 新規変更区分が「新規」、工事案件種別が「新設」の場合、以降の判定を行います
		if (JBSbatKKConst.OPMS_RNKI_CD_3_4_KJ_KR_CL_UK_INFO.equals(recDiv) && JBSbatKKConst.KKIFI023_NEWCHG_DIV_NEW.equals(newChgDiv)
				&& JBSbatKKConst.KOJIAK_SBT_CD_NEWESTA.equals(kojiakSbtCd))
		{
			// サービス契約番号
			String svcKeiNo = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM767.SVC_KEI_NO));
			
			// 仮キャンセル情報ファイル.サービス契約番号に紐づくサービス契約のサービス契約番号を取得します
			executeKK_T_SVC_KEI_KK_SELECT_343(new Object[] {
					svcKeiNo, super.opeDate});
			
			// レコードを１件取得します
			JBSbatCommonDBInterface svcKeiMap = db_KK_T_SVC_KEI.selectNext();
			
			// 取得レコードが存在する場合、以降の処理を行います
			if (null != svcKeiMap)
			{
				
				// 工事案件番号
				String  kojiakNo = JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM767.KOJIAK_NO));
				
				// 仮キャンセル情報ファイル.工事案件番号に紐づく工事案件の工事案件中止理由コード1と工事案件中止理由コード２を取得します
				executeKU_T_KOJIAK_KK_SELECT_041(new Object[] {
						kojiakNo});
				
				// レコードを１件取得します
				JBSbatCommonDBInterface kojiakMap = db_KU_T_KOJIAK.selectNext();
				
				// 取得レコードが存在する場合、以降の処理を行います
				if (null != kojiakMap)
				{
					// サービスに渡す業務データを格納するMAPを作成します
					HashMap<String, Object> inputMap = new HashMap<String, Object>();
					
					inputMap.put("svc_kei_no", svcKeiNo);
					inputMap.put("ido_div", JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM767.IDO_DIV)));
					inputMap.put("prg_stat", JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM767.PRG_STAT)));
					inputMap.put("prg_dtm", JBSbatStringUtil.Rtrim(inMap.getString(JBSbatKKIFM767.PRG_DTM)));
// IT2-2018-0000067 MOD START
//					inputMap.put("kojiak_stp_rsn_cd1", JBSbatStringUtil.Rtrim(kojiakMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_STP_RSN_CD_1)));
//					inputMap.put("kojiak_stp_rsn_cd2", JBSbatStringUtil.Rtrim(kojiakMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_STP_RSN_CD_2)));
					inputMap.put("kojiak_stp_rsn_cd_1", JBSbatStringUtil.Rtrim(kojiakMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_STP_RSN_CD_1)));
					inputMap.put("kojiak_stp_rsn_cd_2", JBSbatStringUtil.Rtrim(kojiakMap.getString(JBSbatKU_T_KOJIAK.KOJIAK_STP_RSN_CD_2)));
// IT2-2018-0000067 MOD END
					
					super.logPrint.printDebugLog("■スマートバリュー異動情報登録CCの呼出実行--サービス契約番号->" + svcKeiNo);
					// スマートバリュー異動情報登録CCの呼出を行います
					this.execKKSV0877(inputMap);
				}
			}
		}
		
		return null;
	/**▲▲▲▲▲▲業務サービスの主処理を記述してください。▲▲▲▲▲▲*/
	}

	/**
	 * 業務サービス終了処理
	 * @throws Exception
	 */
	public void terminal() throws Exception
	{
	/**▼▼▼▼▼▼業務サービスの終了処理を記述してください。▼▼▼▼▼▼*/
		/**▼▼▼▼▼▼ツールから生成した終了処理のソースです 開始▼▼▼▼▼▼*/
		// DBアクセスクラスをクローズします
		db_KU_T_KOJIAK.close();
		db_KK_T_SVC_KEI.close();
		/**▲▲▲▲▲▲ツールから生成した終了処理のソースです 終了▲▲▲▲▲▲*/
	/**▲▲▲▲▲▲業務サービスの終了処理を記述してください。▲▲▲▲▲▲*/
	}

	/**▼▼▼▼▼▼ツールから生成したメソッドです 開始▼▼▼▼▼▼*/
	/**
	 * SQLKEY(KK_SELECT_041)でDBアクセスを行います。<br>
	 * <p>
	 * <b>処理フロー</b><br>
	 * <pre>
	 * 1.引数でバイント変数を設定します。<br>
	 *
	 * 2.DBアクセスを実行します。<br>
	 * 
	 * 3.メソッドの呼び出し方です。<br>
	 *		引数:
	 *		param:順にバイント変数の値をparam配列に入れます。バイント変数は以下に説明します。
	 *		 	工事案件番号
	 * </pre>
	 * <p>
	 * @param param バイント変数の値配列。
	 * @throws Exception 業務サービス内で発生した例外全般。
	 */
	private void executeKU_T_KOJIAK_KK_SELECT_041(Object[] param) throws Exception
	{
		// バイント変数のリストを生成します
		JBSbatCommonDBInterface paramList = new JBSbatCommonDBInterface();
		paramList.setValue(param[0].toString());

		// DBアクセスを実行します
		db_KU_T_KOJIAK.selectBySqlDefine(paramList, KU_T_KOJIAK_KK_SELECT_041);
	}

	/**
	 * SQLKEY(KK_SELECT_343)で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_343(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_343);
	}
	/**▲▲▲▲▲▲ツールから生成したメソッドです 終了▲▲▲▲▲▲*/
	
	/**
	 * 
	 * スマートバリュー異動情報登録処理部品の呼出を行います。
	 * 
	 * @param inputMap 設定パラメータ
	 */
	private void execKKSV0877(HashMap<String, Object> inputMap) throws Exception
	{

		// サービスに渡す業務データを格納するMAP
		HashMap<Object, Object> inputSmtvlIdoInfMap = new HashMap<Object, Object>();
		
		// ユースケースIDを格納するMAP
		HashMap<Object, Object>  paramMap = new HashMap<Object, Object>();
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_USECASE_ID, "KKSV0877");
		paramMap.put(JCCBatchEsbInterface.TELEGRAM_INFO_OPERATION_ID, "KKSV0877OP");
		
		// サービスの処理結果が格納されるMAP
		HashMap<Object, Object> outputMap = new HashMap<Object, Object>();
		
		String listTitle = "KKSV087701CC";
		
		// inputSmtvlIdoInfMapにデータをリストタイトルをキーとして設定します
		inputSmtvlIdoInfMap.put(listTitle, inputMap);
		
		// サービス呼び出しを行います
		JCCBatchEsbInterface.invokeService(super.commonItem, paramMap, inputSmtvlIdoInfMap, outputMap);
		
		// 部品からのリターンコードを取得します
		String returnCode = (String)outputMap.get("RETURN_CODE");
		super.logPrint.printDebugLog("★RETURN_CODE：" + returnCode);
		
		// サービスよりエラーが返却された場合、以降の処理を行います
		if (!"0000".equals(returnCode))
		{
			String svcKeiNo = (String)inputMap.get("svc_kei_no");
			String idoDiv = (String)inputMap.get("ido_div");
			String prgStat = (String)inputMap.get("prg_stat");
// IT2-2018-0000067 MOD START
//			String kojiakStpRsnCd1 = (String)inputMap.get("kojiak_stp_rsn_cd1");
//			String kojiakStpRsnCd2 = (String)inputMap.get("kojiak_stp_rsn_cd2");
			String kojiakStpRsnCd_1 = (String)inputMap.get("kojiak_stp_rsn_cd_1");
			String kojiakStpRsnCd_2 = (String)inputMap.get("kojiak_stp_rsn_cd_2");
// IT2-2018-0000067 MOD END
			
			StringBuffer sb = new StringBuffer();
			sb.append(" サービス契約番号：" +svcKeiNo);
			sb.append("、異動区分：" +idoDiv);
			sb.append("、進捗ステータス：" +prgStat);
// IT2-2018-0000067 MOD START
//			sb.append("、工事案件中止理由コード1：" +kojiakStpRsnCd1);
//			sb.append("、工事案件中止理由コード2：" +kojiakStpRsnCd2);
			sb.append("、工事案件中止理由コード1：" +kojiakStpRsnCd_1);
			sb.append("、工事案件中止理由コード2：" +kojiakStpRsnCd_2);
// IT2-2018-0000067 MOD END
			
			// サービスエラーの場合、下記のログ出力します
			super.logPrint.printBusinessErrorLog(JPCBatchMessageConstant.EKKB0010CW,
				new String[]{"スマートバリュー異動情報登録CCでエラーが発生しました(リターンコード):" + returnCode + sb.toString()});
			throw new JBSbatBusinessError();
		}
	}
}
