/*
 * 作成日: 2004/01/05
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
package jp.co.sint.beans.front;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import jp.co.sint.basic.SICmdty;
import jp.co.sint.basic.SIFrontBasic;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @author asakura
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
public class UIBanner extends SIFrontBasic{
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  /**
   * <b>getBanner</b>
   * おすすめ商品の中からランダムでバナーに表示する商品を取得する。
   * @param lConnection
   * @param shopcode ショップコード
   * @return SICmdty
   * @throws SIDBAccessException
   */
  public SICmdty getBanner(Connection lConnection ,String shopcode)throws SIDBAccessException{
    PreparedStatement lPreparedStatement =null;
    ResultSet lResultSet=null;
    SICmdty lCmdty=new SICmdty();
    long count=0;
    
    StringBuffer lSqlBuf=new StringBuffer("SELECT aa.ShopCode,aa.CmdtyCode,aa.CmdtyName,aa.BannerFile ");
    lSqlBuf.append("FROM CmdtyMvw aa,MallShopMTbl bb ");
    lSqlBuf.append("WHERE aa.ShopCode=bb.MallShopCode ");
    // 7.0.1 修正 ここから
    lSqlBuf.append("AND aa.AdviceFlg='1' AND bb.Status='1' AND aa.BannerFile IS NOT NULL ");
    lSqlBuf.append("AND (aa.ShopCode,aa.CmdtyCode) IN (SELECT shopCode,cmdtyCode FROM CmdtyCtgryMTbl) ");
    // 7.0.1 修正 ここまで
    if (SIDBMultiConf.SIDB_CURRENT_INX==SIDBMultiConf.SIDB_POSTGRESQL_INX){
      lSqlBuf.append(" AND (aa.SellFromDate IS NULL OR aa.SellFromDate <= CURRENT_DATE ");//販売開始日
      lSqlBuf.append(" OR (aa.SellFromDate > CURRENT_DATE AND aa.rsrvenableflg=1))");//予約販売
      lSqlBuf.append(" AND (aa.SellToDate IS NULL OR aa.SellToDate >= CURRENT_DATE) ");//販売終了日
    }else{
      lSqlBuf.append(" AND (aa.SellFromDate IS NULL OR aa.SellFromDate <=TO_DATE(sysdate) ");//販売開始日
      lSqlBuf.append(" OR (aa.SellFromDate >TO_DATE(sysdate) AND aa.rsrvenableflg=1))");//予約販売
      lSqlBuf.append(" AND (aa.SellToDate IS NULL OR aa.SellToDate >= TO_DATE(sysdate)) ");//販売終了日
    }
    if(SIUtil.isNotNull(shopcode)){
      lSqlBuf.append(" AND aa.ShopCode =? ");
    }
    log.debug("getBanner:lSqlBuf="+lSqlBuf.toString());
    
    try {
      //レコードセットの取得
      lPreparedStatement=lConnection.prepareStatement(lSqlBuf.toString(),ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
      if(SIUtil.isNotNull(shopcode)){
        lPreparedStatement.setString(1,shopcode);
      }
      lResultSet=lPreparedStatement.executeQuery();
      lResultSet.last();
      count=lResultSet.getRow();//レコード数の取得
      
      double target = Math.floor(Math.random()*count);
      
      log.debug("count="+count+",target="+target);
      
      lResultSet.beforeFirst();
      //商品レコードのセットの作成
      long ii=0;
      while (lResultSet.next()){
        if(target == ii){
          lCmdty=new SICmdty();
          lCmdty.setEncode(SIConfig.SIENCODE_NONE);
          lCmdty.setShopCode(lResultSet.getString("ShopCode"));
          lCmdty.setCmdtyCode(lResultSet.getString("CmdtyCode"));
          lCmdty.setCmdtyName(lResultSet.getString("CmdtyName"));
          lCmdty.setBannerFile(lResultSet.getString("Shopcode")+"/"+lResultSet.getString("BannerFile"));
          break;
        }
        ii++;
      }
    } catch (SQLException e) {
      e.printStackTrace();
    }finally{
      SIDBUtil.close( lPreparedStatement,lResultSet);
    }
    return lCmdty;
  }
}
