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

import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashMap;

import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import jp.co.sint.beans.front.UICasher;
import jp.co.sint.beans.mallmgr.UINewOrderDeli;
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.SIDatabaseConnection;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIStringUtil;
import jp.co.sint.tools.SIURLMap;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @version $Id: SICartDetail.java,v 1.0 2003/11/18 Exp $
 * @author  Jinwang Chen
 * <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>
 * Jinwang Chen   2003/11/18 19:42:00  Original
 */
public class SICartDetail {
  //ログ用のインスタンスの生成
  private static Category log=Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  public SICartDetail(){}
  
  /**
   * <b>reset</b>
   * カートの情報に基づいて、受注配送先レコードと受注明細レコードの設定
   * @param  request
   * @param  Connection
   * @return なし
   * @throws なし
   */
  public static void  reset(HttpServletRequest lRequest,Connection lConnection){
    //カートの情報の取得
    HttpSession session=lRequest.getSession(true);//セッションの取得
    LinkedHashMap deliveryMap = (LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME);
    if(deliveryMap==null){
      deliveryMap= new LinkedHashMap();
    }
    
    LinkedHashMap detailMap=new LinkedHashMap();//受注明細データ
    // EDBTG003-00 nagayoshi mod start
//    SICartManager cartMan=(SICartManager)session.getAttribute(SIConfig.SISESSION_CART_INFO_NAME);//カート情報
//    if (cartMan==null)cartMan=new SICartManager();
    SICartManager cartMan = new SICartManager();
    // EDBTG003-00 nagayoshi mod end
    
    //ログインユーザーの情報の取得
    SIUserInfo lUserInfo=SIHTMLUtil.getUserInfo(lRequest);
    SIOrderDetailPK lPk=new SIOrderDetailPK();
    SIOrderDelivery lOrderDelivery=new SIOrderDelivery();
    
    SICartCmdty lCartCmdty=new SICartCmdty();
    // EDBTG003-00 nagayoshi del start
//    Iterator lShopIta=cartMan.getShopCollection(lConnection).iterator();
    // EDBTG003-00 nagayoshi del end
    SIOrderDetail orderDetail=new SIOrderDetail();
    Iterator lCartIta;
    SIMallShop lMallShop=new SIMallShop();
    SICart lCart=new SICart();

    // EDBTG005-00 kamata mod start
    String addressCode = "0";
    if (SIURLMap.isSmartPhone(lRequest)) {
        // スマートフォンの場合、
        addressCode = getAddressCodeForSp(lRequest, lConnection);
    }
    lPk.setAddressCode(addressCode);
    // EDBTG005-00 kamata mod end
    SICustAddress lAddress=new SICustAddress(lUserInfo.getCustCode(),lPk.getAddressCode());
    lAddress.reset(lConnection);
    
    // EDBTG003-00 nagayoshi add start
    SICartDetail cartDetail = new SICartDetail();
    cartDetail.createCartCmdty(lRequest, session, lConnection, cartMan);
    // EDBTG003-00 nagayoshi add end
    
    //String lOrderDetailCode="";
    ArrayList individualArray = new ArrayList(); //7.3.0 PI-NES0501 追加
    
    // EDBTG003-00 nagayoshi add start
    Iterator lShopIta=cartMan.getShopCollection(lConnection).iterator();
    // EDBTG003-00 nagayoshi add end
    while (lShopIta.hasNext()){
      lMallShop=(SIMallShop)lShopIta.next();
      lCartIta=cartMan.getCartCollection(lMallShop.getMallShopCode()).iterator();
      String total="0";
      while (lCartIta.hasNext()){
        orderDetail=new SIOrderDetail();
        lCart=(SICart)lCartIta.next();
        lCartCmdty=lCart.getCartCmdty();
        SICartDetail.copy(lCartCmdty,orderDetail);
        // EDBTG003-00 nagayoshi mod start
//        if(orderDetail.getDeliveryTypeName().equals("小物")){
        if("1".equals(orderDetail.getDeliveryTypeCode()) && !SIConfig.SET_DETAIL_FLG_APPENDED.equals(orderDetail.getSetDetailFlg())){
          // EDBTG003-00 nagayoshi mod end
          total=SIUtil.add(total,SIUtil.multi(lCartCmdty.getUnitPriceIncTax(),lCart.getAmount()));
          individualArray.add(orderDetail.getIndividualCode());//7.3.0 PI-NES0501 追加
        }
      }
      
      Object[] obj = individualArray.toArray();//7.3.0 PI-NES0501 追加
      java.util.Arrays.sort(obj);//7.3.0 PI-NES0501 追加
      lCartIta=cartMan.getCartCollection(lMallShop.getMallShopCode()).iterator();
      // EDBTG003-00 nagayoshi add start
      boolean komonoFeeFlg = false;
      // EDBTG003-00 nagayoshi add end
      while (lCartIta.hasNext()){
        orderDetail=new SIOrderDetail();
        lCart=(SICart)lCartIta.next();
        lCartCmdty=lCart.getCartCmdty();
        lCartCmdty.setMemberDiscountRate(lUserInfo.getDiscountRate());
        
        //明細レコードの設定
        orderDetail.setEncode(SIConfig.SIENCODE_NONE);
        SICartDetail.copy(lCartCmdty,orderDetail);
        
        orderDetail.setAmount(lCart.getAmount());//購入数量
        
        orderDetail.getMiscData(lConnection);
        
        lPk=new SIOrderDetailPK(orderDetail.getShopCode()
                               ,orderDetail.getCmdtyCode()
                               ,orderDetail.getIndividualCode()
                               ,orderDetail.getStndrdCode1()
                               ,orderDetail.getElementCode1()
                               ,orderDetail.getStndrdCode2()
                               ,orderDetail.getElementCode2()
                               ,addressCode);
        
        //受注明細レコードの受注明細コードの構成：ショップコード~商品コード~アドレス帳コード
        lPk.setShopCode(orderDetail.getShopCode());
        lPk.setDeliveryTypeName(orderDetail.getDeliveryTypeName());//受注配送先コードを「配送コード~配送業者名~ショップコード」にする
        orderDetail.setDeliveryCode(lPk.getOrderDeliveryCode());//受注配送先レコードに受注配送先コードの設定
        // EDBTG003-00 nagayoshi mod start
//        orderDetail.setDetailCode(lPk.getOrderDetailCode());
        orderDetail.setDetailCode(lPk.getOrderDetailCode()
                                + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetCode()
                                + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetDetailCode());
        // EDBTG003-00 nagayoshi mod end
        //配送希望日の設定
        // EDBTG003-00 mng-paku mod start
//        String deliveryDateStr="deliveryDate_"+orderDetail.getCmdtyCode()+"_"+orderDetail.getIndividualCode();
        String deliveryDateStr = "deliveryDate_" + orderDetail.getCmdtyCode() + "_" + orderDetail.getIndividualCode() + "_" + orderDetail.getSetCode() + "_" + orderDetail.getSetDetailCode();
        // EDBTG003-00 mng-paku mod end
        String deliveryDate=lRequest.getParameter(deliveryDateStr);
        orderDetail.setDeliveryDate(deliveryDate);
        // EDBTG003-00 nagayoshi mod start
//        String deliveryTimeStr="deliveryTime_"+orderDetail.getCmdtyCode()+"_"+orderDetail.getIndividualCode();
        String deliveryTimeStr="deliveryTime_"+orderDetail.getCmdtyCode()+"_"+orderDetail.getIndividualCode()+ "_" + orderDetail.getSetCode() + "_" + orderDetail.getSetDetailCode();
        // EDBTG003-00 nagayoshi mod end
        String deliveryTime=lRequest.getParameter(deliveryTimeStr);
        orderDetail.setDeliveryTime(deliveryTime);
        
        if ("1".equals(orderDetail.getDeliveryTypeCode())) {//通常のみ
          String deliveryDateKomonoAll=lRequest.getParameter("deliveryDate_KomomoAll");
          if (SIUtil.isNotNull(deliveryDateKomonoAll)) orderDetail.setDeliveryDate(deliveryDateKomonoAll);
          String deliveryTimeKomonoAll=lRequest.getParameter("deliveryTime_KomomoAll");
          if (SIUtil.isNotNull(deliveryTimeKomonoAll)) orderDetail.setDeliveryTime(deliveryTimeKomonoAll);
        }
        
        /* 一括設定：管理側新規受注登録 */
        if("1".equals(orderDetail.getDeliveryTypeCode())){
          if("1".equals(lRequest.getParameter("deliveryDate_flg"))){
            orderDetail.setDeliveryDate(lRequest.getParameter("deliveryDate_komono"));
          }
          if("1".equals(lRequest.getParameter("deliveryTime_flg"))){
            orderDetail.setDeliveryTime(lRequest.getParameter("deliveryTime_komono"));
          }
        }else{
          if("0".equals(lRequest.getParameter("deliveryDate_flg"))){
            orderDetail.setDeliveryDate(lRequest.getParameter("deliveryDate_kobetsu"));
          }
          if("0".equals(lRequest.getParameter("deliveryTime_flg"))){
            orderDetail.setDeliveryTime(lRequest.getParameter("deliveryTime_kobetsu"));
          }
        }
        //配送先の構成:配送コード~配送業者名~ショップコード
        if (deliveryMap.get(orderDetail.getDeliveryCode()) == null) {
          lOrderDelivery = new SIOrderDelivery();
          SICartDetail.copy(lAddress, lOrderDelivery);
          lOrderDelivery.setTaxRate(SITax.getTaxRate(lConnection));//税率
          lOrderDelivery.setDeliveryTaxFlg(lMallShop.getDeliveryTaxFlg());//送料税フラグ
          lOrderDelivery.setShopCode(lPk.getShopCode());//ショップコード
          //7.2.0 ST1030 追加 ここから
          lOrderDelivery.setDeliveryTypeCode(orderDetail.getDeliveryTypeCode());
          //7.2.0 ST1030 追加 ここまで
          lOrderDelivery.setDeliveryTypeName(lPk.getDeliveryTypeName());//配送業者
          lOrderDelivery.setDeliveryCode(lPk.getOrderDeliveryCode());
          deliveryMap.put(lPk.getOrderDeliveryCode(), lOrderDelivery);
        }else{
          lOrderDelivery=(SIOrderDelivery)deliveryMap.get(orderDetail.getDeliveryCode());
        }
        
        try {
          //7.3.0 PI-NES0501 追加
          if("1".equals(orderDetail.getDeliveryTypeCode())){
            // EDBTG003-00 nagayoshi mod start
//            if(orderDetail.getIndividualCode().equals(obj[0].toString())){
            if(obj.length > 0 && orderDetail.getIndividualCode().equals(obj[0].toString()) && !komonoFeeFlg){
              // EDBTG003-00 nagayoshi mod end
              orderDetail.setDeliveryFee(SIDeliveryFee.calcDeliveryFeeIndividual(lConnection,orderDetail.getShopCode(), lOrderDelivery, orderDetail,total));
              // EDBTG003-00 nagayoshi add start
              komonoFeeFlg = true;
              // EDBTG003-00 nagayoshi add end
            }
          }else{
            orderDetail.setDeliveryFee(SIDeliveryFee.calcDeliveryFeeIndividual(lConnection,orderDetail.getShopCode(), lOrderDelivery, orderDetail,total));
          }
        }catch (SIDBAccessException dbae){
          dbae.printStackTrace();
        }
        log.debug("orderDetail.getDetailCode()=" + orderDetail.getDetailCode());
        // EDBTG003-00 nagayoshi mod start
//        detailMap.put(lPk.getOrderDetailCode(), orderDetail);
        detailMap.put(lPk.getOrderDetailCode()
                      + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetCode()
                      + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetDetailCode()
                      ,orderDetail);
        // EDBTG003-00 nagayoshi mod end
      }
    }
    session.setAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME,deliveryMap);//受注配送先レコード
    session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME,detailMap);//受注明細レコード
    jp.co.sint.beans.front.UICasher.reset(lRequest);//7.1.1 ST0154 追加
  }
  
  /**
   * <b>getOrderAddress</b>
   * 受注配送先の配送先情報を取得
   * @param  request
   * @param  ShopCodeショップコード
   * @return SICustAddress 配送先情報格納クラス
   * @throws なし
   */
  public static SICustAddress getOrderAddress(HttpServletRequest lRequest,String lShopCode){
    Collection lAddressColl=getAddressColl(lRequest,lShopCode);
    if (lAddressColl.size()==0) return new SICustAddress();
    else return ((SICustAddress[])lAddressColl.toArray(new SICustAddress[0]))[0];
  }
  
  /**
   * <b>getAddressColl</b>
   * 受注配送先の配送先情報を取得
   * @param  request
   * @param  ShopCode ショップコード
   * @return Collection 配送先コレクション
   * @throws なし
   */
  public static Collection getAddressColl(HttpServletRequest lRequest,String lShopCode){
    Collection lDeliveryColl=getDeliveryCollection(lRequest,lShopCode);
    if (lDeliveryColl==null)lDeliveryColl=new ArrayList();
    SICustAddress lAddress=new SICustAddress();
    SIOrderDelivery[] lDeliveryList=(SIOrderDelivery[])lDeliveryColl.toArray( new SIOrderDelivery[0]);
    //Collection lAddressColl=new ArrayList();
    Hashtable lAddressMap=new Hashtable();
    String lAddressCode="";
    
    for (int ii=0;ii<lDeliveryList.length;ii++){
      String[] lDeliveryCode=SIStringUtil.split(lDeliveryList[ii].getDeliveryCode(),SIConfig.SIWEBSHOPPING_TOKEN);
      if (lDeliveryCode.length==2) lAddressCode=lDeliveryCode[0];
      
      if (SIUtil.isNotNull(lAddressCode)&&(SICustAddress)lAddressMap.get(lAddressCode)==null){
        lAddress=new SICustAddress();
        lAddress.setEncode(SIConfig.SIENCODE_NONE);
        lAddress.setDeliveryAddressee(lDeliveryList[ii].getDeliveryAddressee());
        lAddress.setDeliveryName(lDeliveryList[ii].getDeliveryName());
        lAddress.setTel(lDeliveryList[ii].getTel());
        lAddress.setFax(lDeliveryList[ii].getFax());
        lAddress.setEmail(lDeliveryList[ii].getEmail());
        lAddress.setAddress1(lDeliveryList[ii].getAddress1());
        lAddress.setAddress2(lDeliveryList[ii].getAddress2());
        lAddress.setAddress3(lDeliveryList[ii].getAddress3());
        lAddressMap.put(lAddressCode, lAddress);
      }
    }
    return lAddressMap.values();
  }
  
  /**
   * <b>getDeliveryCollection</b>
   * 受注配送先リストの取得
   * @param  request リクエスト
   * @return 受注配送先リスト
   * @throws なし
   */
  public static Collection getDeliveryCollection(HttpServletRequest lRequest){
    return getDeliveryCollection(lRequest,null);
  }
  
  public static Collection getDeliveryCollection(HttpServletRequest lRequest,String lShopCode){
    LinkedHashMap lResMap=new LinkedHashMap();
    HttpSession session=lRequest.getSession(true);//セッションの取得
    
    LinkedHashMap detailMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);//受注明細レコード
    if (detailMap==null)detailMap=new LinkedHashMap();
    LinkedHashMap deliveryMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME);//受注配送先レコード
    if (deliveryMap==null)deliveryMap=new LinkedHashMap();
    Iterator lDetailIta=detailMap.values().iterator();
    SIOrderDetail lOrderDetail=new SIOrderDetail();
    SIOrderDelivery lOrderDelivery=new SIOrderDelivery();
    log.debug("getDeliveryCollection:lShopCode="+lShopCode);
    
    while (lDetailIta.hasNext()){
      lOrderDetail=(SIOrderDetail)lDetailIta.next();
      lOrderDelivery=(SIOrderDelivery)lResMap.get(lOrderDetail.getDeliveryCode());
      if (SIUtil.isNull(lShopCode)&&lOrderDelivery==null){//結果セットにまだない
        lResMap.put(lOrderDetail.getDeliveryCode(),deliveryMap.get(lOrderDetail.getDeliveryCode()));
      }else if (SIUtil.isNotNull(lShopCode)&&lOrderDetail.getShopCode().equals(lShopCode)&&lOrderDelivery==null){
        lResMap.put(lOrderDetail.getDeliveryCode(),deliveryMap.get(lOrderDetail.getDeliveryCode()));
      }
    }
    return lResMap.values();
  }

  //EDBTG005-00 kamata add start

  /**
   * <b>reset</b>
   * カートの情報に基づいて、受注配送先レコードと受注明細レコードの設定（PC、スマートフォン両方に対応）
   * @param  request
   * @param  Connection
   * @param  newOrderDeli
   * @return なし
   * @throws なし
   */
  public static void  resetDelivery(HttpServletRequest lRequest,Connection lConnection, UINewOrderDeli newOrderDeli){
    String addressNo = "0";
    if (SIURLMap.isSmartPhone(lRequest)) {
        // スマートフォンの場合、
        addressNo = getAddressCodeForSp(lRequest, lConnection);
    }
    newOrderDeli.setAddress(addressNo);
    resetDelivery(lRequest,lConnection,addressNo,false);
  }

  public static void getCasherInfoForSp(HttpServletRequest lRequest,Connection lConnection, UICasher lCasher) {
      String lPayMethodName = "";
      String lPaymentFlg = "";
      
      SIUserInfo lUserInfo=SIHTMLUtil.getUserInfo(lRequest);
      Statement lStatement=null;
      ResultSet lResultSet=null;
      
      // 直近のオーダーを取得
      StringBuffer lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT b.paymethodname, b.paymethodcode ");
      lSqlBuf.append("FROM ordertbl a INNER JOIN paymethodmtbl b ON a.paymentflg = b.paymethodcode ");
      lSqlBuf.append("WHERE a.enabledflg = '1' AND a.ordercode = (SELECT max(ordercode) FROM ordertbl WHERE branchcode <> '17' AND custcode = ").append(SIDBUtil.SQL2Str(lUserInfo.getCustCode(),") "));
      lSqlBuf.append("ORDER BY a.ordercode DESC ");
      
      log.debug("reset:lSqlBuf="+lSqlBuf.toString());
      
      try {
          lStatement = lConnection.createStatement();
          lResultSet = lStatement.executeQuery(lSqlBuf.toString());
          if (lResultSet.next()) {
              lPaymentFlg    = lResultSet.getString("paymethodcode");
              lPayMethodName = lResultSet.getString("paymethodname");
          } else {
              return;
          }
          
          lCasher.setPaymentFlg("");
          lCasher.setPayMethodName("");
          
          if (SIFlagConf.SIFLAG_PAYMENTFLG_BEFORE.equals(lPaymentFlg)  // 銀行振込
          || (SIFlagConf.SIFLAG_PAYMENTFLG_CARD.equals(lPaymentFlg) && lUserInfo.isReAuth())  // カード（番号保存する、１年以内）
          || (SIFlagConf.SIFLAG_PAYMENTFLG_CASH.equals(lPaymentFlg) && SICartDetail.isCach(lRequest,lConnection)) // 代金引換（現在のカート状況が代引可の場合）
          ) {
            lCasher.setPaymentFlg(lPaymentFlg);
            lCasher.setPayMethodName(lPayMethodName);
          }
          if (lPaymentFlg.equals(SIFlagConf.SIFLAG_PAYMENTFLG_CARD)) {
              lCasher.setReAuthFlg("1");
          }
      }catch(SQLException sqle){
        sqle.printStackTrace();
      }finally{
        SIDBUtil.close(lStatement,lResultSet);
      }
  }
  
  public static String getAddressCodeForSp(HttpServletRequest lRequest, Connection lConnection) {
      String lAddressCode = "0";
      
      SIUserInfo lUserInfo=SIHTMLUtil.getUserInfo(lRequest);
      Statement lStatement=null;
      ResultSet lResultSet=null;
      
      // 直近のオーダーを取得
      StringBuffer lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT b.addresscode FROM ordertbl a INNER JOIN orderdeliverytbl b ON a.ordercode = b.ordercode AND a.orderbranchcode=b.orderbranchcode ");
      lSqlBuf.append("WHERE a.enabledflg = '1' AND a.ordercode = (SELECT max(ordercode) FROM ordertbl WHERE branchcode <> '17' AND custcode = ").append(SIDBUtil.SQL2Str(lUserInfo.getCustCode(),") "));
      
      log.debug("reset:lSqlBuf="+lSqlBuf.toString());
      
      try {
          lStatement = lConnection.createStatement();
          lResultSet = lStatement.executeQuery(lSqlBuf.toString());
          if (lResultSet.next()){
              lAddressCode = lResultSet.getString("addresscode");
          } else {
              return "0";
          }
          if (!"0".equals(lAddressCode)) {
            // 配送先存在チェック
            lSqlBuf = new StringBuffer();
            lResultSet=null;
            
            lSqlBuf.append("SELECT * FROM custaddresstbl ");
            lSqlBuf.append("WHERE custcode = ").append(SIDBUtil.SQL2Str(lUserInfo.getCustCode()," "));
            lSqlBuf.append("AND addresscode = ").append(SIDBUtil.SQL2Str(lAddressCode));
            lResultSet = lStatement.executeQuery(lSqlBuf.toString());
            
            if (!lResultSet.next()){
              // 配送先がない場合
              return "0";
            }
          }
        }catch(SQLException sqle){
          sqle.printStackTrace();
        }finally{
          SIDBUtil.close(lStatement,lResultSet);
        }
      
      return lAddressCode;
  }
  //EDBTG005-00 kamata add end

  /**
   * <b>getDetailCollection</b>
   * ある配送先コードに対する全ての受注明細リストの取得
   * @param  request リクエスト
   * @param  lDeliveryCode 配送先コード
   * @return 特定受注明細リスト
   * @throws なし
   */
  public static Collection getDetailCollection(HttpServletRequest lRequest,String lDeliveryCode){
    return getDetailCollection(lRequest,lDeliveryCode,null);
  }
  
  public static Collection getDetailCollection(HttpServletRequest lRequest,String lDeliveryCode,String lShopCode){
    Collection lResColl=new ArrayList();
    HttpSession session=lRequest.getSession(true);//セッションの取得
    
    LinkedHashMap detailMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);//受注明細レコード
    //LinkedHashMap deliveryMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME);//受注配送先レコード
    Iterator lDetailIta=detailMap.values().iterator();
    SIOrderDetail lOrderDetail=new SIOrderDetail();
    
    while (lDetailIta.hasNext()){
      lOrderDetail=(SIOrderDetail)lDetailIta.next();
      if(SIUtil.isNull(lOrderDetail.getProcessingExpance())) lOrderDetail.setProcessingExpance("0");
      if(SIUtil.isNull(lOrderDetail.getPurchasePrice())) lOrderDetail.setPurchasePrice("0");
      if (lOrderDetail.getDeliveryCode().equals(lDeliveryCode)&&SIUtil.isNull(lShopCode)){
        lResColl.add(lOrderDetail);
      }else if (lOrderDetail.getDeliveryCode().equals(lDeliveryCode)&&SIUtil.isNotNull(lShopCode)&&lOrderDetail.getShopCode().equals(lShopCode)){
        lResColl.add(lOrderDetail);
      }
    }
    return lResColl;
  }
  
  //7.2.0 ST1030 追加 ここから
  /**
   * <b>getCmdtyDetailCollection</b>
   * すべての配送先コードに対する全ての受注明細リストの取得（数量をまとめる）
   * @param  request リクエスト
   * @return 特定受注明細リスト
   * @throws なし
   */
  public static Collection getCmdtyDetailCollection(HttpServletRequest lRequest) {
    return getCmdtyDetailCollection(lRequest, null);
  }
  
  public static Collection getCmdtyDetailCollection(HttpServletRequest lRequest, String lShopCode) {
    Collection lResColl = new ArrayList();
    HttpSession session = lRequest.getSession(true);//セッションの取得
    
    LinkedHashMap detailMap = (LinkedHashMap)session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_DTIL_NAME);
    Iterator lDetailIta = detailMap.values().iterator();
    SIOrderCmdty lOrderCmdty = new SIOrderCmdty();
    
    while (lDetailIta.hasNext()){
      lOrderCmdty = (SIOrderCmdty)lDetailIta.next();
      if (SIUtil.isNull(lShopCode)) {
        lResColl.add(lOrderCmdty);
      } else if (SIUtil.isNotNull(lShopCode) && lOrderCmdty.getShopCode().equals(lShopCode)) {
        lResColl.add(lOrderCmdty);
      }
    }
    return lResColl;
  }
  //7.2.0 ST1030 追加 ここまで
  
  public static boolean isCach(HttpServletRequest lRequest,Connection lConnection) {
    HttpSession session = lRequest.getSession(true);//セッションの取得
    boolean cashFlg = false;
    
    boolean reserveFlg = true;
    boolean hasReserve = false;
    String lReserveCode = "";
    SIReserveCartManager lRsrCartManager=(SIReserveCartManager)session.getAttribute(SIConfig.SISESSION_RESERVE_CART_INFO_NAME);
    if (lRsrCartManager==null){
      reserveFlg = false;
      lRsrCartManager = new SIReserveCartManager();
    }
    
    LinkedHashMap detailMap = (LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
    Iterator lDetailIta = detailMap.values().iterator();
    SIOrderDetail lOrderCmdty = new SIOrderDetail();
    
    while (lDetailIta.hasNext()){
      try{
        lOrderCmdty = (SIOrderDetail)lDetailIta.next();
        if(reserveFlg){
          Iterator lReserveCodeIte = lRsrCartManager.getReserveCodes().keySet().iterator();
          hasReserve = false;
          String buyAmount = lOrderCmdty.getAmount();
          while(lReserveCodeIte.hasNext()){
            lReserveCode = (String)lReserveCodeIte.next();
            if(SIDBUtil.hasData(lConnection,"SELECT reservecode FROM reserveordertbl WHERE reservecode='"+lReserveCode+"' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'")){
              hasReserve = true;
            }
            //物流倉庫A以外に引き当てられた予約商品の場合
            if(hasReserve&&SIDBUtil.hasData(lConnection,"SELECT reservecode FROM reserveordertbl WHERE reservebranch!='999' AND reservecode='"+lReserveCode+"' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'")){
              cashFlg = true;
            }
            //物流倉庫Aに引き当てられた予約商品の場合
            if(hasReserve&&SIDBUtil.hasData(lConnection,"SELECT reservecode FROM reserveordertbl WHERE reservebranch='999' AND reservecode='"+lReserveCode+"' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'")){
              String rsrvAmount = SIDBUtil.getFirstData(lConnection,"SELECT assignamount FROM reserveordertbl WHERE reservebranch='999' AND reservecode='"+lReserveCode+"' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'");
              if(Integer.parseInt(buyAmount) > Integer.parseInt(rsrvAmount)){
                buyAmount = SIUtil.sub(buyAmount,rsrvAmount);
              }
            }
          }
          //物流倉庫Aに引き当てられた予約商品で、予約数以上の注文の場合
          if(!cashFlg&&hasReserve&&buyAmount!=lOrderCmdty.getAmount()&&Integer.parseInt(buyAmount) > 0){
            if(!cashFlg&&SIDBUtil.hasData(lConnection,"SELECT individualcode FROM individualtbl WHERE amountflg='1' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'")){
              if(SIDBUtil.hasData(lConnection,"SELECT branchcode FROM storestocktbl WHERE branchcode!='999' AND amount!='0' AND salespriorityflg='1' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'")
               ||SIDBUtil.hasData(lConnection,"SELECT branchcode FROM storestocktbl WHERE branchcode='999' AND amount<'"+buyAmount+"' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'")){
                cashFlg = true;
              }
            }
          }
          //予約商品でない場合
          if(!cashFlg&&!hasReserve){
            if(!cashFlg&&SIDBUtil.hasData(lConnection,"SELECT individualcode FROM individualtbl WHERE amountflg='1' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'")){
              if(SIDBUtil.hasData(lConnection,"SELECT branchcode FROM storestocktbl WHERE branchcode!='999' AND amount!='0' AND salespriorityflg='1' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'")
               ||SIDBUtil.hasData(lConnection,"SELECT branchcode FROM storestocktbl WHERE branchcode='999' AND amount<'"+lOrderCmdty.getAmount()+"' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'")){
                cashFlg = true;
              }
            }
          }
        }else{//予約商品を含まない受注の場合
          if(!cashFlg&&SIDBUtil.hasData(lConnection,"SELECT individualcode FROM individualtbl WHERE amountflg='1' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'")){
            if(SIDBUtil.hasData(lConnection,"SELECT branchcode FROM storestocktbl WHERE branchcode!='999' AND amount!='0' AND salespriorityflg='1' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'")
             ||SIDBUtil.hasData(lConnection,"SELECT branchcode FROM storestocktbl WHERE branchcode='999' AND amount<'"+lOrderCmdty.getAmount()+"' AND cmdtycode='"+lOrderCmdty.getCmdtyCode()+"' AND individualcode='"+lOrderCmdty.getIndividualCode()+"'")){
              cashFlg = true;
            }
          }
        }
      }catch(Exception e){
        e.printStackTrace();
        cashFlg = false;
      }
    }
    return cashFlg;
  }
  
  //7.1.1 ST0156 追加 ここから
  /**
   * <b>isEmpty</b>
   * 当分決済の商品リストがあるかどうかをチェックする
   * @param  lRequest リクエスト
   * @param  lShopCode ショップコード
   * @return 決済商品があるかどうか
   * @throws なし
   */
  public static boolean isEmpty(HttpServletRequest lRequest,String lShopCode){
    //7.2.0 ST0224 追加 ここから
    return isEmpty(lRequest, lShopCode, false);
  }
  
  /**
   * <b>isEmpty</b>
   * 当分決済の商品リストがあるかどうかをチェックする
   * @param  lRequest リクエスト
   * @param  lShopCode ショップコード
   * @param  updMode  バックの修正時にはtrue、それ以外はfalse
   * @return 決済商品があるかどうか
   */
  public static boolean isEmpty(HttpServletRequest lRequest,String lShopCode, boolean updMode) {
    if (!updMode && SIUtil.isNull(lShopCode) && SIConfig.SIRUNNING_MODE_CURRENT == SIConfig.SIRUNNING_MODE_INDIVIDUAL) return true;
    //7.2.0 ST0224 追加 ここまで
    boolean lResult=true;
    HttpSession session=lRequest.getSession(true);//セッションの取得
    
    LinkedHashMap detailMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);//受注明細レコード
    if (detailMap==null) return true;
    Iterator lDetailIta=detailMap.values().iterator();
    SIOrderDetail lOrderDetail=new SIOrderDetail();
    
    while (lDetailIta.hasNext()){
      lOrderDetail=(SIOrderDetail)lDetailIta.next();
      if (SIUtil.isNull(lShopCode)||lOrderDetail.getShopCode().equals(lShopCode)){
        lResult=false;
        break;
      }
    }
    return lResult;
  }
  //7.1.1 ST0156 追加 ここまで
  
  /**
   * <b>getCollection</b>
   * ある商品対する全ての受注明細レコードの取得
   * @param  request リクエスト
   * @param  lCmdty 商品レコード
   * @return 受注明細レコードリスト
   * @throws なし
   */
  public static Collection getDetailCollection(HttpServletRequest lRequest,SICartCmdty lCmdty){
    log.debug("getCollection:ShopCode="+lCmdty.getShopCode()+",CmdtyCode="+lCmdty.getCmdtyCode());
    Collection lResColl=new ArrayList();
    HttpSession session=lRequest.getSession(true);//セッションの取得
    
    LinkedHashMap detailMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);//受注明細レコード
    Iterator lDetailIta=detailMap.values().iterator();
    SIOrderDetail lOrderDetail=new SIOrderDetail();
    
    // EDBTG003-00 nagayoshi mod start
