/*********************************************************************
* All Rights reserved,Copyright (c) K-Opticom
**********************************************************************
*＜プログラム内容＞
*   システム名      ：eo顧客基幹システム
*   モジュール名    ：JKUejbGetTekkyoKiki
*   ソースファイル名：JKUejbGetTekkyoKiki.java
*   作成者          ：富士通
*   日付            ：2025年03月05日
*＜機能概要＞
*  機器提供サービス契約スキーマから撤去機器の情報を取得する部品です。
*＜修正履歴＞
*   バージョン  修正日          修正者      修正内容
*   v74.0.0		2025/03/05		FJ)峰村		新規作成【ANK-4657-00-00】【eo】HGW導入対応フォロー６
*
**********************************************************************/
package eo.ejb.common;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.fujitsu.futurity.model.base.CAANConnectionMgr;
import com.fujitsu.futurity.model.base.CAANException;
import com.fujitsu.futurity.model.base.CAANJDBCUtil;
import com.fujitsu.futurity.model.ejb.common.JSYejbConnection;

import eo.ejb.cbm.entity.KK0341ETMsg;
import eo.common.constant.JKUStrConst;
import eo.common.util.JKUCommonUtil;

public class JKUejbGetTekkyoKiki
{

	/**
	 * 撤去機器（ネット）取得処理
	 * @param kojiak_no 工事案件番号
	 * @param opedate 運用日付
	 * @return 機器提供サービス契約スキーマと返品機器スキーマから取得した情報
	 * @throws CAANException
	 */
	public static List<Map<String, String>> getTekkyoKiki_Net(String kojiak_no,String opedate) throws CAANException
	{
		if (JKUCommonUtil.isNull(kojiak_no) || JKUCommonUtil.isNull(opedate))
		{
			return new ArrayList<Map<String, String>>();
		}
		return getInputList(kojiak_no,opedate,JKUStrConst.CD00130_NET,JKUStrConst.TKNKKSBT_ROUTER);
	}
	
	/**
	 * 撤去機器（電話）取得処理
	 * @param kojiak_no 工事案件番号
	 * @param opedate 運用日付
	 * @return 機器提供サービス契約スキーマと返品機器スキーマから取得した情報
	 * @throws CAANException
	 */
	public static List<Map<String, String>> getTekkyoKiki_Denwa(String kojiak_no,String opedate) throws CAANException
	{
		if (JKUCommonUtil.isNull(kojiak_no) || JKUCommonUtil.isNull(opedate))
		{
			return new ArrayList<Map<String, String>>();
		}
		return getInputList(kojiak_no,opedate,JKUStrConst.CD00130_TEL,JKUStrConst.TKNKKSBT_VA);
	}
	
