/**
 * Copyright (c) 2003-2004 System Integrator Corporation.
 *                 All Rights Reserved.
 */
package jp.co.sint.beans.mallmgr;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import javax.servlet.http.HttpServletRequest;

import jp.co.sint.basic.SIBasic;
import jp.co.sint.basic.SILogin;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
import jp.co.sint.config.SIFlagConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SIDateTimeType;
import jp.co.sint.database.SITableCondition;
import jp.co.sint.database.SITableConditionManager;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckUtil;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIDateTime;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIURLParameter;//7.1.1 ST0236 追加

import org.apache.log4j.Category;

/**
 * @version $Id: UISaleList.java,v 1.0 2003/12/12 Exp $
 * @author  yamauchi
 * <br>Description:
 * <p>History</p>
 * <p>Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason</p>
 *  ============&nbsp;&nbsp;&nbsp;==========&nbsp;&nbsp;===========================<br>
 * yamauchi   2003/12/12         Original
 */
public class UISaleList extends SIBasic{
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  //ショップコード
  private String mallShopCodeTxt="";
  
  //対象期間From
  private String issueDateTimeFrom="";
  
  //対象期間Fromの年
  private String issueDateTimeYearFromCbo="";
  
  //対象期間Fromの月
  private String issueDateTimeMonthFromCbo="";
  
  //対象期間Fromの日
  private String issueDateTimeDayFromCbo="";
  
  //対象期間To
  private String issueDateTimeTo="";
  
  //対象期間Toの年
  private String issueDateTimeYearToCbo="";
  
  //対象期間Toの月
  private String issueDateTimeMonthToCbo="";
  
  //対象期間Toの日
  private String issueDateTimeDayToCbo="";
  
  //集計対象
  private String dispFlgRdo="0";
  
  //並び順
  private String orderBySQL=" ORDER BY bb.ShopCode ASC ,bb.CmdtyCode ASC ";
  
  //検索用のＳＱＬ文
  private String conditionSQL="";
  
  private String shopCount="0";
  private String cmdtyCount="0";
  