//    while (lDetailIta.hasNext()){
//      lOrderDetail=(SIOrderDetail)lDetailIta.next();
//      if (lCmdty.getCompCode().equals(lOrderDetail.getCompCode())){
//        lResColl.add(lOrderDetail);
//      }
//    }
    if (lCmdty.isCmdtyComposition()) {
      // 構成品・オプション・添付品の情報を取得
      Collection coll = (Collection)lCmdty.getCartsCmdtyCompositionDetailMap().get(lCmdty.getCmdtyCompositionKeySet());
      Iterator ite = coll.iterator();
      while (ite.hasNext()) {
        lCmdty = (SICartCmdty)ite.next();
        // EDBTG001-02 2013/03/01 nagayoshi add start
        lDetailIta = detailMap.values().iterator();
        // EDBTG001-02 2013/03/01 nagayoshi add end
        while (lDetailIta.hasNext()) {
          lOrderDetail=(SIOrderDetail)lDetailIta.next();
          // EDBTG003-00 [不具合管理票-No23] 2013/03/14 nagayoshi mod start
//          if (lCmdty.getCompCode().equals(lOrderDetail.getCompCode())){
          String keyCode = lCmdty.getCompCode() + SIConfig.SIWEBSHOPPING_TOKEN + lCmdty.getSetDetailCode();
          String keyDetail = lOrderDetail.getCompCode() + SIConfig.SIWEBSHOPPING_TOKEN + lOrderDetail.getSetDetailCode();
          if (keyCode.equals(keyDetail)) {
          // EDBTG003-00 [不具合管理票-No23] 2013/03/14 nagayoshi mod end
            lResColl.add(lOrderDetail);
            break;
          }
        }
      }
    } else {
      while (lDetailIta.hasNext()){
        lOrderDetail=(SIOrderDetail)lDetailIta.next();
        if (lCmdty.getCompCode().equals(lOrderDetail.getCompCode())){
          lResColl.add(lOrderDetail);
        }
      }
    }
    // EDBTG003-00 nagayoshi mod end
    return lResColl;
  }
  
  /**
   * <b>getOrderDetail</b>
   * 受注明細コードに対する受注明細の取得
   * @param  request リクエスト
   * @param  lOrderDetailCode 受注明細コード
   * @return SIOrderDetail 特定受注明細
   * @throws なし
   */
  public static SIOrderDetail getOrderDetail(HttpServletRequest lRequest,String lOrderDetailCode){
    //カートの情報の取得
    HttpSession session=lRequest.getSession(true);//セッションの取得
    LinkedHashMap detailMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);//受注明細レコード
    SIOrderDetail lOrderDetail=(SIOrderDetail)detailMap.get(lOrderDetailCode);
    if (lOrderDetail==null) return new SIOrderDetail();
    else return lOrderDetail;
  }
  
  /**
   * <b>getOrderDelivery</b>
   * 受注配送先コードに対する受注配送先の取得
   * @param  request リクエスト
   * @param  Connection
   * @param  lOrderDeliveryCode 受注配送先コード
   * @return 特定受注明細
   * @throws なし
   */
  public static SIOrderDelivery getOrderDelivery(HttpServletRequest lRequest,Connection lConnection,String lOrderDeliveryCode){
    log.debug("getOrderDelivery:lOrderDeliveryCode="+lOrderDeliveryCode);
    //ログインユーザーの情報の取得
    SIUserInfo lUserInfo=SIHTMLUtil.getUserInfo(lRequest);
    
    String[] lDeliveryCode=SIStringUtil.split(lOrderDeliveryCode,SIConfig.SIWEBSHOPPING_TOKEN);
    SIOrderDelivery lOrderDelivery=new SIOrderDelivery();
    SICustAddress lAddress=new SICustAddress();
    
    if (lDeliveryCode.length>0){
      lAddress=new SICustAddress(lUserInfo.getCustCode(),lDeliveryCode[0]);
      lAddress.reset(lConnection);
      lOrderDelivery.setEncode(SIConfig.SIENCODE_NONE);
      lOrderDelivery.setDeliveryAddressee(lAddress.getDeliveryAddressee());
      lOrderDelivery.setDeliveryName(lAddress.getDeliveryName());
    }else{
      log.debug("length="+lDeliveryCode.length);
    }
    return lOrderDelivery;
  }
  
  /**
   * <b>getDetailCollection</b>
   * ある商品コードに対する商品数量を取得
   * @param  request リクエスト
   * @param  lOrderDetailCode 受注明細コード
   * @return amount 商品数量
   * @throws なし
   */
  public static String getAmount(HttpServletRequest lRequest,String lOrderDetailCode){
    log.debug("getAmount:lOrderDetailCode="+lOrderDetailCode);
    //カートの情報の取得
    HttpSession session=lRequest.getSession(true);//セッションの取得
    
    LinkedHashMap detailMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
    SIOrderDetail lOrderDetail=(SIOrderDetail)detailMap.get(lOrderDetailCode);
    
    if (lOrderDetail==null) return "0";
    else return lOrderDetail.getAmount();
  }
  
  /**
  * <b>copy</b>
  * アドレス帳の配送先情報を、受注配送先の配送先情報にコピーする
  * @param  SICustAddress   顧客アドレス帳
  * @param  SIOrderDelivery 受注配送先コード
  * @return なし
  * @throws なし
  */
  public static void copy(SICustAddress lAddress,SIOrderDelivery lOrderDelivery){
    lOrderDelivery.setEncode(SIConfig.SIENCODE_NONE);
    lOrderDelivery.setDeliveryName(lAddress.getDeliveryName());//配送先呼称
    lOrderDelivery.setDeliveryAddressee(lAddress.getDeliveryAddressee());//配送先宛名
    lOrderDelivery.setEmail(lAddress.getEmail());//メール
    lOrderDelivery.setPostCode1(lAddress.getPostCode1());//郵便番号1
    lOrderDelivery.setPostCode2(lAddress.getPostCode2());//郵便番号2
    lOrderDelivery.setAddress1(lAddress.getAddress1());//配送先住所1
    lOrderDelivery.setAddress2(lAddress.getAddress2());//配送先住所2
    lOrderDelivery.setAddress3(lAddress.getAddress3());//配送先住所3
    lOrderDelivery.setCompanyName(lAddress.getCompanyName());//会社名
    lOrderDelivery.setTel(lAddress.getTel());//連絡先電話番号
    lOrderDelivery.setFax(lAddress.getFax());//連絡先FAX番号
    lOrderDelivery.setCustCompanyFlg(lAddress.getCustCompanyFlg());//個人法人フラグ
    lOrderDelivery.setAddressCode(lAddress.getAddressCode());//アドレス帳コード
  }
  
  /**
   * <b>copy</b>
   * カート商品詳細を受注明細情報にコピーする
   * @param  SICartCmdty カート商品詳細
   * @param  SIOrderDetail 受注明細
   * @return なし
   * @throws なし
   */
  public static void copy(SICartCmdty lCmdty,SIOrderDetail lOrderDetail){
    String lCalcPrice="0";
    lOrderDetail.setEncode(SIConfig.SIENCODE_NONE);
    lOrderDetail.setShopCode(lCmdty.getShopCode());//ショップコード
    lOrderDetail.setCmdtyCode(lCmdty.getCmdtyCode());//商品コード
    lOrderDetail.setIndividualCode(lCmdty.getIndividualCode());
    lOrderDetail.setShopName(SIConfig.SIMALL.getMallShopName());//ショップ名
    lOrderDetail.setCmdtyName(lCmdty.getCmdtyName());//商品名
    lOrderDetail.setOrgPrice(lCmdty.getCalcUnitPrice());//本体値段
    lOrderDetail.setPrice(lCmdty.getFinalUnitPrice());//値引き後の購入値段
    lOrderDetail.setStndrdCode1(lCmdty.getStndrdCode1());//規格コード1
    lOrderDetail.setStndrdName1(lCmdty.getStndrdName1());//エレメント1
    lOrderDetail.setElementCode1(lCmdty.getElementCode1());//エレメント1
    lOrderDetail.setElementName1(lCmdty.getElementName1());//エレメント1
    lOrderDetail.setStndrdCode2(lCmdty.getStndrdCode2());//規格コード1
    lOrderDetail.setStndrdName2(lCmdty.getStndrdName2());//規格コード1
    lOrderDetail.setElementCode2(lCmdty.getElementCode2());//エレメント2
    lOrderDetail.setElementName2(lCmdty.getElementName2());//エレメント2
    lOrderDetail.setWrappingFlg(lCmdty.getWrappingFlg());//ラッピングフラグ
    lOrderDetail.setShopGiftFlg(lCmdty.getShopGiftFlg());//ショップギフトフラグ
    lOrderDetail.setTaxFlg(lCmdty.getTaxFlg());//税フラグ
    lOrderDetail.setTaxRate(lCmdty.getTaxRate());//税率
    lOrderDetail.setCmdtySize(lCmdty.getCmdtySize());//商品サイズ
    lOrderDetail.setDeliveryTypeCode(lCmdty.getDeliveryTypeCode());//配送種別コード
    lOrderDetail.setDeliveryTypeName(lCmdty.getDeliveryTypeName());//配送種別名称
    lOrderDetail.setConsignGoodsFee(lCmdty.getConsignGoodsFee());//委託手数料
    lOrderDetail.setColorName(lCmdty.getColorName());//カラー
    lOrderDetail.setUsedNewFlg(lCmdty.getUsedNewFlg());//中古新品区分
    // EDBTG003-00 nagayoshi mod start
    lOrderDetail.setSetDetailFlg(lCmdty.getSetDetailFlg());//明細区分
    lOrderDetail.setSetCode(lCmdty.getSetCode());//セット番号
    lOrderDetail.setSetCmdtyCode(lCmdty.getSetCmdtyCode());//セット商品コード
    lOrderDetail.setSetIndividualCode(lCmdty.getSetIndividualCode());//セット在庫コード
    lOrderDetail.setSetDetailCode(lCmdty.getSetDetailCode());//セット明細番号
    // EDBTG003-00 nagayoshi mod end
    // EDBTG003-00 elecs-matsushima add start
    lOrderDetail.setOrderDetailCode(lCmdty.getDetailCode());
    lOrderDetail.setAllocationMap(lCmdty.getAllocationMap());
    // EDBTG003-00 elecs-matsushima add end
    if (lOrderDetail.getTaxFlg().equals("1")){
      lCalcPrice=SITax.calcPriceIncTax(lOrderDetail.getPrice(),lOrderDetail.getTaxRate());
    }else{
      lCalcPrice=lOrderDetail.getPrice();
    }
    lOrderDetail.setPriceIncTax(lCalcPrice);
  }
  
  /**
   * <b>getCmdtyDeliveryCollection</b>
   * @param  Connection
   * @param  ShopCode    ショップコード
   * @param  CmdtyCode   商品コード
   * @return String      配送方法
   * @throws なし
   */
  public static String getCmdtyDeliveryCollection(Connection lConnection,String lShopCode,String lCmdtyCode){
    Statement lStatement=null;
    ResultSet lResultSet=null;
    StringBuffer lSqlBuf=new StringBuffer();
    String deliveryTypeName="";
    lSqlBuf.append("SELECT aa.DeliveryTypeName AS Name,aa.DeliveryTypeCode AS Code ");
    lSqlBuf.append("FROM DeliveryTypeMTbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa,");
    lSqlBuf.append("CmdtyMTbl").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("bb ");
    lSqlBuf.append("WHERE aa.MallShopCode=bb.ShopCode AND aa.DeliveryTypeCode=bb.DeliveryTypeCode ");
    lSqlBuf.append("AND bb.ShopCode=").append(SIDBUtil.SQL2Str(lShopCode," "));
    lSqlBuf.append("AND bb.CmdtyCode=").append(SIDBUtil.SQL2Str(lCmdtyCode," "));
    lSqlBuf.append("ORDER BY aa.DeliveryTypeCode ");
    
    log.debug("getCmdtyDeliveryCollection:lSqlBuf="+lSqlBuf.toString());
    
    try {
      lStatement=lConnection.createStatement();
      lResultSet=lStatement.executeQuery(lSqlBuf.toString());
      //商品レコードのセットの作成
      if(lResultSet.next()){
        deliveryTypeName = lResultSet.getString("Name");
      }
      return deliveryTypeName;
    }catch (Exception e){
      e.printStackTrace();
      return deliveryTypeName;
    }finally{
      SIDBUtil.close( lStatement,lResultSet);
    }
  }
  
  /**
   * <b>reset</b>
   * カートの情報に基づいて、受注配送先レコードと受注明細レコードの設定
   * @param  request
   * @param  Connection
   * @return なし
   * @throws なし
   */
  public static void  resetDelivery(HttpServletRequest lRequest,Connection lConnection,String addressNo){
    resetDelivery(lRequest,lConnection,addressNo,false);
  }
  
  // EDBTG003-00 elecs-matsushima add start
  public static void  resetDeliveryDetailPos(HttpServletRequest lRequest,Connection lConnection,String addressNo,boolean firstflg){
    //カートの情報の取得
    HttpSession session=lRequest.getSession(true);//セッションの取得
    
    LinkedHashMap deliveryMap=new LinkedHashMap();//受注配送先データ
    LinkedHashMap detailMap=new LinkedHashMap();//受注明細データ
    
    //ログインユーザーの情報の取得
    SIUserInfo lUserInfo=SIHTMLUtil.getUserInfo(lRequest);
    SIOrderDetailPK lPk=new SIOrderDetailPK();
    SIOrderDelivery lOrderDelivery=new SIOrderDelivery();
    
    SIOrderDetail orderDetail=new SIOrderDetail();
    SIMallShop lMallShop=new SIMallShop();
    // EDBTG005-00 kamata mod start
    lPk.setAddressCode(addressNo);
    // EDBTG005-00 kamata mod end
    SICustAddress lAddress=new SICustAddress(lUserInfo.getCustCode(),addressNo);
    lAddress.reset(lConnection);
    
    SICartDetail cartDetail = new SICartDetail();
    SICartManager cartMan = new SICartManager();
    cartDetail.createCartCmdtyPos(lRequest, session, lConnection, cartMan);
    
    ArrayList individualArray = new ArrayList();
    
    LinkedHashMap detailMapTmp = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
    if (detailMapTmp == null) detailMapTmp = new LinkedHashMap();
    
    String total="0";
    for (Iterator detailMapTmpIte = detailMapTmp.keySet().iterator(); detailMapTmpIte.hasNext();) {
      orderDetail = (SIOrderDetail) detailMapTmp.get(detailMapTmpIte.next());
      if("1".equals(orderDetail.getDeliveryTypeCode()) && !SIConfig.SET_DETAIL_FLG_APPENDED.equals(orderDetail.getSetDetailFlg())){
        total=SIUtil.add(total,SIUtil.multi(orderDetail.getPriceIncTax(),orderDetail.getAmount()));
        individualArray.add(orderDetail.getIndividualCode());
      }
    }
    
    // EDBTG003-00 [不具合管理票-No34] 2013/03/26 nagayoshi add start
    HashMap tmpSetMap = new HashMap();
    int setCount = 0;
    for (Iterator detailMapTmpIte = detailMapTmp.keySet().iterator(); detailMapTmpIte.hasNext();) {
      orderDetail = (SIOrderDetail) detailMapTmp.get(detailMapTmpIte.next());
      // まずは、Key名を作成
      String keyName = orderDetail.getSetCmdtyCode()
              + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetIndividualCode()
              + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetCode();
      if (!orderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL)) {
        // セット商品の場合
        if (!tmpSetMap.containsKey(keyName)) {
          setCount++;
          tmpSetMap.put(keyName, String.valueOf(setCount));
        }
      }
    }
    // EDBTG003-00 [不具合管理票-No34] 2013/03/26 nagayoshi add end
    
    // EDBTG003-00 [不具合管理票-No25] 2013/03/15 nagayoshi add start
    HashMap tmpDetailSetMap = new HashMap();
    for (Iterator detailMapTmpIte = detailMapTmp.keySet().iterator(); detailMapTmpIte.hasNext();) {
      orderDetail = (SIOrderDetail) detailMapTmp.get(detailMapTmpIte.next());
      // まずは、Key名を作成
      String keyName = orderDetail.getSetCmdtyCode()
              + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetIndividualCode()
              + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetCode();
      if (!orderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL)) {
        // 通常品以外 == セット品の構成品・オプション・添付品の場合
        if (tmpDetailSetMap.containsKey(keyName)) {
          // 存在する = 初期なので、セット明細番号へデフォルト値１を設定
          String indexValue = (String)tmpDetailSetMap.get(keyName);
          String maxValue = String.valueOf(Integer.parseInt(indexValue) + 1);
          tmpDetailSetMap.put(keyName, maxValue);
          orderDetail.setSetDetailCode(maxValue);
        } else {
          // 存在しない = 初期なので、セット明細番号へデフォルト値１を設定
          tmpDetailSetMap.put(keyName, "1");
          orderDetail.setSetDetailCode("1");
        }
        orderDetail.setSetCode((String)tmpSetMap.get(keyName));
      }
    }
    // EDBTG003-00 [不具合管理票-No25] 2013/03/15 nagayoshi add end
    
    Object[] obj = individualArray.toArray();
    java.util.Arrays.sort(obj);
    boolean komonoFeeFlg = false;
    for (Iterator detailMapTmpIte = detailMapTmp.keySet().iterator(); detailMapTmpIte.hasNext();) {
      orderDetail = (SIOrderDetail) detailMapTmp.get(detailMapTmpIte.next());
      
      //明細レコードの設定
      orderDetail.setEncode(SIConfig.SIENCODE_NONE);
      orderDetail.getMiscData(lConnection);
      
      lPk=new SIOrderDetailPK(orderDetail.getShopCode()
                               ,orderDetail.getCmdtyCode()
                               ,orderDetail.getIndividualCode()
                               ,orderDetail.getStndrdCode1()
                               ,orderDetail.getElementCode1()
                               ,orderDetail.getStndrdCode2()
                               ,orderDetail.getElementCode2()
                               ,addressNo);
      
      //受注明細レコードの受注明細コードの構成：ショップコード~商品コード~アドレス帳コード
      lPk.setShopCode(orderDetail.getShopCode());
      lPk.setDeliveryTypeName(orderDetail.getDeliveryTypeName());//受注配送先コードを「配送コード~配送業者名~ショップコード」にする
      orderDetail.setDeliveryCode(lPk.getOrderDeliveryCode());//受注配送先レコードに受注配送先コードの設定
      orderDetail.setDetailCode(lPk.getOrderDetailCode()
                                 + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetCode()
                                 + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetDetailCode());
      //配送希望日の設定
      String deliveryDateStr = "deliveryDate_" + orderDetail.getCmdtyCode() + "_" + orderDetail.getIndividualCode() + "_" + orderDetail.getSetCode() + "_" + orderDetail.getSetDetailCode();
      String deliveryDate=lRequest.getParameter(deliveryDateStr);
      orderDetail.setDeliveryDate(deliveryDate);
      //希望時間帯の指定
      String deliveryTimeStr="deliveryTime_"+orderDetail.getCmdtyCode()+"_"+orderDetail.getIndividualCode() + "_" + orderDetail.getSetCode() + "_" + orderDetail.getSetDetailCode();
      String deliveryTime=lRequest.getParameter(deliveryTimeStr);
      orderDetail.setDeliveryTime(deliveryTime);
      
      /* 一括設定：管理側新規受注登録 */
      if("1".equals(orderDetail.getDeliveryTypeCode())){
        if("1".equals(lRequest.getParameter("deliveryDate_flg"))){
          orderDetail.setDeliveryDate(lRequest.getParameter("deliveryDate_komono"));
        }
        if("1".equals(lRequest.getParameter("deliveryTime_flg"))){
          orderDetail.setDeliveryTime(lRequest.getParameter("deliveryTime_komono"));
        }
      }else{
        if("0".equals(lRequest.getParameter("deliveryDate_flg"))){
          orderDetail.setDeliveryDate(lRequest.getParameter("deliveryDate_kobetsu"));
        }
        if("0".equals(lRequest.getParameter("deliveryTime_flg"))){
          orderDetail.setDeliveryTime(lRequest.getParameter("deliveryTime_kobetsu"));
        }
      }
      
      if ("1".equals(orderDetail.getDeliveryTypeCode())) {//通常のみ
        String deliveryDateKomonoAll=lRequest.getParameter("deliveryDate_KomomoAll");
        if (SIUtil.isNotNull(deliveryDateKomonoAll)) orderDetail.setDeliveryDate(deliveryDateKomonoAll);
        String deliveryTimeKomonoAll=lRequest.getParameter("deliveryTime_KomomoAll");
        if (SIUtil.isNotNull(deliveryTimeKomonoAll)) orderDetail.setDeliveryTime(deliveryTimeKomonoAll);
      }
      
      //配送先の構成:配送コード~配送業者名~ショップコード
      deliveryMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME);
      if (deliveryMap.get(orderDetail.getDeliveryCode()) == null) {
        lOrderDelivery = new SIOrderDelivery();
        SICartDetail.copy(lAddress, lOrderDelivery);
        lOrderDelivery.setTaxRate(SITax.getTaxRate(lConnection));//税率
        lOrderDelivery.setDeliveryTaxFlg(lMallShop.getDeliveryTaxFlg());//送料税フラグ
        lOrderDelivery.setShopCode(lPk.getShopCode());//ショップコード
        lOrderDelivery.setDeliveryTypeCode(orderDetail.getDeliveryTypeCode());
        lOrderDelivery.setDeliveryTypeName(lPk.getDeliveryTypeName());//配送業者
        lOrderDelivery.setDeliveryCode(lPk.getOrderDeliveryCode());
        deliveryMap.put(lPk.getOrderDeliveryCode(), lOrderDelivery);
      }else{
        lOrderDelivery=(SIOrderDelivery)deliveryMap.get(orderDetail.getDeliveryCode());
      }
      
      try {
        if("1".equals(orderDetail.getDeliveryTypeCode())){
          if(obj.length > 0 && orderDetail.getIndividualCode().equals(obj[0].toString()) && !komonoFeeFlg){
            orderDetail.setDeliveryFee(SIDeliveryFee.calcDeliveryFeeIndividual(lConnection,orderDetail.getShopCode(), lOrderDelivery, orderDetail,total));
            komonoFeeFlg = true;
          }
        }else{
          orderDetail.setDeliveryFee(SIDeliveryFee.calcDeliveryFeeIndividual(lConnection,orderDetail.getShopCode(), lOrderDelivery, orderDetail,total));
        }
      }catch(SIDBAccessException dbae){
        dbae.printStackTrace();
      }
      log.debug("orderDetail.getDetailCode()=" + orderDetail.getDetailCode());
      detailMap.put(lPk.getOrderDetailCode()
                    + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetCode()
                    + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetDetailCode()
                    ,orderDetail);
    }
    
    if(!firstflg) session.setAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME,deliveryMap);//受注配送先レコード
    session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME,detailMap);//受注明細レコード
    jp.co.sint.beans.front.UICasher.reset(lRequest);
  }
  //EDBTG003-00 elecs-matsushima add end
  
  public static void  resetDelivery(HttpServletRequest lRequest,Connection lConnection,String addressNo,boolean firstflg){
    //カートの情報の取得
    HttpSession session=lRequest.getSession(true);//セッションの取得
    
    LinkedHashMap deliveryMap=new LinkedHashMap();//受注配送先データ
    LinkedHashMap detailMap=new LinkedHashMap();//受注明細データ
    
    // EDBTG003-00 nagayoshi mod start
//    SICartManager cartMan=(SICartManager)session.getAttribute(SIConfig.SISESSION_CART_INFO_NAME);//カート情報
//    if (cartMan==null)cartMan=new SICartManager();
    SICartManager cartMan = new SICartManager();
    // EDBTG003-00 nagayoshi mod end
    //ログインユーザーの情報の取得
    SIUserInfo lUserInfo=SIHTMLUtil.getUserInfo(lRequest);
    SIOrderDetailPK lPk=new SIOrderDetailPK();
    SIOrderDelivery lOrderDelivery=new SIOrderDelivery();
    
    SICartCmdty lCartCmdty=new SICartCmdty();
    // EDBTG003-00 nagayoshi del start
//    Iterator lShopIta=cartMan.getShopCollection(lConnection).iterator();
    // EDBTG003-00 nagayoshi del end
    SIOrderDetail orderDetail=new SIOrderDetail();
    Iterator lCartIta;
    SIMallShop lMallShop=new SIMallShop();
    SICart lCart=new SICart();
    
    // EDBTG005-00 kamata mod start
    lPk.setAddressCode(addressNo);
    // EDBTG005-00 kamata mod end
    SICustAddress lAddress=new SICustAddress(lUserInfo.getCustCode(),addressNo);
    lAddress.reset(lConnection);
    
    // EDBTG003-00 nagayoshi add start
    SICartDetail cartDetail = new SICartDetail();
    cartDetail.createCartCmdty(lRequest, session, lConnection, cartMan);
    // EDBTG003-00 nagayoshi add end
    
    //String lOrderDetailCode="";
    // EDBTG003-00 nagayoshi add start
    Iterator lShopIta=cartMan.getShopCollection(lConnection).iterator();
    // EDBTG003-00 nagayoshi add end
    while (lShopIta.hasNext()){
      lMallShop=(SIMallShop)lShopIta.next();
      lCartIta=cartMan.getCartCollection(lMallShop.getMallShopCode()).iterator();
      String total="0";
      ArrayList individualArray = new ArrayList(); //7.3.0 PI-NES0501 追加
      while (lCartIta.hasNext()){
        orderDetail=new SIOrderDetail();
        lCart=(SICart)lCartIta.next();
        lCartCmdty=lCart.getCartCmdty();
        SICartDetail.copy(lCartCmdty,orderDetail);
        // EDBTG003-00 nagayoshi mod start
//        if(orderDetail.getDeliveryTypeName().equals("小物")){
        if("1".equals(orderDetail.getDeliveryTypeCode()) && !SIConfig.SET_DETAIL_FLG_APPENDED.equals(orderDetail.getSetDetailFlg())){
          // EDBTG003-00 nagayoshi mod end
          total=SIUtil.add(total,SIUtil.multi(lCartCmdty.getFinalUnitPriceIncTax(),lCart.getAmount()));
          individualArray.add(orderDetail.getIndividualCode());//7.3.0 PI-NES0501 追加
        }
      }
      
      Object[] obj = individualArray.toArray();//7.3.0 PI-NES0501 追加
      java.util.Arrays.sort(obj);//7.3.0 PI-NES0501 追加
      lCartIta=cartMan.getCartCollection(lMallShop.getMallShopCode()).iterator();
      // EDBTG003-00 nagayoshi add start
      boolean komonoFeeFlg = false;
      // EDBTG003-00 nagayoshi add end
      while (lCartIta.hasNext()){
        orderDetail=new SIOrderDetail();
        lCart=(SICart)lCartIta.next();
        lCartCmdty=lCart.getCartCmdty();
        lCartCmdty.setMemberDiscountRate(lUserInfo.getDiscountRate());
        
        //明細レコードの設定
        orderDetail.setEncode(SIConfig.SIENCODE_NONE);
        SICartDetail.copy(lCartCmdty,orderDetail);
        
        orderDetail.setAmount(lCart.getAmount());//購入数量
        orderDetail.getMiscData(lConnection);
        
        lPk=new SIOrderDetailPK(orderDetail.getShopCode()
                               ,orderDetail.getCmdtyCode()
                               ,orderDetail.getIndividualCode()
                               ,orderDetail.getStndrdCode1()
                               ,orderDetail.getElementCode1()
                               ,orderDetail.getStndrdCode2()
                               ,orderDetail.getElementCode2()
                               ,addressNo);
        
        //受注明細レコードの受注明細コードの構成：ショップコード~商品コード~アドレス帳コード
        lPk.setShopCode(orderDetail.getShopCode());
        lPk.setDeliveryTypeName(orderDetail.getDeliveryTypeName());//受注配送先コードを「配送コード~配送業者名~ショップコード」にする
        orderDetail.setDeliveryCode(lPk.getOrderDeliveryCode());//受注配送先レコードに受注配送先コードの設定
        // EDBTG003-00 nagayoshi mod start
//        orderDetail.setDetailCode(lPk.getOrderDetailCode());
        orderDetail.setDetailCode(lPk.getOrderDetailCode()
                                + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetCode()
                                + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetDetailCode());
        // EDBTG003-00 nagayoshi mod end
        //配送希望日の設定
        // EDBTG003-00 mng-paku mod start
//        String deliveryDateStr="deliveryDate_"+orderDetail.getCmdtyCode()+"_"+orderDetail.getIndividualCode();
        String deliveryDateStr = "deliveryDate_" + orderDetail.getCmdtyCode() + "_" + orderDetail.getIndividualCode() + "_" + orderDetail.getSetCode() + "_" + orderDetail.getSetDetailCode();
        // EDBTG003-00 mng-paku mod end
        String deliveryDate=lRequest.getParameter(deliveryDateStr);
        orderDetail.setDeliveryDate(deliveryDate);
        //希望時間帯の指定
        // EDBTG003-00 nagayoshi mod start
//        String deliveryTimeStr="deliveryTime_"+orderDetail.getCmdtyCode()+"_"+orderDetail.getIndividualCode();
        String deliveryTimeStr="deliveryTime_"+orderDetail.getCmdtyCode()+"_"+orderDetail.getIndividualCode() + "_" + orderDetail.getSetCode() + "_" + orderDetail.getSetDetailCode();
        // EDBTG003-00 nagayoshi mod end
        String deliveryTime=lRequest.getParameter(deliveryTimeStr);
        orderDetail.setDeliveryTime(deliveryTime);
        
        /* 一括設定：管理側新規受注登録 */
        if("1".equals(orderDetail.getDeliveryTypeCode())){
          if("1".equals(lRequest.getParameter("deliveryDate_flg"))){
            orderDetail.setDeliveryDate(lRequest.getParameter("deliveryDate_komono"));
          }
          if("1".equals(lRequest.getParameter("deliveryTime_flg"))){
            orderDetail.setDeliveryTime(lRequest.getParameter("deliveryTime_komono"));
          }
        }else{
          if("0".equals(lRequest.getParameter("deliveryDate_flg"))){
            orderDetail.setDeliveryDate(lRequest.getParameter("deliveryDate_kobetsu"));
          }
          if("0".equals(lRequest.getParameter("deliveryTime_flg"))){
            orderDetail.setDeliveryTime(lRequest.getParameter("deliveryTime_kobetsu"));
          }
        }
        if ("1".equals(orderDetail.getDeliveryTypeCode())) {//通常のみ
          String deliveryDateKomonoAll=lRequest.getParameter("deliveryDate_KomomoAll");
          if (SIUtil.isNotNull(deliveryDateKomonoAll)) orderDetail.setDeliveryDate(deliveryDateKomonoAll);
          String deliveryTimeKomonoAll=lRequest.getParameter("deliveryTime_KomomoAll");
          if (SIUtil.isNotNull(deliveryTimeKomonoAll)) orderDetail.setDeliveryTime(deliveryTimeKomonoAll);
        }
        
        //配送先の構成:配送コード~配送業者名~ショップコード
        if (deliveryMap.get(orderDetail.getDeliveryCode()) == null) {
          lOrderDelivery = new SIOrderDelivery();
          SICartDetail.copy(lAddress, lOrderDelivery);
          lOrderDelivery.setTaxRate(SITax.getTaxRate(lConnection));//税率
          lOrderDelivery.setDeliveryTaxFlg(lMallShop.getDeliveryTaxFlg());//送料税フラグ
          lOrderDelivery.setShopCode(lPk.getShopCode());//ショップコード
          //7.2.0 ST1030 追加 ここから
          lOrderDelivery.setDeliveryTypeCode(orderDetail.getDeliveryTypeCode());
          //7.2.0 ST1030 追加 ここまで
          lOrderDelivery.setDeliveryTypeName(lPk.getDeliveryTypeName());//配送業者
          lOrderDelivery.setDeliveryCode(lPk.getOrderDeliveryCode());
          deliveryMap.put(lPk.getOrderDeliveryCode(), lOrderDelivery);
        }else{
          lOrderDelivery=(SIOrderDelivery)deliveryMap.get(orderDetail.getDeliveryCode());
        }
        
        try {
          //7.3.0 PI-NES0501 追加
          if("1".equals(orderDetail.getDeliveryTypeCode())){
            // EDBTG003-00 nagayoshi mod start
//            if(orderDetail.getIndividualCode().equals(obj[0].toString())){
            if(obj.length > 0 && orderDetail.getIndividualCode().equals(obj[0].toString()) && !komonoFeeFlg){
              // EDBTG003-00 nagayoshi mod end
              orderDetail.setDeliveryFee(SIDeliveryFee.calcDeliveryFeeIndividual(lConnection,orderDetail.getShopCode(), lOrderDelivery, orderDetail,total));
              // EDBTG003-00 nagayoshi add start
              komonoFeeFlg = true;
              // EDBTG003-00 nagayoshi add end
            }
          }else{
            orderDetail.setDeliveryFee(SIDeliveryFee.calcDeliveryFeeIndividual(lConnection,orderDetail.getShopCode(), lOrderDelivery, orderDetail,total));
          }
        }catch(SIDBAccessException dbae){
          dbae.printStackTrace();
        }
        log.debug("orderDetail.getDetailCode()=" + orderDetail.getDetailCode());
        // EDBTG003-00 nagayoshi mod start
        detailMap.put(lPk.getOrderDetailCode()
                    + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetCode()
                    + SIConfig.SIWEBSHOPPING_TOKEN + orderDetail.getSetDetailCode()
                    ,orderDetail);
        // EDBTG003-00 nagayoshi mod end
      }
    }
    if(!firstflg) session.setAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME,deliveryMap);//受注配送先レコード
    session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME,detailMap);//受注明細レコード
    // EDBTG003-00 nagayoshi add start