	/**
	 * 機器提供サービス契約から工事案件対象宅内機器登録用の情報を取得する
	 * @param kojiak_no 工事案件番号
	 * @param opedate 運用日付
	 * @param svc_cd サービスコード
	 * @param sbt_cd 宅内機器種別コード
	 * @return 登録用リスト
	 * @throws CAANException
	 */
	public static List<Map<String, String>> getInputList(String kojiak_no,String opedate,String svc_cd, String sbt_cd) throws CAANException
	{
		List<Map<String, String>> retList = new ArrayList<Map<String, String>>();
		
		// コネクション
	    Connection con1 = null;
	    
	    // プリペアステートメント
	    PreparedStatement pstmt = null;
	    
	    // リザルトセット
	    ResultSet rsltQuery = null;
     
	    /******************** 
	     * SQL文の作成
	     ********************/
	    try
	    {   
	         //コネクション取得
	         con1 = JSYejbConnection.getConnection(KK0341ETMsg.getTableName());
	         
	         StringBuffer sql_Buff = new StringBuffer();
	         sql_Buff.append("SELECT ")
	         		 .append("    DISTINCT")
	         		 .append("    KK0341.TAKNKIKI_SBT_CD")
	         		 .append("    ,KK0341.TAKNKIKI_IDO_CD")
	         		 .append("    ,KK0341.TAKNKIKI_MODEL_CD")
	         		 .append("    ,KK0341.KIKI_SEIZO_NO")
	         		 .append("    ,KK0341.KKTK_SBT_CD")
	         		 .append("    ,KK0341.KIKI_CHG_NO")
	         		 .append("    ,KK0341.KKTK_SVC_KEI_NO  ")
	         		 .append("FROM ")
	         		 .append("    KK_T_KKTK_SVC_KEI KK0341  ")
	         		 .append("WHERE")
	         		 .append("    KK0341.SVC_KEI_NO in ( ")
	         		 .append("        SELECT KU0081.SVC_KEI_NO  ")
	         		 .append("        FROM   KU_T_SVKEI_KOJIAK KU0081 ")
	         		 .append("               INNER JOIN KU_T_KOJIAK KU0011 ")
	         		 .append("               ON KU0081.KOJIAK_NO=KU0011.UPD_TRGT_KOJIAK_NO ")
	         		 .append("        WHERE  KU0011.KOJIAK_NO = ? ")
	         		 .append("            AND KU0081.SVC_CD = ?  ")
	         		 .append("            AND KU0081.MK_FLG = '0' ")
	         		 .append("            AND KU0011.MK_FLG = '0' ")
	         		 .append("    ) ")
	         		 .append("    AND KK0341.TAKNKIKI_SBT_CD = ? ")
	         		 .append("    AND KK0341.TAKNKIKI_MODEL_CD IS NOT NULL ")
	         		 .append("    AND KK0341.KIKI_SEIZO_NO IS NOT NULL ")
	         		 .append("    AND NOT EXISTS ( SELECT 1 FROM DK_T_HMPIN_KIKI DK0301_SUB ")
	         		 .append("                     WHERE ")
	         		 .append("                         KK0341.KKTK_SVC_KEI_NO = DK0301_SUB.KKTK_SVC_KEI_NO  ")
	         		 .append("                         AND KK0341.KIKI_CHG_NO = DK0301_SUB.KIKI_CHG_NO  ")
	         		 .append("                         AND DK0301_SUB.HMPIN_KIKI_STAT = '003' ")
	         		 .append("                         AND DK0301_SUB.MK_FLG = '0' ")
	         		 .append("        ) ")
	         		 .append("    AND KK0341.RSV_APLY_YMD || KK0341.GENE_ADD_DTM = ( ")
	         		 .append("        SELECT")
	         		 .append("            MAX(KK0341_1.RSV_APLY_YMD || KK0341_1.GENE_ADD_DTM) AS KTSK_MAX ")
	         		 .append("        FROM")
	         		 .append("            KK_T_KKTK_SVC_KEI KK0341_1 ")
	         		 .append("        WHERE")
	         		 .append("            KK0341_1.KKTK_SVC_KEI_NO = KK0341.KKTK_SVC_KEI_NO ")
	         		 .append("            AND KK0341_1.RSV_APLY_YMD <= ? ")
	         		 .append("            AND KK0341_1.RSV_APLY_CD  = '2' ")
	         		 .append("            AND KK0341_1.MK_FLG = '0'")
	         		 .append("    )");
	         
	         //prepareStatementにSQL文をセット
	         pstmt = con1.prepareStatement(sql_Buff.toString());
	         
	         int i = 1;
	         
	         // パラメータの設定
	         CAANJDBCUtil.setParam(pstmt, i++, kojiak_no);
	         CAANJDBCUtil.setParam(pstmt, i++, svc_cd);
	         CAANJDBCUtil.setParam(pstmt, i++, sbt_cd);
	         CAANJDBCUtil.setParam(pstmt, i++, opedate);
	         
	         // ResultSetの取得
	         rsltQuery = pstmt.executeQuery();
	         
	         // 戻り値の判定
	         int j=0;
	         while(rsltQuery.next())
	         {
	        	Map<String, String> tempList = new HashMap<String, String>();
	        	 
	        	// 宅内機器種別コード
	        	tempList.put(KK0341ETMsg.TAKNKIKI_SBT_CD, rsltQuery.getString(KK0341ETMsg.TAKNKIKI_SBT_CD));
	 			// 宅内機器異動コード
	        	tempList.put(KK0341ETMsg.TAKNKIKI_IDO_CD, rsltQuery.getString(KK0341ETMsg.TAKNKIKI_IDO_CD));
				// 宅内機器型式コード
	        	tempList.put(KK0341ETMsg.TAKNKIKI_MODEL_CD, rsltQuery.getString(KK0341ETMsg.TAKNKIKI_MODEL_CD));
				// 機器製造番号
	        	tempList.put(KK0341ETMsg.KIKI_SEIZO_NO, rsltQuery.getString(KK0341ETMsg.KIKI_SEIZO_NO));
				// 機器変更番号
	        	tempList.put(KK0341ETMsg.KIKI_CHG_NO , rsltQuery.getString(KK0341ETMsg.KIKI_CHG_NO));
				// 機器提供種別コード
	        	tempList.put(KK0341ETMsg.KKTK_SBT_CD , rsltQuery.getString(KK0341ETMsg.KKTK_SBT_CD));
				// 機器提供サービス契約番号
	        	tempList.put(KK0341ETMsg.KKTK_SVC_KEI_NO , rsltQuery.getString(KK0341ETMsg.KKTK_SVC_KEI_NO ));
	        	
	        	retList.add(j,tempList);
	        	j ++;
	         }
	         return retList;
	  }
	  catch (SQLException e)
	  {
	     return retList;
	  }
	  finally
	  {
	     // 資源の解放
	     try
	     {
	        if (rsltQuery != null)
	        {
	          rsltQuery.close();
	        }
	        if (pstmt != null)
	        {
	           pstmt.close();
	        }
	        if (con1 != null)
	        {
	           CAANConnectionMgr.getInstance().close(con1);
	        }
	     }
	     catch(SQLException e)
	     {
	        return retList;
	     }
	  }
	}
}