  public UISaleList(){
    //7.2.0 ST0545 追加 ここから
    SIDateTime lDateTime = new SIDateTime();
    String Year=Integer.toString(lDateTime.getYear());
    String Month=Integer.toString(lDateTime.getMonth());
    String Day=Integer.toString(lDateTime.getDay());
    
    //対象期間Toの年(現在の日付をセット)
    issueDateTimeYearToCbo=Year;
    //対象期間Toの月
    issueDateTimeMonthToCbo=SIUtil.lFillIn(Month,2);
    //対象期間Toの日
    issueDateTimeDayToCbo=SIUtil.lFillIn(Day,2);
    
    //対象期間Fromの年（月初の日付をセット）
    issueDateTimeYearFromCbo=Year;
    //対象期間Fromの月
    issueDateTimeMonthFromCbo=SIUtil.lFillIn(Month,2);
    //対象期間Fromの日
    issueDateTimeDayFromCbo="01";
    
    //条件文の設定
    SITableConditionManager lConditionMan=new SITableConditionManager();
    if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
      lConditionMan.add(new SITableCondition("aa","initDateTime",this.getIssueDateTimeFrom(),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      lConditionMan.add(new SITableCondition("aa","initDateTime",this.getIssueDateTimeTo()+" 23:59:59",SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
    }else{
      lConditionMan.add(new SITableCondition("aa","initDateTime",new SIDateTimeType(getIssueDateTimeFrom()),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      lConditionMan.add(new SITableCondition("aa","initDateTime",new SIDateTimeType(getIssueDateTimeTo()+" 23:59:59"),SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
    }
    this.conditionSQL=lConditionMan.getCondtionSQL();
    //7.2.0 ST0545 追加 ここまで
  }
  
  public UISaleList(HttpServletRequest lRequest,SIURLParameter lUrlParam){//7.1.1 ST0236 修正
    this.init(lRequest,lUrlParam);//7.1.1 ST0236 修正
  }
  
  //setter of ショップコード
  public void setMallShopCodeTxt(String lMallShopCodeTxt){
    if (SIUtil.isNull(lMallShopCodeTxt)) lMallShopCodeTxt="";
    this.mallShopCodeTxt=SIUtil.changeTo(lMallShopCodeTxt.trim(),this.encode);
  }
  
// setter of 対象期間From
//  public void setIssueDateTimeFromCbo(String lIssueDateTimeFromCbo){
//    if (SIUtil.isNull(lIssueDateTimeFromCbo)) lIssueDateTimeFromCbo="";
//    this.issueDateTimeFromCbo=SIUtil.changeTo(lIssueDateTimeFromCbo.trim(),this.encode);
//  }
  
  //setter of 対象期間Fromの年
  public void setIssueDateTimeYearFromCbo(String lIssueDateTimeYearFromCbo){
    if (SIUtil.isNull(lIssueDateTimeYearFromCbo)) lIssueDateTimeYearFromCbo="";
    this.issueDateTimeYearFromCbo=SIUtil.changeTo(lIssueDateTimeYearFromCbo.trim(),this.encode);
  }
  
  //setter of 対象期間Fromの月
  public void setIssueDateTimeMonthFromCbo(String lIssueDateTimeMonthFromCbo){
    if (SIUtil.isNull(lIssueDateTimeMonthFromCbo)) lIssueDateTimeMonthFromCbo="";
    this.issueDateTimeMonthFromCbo=SIUtil.changeTo(lIssueDateTimeMonthFromCbo.trim(),this.encode);
  }
  
  //setter of 対象期間Fromの日
  public void setIssueDateTimeDayFromCbo(String lIssueDateTimeDayFromCbo){
    if (SIUtil.isNull(lIssueDateTimeDayFromCbo)) lIssueDateTimeDayFromCbo="";
    this.issueDateTimeDayFromCbo=SIUtil.changeTo(lIssueDateTimeDayFromCbo.trim(),this.encode);
  }
  
  //setter of 対象期間To
//  public void setIssueDateTimeToCbo(String lIssueDateTimeToCbo){
//    if (SIUtil.isNull(lIssueDateTimeToCbo)) lIssueDateTimeToCbo="";
//    this.issueDateTimeToCbo=SIUtil.changeTo(lIssueDateTimeToCbo.trim(),this.encode);
//  }
  
  //setter of 対象期間Toの年
  public void setIssueDateTimeYearToCbo(String lIssueDateTimeYearToCbo){
    if (SIUtil.isNull(lIssueDateTimeYearToCbo)) lIssueDateTimeYearToCbo="";
    this.issueDateTimeYearToCbo=SIUtil.changeTo(lIssueDateTimeYearToCbo.trim(),this.encode);
  }
  
  //setter of 対象期間Toの月
  public void setIssueDateTimeMonthToCbo(String lIssueDateTimeMonthToCbo){
    if (SIUtil.isNull(lIssueDateTimeMonthToCbo)) lIssueDateTimeMonthToCbo="";
    this.issueDateTimeMonthToCbo=SIUtil.changeTo(lIssueDateTimeMonthToCbo.trim(),this.encode);
  }
  
  //setter of 対象期間Toの日
  public void setIssueDateTimeDayToCbo(String lIssueDateTimeDayToCbo){
    if (SIUtil.isNull(lIssueDateTimeDayToCbo)) lIssueDateTimeDayToCbo="";
    this.issueDateTimeDayToCbo=SIUtil.changeTo(lIssueDateTimeDayToCbo.trim(),this.encode);
  }
  
  //setter of 集計対象
  public void setDispFlgRdo(String lDispFlgRdo){
    if (SIUtil.isNull(lDispFlgRdo)) lDispFlgRdo="0";
    this.dispFlgRdo=SIUtil.changeTo(lDispFlgRdo.trim(),this.encode);
  }
  
  //setter of 並び順
  public void setOrderBySQL(String lOrderBySQL){
    if (SIUtil.isNull(lOrderBySQL)) lOrderBySQL=" ORDER BY bb.ShopCode ASC ,bb.CmdtyCode ASC ";
    this.orderBySQL=lOrderBySQL;
  }
  
  //setter of 検索用ＳＱＬ文
  public void setConditionSQL(String lConditionSQL){
    if (SIUtil.isNull(lConditionSQL)) lConditionSQL="";
    this.conditionSQL=SIUtil.changeTo(lConditionSQL.trim(),this.encode);
  }
  
  public void setShopCount(String lShopCount){
    if (SIUtil.isNull(lShopCount)) lShopCount="";
    this.shopCount=SIUtil.changeTo(lShopCount.trim(),this.encode);
  }
  
  public void setCmdtyCount(String lCmdtyCount){
    if (SIUtil.isNull(lCmdtyCount)) lCmdtyCount="";
    this.cmdtyCount=SIUtil.changeTo(lCmdtyCount.trim(),this.encode);
  }
  
  //getter of ショップコード
  public String getMallShopCodeTxt(){
    return this.mallShopCodeTxt;
  }
  
  //getter of 対象期間To
  public String getIssueDateTimeFrom(){
    return SIDateTime.getDate(getIssueDateTimeYearFromCbo(),getIssueDateTimeMonthFromCbo(),getIssueDateTimeDayFromCbo());
  }
  
  //getter of 対象期間Fromの年
  public String getIssueDateTimeYearFromCbo(){
    return this.issueDateTimeYearFromCbo;
  }
  
  //getter of 対象期間Fromの月
  public String getIssueDateTimeMonthFromCbo(){
    return this.issueDateTimeMonthFromCbo;
  }
  
  //getter of 対象期間Fromの日
  public String getIssueDateTimeDayFromCbo(){
    return this.issueDateTimeDayFromCbo;
  }
  
  //getter of 対象期間To
  public String getIssueDateTimeTo(){
    return SIDateTime.getDate(getIssueDateTimeYearToCbo(),getIssueDateTimeMonthToCbo(),getIssueDateTimeDayToCbo());
  }
  
  //getter of 対象期間Toの年
  public String getIssueDateTimeYearToCbo(){
    return this.issueDateTimeYearToCbo;
  }
  
  //getter of 対象期間Toの月
  public String getIssueDateTimeMonthToCbo(){
    return this.issueDateTimeMonthToCbo;
  }
  
  //getter of 対象期間Toの日
  public String getIssueDateTimeDayToCbo(){
    return this.issueDateTimeDayToCbo;
  }
  
  //getter of 集計対象
  public String getDispFlgRdo(){
    return this.dispFlgRdo;
  }
  
  //getter of 並び順
  public String getOrderBySQL(){
    return this.orderBySQL;
  }
  
  //getter of 検索用ＳＱＬ文
  public String getConditionSQL(){
    return this.conditionSQL;
  }
  
  public String getShopCount(){
    return this.shopCount;
  }
  
  public String getCmdtyCount(){
    return this.cmdtyCount;
  }
  
  /**
   * <b>init</b>
   * 入力したデータを基づいて、このbeansを設定します。
   * @param request クライアントからリクエスト
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  public void init(HttpServletRequest lRequest,SIURLParameter lUrlParam){//7.1.1 ST0236 修正
    SILogin lLogin=SIHTMLUtil.getLogin(lRequest);
    
    this.setEncode(SIConfig.SIENCODE_SHIFT_JIS);
    //7.1.1 ST0236 修正 ここから
    super.init(lRequest,lUrlParam);
    if (lLogin.isShop()){
      this.setMallShopCodeTxt(lLogin.getMallShopCode());//ショップコード
    }else{
      this.setMallShopCodeTxt((String)lUrlParam.getParam("mallShopCodeTxt"));//ショップコード
    }
    this.setIssueDateTimeYearFromCbo((String)lUrlParam.getParam("issueDateTimeYearFromCbo"));//対象期間Fromの年
    this.setIssueDateTimeMonthFromCbo((String)lUrlParam.getParam("issueDateTimeMonthFromCbo"));//対象期間Fromの月
    this.setIssueDateTimeDayFromCbo((String)lUrlParam.getParam("issueDateTimeDayFromCbo"));//対象期間Fromの日
    this.setIssueDateTimeYearToCbo((String)lUrlParam.getParam("issueDateTimeYearToCbo"));//対象期間Toの年
    this.setIssueDateTimeMonthToCbo((String)lUrlParam.getParam("issueDateTimeMonthToCbo"));//対象期間Toの月
    this.setIssueDateTimeDayToCbo((String)lUrlParam.getParam("issueDateTimeDayToCbo"));//対象期間Toの日
    this.setDispFlgRdo((String)lUrlParam.getParam("dispFlgRdo"));//集計対象
    //7.1.1 ST0236 修正 ここまで
  }
  
  /**
   * <b>validate</b>
   * 入力したデータをチェックして、同時にSQLの条件文を作成します。
   * @param lRequest クライアントからのリクエスト
   * @return なし
   * @throws なし
   */
  public void validate(HttpServletRequest lRequest){
    SICustomErrors errors=new SICustomErrors();
    SITableConditionManager lConditionMan=new SITableConditionManager();
    
    //集計対象がNULLに成った場合はエラー
    if(SICheckValid.checkValid(errors,"集計対象", this.getDispFlgRdo(), SICheckDataConf.SICHECK_DATA_EMPTY_TYPE)){
      //ショップコード
      if (SIUtil.isNotNull(getMallShopCodeTxt())&& SICheckValid.checkValid(errors,"ショップコード",getMallShopCodeTxt(),SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE)){
        lConditionMan.add(new SITableCondition("bb","ShopCode",getMallShopCodeTxt(),SIConfig.SICONDITION_TYPE_EQUAL,SIConfig.SICONDITION_TYPE_AND));
      }
      
      //対象期間From
      if (SIUtil.isNotNull(getIssueDateTimeFrom())&&SICheckValid.checkValid(errors,"対象期間From",getIssueDateTimeFrom(),SICheckDataConf.SICHECK_DATA_DATE_TYPE)){//7.1.1 ST0162 修正
        if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
          if(this.getDispFlgRdo().equals(SIFlagConf.SIFLAG_SALES_FLG_NAME[0][1])){
            lConditionMan.add(new SITableCondition("aa","initDateTime",getIssueDateTimeFrom(),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
          }else{
            lConditionMan.add(new SITableCondition("dd","shippmentDate",getIssueDateTimeFrom(),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
          }
        }else{
          if(this.getDispFlgRdo().equals(SIFlagConf.SIFLAG_SALES_FLG_NAME[0][1])){
            lConditionMan.add(new SITableCondition("aa","initDateTime",new SIDateTimeType(getIssueDateTimeFrom()),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
          }else{
            lConditionMan.add(new SITableCondition("dd","shippmentDate",new SIDateTimeType(getIssueDateTimeFrom()),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
          }
        }
      }
      
      //対象期間To
      if (SIUtil.isNotNull(getIssueDateTimeTo())&&SICheckValid.checkValid(errors,"対象期間To",getIssueDateTimeTo(),SICheckDataConf.SICHECK_DATA_DATE_TYPE)){//7.1.1 ST0162 修正
        if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
          if(this.getDispFlgRdo().equals(SIFlagConf.SIFLAG_SALES_FLG_NAME[0][1])){
            lConditionMan.add(new SITableCondition("aa","initDateTime",getIssueDateTimeTo()+" 23:59:59",SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
          }else{
            lConditionMan.add(new SITableCondition("dd","shippmentDate",getIssueDateTimeTo()+" 23:59:59",SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
          }
        }else{
          if(this.getDispFlgRdo().equals(SIFlagConf.SIFLAG_SALES_FLG_NAME[0][1])){
            lConditionMan.add(new SITableCondition("aa","initDateTime",new SIDateTimeType(getIssueDateTimeTo()+" 23:59:59"),SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
          }else{
            lConditionMan.add(new SITableCondition("dd","shippmentDate",new SIDateTimeType(getIssueDateTimeTo()+" 23:59:59"),SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
          }
        }
      }
      
      //対象期間大小
      try{
        if(!SICheckUtil.dateEqual(this.getIssueDateTimeFrom(),this.getIssueDateTimeTo())){
          SICheckValid.checkValid(errors,"対象期間From","対象期間To",this.getIssueDateTimeFrom(),this.getIssueDateTimeTo(),SICheckDataConf.SICHECK_DATA_DATE_LESS_TYPE);//7.1.1 ST0162 修正
        }
      }catch(Exception e){}
      
      //出荷（売上データの場合）
      if(this.getDispFlgRdo().equals(SIFlagConf.SIFLAG_SALES_FLG_NAME[1][1])){
        lConditionMan.add(new SITableCondition("dd","shippmentDate","",SIConfig.SICONDITION_TYPE_IS_NOT_NULL,SIConfig.SICONDITION_TYPE_AND));
      }
    }
    if (!errors.isEmpty()){
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
      lConditionMan.add(new SITableCondition(" AND 1=2 "));
    } else {
      lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    }
    
    //条件文の設定
    this.conditionSQL=lConditionMan.getCondtionSQL();
    //並び順文の作成
    //this.makeOrderBySQL();
  }
  
  /**
   * <b>getCollection</b>
   * 条件に合ったレコードを検索して、結果のコネクションを作成して、戻します。
   * @param lConnection データベースへの接続コネクション
   * @return レコードのセット
   * @throws なし
   */
  public String getGroupByShop(Connection lConnection,SILogin lLogin) throws SIDBAccessException{
    StringBuffer lSqlBuf=new StringBuffer();
    //基本のSQL
    lSqlBuf.append("SELECT COUNT(*) FROM (");
    //7.2.0 ST1030 修正 ここから
    lSqlBuf.append("SELECT bb.ShopCode,bb.ShopName,SUM(bb.amount * bb.price ) AS Total ");
    lSqlBuf.append("FROM ");
    lSqlBuf.append(SIConfig.SIVIEW_ORDER_LATEST_NAME).append(" aa,");
    lSqlBuf.append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME).append(" bb,");
    lSqlBuf.append("CmdtymTbl cc,");
    lSqlBuf.append(SIConfig.SIVIEW_ORDER_DELIVERY_LATEST_NAME).append(" dd ");
    //lSqlBuf.append("FROM OrderTbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa,");
    //lSqlBuf.append("OrderDetailTbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("bb,");
    //lSqlBuf.append("CmdtymTbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("cc,");
    //lSqlBuf.append("OrderDeliveryTbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("dd ");
    //7.2.0 ST1030 修正 ここまで
    lSqlBuf.append("WHERE aa.OrderCode=bb.OrderCode AND bb.CmdtyCode=cc.CmdtyCode AND bb.ShopCode=cc.ShopCode AND aa.OrderCode=dd.OrderCode AND dd.DeliveryCode=bb.DeliveryCode ");
    lSqlBuf.append("AND aa.status=").append(SIDBUtil.SQL2Str(SIConfig.SIORDER_STATUS_FLG_ORDER," ")); //受注状態
    //検索の条件
    if(lLogin.isShop()){
      lSqlBuf.append("AND bb.ShopCode=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()," "));
    }
    lSqlBuf.append(this.conditionSQL);
    lSqlBuf.append(" Group BY bb.ShopCode,bb.ShopName) a ");
    
    log.debug("getGroupByShop:lSqlBuf="+lSqlBuf.toString());
    
    this.setShopCount(exec(lConnection,lSqlBuf.toString()));
    
    return this.getShopCount();
  }
  
  public String getGroupByCmdty(Connection lConnection,SILogin lLogin) throws SIDBAccessException{
    StringBuffer lSqlBuf=new StringBuffer();
    //基本のSQL
    lSqlBuf.append("SELECT COUNT(*) FROM (");
    lSqlBuf.append("SELECT bb.ShopCode,bb.ShopName, bb.CmdtyCode, bb.CmdtyName, SUM(bb.amount) AS Amount , SUM(bb.amount*bb.price) AS Total ");
    //  7.2.0 ST1030 修正 ここから
    lSqlBuf.append("FROM ");
    lSqlBuf.append(SIConfig.SIVIEW_ORDER_LATEST_NAME).append(" aa,");
    lSqlBuf.append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME).append(" bb,");
    lSqlBuf.append("CmdtymTbl cc,");
    lSqlBuf.append(SIConfig.SIVIEW_ORDER_DELIVERY_LATEST_NAME).append(" dd ");
    //lSqlBuf.append("FROM OrderTbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa,");
    //lSqlBuf.append("OrderDetailTbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("bb,");
    //lSqlBuf.append("CmdtymTbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("cc,");
    //lSqlBuf.append("OrderDeliveryTbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("dd ");
    //7.2.0 ST1030 修正 ここまで
    lSqlBuf.append("WHERE aa.OrderCode=bb.OrderCode AND bb.CmdtyCode=cc.CmdtyCode AND bb.ShopCode=cc.ShopCode AND aa.OrderCode=dd.OrderCode AND dd.DeliveryCode=bb.DeliveryCode ");
    lSqlBuf.append("AND aa.status=").append(SIDBUtil.SQL2Str(SIConfig.SIORDER_STATUS_FLG_ORDER," ")); //受注状態
    
    if(lLogin.isShop()){
      lSqlBuf.append("AND bb.ShopCode=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()," "));
    }
    //検索の条件
    lSqlBuf.append(this.conditionSQL);
    lSqlBuf.append(" GROUP BY bb.ShopCode,bb.ShopName, bb.CmdtyCode,bb.CmdtyName");
    lSqlBuf.append(" ,bb.StndrdCode1,bb.StndrdCode2,bb.ElementCode1,bb.ElementCode2) a");//7.2.0 ST0259 修正
    
    log.debug("getGroupByCmdty:lSqlBuf="+lSqlBuf.toString());
    
    this.setCmdtyCount(exec(lConnection,lSqlBuf.toString()));
    
    return this.getCmdtyCount();
  }
  
  private String exec(Connection lConnection,String lSql)throws SIDBAccessException{
    Statement lStatement=null;
    ResultSet lResultSet=null;
    //実行
    try{
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(lSql);
      if (lResultSet.next())return lResultSet.getString(1);
      else return "0";
    }catch(Exception ex){
      throw new SIDBAccessException(ex);
    }finally{
      SIDBUtil.close(lResultSet,lStatement);
    }
  }
  
  //7.2.0 ST0542 追加 ここから
  //ショップ別CSV出力用のWHERE句を生成
  public String getShopCSVConditionSQL(Connection lConnection){
    SITableConditionManager lConditionMan=new SITableConditionManager();
    
    //対象期間From
    if(SIUtil.isNotNull(getIssueDateTimeFrom())){
      if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
        if(this.getDispFlgRdo().equals(SIFlagConf.SIFLAG_SALES_FLG_NAME[0][1])){
          lConditionMan.add(new SITableCondition("aa","initDateTime",getIssueDateTimeFrom(),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
        }else{
          lConditionMan.add(new SITableCondition("bbb","shippmentDate",getIssueDateTimeFrom(),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
        }
      }else{
        if(this.getDispFlgRdo().equals(SIFlagConf.SIFLAG_SALES_FLG_NAME[0][1])){
          lConditionMan.add(new SITableCondition("aa","initDateTime",new SIDateTimeType(getIssueDateTimeFrom()),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
        }else{
          lConditionMan.add(new SITableCondition("bbb","shippmentDate",new SIDateTimeType(getIssueDateTimeFrom()),SIConfig.SICONDITION_TYPE_GREATER_EQUAL,SIConfig.SICONDITION_TYPE_AND));
        }
      }
    }
    //対象期間To
    if (SIUtil.isNotNull(getIssueDateTimeTo())){
      if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
        if(this.getDispFlgRdo().equals(SIFlagConf.SIFLAG_SALES_FLG_NAME[0][1])){//7.1.1 ST0090 修正
          lConditionMan.add(new SITableCondition("aa","initDateTime",getIssueDateTimeTo()+" 23:59:59",SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
        }else{
          lConditionMan.add(new SITableCondition("bbb","shippmentDate",getIssueDateTimeTo()+" 23:59:59",SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
        }
      }else{
        if(this.getDispFlgRdo().equals(SIFlagConf.SIFLAG_SALES_FLG_NAME[0][1])){//7.1.1 ST0090 修正
          lConditionMan.add(new SITableCondition("aa","initDateTime",new SIDateTimeType(getIssueDateTimeTo()+" 23:59:59"),SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
        }else{
          lConditionMan.add(new SITableCondition("bbb","shippmentDate",new SIDateTimeType(getIssueDateTimeTo()+" 23:59:59"),SIConfig.SICONDITION_TYPE_LESS_EQUAL,SIConfig.SICONDITION_TYPE_AND));
        }
      }
    }
    //出荷（売上データの場合）
    if(this.getDispFlgRdo().equals(SIFlagConf.SIFLAG_SALES_FLG_NAME[1][1])){
      lConditionMan.add(new SITableCondition("bbb","shippmentDate","",SIConfig.SICONDITION_TYPE_IS_NOT_NULL,SIConfig.SICONDITION_TYPE_AND));
    }
    
    return lConditionMan.getCondtionSQL();
  }
  //7.2.0 ST0542 追加 ここまで
}