//    session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, setCmdtyMap); // 受注セット品
    // EDBTG003-00 nagayoshi add end
    jp.co.sint.beans.front.UICasher.reset(lRequest);//7.1.1 ST0154 追加
  }
  
  // EDBTG003-00 nagayoshi add start
  /**
   * <b>createCartCmdty</b>
   * カート情報を受注明細移行用へ変換します
   * @param HttpSession
   * @param Connection
   * @param SICartManager
   * @return なし
   * @throws なし
   */
  public void createCartCmdty(HttpServletRequest lRequest, HttpSession session, Connection lConnection, SICartManager cartMan) {
    
    SICartManager tempCartMan=(SICartManager)session.getAttribute(SIConfig.SISESSION_CART_INFO_NAME);
    if (tempCartMan==null)tempCartMan=new SICartManager();
    
    LinkedHashMap setCmdtyMap = (LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME);
    if(setCmdtyMap==null){
      setCmdtyMap= new LinkedHashMap();
    }
    // セット品の場合、構成品・オプション・添付品をすべてばらす
    SIMallShop lMallShop=new SIMallShop();
    SICart lCart=new SICart();
    SICartCmdty lCartCmdty=new SICartCmdty();
    Iterator lTempShopIta = tempCartMan.getShopCollection(lConnection).iterator();
    Iterator lTempCartIta;
    LinkedHashMap detailCount = new LinkedHashMap();
    while (lTempShopIta.hasNext()){
      lMallShop=(SIMallShop)lTempShopIta.next();
      lTempCartIta=tempCartMan.getCartCollection(lMallShop.getMallShopCode()).iterator();
      // オプション情報保持Collection
      Collection compositionAppended = new ArrayList();
      // セット番号
      int refSetCount = 1;
      while (lTempCartIta.hasNext()){
        lCart=(SICart)lTempCartIta.next();
        lCartCmdty=lCart.getCartCmdty();
        lCartCmdty.setMemberDiscountRate(SIHTMLUtil.getUserInfo(lRequest).getDiscountRate());
        // セット品の場合
        if (lCartCmdty.isCmdtyComposition()) {
          // セット品情報初期化
          SIOrderSetCmdty setCmdty = new SIOrderSetCmdty();
          // セット商品親情報のコピー
          setCmdty.setInfo(lCart, refSetCount);
          // 構成品・オプション・添付品の情報を取得
          String keySet = lCartCmdty.getCmdtyCompositionKeySet();
          Collection coll = (Collection)lCartCmdty.getCartsCmdtyCompositionDetailMap().get(keySet);
          Iterator ite = coll.iterator();
          // 明細番号
          int setDetailCount = 1;
          while (ite.hasNext()) {
            SICartCmdty cmdty = (SICartCmdty)ite.next();
            // セット番号を設定
//            cmdty.setSetCode(lCartCmdty.getSetCode());
            cmdty.setSetCode(String.valueOf(refSetCount));
            // セット商品コード
            cmdty.setSetCmdtyCode(lCartCmdty.getCmdtyCode());
            // セット在庫コード
            cmdty.setSetIndividualCode(lCartCmdty.getIndividualCode());
            // 明細番号設定
            cmdty.setSetDetailCode(String.valueOf(setDetailCount));
            // KeySetの設定
            cmdty.setCmdtyCompositionKeySet(keySet);
            if (!cmdty.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_APPENDED)) {
              // セット構成品・オプションの場合
              // 構成数 * カート数量にてカート投入する（ばらし）
              SICart cart = new SICart(cmdty, SIUtil.multi_LL(lCart.getAmount(), cmdty.getSetCompositionCount()));
              // 子商品情報を追加
              cartMan.add(cart);
              // 明細番号カウントアップ
              setDetailCount++;
            } else {
              // セット番号をリフレッシュ
              cmdty.setSetCode(String.valueOf(refSetCount));
              compositionAppended.add(cmdty);
            }
          }
          // オプション判定用に明細カウントを保持
          detailCount.put(keySet, String.valueOf(setDetailCount -1));
          // 受注セット品設定
          String setCmdtyKey = setCmdty.getSetCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + setCmdty.getSetCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + setCmdty.getSetIndividualCode();
          setCmdtyMap.put(setCmdtyKey, setCmdty);
          refSetCount++;
        } else {
          // 明細区分へ0：通常品を設定
          lCart.getCartCmdty().setSetDetailFlg(SIConfig.SET_DETAIL_FLG_NORMAL);
          // カート追加
          cartMan.add(lCart);
        }
      }

/*********************************** 添付品付与判定 ***************************************/
      if (compositionAppended.size() > 0) {
        // 添付品の情報が存在する場合
        LinkedHashMap setMap = new LinkedHashMap();
        String totalAmount = "0";
        // セット商品毎の合計数量を取得する
        Iterator ite = setCmdtyMap.values().iterator();
        while(ite.hasNext()) {
          // Key取得
          SIOrderSetCmdty setCmdty = (SIOrderSetCmdty)ite.next();
          if (setMap.containsKey(setCmdty.getSetIndividualCode())) {
            // セット品の数量取得
            String amount = setCmdty.getSetAmount();
            // セット品の数量積上げ
            totalAmount = SIUtil.add_LL((String)setMap.get(setCmdty.getSetIndividualCode()), amount);
            // セット品数量情報の更新
            setMap.put(setCmdty.getSetIndividualCode(), totalAmount);
          } else {
            // 数量セット
            setMap.put(setCmdty.getSetIndividualCode(), setCmdty.getSetAmount());
          }
        }
        
        // チェック済添付品情報保持
        LinkedHashMap checkMap = new LinkedHashMap();
        // セット添付品情報取得
        Iterator cartAppend = compositionAppended.iterator();
        while (cartAppend.hasNext()) {
          // 添付品の情報
          SICartCmdty appendedCmdty = (SICartCmdty)cartAppend.next();
          if (!checkMap.containsKey((String)appendedCmdty.getSetIndividualCode() + (String)appendedCmdty.getIndividualCode())) {
            // セット購入数を取得
            String cartAmount = (String)setMap.get(appendedCmdty.getSetIndividualCode());
            // 添付品のセット数/添付品数を取得
            String setCount = appendedCmdty.getSetCount();
            BigDecimal a = new BigDecimal(cartAmount);
            BigDecimal b = new BigDecimal(setCount);
            BigDecimal calc = a.divide(b, BigDecimal.ROUND_DOWN);
            if (calc.compareTo(new BigDecimal(0)) > 0) {
              // 明細番号設定
              // オプション判定用に明細カウントを保持
              String setDetailCount = SIUtil.add_LL((String)detailCount.get(appendedCmdty.getCmdtyCompositionKeySet()), "1");
              appendedCmdty.setSetDetailCode(String.valueOf(setDetailCount));
              detailCount.put(appendedCmdty.getCmdtyCompositionKeySet(), setDetailCount);
              // カートへ投入
              // 構成数 * カート数量にてカート投入する（ばらし）
              SICart cart = new SICart(appendedCmdty, SIUtil.multi_LL(appendedCmdty.getSetCompositionCount(), calc.toString()));
              // 子商品情報を追加
              cartMan.add(cart);
            }
            // チェック済Mapへ設定
            checkMap.put(appendedCmdty.getSetIndividualCode() + appendedCmdty.getIndividualCode(), "");
          }
        }
      }
/*********************************** 添付品付与判定 ***************************************/
    }
    // EDBTG003-00 nagayoshi add start
    session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, setCmdtyMap); // 受注セット品
    // EDBTG003-00 nagayoshi add end
  }
  // EDBTG003-00 nagayoshi add end
  //EDBTG003-00 elecs-matsushima add start
  /**
   * <b>createCartCmdty</b>
   * カート情報を受注明細移行用へ変換します
   * @param HttpSession
   * @param Connection
   * @param SICartManager
   * @return なし
   * @throws なし
   */
  public void createCartCmdtyPos(HttpServletRequest lRequest, HttpSession session, Connection lConnection, SICartManager cartMan) {
    
    SICartManager tempCartMan=(SICartManager)session.getAttribute(SIConfig.SISESSION_CART_INFO_NAME);
    if (tempCartMan==null)tempCartMan=new SICartManager();
    
    LinkedHashMap setCmdtyMap = (LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME);
    if(setCmdtyMap==null){
      setCmdtyMap= new LinkedHashMap();
    }
    // セット品の場合、構成品・オプション・添付品をすべてばらす
    SIMallShop lMallShop=new SIMallShop();
    SICart lCart=new SICart();
    SICartCmdty lCartCmdty=new SICartCmdty();
    Iterator lTempShopIta = tempCartMan.getShopCollection(lConnection).iterator();
    Iterator lTempCartIta;
    //LinkedHashMap detailCount = new LinkedHashMap();
    while (lTempShopIta.hasNext()){
      lMallShop=(SIMallShop)lTempShopIta.next();
      lTempCartIta=tempCartMan.getCartCollection(lMallShop.getMallShopCode()).iterator();
      //// オプション情報保持Collection
      //Collection compositionAppended = new ArrayList();
      // セット番号
      int refSetCount = 1;
      while (lTempCartIta.hasNext()){
        lCart=(SICart)lTempCartIta.next();
        lCartCmdty=lCart.getCartCmdty();
        lCartCmdty.setMemberDiscountRate(SIHTMLUtil.getUserInfo(lRequest).getDiscountRate());
        // セット品の場合
        if (lCartCmdty.isCmdtyComposition()) {
          // セット品情報初期化
          SIOrderSetCmdty setCmdty = new SIOrderSetCmdty();
          // セット商品親情報のコピー
          setCmdty.setInfo(lCart, refSetCount);
          setCmdty.setSetDiscount(lCart.getCartCmdty().getSetDiscountPrice());
          //// 構成品・オプション・添付品の情報を取得
          //String keySet = lCartCmdty.getCmdtyCompositionKeySet();
          //Collection coll = (Collection)lCartCmdty.getCartsCmdtyCompositionDetailMap().get(keySet);
          //Iterator ite = coll.iterator();
          //// 明細番号
          //int setDetailCount = 1;
          //while (ite.hasNext()) {
          //  SICartCmdty cmdty = (SICartCmdty)ite.next();
          //  // セット番号を設定
          //  cmdty.setSetCode(String.valueOf(refSetCount));
          //  // セット商品コード
          //  cmdty.setSetCmdtyCode(lCartCmdty.getCmdtyCode());
          //  // セット在庫コード
          //  cmdty.setSetIndividualCode(lCartCmdty.getIndividualCode());
          //  // 明細番号設定
          //  cmdty.setSetDetailCode(String.valueOf(setDetailCount));
          //  // KeySetの設定
          //  cmdty.setCmdtyCompositionKeySet(keySet);
          //  if (!cmdty.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_APPENDED)) {
          //    // セット構成品・オプションの場合
          //    // 構成数 * カート数量にてカート投入する（ばらし）
          //    SICart cart = new SICart(cmdty, SIUtil.multi_LL(lCart.getAmount(), cmdty.getSetCompositionCount()));
          //    // 子商品情報を追加
          //    cartMan.add(cart);
          //    // 明細番号カウントアップ
          //    setDetailCount++;
          //  } else {
          //    // セット番号をリフレッシュ
          //    cmdty.setSetCode(String.valueOf(refSetCount));
          //    compositionAppended.add(cmdty);
          //  }
          //}
          //// オプション判定用に明細カウントを保持
          //detailCount.put(keySet, String.valueOf(setDetailCount -1));
          // 受注セット品設定
          String setCmdtyKey = setCmdty.getSetCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + setCmdty.getSetCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + setCmdty.getSetIndividualCode();
          setCmdtyMap.put(setCmdtyKey, setCmdty);
          refSetCount++;
        //} else {
        //  // 明細区分へ0：通常品を設定
        //  lCart.getCartCmdty().setSetDetailFlg(SIConfig.SET_DETAIL_FLG_NORMAL);
        //  // カート追加
        //  cartMan.add(lCart);
        }
      }

///*********************************** 添付品付与判定 ***************************************/
//      if (compositionAppended.size() > 0) {
//        // 添付品の情報が存在する場合
//        LinkedHashMap setMap = new LinkedHashMap();
//        String totalAmount = "0";
//        // セット商品毎の合計数量を取得する
//        Iterator ite = setCmdtyMap.values().iterator();
//        while(ite.hasNext()) {
//          // Key取得
//          SIOrderSetCmdty setCmdty = (SIOrderSetCmdty)ite.next();
//          if (setMap.containsKey(setCmdty.getSetIndividualCode())) {
//            // セット品の数量取得
//            String amount = setCmdty.getSetAmount();
//            // セット品の数量積上げ
//            totalAmount = SIUtil.add_LL((String)setMap.get(setCmdty.getSetIndividualCode()), amount);
//            // セット品数量情報の更新
//            setMap.put(setCmdty.getSetIndividualCode(), totalAmount);
//          } else {
//            // 数量セット
//            setMap.put(setCmdty.getSetIndividualCode(), setCmdty.getSetAmount());
//          }
//        }
//
//        // チェック済添付品情報保持
//        LinkedHashMap checkMap = new LinkedHashMap();
//        // セット添付品情報取得
//        Iterator cartAppend = compositionAppended.iterator();
//        while (cartAppend.hasNext()) {
//          // 添付品の情報
//          SICartCmdty appendedCmdty = (SICartCmdty)cartAppend.next();
//          if (!checkMap.containsKey((String)appendedCmdty.getSetIndividualCode() + (String)appendedCmdty.getIndividualCode())) {
//            // セット購入数を取得
//            String cartAmount = (String)setMap.get(appendedCmdty.getSetIndividualCode());
//            // 添付品のセット数/添付品数を取得
//            String setCount = appendedCmdty.getSetCount();
//            BigDecimal a = new BigDecimal(cartAmount);
//            BigDecimal b = new BigDecimal(setCount);
//            BigDecimal calc = a.divide(b, BigDecimal.ROUND_DOWN);
//            if (calc.compareTo(new BigDecimal(0)) > 0) {
//              // 明細番号設定
//              // オプション判定用に明細カウントを保持
//              String setDetailCount = SIUtil.add_LL((String)detailCount.get(appendedCmdty.getCmdtyCompositionKeySet()), "1");
//              appendedCmdty.setSetDetailCode(String.valueOf(setDetailCount));
//              detailCount.put(appendedCmdty.getCmdtyCompositionKeySet(), setDetailCount);
//              // カートへ投入
//              // 構成数 * カート数量にてカート投入する（ばらし）
//              SICart cart = new SICart(appendedCmdty, SIUtil.multi_LL(appendedCmdty.getSetCompositionCount(), calc.toString()));
//              // 子商品情報を追加
//              cartMan.add(cart);
//            }
//            // チェック済Mapへ設定
//            checkMap.put(appendedCmdty.getSetIndividualCode() + appendedCmdty.getIndividualCode(), "");
//          }
//        }
//      }
///*********************************** 添付品付与判定 ***************************************/
    }
    session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, setCmdtyMap); // 受注セット品
  }
//EDBTG003-00 elecs-matsushima add end
}