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

import java.io.IOException;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

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

import jp.co.sint.basic.SICart;
import jp.co.sint.basic.SICartCmdty;
import jp.co.sint.basic.SICartDetail;
import jp.co.sint.basic.SICartManager;
import jp.co.sint.basic.SICmdtyComposition;
import jp.co.sint.basic.SICmdtyCompositionAppended;
import jp.co.sint.basic.SICustAddress;
import jp.co.sint.basic.SIDeliveryTime;
import jp.co.sint.basic.SIKeepDetail;
import jp.co.sint.basic.SILogin;
import jp.co.sint.basic.SIMallShop;
import jp.co.sint.basic.SIOrder;
import jp.co.sint.basic.SIOrderCmdty;
import jp.co.sint.basic.SIOrderDelivery;
import jp.co.sint.basic.SIOrderDetail;
import jp.co.sint.basic.SIOrderSetCmdty;
import jp.co.sint.basic.SIPayMethod;
import jp.co.sint.basic.SIPayeeInfo;
import jp.co.sint.basic.SIPointMan;
import jp.co.sint.basic.SIPointRule;
import jp.co.sint.basic.SIReserveCartManager;
import jp.co.sint.basic.SIReserveOrder;
import jp.co.sint.basic.SITax;
import jp.co.sint.basic.SIUserInfo;
import jp.co.sint.beans.front.UICart;
import jp.co.sint.beans.front.UICasher;
import jp.co.sint.beans.front.UIDeliveryList;
import jp.co.sint.beans.front.UIMain;
import jp.co.sint.beans.front.UIOrderCounter;
import jp.co.sint.beans.front.UIWrapping;
import jp.co.sint.beans.mallmgr.UIOrderDeli;
import jp.co.sint.beans.mallmgr.UIRegCust;
import jp.co.sint.beans.mallmgr.UIRegNewOrderStndrd;
import jp.co.sint.beans.mallmgr.UIRegOrder;
import jp.co.sint.beans.mallmgr.UIRegUpdateOrderUserLogin;
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.database.SIDateTimeType;
import jp.co.sint.database.SIDisagreementException;
import jp.co.sint.database.SIDuplicateKeyException;
import jp.co.sint.database.SIDeleteRec;
import jp.co.sint.database.SIInsertRec;
import jp.co.sint.database.SIModifyRec;
import jp.co.sint.database.SISpcType;
import jp.co.sint.database.SITableCondition;
import jp.co.sint.database.SITableConditionManager;
import jp.co.sint.mail.SISendMail;
import jp.co.sint.servlet.SIServlet;
import jp.co.sint.servlet.front.SICartSrv;
import jp.co.sint.servlet.front.SIOrderHistorySrv;
import jp.co.sint.tools.SIBGUtil;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIDateTime;
import jp.co.sint.tools.SIDebtPointException;
import jp.co.sint.tools.SIErrorException;
import jp.co.sint.tools.SIErrorFactory;
import jp.co.sint.tools.SIFatalException;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIMismatchException;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;

/**
 * @version $Id: SIRegUpdateOrderSrv.java,v 1.0 2004/09/24 Exp $
 * @author Akao Shinya <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>
 * Akao Shinya 2004/09/24 12:20:00 Original
 */
public class SIRegUpdateOrderSrv extends SIServlet {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  /**
   * <b>doUpdate</b> HTTP リクエストの処理
   * 
   * @param request リクエスト
   * @param response
   * @return なし
   * @throws ServletException
   * @throws IOException
   */
  public void doUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    // ログイン情報の取得・チェック
    SILogin manLogin = SIHTMLUtil.getLogin(request);
    if (!manLogin.isLogin()) {
      forwardKey(request, response, "webshop.jsp.manager.login");
      return;
    }
    
    HttpSession session = request.getSession(true); // セッションの取得
    SIURLParameter urlParam = new SIURLParameter(request); // URLパラメータ
    SIDatabaseConnection databaseConnection = new SIDatabaseConnection(); // DBへのコネクションの作成
    
    try {
      Connection connection = databaseConnection.getConnection();
      
      String actionName = this.getActionName(urlParam); // 画面からのアクション
      String editMode = this.getEditMode(urlParam); // DBへの編集モード
      log.debug("doUpdate:actionName=" + actionName);
      
      Collection delcol = (Collection) session.getAttribute(SIConfig.SISESSION_UPDATEORDER_DELALLOCATION_NAME);
      if (delcol == null) delcol = new ArrayList();
      SIOrderDetail lDetail = new SIOrderDetail();
      
      // 商品規格から呼ばれたとき
      if (this.getServletPath(request).equals("/mallmgr/RegUpdateOrderStndrdSrv")) {
        // 戻る（数量・配送先・ギフト設定画面に戻る）
        if (SIConfig.SIACTION_RETURN.equalsIgnoreCase(actionName)) {
          forwardKey(request, response, "webshop.jsp.manager.order.update.reg1");
          
          // 商品を追加する
        } else if (SIConfig.SIACTION_CART.equalsIgnoreCase(actionName)) {
          // 受注情報のセット
          UIRegOrder lRegOrder = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
          lRegOrder.initUpdateNewCmdty(request, connection, urlParam);
          session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME, lRegOrder);
          
          // 商品を追加して数量・配送先・ギフト設定画面に戻る
          this.addCmdty(request, connection, lRegOrder);
          
          this.refreshCmdtyDetail(request);
          forwardKey(request, response, "webshop.jsp.manager.order.update.reg1");
        }
        
        // 配送先・ギフト設定から呼ばれたとき
      } else if (this.getServletPath(request).equals("/mallmgr/RegUpdateOrderReg1Srv")) {
        // カートのNULLチェック
        SICartManager lChkCartEmpty = (SICartManager) session.getAttribute(SIConfig.SISESSION_CART_INFO_NAME);
        
        if (lChkCartEmpty == null) lChkCartEmpty = new SICartManager();
        if (Integer.parseInt(lChkCartEmpty.getAmount()) <= 0) {
          SICustomErrors errors = new SICustomErrors();
          errors.addError(new SICustomError("manager.app.cart.zero"));
          request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
          forwardKey(request, response, "webshop.jsp.manager.order.update");
          // NULLでなければ以下
        } else {
          // 配送先選択orギフト包装選択後、画面リフレッシュ
          if (SIConfig.SIACTION_REFRESH.equals(actionName)) {
            forwardKey(request, response, "webshop.jsp.manager.order.update.reg1");
            
            // カートの商品の数量を修正
          } else if (SIConfig.SIACTION_MODIFY.equals(actionName)) {
            
            UIOrderCounter orderCounter = new UIOrderCounter();
            UIOrderDeli orderDeli = new UIOrderDeli();
            orderDeli.init(request, urlParam);
            if (SIUtil.isNotNull(orderDeli.getDelRow())) {
              orderCounter.initAmountDel(request, urlParam, orderDeli.getDelRow());
            } else {
              orderCounter.initAmount(request, urlParam);// 7.1.1 ST0236 修正
            }
            orderCounter.setOrderCode(orderDeli.getOrderCode());
            // EDBTG003-00 elecs-matsushima mod start
//            orderCounter.validate(request, databaseConnection.getConnection(), true, true);
            orderCounter.validatePos(request, databaseConnection.getConnection(), true, true, "");
            LinkedHashMap detailMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
            LinkedHashMap detailMapTmp = new LinkedHashMap(detailMap);
            SICartManager cartMan=new SICartManager();
            cartMan.adjustAmount(request,databaseConnection.getConnection());
            LinkedHashMap detailSetMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME);
            LinkedHashMap detailSetMapTmp = new LinkedHashMap(detailSetMap);
            session.setAttribute(SIConfig.SISESSION_CART_INFO_NAME,cartMan);
            // EDBTG003-00 elecs-matsushima mod end
            SICartDetail.resetDelivery(request, databaseConnection.getConnection(), orderDeli.getAddress());
            // EDBTG003-00 elecs-matsushima add start
            session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMapTmp);
            session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, detailSetMapTmp);
            SICartDetail.resetDeliveryDetailPos(request, databaseConnection.getConnection(), orderDeli.getAddress(), false);
            // EDBTG003-00 elecs-matsushima add end
            session.setAttribute(SIConfig.SISESSION_ORDER_COUNTER_NAME, orderCounter);
            session.setAttribute(SIConfig.SISESSION_MAN_ORDER_DELI, orderDeli);
            // カートのNullチェック
            lChkCartEmpty = (SICartManager) session.getAttribute(SIConfig.SISESSION_CART_INFO_NAME);
            if (lChkCartEmpty == null) lChkCartEmpty = new SICartManager();
            if (Integer.parseInt(lChkCartEmpty.getAmount()) <= 0) {
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("manager.app.cart.zero"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              forwardKey(request, response, "webshop.jsp.manager.order.update");
              // 中身が存在すれば
            } else {
              SICartDetail.resetDelivery(request, databaseConnection.getConnection(), orderDeli.getAddress());
              // EDBTG003-00 elecs-matsushima add start
              session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMapTmp);
              session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, detailSetMapTmp);
              SICartDetail.resetDeliveryDetailPos(request, databaseConnection.getConnection(), orderDeli.getAddress(), false);
              // EDBTG003-00 elecs-matsushima add end
              if (SIUtil.isNotNull(orderDeli.getDelRow())) {
                String[] delcode = orderDeli.getDelCode();
                lDetail = new SIOrderDetail();
                lDetail.setShopCode(manLogin.getMallShopCode());
                lDetail.setOrderCode(orderDeli.getOrderCode());
                lDetail.setCmdtyCode(delcode[1]);
                lDetail.setIndividualCode(delcode[2]);
                delcol.add(lDetail);
                session.setAttribute(SIConfig.SISESSION_UPDATEORDER_DELALLOCATION_NAME, delcol);
              }
              forwardKey(request, response, "webshop.jsp.manager.order.update.reg1");
            }
            // 商品追加
          } else if (SIConfig.SIACTION_CART.equalsIgnoreCase(actionName)) {
            // 受注情報のセット
            UIRegOrder lRegOrder = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
            lRegOrder.initUpdateNewCmdty(request, connection, urlParam);
            session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME, lRegOrder);
            
            // 追加される商品のチェック
            try {
              // 必須チェック、値チェック、存在チェックに引っかかる場合は、配送先・ギフト設定画面に戻る
              if (!lRegOrder.validateNewCmdty(request, connection)) {
                forwardKey(request, response, "webshop.jsp.manager.order.update.reg1");
                // 入力された商品が規格を持つ場合、規格選択画面に遷移
              } else if (lRegOrder.getNewCmdtyHasStndrd().equals("1")) {
                // 規格選択用オブジェクトの作成
                UIRegNewOrderStndrd newOrderStndrd = new UIRegNewOrderStndrd();
                newOrderStndrd.initUpdate(request, connection, urlParam);
                session.setAttribute(SIConfig.SISESSION_MAN_NEW_ORDER_STNDRD_LIST_NAME, newOrderStndrd);
                forwardKey(request, response, "webshop.jsp.manager.order.update.stndrd");
                // 入力された商品が規格を持たない場合、
                // カートに商品を追加して数量・配送先・ギフト設定画面に戻る
              } else {
                // EDBTG003-00 elecs-matsushima add start
                // 構成品の場合、商品追加をせずにポップアップ
                String compositionFlg = getCmdtyComposition(connection, lRegOrder.getNewCmdtyCode(), lRegOrder.getNewIndividualCode());
                // 受注情報のセット
                lRegOrder = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
                lRegOrder.setNewCmdtyCompositionFlg(compositionFlg);
                session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME, lRegOrder);
                request.setAttribute("compFlg", "0");
                if (SIUtil.isNull(compositionFlg) || compositionFlg.equals(SIConfig.CMDTY_COMPOSITION_NORMAL)){
                  lRegOrder.setNewCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_NORMAL);
                // EDBTG003-00 elecs-matsushima add end
                  // 商品の追加
                  this.addCmdty(request, connection, lRegOrder);
                  UIOrderDeli orderDeli = new UIOrderDeli();
                  orderDeli.init(request, urlParam);
                  
                  this.refreshCmdtyDetail(request);
                  // EDBTG003-00 elecs-matsushima add start
                  LinkedHashMap detailMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
                  LinkedHashMap detailMapTmp = new LinkedHashMap(detailMap);
                  LinkedHashMap detailSetMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME);
                  LinkedHashMap detailSetMapTmp = new LinkedHashMap(detailSetMap);
                  // EDBTG003-00 elecs-matsushima add end
                  SICartDetail.resetDelivery(request, databaseConnection.getConnection(), orderDeli.getAddress());
                  // EDBTG003-00 elecs-matsushima add start
                  session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMapTmp);
                  session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, detailSetMapTmp);
                  SICartDetail.resetDeliveryDetailPos(request, databaseConnection.getConnection(), orderDeli.getAddress(), false);
                  // EDBTG003-00 elecs-matsushima add end
                  forwardKey(request, response, "webshop.jsp.manager.order.update.reg1");
               // EDBTG003-00 elecs-matsushima add start
                } else {
                  request.setAttribute("compFlg", "1");
                  forwardKey(request, response, "webshop.jsp.manager.order.update.reg1");
                }
               // EDBTG003-00 elecs-matsushima add end
              }
              // エラーが発生した場合、受注管理明細画面に戻る
            } catch (SIDBAccessException sqle) {
              try {
                connection.rollback();
              } catch (SQLException ee) {}
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              forwardKey(request, response, "webshop.jsp.manager.order.update");
            }
            
          // EDBTG003-00 elecs-matsushima add start
          } else if (SIConfig.SIACTION_COMPOSITIONOPT.equals(actionName)) { // 構成品キープ
            // 受注情報のセット
            UIRegOrder lRegOrder = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
            lRegOrder.initUpdateNewCmdty(request, connection, urlParam);
            session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME, lRegOrder);
            
            Collection groupColl = (Collection) session.getAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_GROUP_LIST);
            if (groupColl == null) groupColl = new ArrayList();
            Collection appendedColl = (Collection) session.getAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_APPENDED_LIST);
            if (appendedColl == null) appendedColl = new ArrayList();
            Collection optionColl = (Collection) session.getAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_OPTION_LIST);
            if (optionColl == null) optionColl = new ArrayList();
            SICmdtyComposition regComposition = (SICmdtyComposition) session.getAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_DATA);
            
            session.removeAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_GROUP_LIST);
            session.removeAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_APPENDED_LIST);
            session.removeAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_OPTION_LIST);
            session.removeAttribute(SIConfig.SISESSION_MAN_COMPOSITIONOPT_DATA);
            
            try {
              
              String compositionFlg = getCmdtyComposition(connection, regComposition.getCmdtyCode(), regComposition.getIndividualCode());
              lRegOrder.setNewCmdtyCompositionFlg(compositionFlg);
              lRegOrder.setNewCmdtyAmount(regComposition.getAmount());
              
              // 構成品
              lRegOrder.clearSetCompositionDetail(); // クリア
              for (Iterator iteGroupColl = groupColl.iterator(); iteGroupColl.hasNext();){
                SIKeepDetail keepDetail = (SIKeepDetail) iteGroupColl.next();
                
                if (keepDetail != null){
                  String[] cmdty = new String[1];
                  String cmdtyAmount = keepDetail.getAmount();
                  cmdty[0] = regComposition.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + keepDetail.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + keepDetail.getIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + cmdtyAmount;
                  lRegOrder.setCompositionDetail(cmdty);
                }
              }
              
              // オプション
              lRegOrder.setCompositionOption(null); // クリア
              Collection optionDetailCol = new ArrayList();
              for (Iterator iteOptionColl = optionColl.iterator(); iteOptionColl.hasNext();){
                SIKeepDetail keepDetail = (SIKeepDetail) iteOptionColl.next();
                
                if (keepDetail != null){
                  String[] cmdty = new String[1];
                  String cmdtyAmount = keepDetail.getAmount();
                  cmdty[0] = regComposition.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + keepDetail.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + keepDetail.getIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + cmdtyAmount;
                  optionDetailCol.add(cmdty[0]);
                }
              }
              lRegOrder.setCompositionOption((String[]) optionDetailCol.toArray(new String[0]));
              
              // 添付品
              lRegOrder.setCompositionAppended(null); // クリア
              Collection appendedDetailColl = new ArrayList();
              for (Iterator iteAppendedColl = appendedColl.iterator(); iteAppendedColl.hasNext();){
                SIKeepDetail keepDetail = (SIKeepDetail) iteAppendedColl.next();
                
                if (keepDetail != null){
                  String[] cmdty = new String[1];
                  String cmdtyAmount = keepDetail.getAmount();
                  cmdtyAmount = SIUtil.div(cmdtyAmount, regComposition.getAmount());
                  cmdty[0] = regComposition.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + keepDetail.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + keepDetail.getIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN
                           + cmdtyAmount;
                  appendedDetailColl.add(cmdty[0]);
                }
              }
              lRegOrder.setCompositionAppended((String[]) appendedDetailColl.toArray(new String[0]));
              
              // 商品の追加
              this.addCmdty(request, connection, lRegOrder);
              UIOrderDeli orderDeli = new UIOrderDeli();
              orderDeli.init(request, urlParam);
              
              //this.refreshCmdtyDetail(request);
              // EDBTG003-00 elecs-matsushima add start
              LinkedHashMap detailMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
              LinkedHashMap detailMapTmp = new LinkedHashMap(detailMap);
              LinkedHashMap detailSetMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME);
              LinkedHashMap detailSetMapTmp = new LinkedHashMap(detailSetMap);
              // EDBTG003-00 elecs-matsushima add end
              SICartDetail.resetDelivery(request, databaseConnection.getConnection(), orderDeli.getAddress());
              // EDBTG003-00 elecs-matsushima add start
              session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMapTmp);
              session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, detailSetMapTmp);
              SICartDetail.resetDeliveryDetailPos(request, databaseConnection.getConnection(), orderDeli.getAddress(), false);
              // EDBTG003-00 elecs-matsushima add end
              this.refreshCmdtyDetail(request);
              
              forwardKey(request, response, "webshop.jsp.manager.order.update.reg1");
              
            } catch (SIFatalException e){
              e.printStackTrace();
              throw new ServletException();
              // エラーが発生した場合、受注管理明細画面に戻る
            } catch (SIDBAccessException sqle) {
              try {
                connection.rollback();
              } catch (SQLException ee) {}
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              forwardKey(request, response, "webshop.jsp.manager.order.update");
            }
          } else if (SIConfig.SIACTION_DELIVERY.equals(actionName)) {
            UIOrderDeli orderDeli = new UIOrderDeli();
            orderDeli.init(request, urlParam);
            UICart cart = new UICart();
            cart.init(request, urlParam);
            session.setAttribute(SIConfig.SISESSION_CART_EDIT_NAME, cart);
            // EDBTG003-00 elecs-matsushima add start
            LinkedHashMap detailMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
            LinkedHashMap detailMapTmp = new LinkedHashMap(detailMap);
            LinkedHashMap detailSetMap=(LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME);
            LinkedHashMap detailSetMapTmp = new LinkedHashMap(detailSetMap);
            // EDBTG003-00 elecs-matsushima add end
            SICartDetail.resetDelivery(request, databaseConnection.getConnection(), orderDeli.getAddress());
            // EDBTG003-00 elecs-matsushima add start
            session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMapTmp);
            session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, detailSetMapTmp);
            SICartDetail.resetDeliveryDetailPos(request, databaseConnection.getConnection(), orderDeli.getAddress(), false);
            // EDBTG003-00 elecs-matsushima add end
            UIOrderCounter orderCounter = new UIOrderCounter();
            orderCounter.init(request, databaseConnection.getConnection(), urlParam);// 7.1.1 ST0236 修正
            session.setAttribute(SIConfig.SISESSION_ORDER_COUNTER_NAME, orderCounter);
            session.setAttribute(SIConfig.SISESSION_MAN_ORDER_DELI, orderDeli);
            forwardKey(request, response, "webshop.jsp.manager.order.update.reg1");
          }
        }
        
        // 配送先選択から呼ばれたとき
      } else if (this.getServletPath(request).equals("/mallmgr/RegUpdateOrderDeliverySrv")) {
        // 検索
        if (SIConfig.SIACTION_LIST.equals(actionName)) {
          UIDeliveryList lDeliveryList = new UIDeliveryList();
          lDeliveryList.init(request, urlParam);
          session.setAttribute(SIConfig.SISESSION_DELIVERY_LIST_NAME, lDeliveryList);
          // 配送ごとに商品の数量を修正
        } else if (SIConfig.SIACTION_MODIFY.equals(actionName)) {
          UIDeliveryList lDeliveryList = new UIDeliveryList();
          lDeliveryList.initAmount(request, urlParam);
          lDeliveryList.validate(request, connection, false);
          session.setAttribute(SIConfig.SISESSION_DELIVERY_LIST_NAME, lDeliveryList);
        }
        forwardKey(request, response, "webshop.jsp.manager.order.update.delivery");
        
        // ギフト包装選択から呼ばれたとき
      } else if (this.getServletPath(request).equals("/mallmgr/RegUpdateOrderWrappingSrv")) {
        // 検索
        if (SIUtil.isNull(actionName) || SIConfig.SIACTION_LIST.equals(actionName)) {
          UIWrapping lWrapping = new UIWrapping();
          lWrapping.init(request, urlParam);
          session.setAttribute(SIConfig.SISESSION_CART_WRAPPING_NAME, lWrapping);
          // ギフトコード選択
        } else if (SIConfig.SIACTION_MODIFY.equals(actionName)) {
          UIWrapping lWrapping = new UIWrapping();
          lWrapping.init(request, urlParam);
          lWrapping.validate(request, connection);
          session.setAttribute(SIConfig.SISESSION_CART_WRAPPING_NAME, lWrapping);
        }
        forwardKey(request, response, "webshop.jsp.manager.order.update.wrapping");
        
        // 受注管理明細から呼ばれたとき
      } else if (this.getServletPath(request).equals("/mallmgr/RegUpdateOrderSrv")) {
        session.setAttribute(SIConfig.SISESSION_MAN_NAVIGATER_LIST_NAME, SIConfig.SINAVI_ORDER_LIST);
        // 初回（受注・入金管理画面から呼ばれた直後）
        if (SIUtil.isNull(actionName)) {
          // DBから受注データの取得
          session.removeAttribute(SIConfig.SISESSION_CART_INFO_NAME);
          session.removeAttribute(SIConfig.SISESSION_MAN_ORDER_ALLOCATION);
          session.removeAttribute(SIConfig.SISESSION_UPDATEORDER_DELALLOCATION_NAME);
          delcol = new ArrayList();
          refreshOrderFirst(request, connection, urlParam, true);
          
          forwardKey(request, response, "webshop.jsp.manager.order.update");
          
          // 数量・配送先・ギフト設定へ遷移する前
        } else if (actionName.equals(SIConfig.SIACTION_DELIVERY)) {
          // 画面の情報を各オブジェクトにセット
          this.updateOrder(request, connection, urlParam);
          
          boolean hasError = false;
          String[] variableCodes = request.getParameterValues("variableCode");
          SICustomErrors errors = new SICustomErrors();
          
          if (variableCodes!=null && variableCodes.length > 0){
            for (int i=0;i<variableCodes.length;i++){
              String lPrice = (String)urlParam.getParam("variablePrice_"+variableCodes[i]);
              String lPurchasePrice = (String)urlParam.getParam("variablePurchase_"+variableCodes[i]);
              if(lPrice!=null && lPurchasePrice!=null){
                SICheckValid.checkValid(errors, "商品価格"+variableCodes[i], lPrice, SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
                SICheckValid.checkValid(errors, "商品原価"+variableCodes[i], lPurchasePrice, SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
              }
            }
          }
          
          if(!errors.isEmpty()) {
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            hasError = true;
          }
          if(hasError){
            forwardKey(request, response, "webshop.jsp.manager.order.update");
          }else{
            forwardKey(request, response, "webshop.jsp.manager.order.update.reg1");
          }
          // 数量・配送先・ギフト設定後、オブジェクトのリフレッシュ
        } else if (actionName.equals(SIConfig.SIACTION_REMODIFY)) {
          
          UIOrderCounter orderCounter = new UIOrderCounter();
          UIOrderDeli orderDeli = new UIOrderDeli();
          orderCounter.init(request, databaseConnection.getConnection(), urlParam);
          // EDBTG003-00 elecs-matsushima add start
          //if (!orderCounter.validate(request, databaseConnection.getConnection(), true)) {}
          if (!orderCounter.validatePos(request, databaseConnection.getConnection(), true, false, "")) {
          // EDBTG003-00 elecs-matsushima add end
            forwardKey(request, response, "webshop.jsp.manager.order.update.reg1");
          } else {
            // 金額再計算
            UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
            lCasher.calcSum(request, connection, urlParam);
            // 商品別一覧情報のリフレッシュ
            refreshCmdtyDetail(request);
            forwardKey(request, response, "webshop.jsp.manager.order.update");
          }
          // 支払方法変更
        } else if (actionName.equals(SIConfig.SIACTION_REFRESH)) {
          // 画面の情報を各オブジェクトにセット
          this.updateOrder(request, connection, urlParam);
          // 支払方法に関わる入力チェック
          UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
          if (!lCasher.validatePayment(request)) {
            lCasher.calcSum(request, connection, urlParam);
          }
          session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
          
          forwardKey(request, response, "webshop.jsp.manager.order.update");
          
          // 金額再計算
        } else if (actionName.equals(SIConfig.SIACTION_REDO)) {
          session.removeAttribute(SIConfig.SISESSION_MAN_ORDER_ALLOCATION);// EDBTG003-00 elecs-matsushima add
          // 画面の情報を各オブジェクトにセット
          this.updateOrder(request, connection, urlParam);
          // 金額（ポイント・値引等）に関わる入力チェック
          UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
          lCasher.validateRedo(request);
          session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
          
          String[] variableCodes = request.getParameterValues("variableCode");
          SICustomErrors errors = (SICustomErrors)request.getAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
          if(errors==null) errors = new SICustomErrors();
          
          if (variableCodes!=null && variableCodes.length > 0){
            for (int i=0;i<variableCodes.length;i++){
              String lPrice = (String)urlParam.getParam("variablePrice_"+variableCodes[i]);
              String lPurchasePrice = (String)urlParam.getParam("variablePurchase_"+variableCodes[i]);
              if(lPrice!=null && lPurchasePrice!=null){
                SICheckValid.checkValid(errors, "商品価格"+variableCodes[i], lPrice, SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
                SICheckValid.checkValid(errors, "商品原価"+variableCodes[i], lPurchasePrice, SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
              }
            }
          }
          if(!errors.isEmpty()) request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
          forwardKey(request, response, "webshop.jsp.manager.order.update");
          
          // 確認画面へ遷移するまえに、データの取得とデータのチェック
        } else if (actionName.equals(SIConfig.SIACTION_CONFIRM)) {
          // 画面の情報を各オブジェクトにセット
          boolean spcCheck = this.updateOrder(request, connection, urlParam);//特別配送先になるor特別配送先でなくなる郵便番号変更は禁止
          if(!spcCheck) {
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("manager.message.error.spcdelivery"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
          }
          String[] variableCodes = request.getParameterValues("variableCode");
          SICustomErrors errors = (SICustomErrors)request.getAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
          if(errors==null) errors = new SICustomErrors();
          
          if (variableCodes!=null && variableCodes.length > 0){
            for (int i=0;i<variableCodes.length;i++){
              String lPrice = (String)urlParam.getParam("variablePrice_"+variableCodes[i]);
              String lPurchasePrice = (String)urlParam.getParam("variablePurchase_"+variableCodes[i]);
              if(lPrice!=null && lPurchasePrice!=null){
                SICheckValid.checkValid(errors, "商品価格"+variableCodes[i], lPrice, SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
                SICheckValid.checkValid(errors, "商品原価"+variableCodes[i], lPurchasePrice, SICheckDataConf.SICHECK_DATA_DIGIT_TYPE);
              }
            }
          }
          if(!errors.isEmpty()) {
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            spcCheck = false;
          }
          
          UIRegOrder lRegOrder = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
          UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
          
          // 確認画面へ
          if (spcCheck && lRegOrder.validate(request, connection, urlParam, true) && lCasher.validate(request, connection, true, lRegOrder.getSumByPoint(), false)) {
            lCasher.setChecked(true);
            
            LinkedHashMap tempMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
            Set keyMap = tempMap.keySet();
            LinkedHashMap detailMap = new LinkedHashMap();
            Iterator keyIte = keyMap.iterator();
            Iterator tempIte = tempMap.values().iterator();
            SIOrderDetail lOrderDetail = new SIOrderDetail();
            while (keyIte.hasNext()) {
              String key = (String) keyIte.next();
              lOrderDetail = (SIOrderDetail) tempMap.get(key);
              // EDBTG003-00 mng-paku mod start
//              String deliveryDateStr = "deliveryDate_" + lOrderDetail.getCmdtyCode() + "_" + lOrderDetail.getIndividualCode();
              String deliveryDateStr = "deliveryDate_" + lOrderDetail.getCmdtyCode() + "_" + lOrderDetail.getIndividualCode() + "_" + lOrderDetail.getSetCode() + "_" + lOrderDetail.getSetDetailCode();
              // EDBTG003-00 mng-paku mod end
              String deliveryDate = request.getParameter(deliveryDateStr);
              lOrderDetail.setDeliveryDate(deliveryDate);
              // EDBTG003-00 elecs-matsushima mod start
//              String deliveryTimeStr = "deliveryTime_" + lOrderDetail.getCmdtyCode() + "_" + lOrderDetail.getIndividualCode();
              String deliveryTimeStr = "deliveryTime_" + lOrderDetail.getCmdtyCode() + "_" + lOrderDetail.getIndividualCode() + "_" + lOrderDetail.getSetCode() + "_" + lOrderDetail.getSetDetailCode();
              // EDBTG003-00 elecs-matsushima mod end
              String deliveryTime = request.getParameter(deliveryTimeStr);
              lOrderDetail.setDeliveryTime(deliveryTime);
              detailMap.put(key, lOrderDetail);
            }
            session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMap);
            
            forwardKey(request, response, "webshop.jsp.manager.order.update.confirm");
            // 編集画面のまま
          } else {
            lCasher.setChecked(false);
            
            forwardKey(request, response, "webshop.jsp.manager.order.update");
          }
          
          // 確認画面から修正画面に戻る
        } else if (actionName.equals(SIConfig.SIACTION_BACK)) {
          forwardKey(request, response, "webshop.jsp.manager.order.update");
          
          // 受注キャンセル
        } else if (actionName.equals(SIConfig.SIACTION_CANCEL)) {
          // Frontのキャンセルと同じ処理
          UIRegOrder lRegOrder = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
          try {
            if (lRegOrder.validateCancel(request, connection)) { // リロードされたときのチェック
              boolean sendflg = true;
              boolean mailflg = true;
              if (this.getParameter(urlParam, "sendflg").equals("false")) mailflg = false;
              String fromMail = SIDBUtil.getFirstData(databaseConnection.getConnection(), "SELECT email FROM chargetbl WHERE chargecode="
                  + SIDBUtil.SQL2Str(manLogin.getUserCode()));
              sendflg = (new SIOrderHistorySrv()).orderCancel(connection, lRegOrder.getOrderCode(), mailflg, fromMail);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
              session.removeAttribute(SIConfig.SISESSION_MAN_ORDER_COMMON_NAME);// 成功すれば
              refreshOrder(request, databaseConnection.getConnection(), urlParam);
              if (sendflg && mailflg) {
                request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.cancel.mail"));
              } else if (!mailflg) {
                request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.cancel.mail3"));
              } else {
                request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.cancel.mail2"));
              }
              forwardKey(request, response, "webshop.jsp.manager.order.edit");
            } else {
              forwardKey(request, response, "webshop.jsp.manager.order.update");
            }
            // エラーが発生した場合、受注管理明細画面に戻る
          } catch (SIDBAccessException sqle) {
            try {
              connection.rollback();
            } catch (SQLException ee) {}
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            forwardKey(request, response, "webshop.jsp.manager.order.update");
          } catch (SIErrorException e) {
            e.printStackTrace();
            try {
              connection.rollback();
            } catch (SQLException ee) {
              ee.printStackTrace();
            }
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("manager.message.freeword","カード決済のキャンセルリクエストに失敗しました。"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            forwardKey(request, response, "webshop.jsp.manager.order.update");
          }
          
          // データベースへのレコードの登録
        } else if (actionName.equals(SIConfig.SIACTION_REGIST)) {
          UIRegOrder lRegOrder = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
          UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
          
          // 入力チェック1
          if (!lCasher.getChecked()) {
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("input.casher.confirm"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            forwardKey(request, response, "webshop.jsp.manager.order.update"); // 編集画面へ
            // 入力チェック2
          } else if (!lRegOrder.validate(request, connection, urlParam, true) || !lCasher.validate(request, connection, true, lRegOrder.getSumByPoint(), false)) {
            forwardKey(request, response, "webshop.jsp.manager.order.update"); // 編集画面へ
            // 入力チェックをクリアしたらDBに更新する
          } else {
            // 先行でポイントのInsert（複数人の同時アクセス（受注）対応）
            String lPointManCode = "";
            try {
              lPointManCode = SICartSrv.insertPointTableData(request, connection);
              try {
                connection.commit();
              } catch (SQLException sqle) {}
            } catch (SIDuplicateKeyException e1) {
              e1.printStackTrace();
            } catch (SIDBAccessException e1) {
              e1.printStackTrace();
            }
            
            // 更新（UPDATE）処理
            try {
              Iterator delIte = delcol.iterator();
              while (delIte.hasNext()) {// 削除商品の引当情報を削除する
                SIOrderDetail deldetail = (SIOrderDetail) delIte.next();
                // EDBTG003-00 elecs-matsushima mod start
//                SIBGUtil.deleteOrderAllocation2(connection, deldetail.getShopCode(), deldetail.getOrderCode(), deldetail.getCmdtyCode(), deldetail.getIndividualCode());
                SIBGUtil.deleteOrderAllocation2(connection, deldetail.getShopCode(), deldetail.getOrderCode(), deldetail.getCmdtyCode(), deldetail.getIndividualCode(), deldetail.getOrderDetailCode());
                // EDBTG003-00 elecs-matsushima mod end
              }
              SICartSrv.RLockForOrderStock(request, connection,lRegOrder.getOrderCode());// レコードロック
              this.updateOrderTable(request, connection, lPointManCode);
              
              // 発注データが存在しないときは作る
              if (!SIDBUtil.hasData(connection, "SELECT * FROM hacchutbl WHERE ordercode="+SIDBUtil.SQL2Str(lRegOrder.getOrderCode()))) {
                SIHacchuSrv.createHacchuData(connection, lRegOrder.getOrderCode());
              }
              
              // 納品先情報を同期する
              SIHacchuSrv.updateHacchuDeliveryData(connection, lRegOrder.getOrderCode());
              
              // EDBTG003-00 elecs-matsushima del start
//              try {
//                connection.commit();
//              } catch (SQLException sqle) {}
              // EDBTG003-00 elecs-matsushima del end
              UIRegOrder regOrderID = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
              if (SIUtil.isNotNull(regOrderID.getOrderCode())) {
                SIBGUtil.checkAndDeleteOrderallocation(connection, regOrderID.getOrderCode());// 超過補正フィルタ
                SIBGUtil.checkAndInsertOrderallocation(connection, regOrderID.getOrderCode());// 不足補正フィルタ
              }
              try {
                connection.commit();
              } catch (SQLException sqle) {}
              SICartManager.clear(request);
              
              this.reserveCheck(connection, regOrderID.getOrderCode());
              try {
                connection.commit();
              } catch (SQLException sqle) {}
              forwardKey(request, response, "webshop.jsp.manager.order.update.result");
            } catch (SIDuplicateKeyException sqle) {
              try {
                connection.rollback();
              } catch (SQLException ee) {}
              
              // InsertしたポイントのDelete
              SICartSrv.deletePointTableData(request, connection, lPointManCode);
              try {
                connection.commit();
              } catch (SQLException ee) {}
              
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.insert.duplicate"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              forwardKey(request, response, "webshop.jsp.manager.order.update");
            } catch (SIDBAccessException sqle) {
              try {
                connection.rollback();
              } catch (SQLException ee) {}
              
              // InsertしたポイントのDelete
              SICartSrv.deletePointTableData(request, connection, lPointManCode);
              try {
                connection.commit();
              } catch (SQLException ee) {}
              
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              forwardKey(request, response, "webshop.jsp.manager.order.update");
            } catch (SIMismatchException e) {
              e.printStackTrace();
              try {
                connection.rollback();
              } catch (SQLException ee) {
                ee.printStackTrace();
              }
              
              // InsertしたポイントのDelete
              SICartSrv.deletePointTableData(request, connection, lPointManCode);
              try {
                connection.commit();
              } catch (SQLException ee) {}
              
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("manager.app.price.mismatch"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              forwardKey(request, response, "webshop.jsp.manager.order.update");
            } catch (SIErrorException e) {
              e.printStackTrace();
              try {
                connection.rollback();
              } catch (SQLException ee) {
                ee.printStackTrace();
              }
              
              // InsertしたポイントのDelete
              SICartSrv.deletePointTableData(request, connection, lPointManCode);
              try {
                connection.commit();
              } catch (SQLException ee) {}
              
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("manager.app.card.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              forwardKey(request, response, "webshop.jsp.manager.order.update");
            } catch (SIFatalException e) {
              e.printStackTrace();
              try {
                connection.rollback();
              } catch (SQLException ee) {
                ee.printStackTrace();
              }
              
              // InsertしたポイントのDelete
              SICartSrv.deletePointTableData(request, connection, lPointManCode);
              try {
                connection.commit();
              } catch (SQLException ee) {}
              
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("manager.app.exceed.amount.system.error", e.getExceptionMessage()));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              forwardKey(request, response, "webshop.jsp.manager.order.update");
            } catch (SIDebtPointException e) {
              e.printStackTrace();
              try {
                connection.rollback();
              } catch (SQLException ee) {
                ee.printStackTrace();
              }
              
              // InsertしたポイントのDelete
              SICartSrv.deletePointTableData(request, connection, lPointManCode);
              try {
                connection.commit();
              } catch (SQLException sqle) {}
              
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("input.data.less", "ポイント使用額", "ポイント残高"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              forwardKey(request, response, "webshop.jsp.manager.order.update");
            } catch (SIDisagreementException e) {
              e.printStackTrace();
              try {
                connection.rollback();
              } catch (SQLException ee) {
                ee.printStackTrace();
              }
              
              // InsertしたポイントのDelete
              SICartSrv.deletePointTableData(request, connection, lPointManCode);
              try {
                connection.commit();
              } catch (SQLException ee) {}
              forwardKey(request, response, "webshop.jsp.manager.order.update");
            }
          }
        } else if ("purchaseModify".equalsIgnoreCase(actionName)) {// 購買履歴メモ更新モード
          UIRegOrder lRegOrder = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
          lRegOrder.getMemoBean().reset(connection, lRegOrder.getCustCode(), (String)urlParam.getParam("commentNumber"));
          session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME,lRegOrder);
          forwardKey(request, response, "webshop.jsp.manager.order.update");
        } else if ("purchaseReset".equalsIgnoreCase(actionName)) {// 購買履歴メモリセット
          UIRegOrder lRegOrder = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
          lRegOrder.resetMemo();
          session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME,lRegOrder);
          forwardKey(request, response, "webshop.jsp.manager.order.update");
        } else if ("purchaseRegist".equalsIgnoreCase(actionName)) {// 購買履歴メモ登録
          UIRegOrder lRegOrder = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
          lRegOrder.initMemo(urlParam);
          lRegOrder.createMemo(connection, manLogin.getUserName());
          lRegOrder.resetMemo();
          session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME,lRegOrder);
          request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.insert"));
          forwardKey(request, response, "webshop.jsp.manager.order.update");
        } else if ("purchaseDelete".equalsIgnoreCase(actionName)) {// 購買履歴メモ削除
          UIRegOrder lRegOrder = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
          lRegOrder.initMemo(urlParam);
          lRegOrder.deleteMemo(connection);
          lRegOrder.resetMemo();
          session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME,lRegOrder);
          request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.delete"));
          forwardKey(request, response, "webshop.jsp.manager.order.update");
        }
      }
    } catch (SQLException e) {
      e.printStackTrace();
      throw new ServletException();
    } catch (NamingException e) {
      e.printStackTrace();
      throw new ServletException();
    } finally {
      databaseConnection.close();
    }
  }
  
  /**
   * <b>refreshOrder</b> DBから受注情報を読み出します
   * 
   * @param lRequest
   * @param lConnection
   * @param lUrlParam
   */
  private void refreshOrder(HttpServletRequest lRequest, Connection lConnection, SIURLParameter lUrlParam) {
    refreshOrder(lRequest, lConnection, lUrlParam, false);
  }
  
  private void refreshOrder(HttpServletRequest lRequest, Connection lConnection, SIURLParameter lUrlParam, boolean firstflg) {
    
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    HttpSession session = lRequest.getSession(true);// セッションの取得
    
    // 受注情報オブジェクト
    UIRegOrder refreshRegOrder = new UIRegOrder();
    refreshRegOrder.init(lRequest, lUrlParam);
    
    if (true) {
      // 受注情報のセット
      refreshRegOrder.reset(lRequest, lConnection);
      session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME, refreshRegOrder);
      
      // 顧客情報オブジェクト
      UIRegUpdateOrderUserLogin newOrderUserLogin = new UIRegUpdateOrderUserLogin();
      newOrderUserLogin.init(lRequest, lConnection, lUrlParam, refreshRegOrder.getCustCode());
      
      // カートオブジェクト
      UIMain mainID = new UIMain();
      
      Statement lStatement = null;
      ResultSet lResultSet = null;
      
      // EDBTG003-00 elecs-matsushima add start
      Statement lStatement2 = null;
      ResultSet lResultSet2 = null;
      // EDBTG003-00 elecs-matsushima add end
      
      // 該当受注の検索
      StringBuffer lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT * ");
      lSqlBuf.append(" FROM ").append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME).append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa ");
      lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode()));
      if (lLogin.isShop()) {
        lSqlBuf.append(" AND aa.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
      }
      // EDBTG003-00 elecs-matsushima mod start
      //lSqlBuf.append(" ORDER BY aa.SHOPCODE, aa.CMDTYCODE");
      lSqlBuf.append(" ORDER BY aa.SHOPCODE, aa.SETCODE, aa.SETDETAILCODE, aa.CMDTYCODE, aa.INDIVIDUALCODE");
      // EDBTG003-00 elecs-matsushima mod end
      
      try {
        log.debug("readData:lSql=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        // EDBTG003-00 elecs-matsushima del start
        /*
        while (lResultSet.next()) {
          mainID = new UIMain();
          mainID.setCartShopCodeTxt(lResultSet.getString("SHOPCODE"));
          mainID.setCartCmdtyCodeTxt(lResultSet.getString("CMDTYCODE"));
          mainID.setCartIndividualCodeTxt(lResultSet.getString("individualCode"));
          mainID.setCartStndrdCodeTxt1(lResultSet.getString("STNDRDCODE1"));// 規格1
          mainID.setCartStndrdCodeTxt2(lResultSet.getString("STNDRDCODE2"));// 規格2
          mainID.setCartElementCodeTxt1(lResultSet.getString("ELEMENTCODE1"));// カートエレメント1
          mainID.setCartElementCodeTxt2(lResultSet.getString("ELEMENTCODE2"));// カートエレメント2
          mainID.setCartAmountTxt(lResultSet.getString("AMOUNT"));
          
          // カートに追加
          mainID.addCart(lRequest, lConnection, false);
        }
        */
        // EDBTG003-00 elecs-matsushima del end
        // EDBTG003-00 elecs-matsushima add start
        // データを設定する。
        LinkedHashMap orderDetailMap = new LinkedHashMap();
        
        while (lResultSet.next()) {
          
          if (lResultSet.getString("SETDETAILFLG").equals(SIConfig.SET_DETAIL_FLG_NORMAL)) { // 通常品
            String keyMap = "";
            keyMap += lResultSet.getString("SHOPCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("CMDTYCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("individualCode") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("STNDRDCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("ELEMENTCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("STNDRDCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("ELEMENTCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("SETCODE") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("SETCODE");
            
            SICartCmdty cartCmdty = new SICartCmdty();
            cartCmdty.setShopCode(lResultSet.getString("SHOPCODE"));
            cartCmdty.setCmdtyCode(lResultSet.getString("CMDTYCODE"));
            cartCmdty.setIndividualCode(lResultSet.getString("individualCode"));
            cartCmdty.setStndrdCode1(lResultSet.getString("STNDRDCODE1"));// 規格1
            cartCmdty.setStndrdCode2(lResultSet.getString("STNDRDCODE2"));// 規格2
            cartCmdty.setElementCode1(lResultSet.getString("ELEMENTCODE1"));// カートエレメント1
            cartCmdty.setElementCode2(lResultSet.getString("ELEMENTCODE2"));// カートエレメント2
            cartCmdty.setAmount(lResultSet.getString("AMOUNT"));
            cartCmdty.setSetDetailFlg(lResultSet.getString("SETDETAILFLG"));
            cartCmdty.setSetCode(lResultSet.getString("SETCODE"));
            cartCmdty.setSetCmdtyCode(lResultSet.getString("SETCMDTYCODE"));
            cartCmdty.setSetIndividualCode(lResultSet.getString("SETINDIVIDUALCODE"));
            cartCmdty.setSetDetailCode(lResultSet.getString("SETDETAILCODE"));
            if (SIUtil.isNull(cartCmdty.getSetDetailCode())) cartCmdty.setSetDetailCode("");
            cartCmdty.setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_NORMAL);
            cartCmdty.setDetailCode(lResultSet.getString("DETAILCODE"));
            cartCmdty.setOldSetCode(lResultSet.getString("SETCODE"));
            orderDetailMap.put(keyMap, cartCmdty);
          } else {
            String keyMap = "";
            keyMap += lResultSet.getString("SHOPCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("setcmdtycode") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("setindividualcode") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("STNDRDCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("ELEMENTCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("STNDRDCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("ELEMENTCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("SETCODE") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("SETCODE");
            
            SICartCmdty cartCmdty = (SICartCmdty) orderDetailMap.get(keyMap);
            
            if (cartCmdty == null) {
              cartCmdty = new SICartCmdty();
              String shopCodeTmp = lResultSet.getString("shopcode");
              
              StringBuffer sql = new StringBuffer();
              sql.append("SELECT aa.*, bb.* FROM ordersetcmdtytbl aa, cmdtyunittbl bb ");
              sql.append(" WHERE aa.setcmdtycode = bb.cmdtycode ");
              sql.append(" AND aa.setindividualcode=bb.individualcode ");
              sql.append(" AND bb.SHOPCODE=").append(SIDBUtil.SQL2Str(shopCodeTmp));
              sql.append(" AND aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode()));
              sql.append(" AND aa.orderbranchcode=").append(SIDBUtil.SQL2Str(lResultSet.getString("orderbranchcode")));
              sql.append(" AND aa.setcode=").append(SIDBUtil.SQL2Str(lResultSet.getString("setcode")));
              sql.append(" AND aa.setcmdtycode=").append(SIDBUtil.SQL2Str(lResultSet.getString("setcmdtycode")));
              sql.append(" AND aa.setindividualcode=").append(SIDBUtil.SQL2Str(lResultSet.getString("setindividualcode")));
              
              try {
                  lStatement2 = lConnection.createStatement();
                  lResultSet2 = lStatement2.executeQuery(sql.toString());
                  
                  if (lResultSet2.next()){
                    // 親情報を取得する。
                    cartCmdty.setShopCode(shopCodeTmp);
                    cartCmdty.setCmdtyCode(lResultSet2.getString("CMDTYCODE"));
                    cartCmdty.setIndividualCode(lResultSet2.getString("individualCode"));
                    cartCmdty.setAmount(lResultSet2.getString("setamount"));
                    cartCmdty.setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_VARIATION_SET); // 構成品は変動として設定
                    cartCmdty.setSetDiscountPrice(lResultSet2.getString("setdiscount"));
                    cartCmdty.setOldSetCode(lResultSet.getString("SETCODE"));
                  }
                } catch (SQLException sqle) {
                  throw sqle;
                } finally {
                   SIDBUtil.close(lStatement2, lResultSet2);
                }
            }
            String compKey = cartCmdty.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + cartCmdty.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + cartCmdty.getIndividualCode();
            Collection composition = new ArrayList();
            if (cartCmdty.getCartsCmdtyCompositionDetailMap() == null) {
              cartCmdty.setCartsCmdtyCompositionDetailMap(new LinkedHashMap());
            } else {
              composition = (Collection) cartCmdty.getCartsCmdtyCompositionDetailMap().get(compKey);
              if (composition == null) composition = new ArrayList();
            }
            
            // 子情報を設定
            String getSetDetailFlg = lResultSet.getString("SETDETAILFLG");
            String cmdtySetAmount = SIUtil.div(lResultSet.getString("AMOUNT"), cartCmdty.getAmount());
            String setCmdtyKeyName = lResultSet.getString("shopcode") + SIConfig.SIWEBSHOPPING_TOKEN
                                     + lResultSet.getString("CMDTYCODE") + SIConfig.SIWEBSHOPPING_TOKEN
                                     + lResultSet.getString("individualCode") + SIConfig.SIWEBSHOPPING_TOKEN
                                     + cmdtySetAmount + SIConfig.SIWEBSHOPPING_TOKEN
                                     + getSetDetailFlg + SIConfig.SIWEBSHOPPING_TOKEN
                                     + lResultSet.getString("DETAILCODE");
            composition.add(setCmdtyKeyName);
            cartCmdty.getCartsCmdtyCompositionDetailMap().put(compKey, composition);
            orderDetailMap.put(keyMap, cartCmdty);
          }
        }
        // カート投入
        addCartOrderDetail(lRequest, lConnection, orderDetailMap, mainID);
        // EDBTG003-00 elecs-matsushima add end
      } catch (SQLException sqle) {
        sqle.printStackTrace();
      // EDBTG003-00 elecs-matsushima add start
      } catch (SIFatalException e) {
        e.printStackTrace();
      // EDBTG003-00 elecs-matsushima add end
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      
      // ギフトフラグ取得
      String lGiftFlg = "0";
      
      if (SIConfig.SIRUNNING_MODE_CURRENT == SIConfig.SIRUNNING_MODE_INDIVIDUAL && lLogin.isShop()) {
        lSqlBuf = new StringBuffer("SELECT GIFTFLG FROM MALLSHOPVW WHERE MALLSHOPCODE=");
        lSqlBuf.append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
        try {
          log.debug("readData:lSql=" + lSqlBuf.toString());
          
          lStatement = lConnection.createStatement();
          lResultSet = lStatement.executeQuery(lSqlBuf.toString());
          
          if (lResultSet.next()) {
            lGiftFlg = lResultSet.getString("GIFTFLG");
          }
        } catch (SQLException sqle) {
          sqle.printStackTrace();
        } finally {
          SIDBUtil.close(lStatement, lResultSet);
        }
        // モール管理者がログインしている場合
      } else if (lLogin.isMall()) {
        lGiftFlg = SIConfig.SIMALL.getGiftFlg();
      }
      
      // 受注明細取得
      LinkedHashMap detailMap = new LinkedHashMap();
      SIOrderDetail lOrderDetail = new SIOrderDetail();
      
      // EDBTG003-00 elecs-matsushima add start
      Map setCmdtyKeyMap = new HashMap(); // セット情報キー
      // EDBTG003-00 elecs-matsushima a
      
      lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT aa.* ");
      lSqlBuf.append(",bb.DELIVERYTYPENAME, bb.DELIVERYTYPECODE, bb.ADDRESSCODE ");
      lSqlBuf.append(",dd.purchaseprice, dd.processingexpence ");
      // lSqlBuf.append(",cc.WRAPPINGFLG ");
      lSqlBuf.append(" FROM ORDERDETAILVW").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa ");
      lSqlBuf.append(" INNER JOIN ORDERDELIVERYVW").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("bb ");
      lSqlBuf.append("   ON aa.ORDERCODE = bb.ORDERCODE AND aa.DELIVERYCODE = bb.DELIVERYCODE ");
      // lSqlBuf.append(" INNER JOIN CMDTYMVW").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("cc ");
      // lSqlBuf.append(" ON aa.SHOPCODE = cc.SHOPCODE AND aa.CMDTYCODE = cc.CMDTYCODE ");
      lSqlBuf.append(" INNER JOIN (SELECT x.ordercode,x.deliverycode,x.detailcode,x.purchaseprice,x.processingexpence FROM orderdetailtbl x,ordertbl y");
      lSqlBuf.append(" WHERE x.ordercode=y.ordercode and x.orderbranchcode=y.orderbranchcode and y.enabledflg='1')").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("dd ");
      lSqlBuf.append(" ON aa.ORDERCODE = dd.ORDERCODE AND aa.DELIVERYCODE = dd.DELIVERYCODE AND aa.DETAILCODE = dd.DETAILCODE ");
      lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode()));
      if (lLogin.isShop()) {
        lSqlBuf.append("   AND aa.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
      }
      // EDBTG003-00 elecs-matsushima add start
//      lSqlBuf.append(" ORDER BY aa.SHOPCODE, bb.DELIVERYTYPECODE, bb.ADDRESSCODE, aa.CMDTYCODE");
      lSqlBuf.append(" ORDER BY aa.SHOPCODE, aa.SETCODE, aa.SETDETAILCODE, bb.DELIVERYTYPECODE, bb.ADDRESSCODE, aa.CMDTYCODE, aa.INDIVIDUALCODE");
      // EDBTG003-00 elecs-matsushima add end
      
      try {
        log.debug("readData:lSql=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        while (lResultSet.next()) {
          lOrderDetail = new SIOrderDetail();
          lOrderDetail.setEncode(SIConfig.SIENCODE_NONE);
          
          String lDeliveryCode = "";
          lDeliveryCode += lResultSet.getString("ADDRESSCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDeliveryCode += lResultSet.getString("DELIVERYTYPENAME") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDeliveryCode += lResultSet.getString("SHOPCODE");
          
          String lDatailCode = "";
          lDatailCode += lResultSet.getString("SHOPCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("CMDTYCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("individualcode") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("STNDRDCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("ELEMENTCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("STNDRDCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("ELEMENTCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("ADDRESSCODE");
          //EDBTG003-00 add start
          lDatailCode += lResultSet.getString("SETCODE") == null ? SIConfig.SIWEBSHOPPING_TOKEN + "0" : SIConfig.SIWEBSHOPPING_TOKEN + lResultSet.getString("SETCODE");
          lDatailCode += lResultSet.getString("setdetailcode") == null ? SIConfig.SIWEBSHOPPING_TOKEN : SIConfig.SIWEBSHOPPING_TOKEN + lResultSet.getString("setdetailcode");
          //EDBTG003-00 add end
          
          lOrderDetail.setDeliveryCode(lDeliveryCode); // 配送先コード
          lOrderDetail.setDetailCode(lDatailCode); // 受注詳細コード
          lOrderDetail.setShopCode(lResultSet.getString("SHOPCODE")); // ショップコード
          lOrderDetail.setCmdtyCode(lResultSet.getString("CMDTYCODE")); // 商品コード
          lOrderDetail.setIndividualCode(lResultSet.getString("individualcode"));// 在庫コード
          lOrderDetail.setShopName(lResultSet.getString("SHOPNAME")); // ショップ名
          lOrderDetail.setCmdtyName(lResultSet.getString("CMDTYNAME")); // 商品名
          lOrderDetail.setStndrdCode1(lResultSet.getString("STNDRDCODE1")); // 規格1
          lOrderDetail.setStndrdName1(lResultSet.getString("STNDRDNAME1")); // 規格1名
          lOrderDetail.setElementCode1(lResultSet.getString("ELEMENTCODE1"));// エレメント1
          lOrderDetail.setElementName1(lResultSet.getString("ELEMENTNAME1"));// エレメント1名
          lOrderDetail.setStndrdCode2(lResultSet.getString("STNDRDCODE2")); // 規格2
          lOrderDetail.setStndrdName2(lResultSet.getString("STNDRDNAME2")); // 規格2名
          lOrderDetail.setElementCode2(lResultSet.getString("ELEMENTCODE2"));// エレメント2
          lOrderDetail.setElementName2(lResultSet.getString("ELEMENTNAME2"));// エレメント2名
          lOrderDetail.setAmount(lResultSet.getString("AMOUNT")); // 数量
          lOrderDetail.setOrgPrice(lResultSet.getString("ORGPRICE")); // 本体値段
          lOrderDetail.setPrice(lResultSet.getString("PRICE")); // 値引き後の購入値段
          lOrderDetail.setTaxFlg(lResultSet.getString("TAXFLG")); // 税フラグ
          lOrderDetail.setTaxRate(lResultSet.getString("TAXRATE")); // 税率
          lOrderDetail.setCmdtySize(lResultSet.getString("CMDTYSIZE")); // 商品サイズ
          // lOrderDetail.setWrappingFlg(lResultSet.getString("WRAPPINGFLG")); //ラッピングフラグ
          lOrderDetail.setWrappingCode(lResultSet.getString("WRAPPINGCODE"));// ラッピングコード
          lOrderDetail.setWrappingName(lResultSet.getString("WRAPPINGNAME"));// ラッピング名
          lOrderDetail.setWrappingPrice(lResultSet.getString("WRAPPINGPRICE"));// ラッピング価格
          lOrderDetail.setWrappingTaxFlg(lResultSet.getString("WRAPPINGTAXFLG"));// ラッピング税フラグ
          lOrderDetail.setShopGiftFlg(lGiftFlg); // ショップギフトフラグ
          lOrderDetail.setDeliveryTypeCode(lResultSet.getString("DELIVERYTYPECODE"));// 配送種別コード
          lOrderDetail.setDeliveryTypeName(lResultSet.getString("DELIVERYTYPENAME"));// 配送種別名称
          lOrderDetail.setPriceIncTax(lResultSet.getString("PRICEINCTAX")); // 消費税込みの金額
          lOrderDetail.setBranchCode(lResultSet.getString("branchcode"));
          lOrderDetail.setChargeCode(lResultSet.getString("chargeCode"));
          lOrderDetail.setDeliveryFee(lResultSet.getString("deliveryfee"));
          lOrderDetail.setDeliveryDate(lResultSet.getString("deliveryDate"));
          lOrderDetail.setDeliveryTime(lResultSet.getString("deliveryTime"));
          lOrderDetail.setPurchasePrice(lResultSet.getString("purchaseprice"));// 仕入価格
          lOrderDetail.setProcessingExpance(lResultSet.getString("processingexpence"));// 加工費
          lOrderDetail.setConsignGoodsFee(lResultSet.getString("consignGoodsFee"));// 委託手数料
          // EDBTG003-00 elecs-matsushima add start
          lOrderDetail.setSetDetailFlg(lResultSet.getString("setdetailflg"));
          lOrderDetail.setSetCode(lResultSet.getString("setcode"));
          if (SIUtil.isNull(lOrderDetail.getSetCode())) lOrderDetail.setSetCode("0");
          lOrderDetail.setSetCmdtyCode(lResultSet.getString("setcmdtycode"));
          lOrderDetail.setSetIndividualCode(lResultSet.getString("setindividualcode"));
          lOrderDetail.setSetDetailCode(lResultSet.getString("setdetailcode"));
          if (SIUtil.isNull(lOrderDetail.getSetDetailCode())) lOrderDetail.setSetDetailCode("");
          lOrderDetail.setOrderDetailCode(lResultSet.getString("detailcode"));
          // EDBTG003-00 elecs-matsushima add start
          
          detailMap.put(lDatailCode, lOrderDetail);
          // EDBTG003-00 elecs-matsushima add start
          // セット情報を取得
          if (!lResultSet.getString("setdetailflg").equals(SIConfig.SET_DETAIL_FLG_NORMAL)) {
            SIOrderDetail orderSetDetail = new SIOrderDetail();
            orderSetDetail.setOrderCode(lResultSet.getString("ORDERCODE")); // 受注番号
            orderSetDetail.setOrderBranchCode(lResultSet.getString("ORDERBRANCHCODE")); // 受注番号枝番
            orderSetDetail.setShopCode(lResultSet.getString("SHOPCODE")); // ショップコード
            orderSetDetail.setSetDetailFlg(lResultSet.getString("setdetailflg"));// 商品構成フラグ
            orderSetDetail.setSetCode(lResultSet.getString("setcode"));// セット番号
            orderSetDetail.setSetCmdtyCode(lResultSet.getString("setcmdtycode"));// セット商品コード
            orderSetDetail.setSetIndividualCode(lResultSet.getString("setindividualcode"));// セット在庫コード
            
            String mapKey = lResultSet.getString("ORDERCODE") + "~"
                          + lResultSet.getString("ORDERBRANCHCODE") + "~"
                          + lResultSet.getString("SHOPCODE") + "~"
                          + lResultSet.getString("SETCODE") + "~"
                          + lResultSet.getString("SETCMDTYCODE") + "~"
                          + lResultSet.getString("SETINDIVIDUALCODE");
            setCmdtyKeyMap.put(mapKey, orderSetDetail);
          }
          // EDBTG003-00 elecs-matsushima add end
        }
      } catch (SQLException sqle) {
        sqle.printStackTrace();
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMap);
      
      // 配送先情報取得
      LinkedHashMap deliveryMap = new LinkedHashMap();
      SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
      
      lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT aa.*, bb.SHOPCODE, bb.SHOPNAME ");
      lSqlBuf.append(" FROM ").append(SIConfig.SIVIEW_ORDER_DELIVERY_LATEST_NAME).append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa ");
      lSqlBuf.append(" INNER JOIN ").append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME).append(SIDBMultiConf.SIALIAS_CURR_NAME).append("bb ");
      lSqlBuf.append("   ON aa.ORDERCODE = bb.ORDERCODE AND aa.DELIVERYCODE = bb.DELIVERYCODE AND bb.DETAILCODE = 1 ");
      if (lLogin.isShop()) {
        lSqlBuf.append("  AND bb.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
      }
      lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode()));
      lSqlBuf.append(" ORDER BY aa.DELIVERYCODE");
      
      try {
        log.debug("readData:lSql=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        while (lResultSet.next()) {
          lOrderDelivery = new SIOrderDelivery();
          lOrderDelivery.setEncode(SIConfig.SIENCODE_NONE);
          
          String lDeliveryCode = "";
          lDeliveryCode += lResultSet.getString("ADDRESSCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDeliveryCode += lResultSet.getString("DELIVERYTYPENAME") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDeliveryCode += lResultSet.getString("SHOPCODE");
          
          lOrderDelivery.setDeliveryCode(lDeliveryCode);
          lOrderDelivery.setDeliveryName(lResultSet.getString("DELIVERYNAME")); // 配送先呼称
          lOrderDelivery.setDeliveryAddressee(lResultSet.getString("DELIVERYADDRESSEE"));// 配送先宛名
          lOrderDelivery.setEmail(lResultSet.getString("EMAIL")); // メール
          lOrderDelivery.setPostCode1(lResultSet.getString("POSTCODE1")); // 郵便番号1
          lOrderDelivery.setPostCode2(lResultSet.getString("POSTCODE2")); // 郵便番号2
          lOrderDelivery.setAddress1(lResultSet.getString("ADDRESS1")); // 配送先住所1
          lOrderDelivery.setAddress2(lResultSet.getString("ADDRESS2")); // 配送先住所2
          lOrderDelivery.setAddress3(lResultSet.getString("ADDRESS3")); // 配送先住所3
          lOrderDelivery.setCompanyName(lResultSet.getString("COMPANYNAME")); // 会社名
          lOrderDelivery.setTel(lResultSet.getString("TEL")); // 連絡先電話番号
          lOrderDelivery.setFax(lResultSet.getString("FAX")); // 連絡先FAX番号
          lOrderDelivery.setCustCompanyFlg(lResultSet.getString("CUSTCOMPANYFLG")); // 個人法人フラグ
          lOrderDelivery.setAddressCode(lResultSet.getString("ADDRESSCODE")); // アドレス帳コード
          lOrderDelivery.setDeliveryFee(lResultSet.getString("DELIVERYFEE"));
          lOrderDelivery.setDeliveryTaxFlg(lResultSet.getString("DELIVERYTAXFLG"));
          lOrderDelivery.setTaxRate(lResultSet.getString("TAXRATE"));
          lOrderDelivery.setShopCode(lResultSet.getString("SHOPCODE"));
          lOrderDelivery.setShopName(lResultSet.getString("SHOPNAME"));
          lOrderDelivery.setDeliveryTypeCode(lResultSet.getString("DELIVERYTYPECODE"));
          lOrderDelivery.setDeliveryTypeName(lResultSet.getString("DELIVERYTYPENAME"));
          
          deliveryMap.put(lDeliveryCode, lOrderDelivery);
        }
      } catch (SQLException sqle) {
        sqle.printStackTrace();
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      session.setAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME, deliveryMap);
      
      // 商品別明細
      LinkedHashMap orderCmdtyMap = new LinkedHashMap();
      SIOrderCmdty lOrderCmdty = new SIOrderCmdty();
      
      lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT aa.ORDERCODE, aa.SHOPCODE, aa.SHOPNAME, aa.CMDTYCODE, aa.CMDTYNAME ");
      lSqlBuf.append(",aa.STNDRDCODE1, aa.ELEMENTCODE1, aa.STNDRDCODE2, aa.ELEMENTCODE2 ");
      lSqlBuf.append(",aa.STNDRDNAME1, aa.ELEMENTNAME1, aa.STNDRDNAME2, aa.ELEMENTNAME2 ");
      lSqlBuf.append(",aa.ORGPRICE, aa.PRICE, SUM(aa.AMOUNT) AS AMOUNT, aa.TAXFLG, aa.TAXRATE ");
      lSqlBuf.append(" FROM ORDERDETAILVW").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa ");
      lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode(), " "));
      if (lLogin.isShop()) {
        lSqlBuf.append("AND aa.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode(), ""));
      }
      lSqlBuf.append(" GROUP BY aa.ORDERCODE, aa.SHOPCODE, aa.SHOPNAME, aa.CMDTYCODE, aa.CMDTYNAME");
      lSqlBuf.append(",aa.STNDRDCODE1, aa.ELEMENTCODE1, aa.STNDRDCODE2, aa.ELEMENTCODE2");
      lSqlBuf.append(",aa.STNDRDNAME1, aa.ELEMENTNAME1, aa.STNDRDNAME2, aa.ELEMENTNAME2");
      lSqlBuf.append(",aa.ORGPRICE, aa.PRICE, aa.TAXFLG, aa.TAXRATE ");
      lSqlBuf.append(" ORDER BY aa.CMDTYCODE, aa.SHOPCODE");
      
      try {
        log.debug("getConnection:lSqlBuf=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        int ii = 0;
        
        while (lResultSet.next()) {
          ii++;
          lOrderCmdty = new SIOrderCmdty();
          lOrderCmdty.setEncode(SIConfig.SIENCODE_NONE);
          lOrderCmdty.setOrderCode(lResultSet.getString("ORDERCODE")); // 受注番号
          lOrderCmdty.setShopCode(lResultSet.getString("SHOPCODE"));
          lOrderCmdty.setShopName(lResultSet.getString("SHOPNAME"));
          lOrderCmdty.setCmdtyCode(lResultSet.getString("CMDTYCODE"));
          lOrderCmdty.setCmdtyName(lResultSet.getString("CMDTYNAME"));
          lOrderCmdty.setStndrdCode1(lResultSet.getString("STNDRDCODE1"));
          lOrderCmdty.setStndrdName1(lResultSet.getString("STNDRDNAME1"));
          lOrderCmdty.setElementCode1(lResultSet.getString("ELEMENTCODE1"));
          lOrderCmdty.setElementName1(lResultSet.getString("ELEMENTNAME1"));
          lOrderCmdty.setStndrdCode2(lResultSet.getString("STNDRDCODE2"));
          lOrderCmdty.setStndrdName2(lResultSet.getString("STNDRDNAME2"));
          lOrderCmdty.setElementCode2(lResultSet.getString("ELEMENTCODE2"));
          lOrderCmdty.setElementName2(lResultSet.getString("ELEMENTNAME2"));
          lOrderCmdty.setAmount(lResultSet.getString("AMOUNT"));
          lOrderCmdty.setOrgPrice(lResultSet.getString("ORGPRICE"));
          lOrderCmdty.setPrice(lResultSet.getString("PRICE"));
          lOrderCmdty.setTaxFlg(lResultSet.getString("TAXFLG"));
          lOrderCmdty.setTaxRate(lResultSet.getString("TAXRATE"));// 税率
          
          // 消費税込みの金額の算出、セット
          String lCalcPrice = "0";
          if (lOrderCmdty.getTaxFlg().equals("1")) {
            lCalcPrice = SITax.calcPriceIncTax(lOrderCmdty.getPrice(), lOrderCmdty.getTaxRate());
          } else {
            lCalcPrice = lOrderCmdty.getPrice();
          }
          lOrderCmdty.setPriceIncTax(lCalcPrice);
          
          orderCmdtyMap.put(new Integer(ii).toString(), lOrderCmdty);
        }
        session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_DTIL_NAME, orderCmdtyMap);
      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      
      // EDBTG003-00 elecs-matsushima add start
      Map setCmdtyMap = new LinkedHashMap();
      
      Iterator iteSetCmdtyKeyMap = setCmdtyKeyMap.keySet().iterator();
      while (iteSetCmdtyKeyMap.hasNext()){
        SIOrderDetail orderCmdtyDetail = (SIOrderDetail) setCmdtyKeyMap.get(iteSetCmdtyKeyMap.next());
        if (orderCmdtyDetail != null){
          
          // セットデータ
          lSqlBuf = new StringBuffer();
          lSqlBuf.append("SELECT aa.ORDERCODE, aa.ORDERBRANCHCODE, aa.SETCODE, aa.SETCMDTYCODE, aa.SETINDIVIDUALCODE ");
          lSqlBuf.append(",aa.CMDTYNAME, aa.SETDISCOUNT, aa.SETAMOUNT ");
          lSqlBuf.append(" FROM ORDERSETCMDTYTBL").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa ");
          lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getOrderCode(), " "));
          lSqlBuf.append(" AND aa.ORDERBRANCHCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getOrderBranchCode(), " "));
          lSqlBuf.append(" AND aa.SETCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getSetCode(), " "));
          lSqlBuf.append(" AND aa.SETCMDTYCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getSetCmdtyCode(), " "));
          lSqlBuf.append(" AND aa.SETINDIVIDUALCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getSetIndividualCode(), " "));
          
          try {
            log.debug("getConnection:lSqlBuf=" + lSqlBuf.toString());
            lStatement = lConnection.createStatement();
            lResultSet = lStatement.executeQuery(lSqlBuf.toString());
            
            while (lResultSet.next()) {
              SIOrderSetCmdty setCmdty = new SIOrderSetCmdty();
              setCmdty.setEncode(SIConfig.SIENCODE_NONE);
              setCmdty.setOrderCode(lResultSet.getString("ORDERCODE")); // 受注番号
              setCmdty.setOrderBranchCode(lResultSet.getString("ORDERBRANCHCODE")); // 受注番号枝番
              setCmdty.setSetCode(lResultSet.getString("SETCODE")); // セット番号
              setCmdty.setSetCmdtyCode(lResultSet.getString("SETCMDTYCODE")); // セット商品コード
              setCmdty.setSetIndividualCode(lResultSet.getString("SETINDIVIDUALCODE")); // セット在庫コード
              setCmdty.setCmdtyName(lResultSet.getString("CMDTYNAME")); // セット商品名
              setCmdty.setSetDiscount(lResultSet.getString("SETDISCOUNT")); // セット値引き
              setCmdty.setSetAmount(lResultSet.getString("SETAMOUNT")); // セット数量
              
              // 受注セット品設定
              String setCmdtyKey = setCmdty.getSetCode() + SIConfig.SIWEBSHOPPING_TOKEN
                                 + setCmdty.getSetCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                                 + setCmdty.getSetIndividualCode();
              setCmdtyMap.put(setCmdtyKey, setCmdty);
            }
          } catch (SQLException e) {
            e.printStackTrace();
          } finally {
            SIDBUtil.close(lStatement, lResultSet);
          }
        }
      }
      session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, setCmdtyMap);
      
      LinkedHashMap setCmdtyMaptmp = new LinkedHashMap(setCmdtyMap);
      // EDBTG003-00 elecs-matsushima add end
      
      // 支払条件オブジェクト
      UICasher lCasher = new UICasher();
      lCasher.readData(lRequest, lConnection, lUrlParam, refreshRegOrder.getOrderCode(), refreshRegOrder.getSumOfDiscount());
      SICartDetail.resetDelivery(lRequest, lConnection, lOrderDelivery.getAddressCode(), firstflg);
      session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMap);
      session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, setCmdtyMaptmp); // EDBTG003-00 elecs-matsushima add
      session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
      
      // EDBTG003-00 elecs-matsushima add start
      // cartManのソート順がおかしくなり、画面が再描画されなくなるので並び替えてカートに投入する。
      SICartManager cartMan=new SICartManager();
      cartMan.adjustAmount(lRequest,lConnection);
      session.setAttribute(SIConfig.SISESSION_CART_INFO_NAME,cartMan);
      // EDBTG003-00 elecs-matsushima add end
    }
  }
  
  /**
   * <b>updateOrder</b> 画面の受注情報を取得します
   * 
   * @param lRequest
   * @param lConnection
   * @param lUrlParam
   */
  private boolean updateOrder(HttpServletRequest lRequest, Connection lConnection, SIURLParameter lUrlParam) {
    HttpSession session = lRequest.getSession(true);// セッションの取得
    Statement lStatement = null;
    ResultSet lResultSet = null;
    boolean result = true;
    // エラーメッセージクリア
    lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    String lAddressCode = "0";
    
    // 受注情報のセット
    UIRegOrder lRegOrder = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
    lRegOrder.initUpdate(lRequest, lConnection, lUrlParam);
    session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME, lRegOrder);
    
    // 配送先情報のセット
    LinkedHashMap deliveryMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME);
    SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
    for (int ii = 0; ii < lRegOrder.getDeliveryCode().length; ii++) {
      lOrderDelivery = (SIOrderDelivery) deliveryMap.get(lRegOrder.getDeliveryCode()[ii]);
      
      lOrderDelivery.setDeliveryCodeToDB(lRegOrder.getDeliveryCodeToDB()[ii]); // DBに登録する配送先項番
      lOrderDelivery.setDeliveryName(lRegOrder.getDeliveryName()[ii]); // 配送先呼称
      lOrderDelivery.setDeliveryAddressee(lRegOrder.getDeliveryAddressee()[ii]);// 配送先宛名
      lOrderDelivery.setCompanyName(lRegOrder.getDeliveryCompanyName()[ii]); // 会社名
      lOrderDelivery.setPostCode1(lRegOrder.getDeliveryPostCode1()[ii]);
      lOrderDelivery.setPostCode2(lRegOrder.getDeliveryPostCode2()[ii]);
      lOrderDelivery.setAddress1(lRegOrder.getDeliveryAddress1()[ii]);
      lOrderDelivery.setAddress2(lRegOrder.getDeliveryAddress2()[ii]);
      lOrderDelivery.setAddress3(lRegOrder.getDeliveryAddress3()[ii]);
      lOrderDelivery.setTel(lRegOrder.getDeliveryTel()[ii]); // 連絡先電話番号
      
      try {
        StringBuffer sql = new StringBuffer();
        sql.append("SELECT * FROM spcdeliverymtbl WHERE postcode1=").append(SIDBUtil.SQL2Str(lOrderDelivery.getPostCode1()," "));
        sql.append("AND postcode2=").append(SIDBUtil.SQL2Str(lOrderDelivery.getPostCode2()));
        sql.append("AND deliverytypecode=").append(SIDBUtil.SQL2Str(lOrderDelivery.getDeliveryTypeCode()));
        boolean isSpc1 = SIDBUtil.hasData(lConnection, sql.toString());
        
        sql = new StringBuffer();
        sql.append("SELECT a.* FROM spcdeliverymtbl a,custaddresstbl b WHERE a.postcode1=b.postcode1 AND a.postcode2=b.postcode2 ");
        sql.append("AND b.addresscode=").append(SIDBUtil.SQL2Str(lOrderDelivery.getAddressCode()," "));
        sql.append("AND b.custcode=").append(SIDBUtil.SQL2Str(lRegOrder.getCustCode()," "));
        boolean isSpc2 = SIDBUtil.hasData(lConnection, sql.toString());
        if(isSpc1 != isSpc2){
          result = false;
        }
      }catch(Exception e){}
      
      deliveryMap.put(lRegOrder.getDeliveryCode()[ii], lOrderDelivery);
      lAddressCode = lOrderDelivery.getAddressCode();
    }
    // SICartDetail.resetDelivery(lRequest,lConnection,lOrderDelivery.getAddressCode());
    
    // 値段の変わる商品
    LinkedHashMap detailMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
    try {
      StringBuffer sql = new StringBuffer();
      sql.append("SELECT cmdtycode,individualcode FROM individualtbl ");
      sql.append("WHERE individualcode IN(");
      for (int i=0;i<SIConfig.VARIABLE_CMDTY_CODE.length;i++){
        if(i>0) sql.append(",");
        sql.append(SIDBUtil.SQL2Str(SIConfig.VARIABLE_CMDTY_CODE[i]));
      }
      sql.append(")");
      
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(sql.toString());
      
      while(lResultSet.next()){
        String lDetailCode = "0" + SIConfig.SIWEBSHOPPING_TOKEN;
        lDetailCode += lResultSet.getString("cmdtyCode") + SIConfig.SIWEBSHOPPING_TOKEN;
        lDetailCode += lResultSet.getString("individualCode") + SIConfig.SIWEBSHOPPING_TOKEN;
        lDetailCode += SIConfig.SIWEBSHOPPING_TOKEN;
        lDetailCode += SIConfig.SIWEBSHOPPING_TOKEN;
        lDetailCode += SIConfig.SIWEBSHOPPING_TOKEN;
        lDetailCode += SIConfig.SIWEBSHOPPING_TOKEN;
        lDetailCode += lAddressCode;
        
        // EDBTG003-00 elecs-matsushima add start
//        SIOrderDetail lOrderDetail = (SIOrderDetail) detailMap.get(lDetailCode);
//        if(lOrderDetail!=null){
//          String lPrice = (String)lUrlParam.getParam("variablePrice_"+lResultSet.getString("individualCode"));
//          String lPurchasePrice = (String)lUrlParam.getParam("variablePurchase_"+lResultSet.getString("individualCode"));
//          lOrderDetail.setPrice(lPrice);
//          lOrderDetail.setOrgPrice(lPrice);
//          lOrderDetail.setPriceIncTax(lPrice);
//          lOrderDetail.setPurchasePrice(lPurchasePrice);
//          detailMap.put(lDetailCode, lOrderDetail);
//        }
        for (Iterator iteDetailMap = detailMap.keySet().iterator(); iteDetailMap.hasNext();) {
          String mapKey = (String) iteDetailMap.next();
          SIOrderDetail lOrderDetail = (SIOrderDetail) detailMap.get(mapKey);
          
          if (lOrderDetail!=null) {
            String[] mapKeyPks = mapKey.split(SIConfig.SIWEBSHOPPING_TOKEN);
            String chkMapKey = mapKeyPks[0] + SIConfig.SIWEBSHOPPING_TOKEN;
            chkMapKey += mapKeyPks[1] + SIConfig.SIWEBSHOPPING_TOKEN;
            chkMapKey += mapKeyPks[2] + SIConfig.SIWEBSHOPPING_TOKEN;
            chkMapKey += mapKeyPks[3] + SIConfig.SIWEBSHOPPING_TOKEN;
            chkMapKey += mapKeyPks[4] + SIConfig.SIWEBSHOPPING_TOKEN;
            chkMapKey += mapKeyPks[5] + SIConfig.SIWEBSHOPPING_TOKEN;
            chkMapKey += mapKeyPks[6] + SIConfig.SIWEBSHOPPING_TOKEN;
            chkMapKey += mapKeyPks[7];
            
            if (lDetailCode.equals(chkMapKey)){
              String lPrice = (String)lUrlParam.getParam("variablePrice_"+lResultSet.getString("individualCode"));
              String lPurchasePrice = (String)lUrlParam.getParam("variablePurchase_"+lResultSet.getString("individualCode"));
              lOrderDetail.setPrice(lPrice);
              lOrderDetail.setOrgPrice(lPrice);
              lOrderDetail.setPriceIncTax(lPrice);
              lOrderDetail.setPurchasePrice(lPurchasePrice);
              detailMap.put(mapKey, lOrderDetail);
            }
          }
        }
      }
      // EDBTG003-00 elecs-matsushima add end
      
      LinkedHashMap tempMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
      Set keyMap = tempMap.keySet();
      detailMap = new LinkedHashMap();
      Iterator keyIte = keyMap.iterator();
      SIOrderDetail lOrderDetail = new SIOrderDetail();
      while (keyIte.hasNext()) {
        String key = (String) keyIte.next();
        lOrderDetail = (SIOrderDetail) tempMap.get(key);
        
        if("1".equals(lOrderDetail.getDeliveryTypeCode())){
          if("1".equals(lRequest.getParameter("deliveryDate_flg"))){
            lOrderDetail.setDeliveryDate(lRequest.getParameter("deliveryDate_komono"));
          }
          if("1".equals(lRequest.getParameter("deliveryTime_flg"))){
            lOrderDetail.setDeliveryTime(lRequest.getParameter("deliveryTime_komono"));
          }
        }else{
          if("0".equals(lRequest.getParameter("deliveryDate_flg"))){
            lOrderDetail.setDeliveryDate(lRequest.getParameter("deliveryDate_kobetsu"));
          }
          if("0".equals(lRequest.getParameter("deliveryTime_flg"))){
            lOrderDetail.setDeliveryTime(lRequest.getParameter("deliveryTime_kobetsu"));
          }
        }
        detailMap.put(key, lOrderDetail);
      }
      session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMap);
    } catch (Exception e){
      e.printStackTrace();
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
    
    UIOrderDeli orderDeli = new UIOrderDeli();
    orderDeli.setAddress(lOrderDelivery.getAddressCode());
    session.setAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME, deliveryMap);
    session.setAttribute(SIConfig.SISESSION_MAN_ORDER_DELI, orderDeli);
    
    // 支払方法・金額情報・配送希望日時など
    UICasher lCasher = new UICasher();
    lCasher.init(lRequest, lConnection, lUrlParam);
    session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
    
    return result;
  }
  
// EDBTG003-00 elecs-matsushima add start
  /**
   * ショップのギフトフラグを取得します
   * @param lConnection
   * @param lLogin
   * @return
   */
  private String getGiftFlg(Connection lConnection, SILogin lLogin){
    String lGiftFlg = "0";
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    if (SIConfig.SIRUNNING_MODE_CURRENT == SIConfig.SIRUNNING_MODE_INDIVIDUAL && lLogin.isShop()) {
      StringBuffer lSqlBuf = new StringBuffer("SELECT GIFTFLG FROM MALLSHOPVW WHERE MALLSHOPCODE=");
      lSqlBuf.append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
      try {
        log.debug("readData:lSql=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        if (lResultSet.next()) {
          lGiftFlg = lResultSet.getString("GIFTFLG");
        }
      } catch (SQLException sqle) {
        sqle.printStackTrace();
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      // モール管理者がログインしている場合
    } else if (lLogin.isMall()) {
      lGiftFlg = SIConfig.SIMALL.getGiftFlg();
    }
    
    return lGiftFlg;
  }
  
  /**
   * 商品追加用チェックのKeyを生成します
   * @param shopCode
   * @param cmdtyCode
   * @param individualCode
   * @param setCode
   * @return
   */
  private String getCheckKeyToAddCmdty(String shopCode, String cmdtyCode, String individualCode, String setCode){
    String sesDetailKey = shopCode + SIConfig.SIWEBSHOPPING_TOKEN;
    sesDetailKey += cmdtyCode + SIConfig.SIWEBSHOPPING_TOKEN;
    sesDetailKey += individualCode + SIConfig.SIWEBSHOPPING_TOKEN;
    sesDetailKey += setCode;
    
    return sesDetailKey;
  }
  
  /**
   * 商品追加用チェックの詳細Keyを生成します
   * @param lOrderDetail
   * @param setCode
   * @param detailcount
   * @return
   */
  private String getOrderDetailKeyCodeToAddCmdty(SIOrderDetail lOrderDetail, String setCode, String detailcount){
    String lDatailCode = "";
    lDatailCode += lOrderDetail.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDatailCode += lOrderDetail.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDatailCode += lOrderDetail.getIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDatailCode += lOrderDetail.getStndrdCode1() == null ? SIConfig.SIWEBSHOPPING_TOKEN : lOrderDetail.getStndrdCode1() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDatailCode += lOrderDetail.getElementCode1() == null ? SIConfig.SIWEBSHOPPING_TOKEN : lOrderDetail.getElementCode1() + SIConfig.SIWEBSHOPPING_TOKEN; // 規格2
    lDatailCode += lOrderDetail.getStndrdCode2() == null ? SIConfig.SIWEBSHOPPING_TOKEN : lOrderDetail.getStndrdCode2() + SIConfig.SIWEBSHOPPING_TOKEN; // エレメント1
    lDatailCode += lOrderDetail.getElementCode2() == null ? SIConfig.SIWEBSHOPPING_TOKEN : lOrderDetail.getElementCode2() + SIConfig.SIWEBSHOPPING_TOKEN; // エレメント2
    lDatailCode += "0"; // アドレス帳コード：本人
    lDatailCode +=  SIConfig.SIWEBSHOPPING_TOKEN + setCode +  SIConfig.SIWEBSHOPPING_TOKEN + detailcount;
    
    return lDatailCode;
  }
  
  /**
   * 商品追加用チェックの配送Keyを生成します
   * @param addressCode
   * @param deliveryTypeName
   * @param shopCode
   * @return
   */
  private String getOrderDeliveryKeyCodeToAddCmdty(String addressCode, String deliveryTypeName, String shopCode){
    String lDeliveryCode = "";
    lDeliveryCode += addressCode + SIConfig.SIWEBSHOPPING_TOKEN;
    lDeliveryCode += deliveryTypeName + SIConfig.SIWEBSHOPPING_TOKEN;
    lDeliveryCode += shopCode;
    
    return lDeliveryCode;
  }
  
  /**
   * 追加商品がすでにカートに追加されているか確認します。
   * @param lRequest
   * @param lConnection
   * @param cartsDetailMapKey
   * @return
   */
  private HashMap checkIsCartCmdty(HttpServletRequest lRequest, Connection lConnection, String cartsDetailMapKey){
    HttpSession session = lRequest.getSession(true);// セッションの取得
    
    // ショップ情報初期化
    SIMallShop lMallShop=new SIMallShop();
    // カート情報初期化
    SICart templCart=new SICart();
    // 現在カートの取得
    SICartManager tempCartMan=(SICartManager)session.getAttribute(SIConfig.SISESSION_CART_INFO_NAME);
    if (tempCartMan == null)tempCartMan = new SICartManager();
    Iterator lTempShopIta = tempCartMan.getShopCollection(lConnection).iterator();
    Iterator lTempCartIta;
    // セット品の場合
    boolean setExist = false;
    // セット品チェックカウント
    int setCount = 0;
    String setCodeStr = "0";
    while (lTempShopIta.hasNext()){
      lMallShop=(SIMallShop)lTempShopIta.next();
      lTempCartIta=tempCartMan.getCartCollection(lMallShop.getMallShopCode()).iterator();
      while (lTempCartIta.hasNext()){
        templCart=(SICart)lTempCartIta.next();
        // カウント
        if (templCart.getCartCmdty().isCmdtyComposition()) {
          setCount = Integer.parseInt(templCart.getCartCmdty().getSetCode());
          setCodeStr = templCart.getCartCmdty().getSetCode();
        }
        LinkedHashMap check = (LinkedHashMap)templCart.getCartCmdty().getCartsCmdtyCompositionDetailMap();
        if (check.containsKey(cartsDetailMapKey)) {
          // 同一構成品が存在する場合
          setCodeStr = templCart.getCartCmdty().getSetCode();
          setExist = true;
          break;
        }
      }
    }
    
    HashMap resultMap = new HashMap();
    if (setExist) {
      resultMap.put("result", "1");
    } else {
      resultMap.put("result", "0");
    }
    resultMap.put("setCount", String.valueOf(setCount));
    resultMap.put("setCodeStr", setCodeStr);
    
    return resultMap;
  }
  
  /**
   * 添付品情報を取得します
   * @param lConnection
   * @param lRegOrder
   * @param lCmdty
   * @return
   */
  private List getAppendedList(Connection lConnection, UIRegOrder lRegOrder, SICartCmdty lCmdty){
    // 添付品の取得
    List appendedList = new ArrayList();
    if (lRegOrder.getCompositionAppended() != null) {
      Collection appendedColl = lCmdty.getCmdtyCompositionAppended(lConnection);
      Iterator ite = appendedColl.iterator();
      while(ite.hasNext()) {
        SICartCmdty cartAppendedCompositionInfo = new SICartCmdty();
        SICmdtyCompositionAppended cmdtyCompositionAppended = (SICmdtyCompositionAppended)ite.next();
        // 構成品情報1件分の取得
        cartAppendedCompositionInfo.setShopCode(cmdtyCompositionAppended.getShopCode());
        cartAppendedCompositionInfo.setCmdtyCode(cmdtyCompositionAppended.getDetailCmdtyCode());
        cartAppendedCompositionInfo.setIndividualCode(cmdtyCompositionAppended.getDetailIndividualCode());
        cartAppendedCompositionInfo.setSetCmdtyCode(lCmdty.getCmdtyCode());
        cartAppendedCompositionInfo.setSetIndividualCode(lCmdty.getIndividualCode());
        
        if (cartAppendedCompositionInfo.reset(lConnection, false,  "")){
          // 明細区分設定
          cartAppendedCompositionInfo.setSetDetailFlg(SIConfig.SET_DETAIL_FLG_APPENDED);
          // 明細番号設定
          //cartAppendedCompositionInfo.setSetDetailCode(String.valueOf(setDetailCount));
          // 構成数
          cartAppendedCompositionInfo.setSetCompositionCount(cmdtyCompositionAppended.getAppendedCount());
          // セット数(xセット毎の値)
          cartAppendedCompositionInfo.setSetCount(cmdtyCompositionAppended.getSetCount());
          // 添付品については、固定で単価0円とする
          cartAppendedCompositionInfo.setUnitPrice("0");
          cartAppendedCompositionInfo.setSalesUnitPrice("0");
          cartAppendedCompositionInfo.setCalcUnitPrice("0");
          cartAppendedCompositionInfo.setDiscountRate("0");
          cartAppendedCompositionInfo.setConsignGoodsFee("0");
          
          appendedList.add(cartAppendedCompositionInfo);
        }
      }
    }
    
    return appendedList;
  }

  /**
   * <b>checkAddSetAmount</b>
   * セット品カート投入時の在庫チェックをおこないます
   * @param HttpServletRequest
   * @param SICart
   * @param LinkedHashMap
   * @param String
   * @return boolean
   * @throws なし
   */
  protected boolean checkAddSetAmount(SICartCmdty lCartCmdty, LinkedHashMap lAmountCmdtyMap, int lAmountValue, boolean posFlg) {
    // 返却変数
    boolean errors = true;
    // 構成商品・オプション・添付品の在庫チェック
    LinkedHashMap compositionMap = (LinkedHashMap)lCartCmdty.getCartsCmdtyCompositionDetailMap();
    Iterator ite = compositionMap.values().iterator();
    while (ite.hasNext()) {
      // 構成品・オプション・添付品の在庫数を算出
      Collection cmdtyColl = (Collection)ite.next();
      Iterator cmdtyIte = cmdtyColl.iterator();
      while (cmdtyIte.hasNext()) {
        SICartCmdty cmdty = (SICartCmdty)cmdtyIte.next();
        String cartAmount = "0";
        if (lAmountCmdtyMap.containsKey(cmdty.getIndividualCode())) {
          cartAmount = (String)lAmountCmdtyMap.get(cmdty.getIndividualCode());
        }
        String amount = SIUtil.multi_LL(String.valueOf(lAmountValue), cmdty.getSetCompositionCount());
        if (posFlg) {
          // 在庫チェックを実施
          if ("1".equalsIgnoreCase(cmdty.getAmountFlg())&&//在庫管理する
              (Integer.parseInt(cartAmount) + Integer.parseInt(amount)) > Integer.parseInt(cmdty.getAmount())) {
              log.warn("addCart:在庫超...ShopCode="+cmdty.getShopCode() +",CmdtyCode="+cmdty.getCmdtyCode() +",Amount="+cmdty.getAmount());
              errors = false;
          }
        } else {
          // 在庫チェックを実施
          if ("1".equalsIgnoreCase(cmdty.getAmountFlg())&&//在庫管理する
              "0".equalsIgnoreCase(cmdty.getNoStockFlg())&&//在庫なし販売しない
              (Integer.parseInt(cartAmount) + Integer.parseInt(amount)) > Integer.parseInt(cmdty.getAmount())) {
              log.warn("addCart:在庫超...ShopCode="+cmdty.getShopCode() +",CmdtyCode="+cmdty.getCmdtyCode() +",Amount="+cmdty.getAmount());
              errors = false;
          }
        }
      }
    }
    return errors;
  }
  // EDBTG003-00 elecs-matsushima add end
  
  /**
   * <b>addCmdty</b> カートに商品を追加します
   * 
   * @param lRequest
   * @param lConnection
   * @param lRegOrder
   */
  private void addCmdty(HttpServletRequest lRequest, Connection lConnection, UIRegOrder lRegOrder) {
    HttpSession session = lRequest.getSession(true);// セッションの取得
    
    // EDBTG003-00 elecs-matsushima del start
    /*
    // カートに商品を追加
    UIMain mainID = new UIMain();
    
    mainID.setCartShopCodeTxt(lRegOrder.getNewCmdtyShopCode());
    mainID.setCartCmdtyCodeTxt(lRegOrder.getNewCmdtyCode());
    mainID.setCartIndividualCodeTxt(lRegOrder.getNewIndividualCode());
    mainID.setCartStndrdCodeTxt1(lRegOrder.getNewCmdtyStndrd1Code());
    mainID.setCartStndrdCodeTxt2(lRegOrder.getNewCmdtyStndrd2Code());
    mainID.setCartElementCodeTxt1(lRegOrder.getNewCmdtyElement1Code());
    mainID.setCartElementCodeTxt2(lRegOrder.getNewCmdtyElement2Code());
    mainID.setCartAmountTxt(lRegOrder.getNewCmdtyAmount());
    
    mainID.addCart(lRequest, lConnection, false, true);
    
    // 商品明細情報の追加
    LinkedHashMap detailMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
    
    // ギフトフラグ取得
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    Statement lStatement = null;
    ResultSet lResultSet = null;
    StringBuffer lSqlBuf = new StringBuffer();
    
    String lGiftFlg = "0";
    
    if (SIConfig.SIRUNNING_MODE_CURRENT == SIConfig.SIRUNNING_MODE_INDIVIDUAL && lLogin.isShop()) {
      lSqlBuf = new StringBuffer("SELECT GIFTFLG FROM MALLSHOPVW WHERE MALLSHOPCODE=");
      lSqlBuf.append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
      try {
        log.debug("readData:lSql=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        if (lResultSet.next()) {
          lGiftFlg = lResultSet.getString("GIFTFLG");
        }
      } catch (SQLException sqle) {
        sqle.printStackTrace();
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      // モール管理者がログインしている場合
    } else if (lLogin.isMall()) {
      lGiftFlg = SIConfig.SIMALL.getGiftFlg();
    }
    
    // 商品情報
    SICartCmdty lCmdty = new SICartCmdty(lRegOrder.getNewCmdtyShopCode(), lRegOrder.getNewCmdtyCode(), lRegOrder.getNewIndividualCode(), lRegOrder.getNewCmdtyStndrd1Code(),
        lRegOrder.getNewCmdtyElement1Code(), lRegOrder.getNewCmdtyStndrd2Code(), lRegOrder.getNewCmdtyElement2Code());
    lCmdty.reset(lConnection);
    // 会員値引き率をセット
    SIUserInfo userLogin = SIHTMLUtil.getUserInfo(lRequest);
    if (userLogin.isLogin()) {
      lCmdty.setMemberDiscountRate(userLogin.getDiscountRate());
    }
    
    SIOrderDetail lOrderDetail = new SIOrderDetail();
    lOrderDetail.setEncode(SIConfig.SIENCODE_NONE);
    
    String lDeliveryCode = "";
    lDeliveryCode += "0" + SIConfig.SIWEBSHOPPING_TOKEN;
    lDeliveryCode += lCmdty.getDeliveryTypeName() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDeliveryCode += lRegOrder.getNewCmdtyShopCode();
    
    String lDatailCode = "";
    lDatailCode += lRegOrder.getNewCmdtyShopCode() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDatailCode += lRegOrder.getNewCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDatailCode += lRegOrder.getNewIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDatailCode += lRegOrder.getNewCmdtyStndrd1Code() == null ? SIConfig.SIWEBSHOPPING_TOKEN : lRegOrder.getNewCmdtyStndrd1Code() + SIConfig.SIWEBSHOPPING_TOKEN;
    ; // 規格1
    lDatailCode += lRegOrder.getNewCmdtyElement1Code() == null ? SIConfig.SIWEBSHOPPING_TOKEN : lRegOrder.getNewCmdtyElement1Code() + SIConfig.SIWEBSHOPPING_TOKEN; // 規格2
    lDatailCode += lRegOrder.getNewCmdtyStndrd2Code() == null ? SIConfig.SIWEBSHOPPING_TOKEN : lRegOrder.getNewCmdtyStndrd2Code() + SIConfig.SIWEBSHOPPING_TOKEN; // エレメント1
    lDatailCode += lRegOrder.getNewCmdtyElement2Code() == null ? SIConfig.SIWEBSHOPPING_TOKEN : lRegOrder.getNewCmdtyElement2Code() + SIConfig.SIWEBSHOPPING_TOKEN; // エレメント2
    lDatailCode += "0"; // アドレス帳コード：本人
    
    lOrderDetail.setDeliveryCode(lDeliveryCode); // 配送先コード
    lOrderDetail.setDetailCode(lDatailCode); // 受注詳細コード
    lOrderDetail.setShopCode(lRegOrder.getNewCmdtyShopCode()); // ショップコード
    lOrderDetail.setCmdtyCode(lRegOrder.getNewCmdtyCode()); // 商品コード
    lOrderDetail.setIndividualCode(lRegOrder.getNewIndividualCode()); // 在庫コード
    lOrderDetail.setShopName(lCmdty.getFrontShopName()); // ショップ名
    lOrderDetail.setCmdtyName(lCmdty.getCmdtyName()); // 商品名
    lOrderDetail.setStndrdCode1(lRegOrder.getNewCmdtyStndrd1Code()); // 規格1
    lOrderDetail.setStndrdName1(lCmdty.getStndrdName1()); // 規格1名
    lOrderDetail.setElementCode1(lRegOrder.getNewCmdtyElement1Code()); // エレメント1
    lOrderDetail.setElementName1(lCmdty.getElementName1()); // エレメント1名
    lOrderDetail.setStndrdCode2(lRegOrder.getNewCmdtyStndrd2Code()); // 規格2
    lOrderDetail.setStndrdName2(lCmdty.getStndrdName2()); // 規格2名
    lOrderDetail.setElementCode2(lRegOrder.getNewCmdtyElement2Code()); // エレメント2
    lOrderDetail.setElementName2(lCmdty.getElementName2()); // エレメント2名
    lOrderDetail.setAmount(lRegOrder.getNewCmdtyAmount()); // 数量
    lOrderDetail.setOrgPrice(lCmdty.getUnitPrice()); // 本体値段
    lOrderDetail.setPrice(lCmdty.getFinalUnitPrice()); // 値引き後の購入値段
    lOrderDetail.setTaxFlg(lCmdty.getTaxFlg()); // 税フラグ
    lOrderDetail.setTaxRate(lCmdty.getTaxRate()); // 税率
    lOrderDetail.setCmdtySize(lCmdty.getCmdtySize()); // 商品サイズ
    lOrderDetail.setWrappingFlg(lCmdty.getWrappingFlg()); // ラッピングフラグ
    lOrderDetail.setShopGiftFlg(lGiftFlg); // ショップギフトフラグ
    lOrderDetail.setDeliveryTypeCode(lCmdty.getDeliveryTypeCode()); // 配送種別コード
    lOrderDetail.setDeliveryTypeName(lCmdty.getDeliveryTypeName()); // 配送種別名称
    lOrderDetail.setPriceIncTax(lCmdty.getFinalUnitPriceIncTax()); // 消費税込みの金額
    
    detailMap.put(lDatailCode, lOrderDetail);
    session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMap);
    
    // 既存の配送先に、同一配送種別かつ同一ショップの「本人」がいない場合、新規配送先レコードを作成
    LinkedHashMap deliveryMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME);
    SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
    
    if (deliveryMap.get(lDeliveryCode) == null) {
      lOrderDelivery = new SIOrderDelivery();
      SICustAddress lAddress = new SICustAddress(lRegOrder.getCustCode(), "0");
      lAddress.reset(lConnection);
      
      SICartDetail.copy(lAddress, lOrderDelivery);
      lOrderDelivery.setDeliveryCode(lDeliveryCode);
      lOrderDelivery.setDeliveryTypeName(lCmdty.getDeliveryTypeName());
      lOrderDelivery.setTaxRate(SITax.getTaxRate(lConnection));
      lOrderDelivery.setShopCode(lRegOrder.getNewCmdtyShopCode());
      lOrderDelivery.setShopName(lCmdty.getFrontShopName());
      
      SIMallShop lMallShop = new SIMallShop(lRegOrder.getNewCmdtyShopCode());
      lMallShop.reset(lConnection);
      lOrderDelivery.setDeliveryTaxFlg(lMallShop.getDeliveryTaxFlg());
      lOrderDelivery.setDeliveryTypeCode(lCmdty.getDeliveryTypeCode());
      
      deliveryMap.put(lDeliveryCode, lOrderDelivery);
      session.setAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME, deliveryMap);
    }
 */
    // EDBTG003-00 elecs-matsushima del end
    // EDBTG003-00 elecs-matsushima add start
    // 商品明細情報の追加
    LinkedHashMap detailMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
    LinkedHashMap setCmdtyMap = (LinkedHashMap)session.getAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME);
    
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    
    // 商品情報
    SICartCmdty lCmdty = new SICartCmdty(lRegOrder.getNewCmdtyShopCode(), lRegOrder.getNewCmdtyCode(), lRegOrder.getNewIndividualCode(), lRegOrder.getNewCmdtyStndrd1Code(),
        lRegOrder.getNewCmdtyElement1Code(), lRegOrder.getNewCmdtyStndrd2Code(), lRegOrder.getNewCmdtyElement2Code());
    lCmdty.reset(lConnection);
    // 会員値引き率をセット
    SIUserInfo userLogin = SIHTMLUtil.getUserInfo(lRequest);
    lCmdty.setMemberDiscountRate(userLogin.getDiscountRate());
    
    SIOrderDetail lOrderDetail = new SIOrderDetail();
    lOrderDetail.setEncode(SIConfig.SIENCODE_NONE);
    
    // ギフトフラグ取得
    String lGiftFlg = getGiftFlg(lConnection, lLogin);
    
    if (!lRegOrder.getNewCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_NORMAL)){ // 構成商品
      
      /***** 追加する商品を構成商品毎に情報取得 ここから *****/
      // チェックKey用
      String setKey = lRegOrder.getNewCmdtyShopCode() + SIConfig.SIWEBSHOPPING_TOKEN;
      setKey += lRegOrder.getNewCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN;
      setKey += lRegOrder.getNewIndividualCode();
      
      // 構成品
      List groupDetailList = new ArrayList(); // 追加する構成
      Collection groupDetail = lRegOrder.getCompositionDetail();
      for (Iterator groupDetailIte = groupDetail.iterator();groupDetailIte.hasNext(); ){
        String[] groupDetailStr = (String[]) groupDetailIte.next();
        String[] groupDetailCmdtyKeys = groupDetailStr[0].split(SIConfig.SIWEBSHOPPING_TOKEN);
        lOrderDetail = getAddCmdtyDetailFromKey(lConnection, groupDetailCmdtyKeys, lCmdty.getMemberDiscountRate(), lGiftFlg, lCmdty);
        lOrderDetail.setSetDetailFlg(SIConfig.SET_DETAIL_FLG_COMPOSITION);
        lOrderDetail.setSetCode("");//セット番号
        lOrderDetail.setSetDetailCode("");//セット明細番号
        groupDetailList.add(lOrderDetail);
        setKey = setKey + SIConfig.SIWEBSHOPPING_TOKEN + groupDetailCmdtyKeys[2];
      }
      
      // オプション
      List optionList = new ArrayList(); // 追加する構成
      String[] optionAry = lRegOrder.getCompositionOption();
      for (int i = 0; i < optionAry.length; i++){
        String optionKey = optionAry[i];
        String[] optionKeys = optionKey.split(SIConfig.SIWEBSHOPPING_TOKEN);
        lOrderDetail = getAddCmdtyDetailFromKey(lConnection, optionKeys, lCmdty.getMemberDiscountRate(), lGiftFlg, lCmdty);
        lOrderDetail.setSetDetailFlg(SIConfig.SET_DETAIL_FLG_OPTION);
        lOrderDetail.setSetCode("");//セット番号
        lOrderDetail.setSetDetailCode("");//セット明細番号
        optionList.add(lOrderDetail);
        setKey = setKey + SIConfig.SIWEBSHOPPING_TOKEN + optionKeys[2];
      }
      
      // 添付品
      List appendedList = getAppendedList(lConnection, lRegOrder, lCmdty);
      for (int i = 0; i < appendedList.size(); i++){
        SICartCmdty cartCmdty = (SICartCmdty) appendedList.get(i);
        setKey = setKey + SIConfig.SIWEBSHOPPING_TOKEN + cartCmdty.getIndividualCode();
      }
      /***** 追加する商品を構成商品毎に情報取得 ここまで *****/
      
      /***** 同一商品がすでにカートに存在するか ここから *****/
      HashMap resultMap = checkIsCartCmdty(lRequest, lConnection, setKey);
      
      String result = (String) resultMap.get("result");
      boolean setExist = false;
      if (result.equals("1")){
        setExist = true;
      }
      int setCount = Integer.parseInt((String)resultMap.get("setCount"));
      String setCodeStr = (String) resultMap.get("setCodeStr");
      /***** 同一商品がすでにカートに存在するか ここまで *****/
      
      /************ カート投入処理 ここから *************/
      // 在庫チェック含む
      // カート追加
      UIMain mainID = new UIMain();
      
      mainID.setCartShopCodeTxt(lRegOrder.getNewCmdtyShopCode());
      mainID.setCartCmdtyCodeTxt(lRegOrder.getNewCmdtyCode());
      mainID.setCartIndividualCodeTxt(lRegOrder.getNewIndividualCode());
      mainID.setCartStndrdCodeTxt1(lRegOrder.getNewCmdtyStndrd1Code());
      mainID.setCartStndrdCodeTxt2(lRegOrder.getNewCmdtyStndrd2Code());
      mainID.setCartElementCodeTxt1(lRegOrder.getNewCmdtyElement1Code());
      mainID.setCartElementCodeTxt2(lRegOrder.getNewCmdtyElement2Code());
      mainID.setCartAmountTxt(lRegOrder.getNewCmdtyAmount());
      
      mainID.setCmdtyCompositionFlg(lRegOrder.getNewCmdtyCompositionFlg());
      mainID.setCompositionGroupCount(String.valueOf(lRegOrder.getCompositionDetail().size()));
      
      Collection gCol = lRegOrder.getCompositionDetail();
      for (Iterator iteGCol = gCol.iterator(); iteGCol.hasNext();){
        String[] cmdty = (String[]) iteGCol.next();
        mainID.setCompositionDetail(cmdty);
      }
      mainID.setCompositionOption(lRegOrder.getCompositionOption());
      mainID.setCompositionAppended(lRegOrder.getCompositionAppended());
      
      mainID.addCartPos(lRequest, lConnection, true, true);
      
      String addCartSetCode = mainID.getAddCartCmdtySetCode();
      /************ カート投入処理 ここまで *************/
      
      if (SIUtil.isNotNull(addCartSetCode)) {
        /***** 構成商品・オプション商品追加 ここから *****/
        int detailcount = 0;
        if (setExist) { // 同構成品が存在する場合
          // detailMap に挿入
          for (Iterator detailMapIte = detailMap.keySet().iterator(); detailMapIte.hasNext();){
            String detailMapKey = (String) detailMapIte.next();
            lOrderDetail = (SIOrderDetail) detailMap.get(detailMapKey);
            
            if (!lOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL)){
              String sesDetailKey = getCheckKeyToAddCmdty(lOrderDetail.getShopCode(), lOrderDetail.getCmdtyCode(),
                                                          lOrderDetail.getIndividualCode(), lOrderDetail.getSetCode());
              
              // 構成品
              for (Iterator groupDetailListIte = groupDetailList.iterator(); groupDetailListIte.hasNext();){
                SIOrderDetail chkOrderDetail = (SIOrderDetail) groupDetailListIte.next();
                String chkDetailKey = getCheckKeyToAddCmdty(chkOrderDetail.getShopCode(), chkOrderDetail.getCmdtyCode(),
                                                           chkOrderDetail.getIndividualCode(), setCodeStr);
                // EDBTG003-00 [不具合管理票-No42] 2013/03/27 nagayoshi add start
                //if (sesDetailKey.equals(chkDetailKey) && chkOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_COMPOSITION)) { // 同一
                if (sesDetailKey.equals(chkDetailKey) && chkOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_COMPOSITION)
                    && lOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_COMPOSITION)) { // 同一
                // EDBTG003-00 [不具合管理票-No42] 2013/03/27 nagayoshi add end
                  chkOrderDetail.setAmount(SIUtil.add_LL(lOrderDetail.getAmount(), chkOrderDetail.getAmount()));
                  copyOrderDetail(lOrderDetail, chkOrderDetail);
                  break;
                }
              }
              
              // オプション
              for (Iterator optionListIte = optionList.iterator(); optionListIte.hasNext();){
                SIOrderDetail chkOrderDetail = (SIOrderDetail) optionListIte.next();
                String chkDetailKey = getCheckKeyToAddCmdty(chkOrderDetail.getShopCode(), chkOrderDetail.getCmdtyCode(),
                                                            chkOrderDetail.getIndividualCode(), setCodeStr);
                
                // EDBTG003-00 [不具合管理票-No42] 2013/03/27 nagayoshi add start
                //if (sesDetailKey.equals(chkDetailKey) && chkOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_OPTION)) { // 同一
                if (sesDetailKey.equals(chkDetailKey) && chkOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_OPTION)
                  && lOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_OPTION)) { // 同一
                // EDBTG003-00 [不具合管理票-No42] 2013/03/27 nagayoshi add end
                  lOrderDetail.setAmount(SIUtil.add_LL(lOrderDetail.getAmount(), chkOrderDetail.getAmount()));
                  copyOrderDetail(lOrderDetail, chkOrderDetail);
                  break;
                }
              }
              
              // 最大セットコードを取得
              if (setCodeStr.equals(lOrderDetail.getSetCode()) && SIUtil.isNotNull(lOrderDetail.getSetDetailCode())) {
                if (detailcount < Integer.parseInt(lOrderDetail.getSetDetailCode())){
                  detailcount = Integer.parseInt(lOrderDetail.getSetDetailCode());
                }
              }
            }
          }
        } else { // 同構成品が存在しない場合
          setCount++;
          setCodeStr = String.valueOf(setCount);
          
          //新規にdetailMapへ追加
          for (Iterator groupDetailListIte = groupDetailList.iterator(); groupDetailListIte.hasNext();){
            lOrderDetail = (SIOrderDetail) groupDetailListIte.next();
            detailcount++;
            
            String lDeliveryCode = getOrderDeliveryKeyCodeToAddCmdty("0", lOrderDetail.getDeliveryTypeName(), lRegOrder.getNewCmdtyShopCode());
            String lDatailCode = getOrderDetailKeyCodeToAddCmdty(lOrderDetail, setCodeStr, String.valueOf(detailcount));
            
            // セットコードの入れなおし
            lOrderDetail.setDeliveryCode(lDeliveryCode); // 配送先コード
            lOrderDetail.setDetailCode(lDatailCode); // 受注詳細コード
            
            lOrderDetail.setSetCode(setCodeStr);//セット番号
            lOrderDetail.setSetCmdtyCode(lCmdty.getCmdtyCode());//セット商品コード
            lOrderDetail.setSetIndividualCode(lCmdty.getIndividualCode());//セット在庫コード
            lOrderDetail.setSetDetailCode( String.valueOf(detailcount));//セット明細番号
            
            detailMap.put(lDatailCode, lOrderDetail);
            
            // 既存の配送先に、同一配送種別かつ同一ショップの「本人」がいない場合、新規配送先レコードを作成
            deliveryCreateToAddCmdty(lRequest, lConnection, lRegOrder, lDeliveryCode, lOrderDetail, lCmdty);
          }
          
          // オプション
          for (Iterator optionListIte = optionList.iterator(); optionListIte.hasNext();){
            lOrderDetail = (SIOrderDetail) optionListIte.next();
            detailcount++;
            
            String lDeliveryCode = getOrderDeliveryKeyCodeToAddCmdty("0", lOrderDetail.getDeliveryTypeName(), lRegOrder.getNewCmdtyShopCode());
            String lDatailCode = getOrderDetailKeyCodeToAddCmdty(lOrderDetail, setCodeStr, String.valueOf(detailcount));
            
            // セットコードの入れなおし
            lOrderDetail.setDeliveryCode(lDeliveryCode); // 配送先コード
            lOrderDetail.setDetailCode(lDatailCode); // 受注詳細コード
            
            lOrderDetail.setSetCode(setCodeStr);//セット番号
            lOrderDetail.setSetCmdtyCode(lCmdty.getCmdtyCode());//セット商品コード
            lOrderDetail.setSetIndividualCode(lCmdty.getIndividualCode());//セット在庫コード
            lOrderDetail.setSetDetailCode( String.valueOf(detailcount));//セット明細番号
            
            detailMap.put(lDatailCode, lOrderDetail);
            
            // 既存の配送先に、同一配送種別かつ同一ショップの「本人」がいない場合、新規配送先レコードを作成
            deliveryCreateToAddCmdty(lRequest, lConnection, lRegOrder, lDeliveryCode, lOrderDetail, lCmdty);
          }
        }
        /***** 構成商品・オプション商品追加 ここまで *****/
        
        /***** 添付品追加 ここから *****/
        // 添付品判定
        if (appendedList.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();
          List appendedCmdtyNewList = new ArrayList();
          LinkedHashMap appendedKeyMap = new LinkedHashMap();
          Iterator cartAppend = appendedList.iterator();
          while (cartAppend.hasNext()) {
            // 添付品の情報
            SICartCmdty appendedCmdty = (SICartCmdty)cartAppend.next();
            
            if (!checkMap.containsKey(appendedCmdty.getSetIndividualCode() + appendedCmdty.getIndividualCode())) {
              // セット購入数を取得
              String cartAmount = (String)setMap.get(appendedCmdty.getSetIndividualCode());
              String addCartAmount = lRegOrder.getNewCmdtyAmount();
              // 添付品のセット数/添付品数を取得
              String setCountAppended = appendedCmdty.getSetCount();
              BigDecimal a = new BigDecimal(SIUtil.add_LL(cartAmount, addCartAmount));
              BigDecimal b = new BigDecimal(setCountAppended);
              BigDecimal calc = a.divide(b, BigDecimal.ROUND_DOWN);
              if (calc.compareTo(new BigDecimal(0)) > 0) {
                // 明細番号設定
                // オプション判定用に明細カウントを保持
                String setDetailCount = SIUtil.add_LL(String.valueOf(detailcount), "1");
                appendedCmdty.setSetDetailCode(String.valueOf(setDetailCount));
                detailcount++;
                
                // ここですでに同じ商品が存在していた場合、そこにadd
                String addCheckKey = appendedCmdty.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN;
                addCheckKey += appendedCmdty.getSetCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN;
                addCheckKey += appendedCmdty.getSetIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN;
                addCheckKey += appendedCmdty.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN;
                addCheckKey += appendedCmdty.getIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN;
                
                for (Iterator detailMapIte = detailMap.keySet().iterator(); detailMapIte.hasNext();){
                  String detailMapKey = (String) detailMapIte.next();
                  lOrderDetail = (SIOrderDetail) detailMap.get(detailMapKey);
                  
                  if (lOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_APPENDED)) {
                    String sesCheckKey = lOrderDetail.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN;
                    sesCheckKey += lOrderDetail.getSetCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN;
                    sesCheckKey += lOrderDetail.getSetIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN;
                    sesCheckKey += lOrderDetail.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN;
                    sesCheckKey += lOrderDetail.getIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN;
                    
                    if (addCheckKey.equals(sesCheckKey)) {
                      copyOrderDetail(lOrderDetail, getAddCmdtyDetail(appendedCmdty, lOrderDetail.getAmount(), lGiftFlg, lCmdty));
                      lOrderDetail.setAmount(SIUtil.multi_LL(appendedCmdty.getSetCompositionCount(), calc.toString()));
                      appendedKeyMap.put(sesCheckKey, lOrderDetail.getSetCode());
                      break;
                    }
                  }
                }
                
                // 同じ商品が存在していない場合は追加マップへ
                if (!appendedKeyMap.containsKey(addCheckKey)){
                  LinkedHashMap appendedMap = new LinkedHashMap();
                  appendedMap.put("data", appendedCmdty);
                  appendedMap.put("amount", SIUtil.multi_LL(appendedCmdty.getSetCompositionCount(), calc.toString()));
                  appendedCmdtyNewList.add(appendedMap);
                }
              }
              // チェック済Mapへ設定
              checkMap.put(appendedCmdty.getSetIndividualCode() + appendedCmdty.getIndividualCode(), "");
            }
          }
          
          if (appendedCmdtyNewList.size() > 0){
            String appendedAddSetCode = setCodeStr;
            int appendedSetDetailCount = detailcount;
            if (appendedKeyMap.size() > 0) {
              Iterator appendedKeyMapIte = appendedKeyMap.keySet().iterator();
              if (appendedKeyMapIte.hasNext()){
                appendedAddSetCode = (String) appendedKeyMap.get(appendedKeyMapIte.next());
                if (SIUtil.isNull(appendedAddSetCode)) {
                  appendedAddSetCode = setCodeStr;
                } else {
                  // detailCode を取得
                  for (Iterator detailMapIte = detailMap.keySet().iterator(); detailMapIte.hasNext();){
                    String detailMapKey = (String) detailMapIte.next();
                    lOrderDetail = (SIOrderDetail) detailMap.get(detailMapKey);
                    
                    // 最大セットコードを取得
                    if (appendedAddSetCode.equals(lOrderDetail.getSetCode())) {
                      if (appendedSetDetailCount < Integer.parseInt(lOrderDetail.getSetDetailCode())){
                        appendedSetDetailCount = Integer.parseInt(lOrderDetail.getSetDetailCode());
                      }
                    }
                  }
                }
              }
            }
            
            for (Iterator appendedCmdtyNewListIte = appendedCmdtyNewList.iterator(); appendedCmdtyNewListIte.hasNext();){
              LinkedHashMap appendDetailDataMap = (LinkedHashMap) appendedCmdtyNewListIte.next();
              SICartCmdty detailCmdty = (SICartCmdty) appendDetailDataMap.get("data");
              String detailAmount = (String) appendDetailDataMap.get("amount");
              appendedSetDetailCount++;
              
              // 添付品追加
              lOrderDetail = getAddCmdtyDetail(detailCmdty, detailAmount, lGiftFlg, lCmdty);
              
              String lDeliveryCode = getOrderDeliveryKeyCodeToAddCmdty("0", lOrderDetail.getDeliveryTypeName(), lRegOrder.getNewCmdtyShopCode());
              String lDatailCode = getOrderDetailKeyCodeToAddCmdty(lOrderDetail, appendedAddSetCode, String.valueOf(appendedSetDetailCount));
              
              // セットコードの入れなおし
              lOrderDetail.setDeliveryCode(lDeliveryCode); // 配送先コード
              lOrderDetail.setDetailCode(lDatailCode); // 受注詳細コード
              
              lOrderDetail.setSetCode(setCodeStr);//セット番号
              lOrderDetail.setSetCmdtyCode(lCmdty.getCmdtyCode());//セット商品コード
              lOrderDetail.setSetIndividualCode(lCmdty.getIndividualCode());//セット在庫コード
              lOrderDetail.setSetDetailCode( String.valueOf(appendedSetDetailCount));//セット明細番号
              detailMap.put(lDatailCode, lOrderDetail);
              
              // 既存の配送先に、同一配送種別かつ同一ショップの「本人」がいない場合、新規配送先レコードを作成
              deliveryCreateToAddCmdty(lRequest, lConnection, lRegOrder, lDeliveryCode, lOrderDetail, lCmdty);
            }
          }
        }
        /***** 添付品追加 ここまで *****/
        
        /***** セットコード調整 ここから *****/
        if (!setExist) {
          if (!addCartSetCode.equals(setCodeStr)) {
            LinkedHashMap detailNewMap = new LinkedHashMap();
            for (Iterator detailMapIte = detailMap.keySet().iterator(); detailMapIte.hasNext();){
              String detailMapKey = (String) detailMapIte.next();
              SIOrderDetail orderDetail = (SIOrderDetail) detailMap.get(detailMapKey);
              
              if (orderDetail.getSetCode().equals(setCodeStr)) {
                String lDeliveryCode = getOrderDeliveryKeyCodeToAddCmdty("0", lOrderDetail.getDeliveryTypeName(), lRegOrder.getNewCmdtyShopCode());
                String lDatailCode = getOrderDetailKeyCodeToAddCmdty(lOrderDetail, addCartSetCode, lOrderDetail.getSetDetailCode());
                
                // セットコードの入れなおし
                lOrderDetail.setDeliveryCode(lDeliveryCode); // 配送先コード
                lOrderDetail.setDetailCode(lDatailCode); // 受注詳細コード
                
                lOrderDetail.setSetCode(setCodeStr);//セット番号
                detailMapKey = lDatailCode;
              }
              detailNewMap.put(detailMapKey, lOrderDetail);
            }
            detailMap = detailNewMap;
          }
        }
        /***** セットコード調整 ここまで *****/
        session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMap);
      }
    } else { // 通常商品
      
      // カートに商品を追加
      UIMain mainID = new UIMain();
      
      mainID.setCartShopCodeTxt(lRegOrder.getNewCmdtyShopCode());
      mainID.setCartCmdtyCodeTxt(lRegOrder.getNewCmdtyCode());
      mainID.setCartIndividualCodeTxt(lRegOrder.getNewIndividualCode());
      mainID.setCartStndrdCodeTxt1(lRegOrder.getNewCmdtyStndrd1Code());
      mainID.setCartStndrdCodeTxt2(lRegOrder.getNewCmdtyStndrd2Code());
      mainID.setCartElementCodeTxt1(lRegOrder.getNewCmdtyElement1Code());
      mainID.setCartElementCodeTxt2(lRegOrder.getNewCmdtyElement2Code());
      mainID.setCartAmountTxt(lRegOrder.getNewCmdtyAmount());
      
      mainID.setCmdtyCompositionFlg(lRegOrder.getNewCmdtyCompositionFlg());
      mainID.setCompositionGroupCount("");
      mainID.setCompositionDetail(null);
      mainID.setCompositionOption(null);
      mainID.setCompositionAppended(null);
      
      mainID.addCartPos(lRequest, lConnection, true, true);
      
      String addCartSetCode = mainID.getAddCartCmdtySetCode();
      
      if (SIUtil.isNotNull(addCartSetCode)) {
        String lDeliveryCode = getOrderDeliveryKeyCodeToAddCmdty("0", lCmdty.getDeliveryTypeName(), lRegOrder.getNewCmdtyShopCode());
        
        String lDatailCode = "";
        lDatailCode += lRegOrder.getNewCmdtyShopCode() + SIConfig.SIWEBSHOPPING_TOKEN;
        lDatailCode += lRegOrder.getNewCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN;
        lDatailCode += lRegOrder.getNewIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN;
        lDatailCode += lRegOrder.getNewCmdtyStndrd1Code() == null ? SIConfig.SIWEBSHOPPING_TOKEN : lRegOrder.getNewCmdtyStndrd1Code() + SIConfig.SIWEBSHOPPING_TOKEN;// 規格1
        lDatailCode += lRegOrder.getNewCmdtyElement1Code() == null ? SIConfig.SIWEBSHOPPING_TOKEN : lRegOrder.getNewCmdtyElement1Code() + SIConfig.SIWEBSHOPPING_TOKEN; // 規格2
        lDatailCode += lRegOrder.getNewCmdtyStndrd2Code() == null ? SIConfig.SIWEBSHOPPING_TOKEN : lRegOrder.getNewCmdtyStndrd2Code() + SIConfig.SIWEBSHOPPING_TOKEN; // エレメント1
        lDatailCode += lRegOrder.getNewCmdtyElement2Code() == null ? SIConfig.SIWEBSHOPPING_TOKEN : lRegOrder.getNewCmdtyElement2Code() + SIConfig.SIWEBSHOPPING_TOKEN; // エレメント2
        lDatailCode += "0"; // アドレス帳コード：本人
        lDatailCode +=  SIConfig.SIWEBSHOPPING_TOKEN + "0" + SIConfig.SIWEBSHOPPING_TOKEN;
        
        lOrderDetail = new SIOrderDetail();
        lOrderDetail.setEncode(SIConfig.SIENCODE_NONE);
        lOrderDetail.setDeliveryCode(lDeliveryCode); // 配送先コード
        lOrderDetail.setDetailCode(lDatailCode); // 受注詳細コード
        lOrderDetail.setShopCode(lRegOrder.getNewCmdtyShopCode()); // ショップコード
        lOrderDetail.setCmdtyCode(lRegOrder.getNewCmdtyCode()); // 商品コード
        lOrderDetail.setIndividualCode(lRegOrder.getNewIndividualCode()); // 在庫コード
        lOrderDetail.setShopName(lCmdty.getFrontShopName()); // ショップ名
        lOrderDetail.setCmdtyName(lCmdty.getCmdtyName()); // 商品名
        lOrderDetail.setStndrdCode1(lRegOrder.getNewCmdtyStndrd1Code()); // 規格1
        lOrderDetail.setStndrdName1(lCmdty.getStndrdName1()); // 規格1名
        lOrderDetail.setElementCode1(lRegOrder.getNewCmdtyElement1Code()); // エレメント1
        lOrderDetail.setElementName1(lCmdty.getElementName1()); // エレメント1名
        lOrderDetail.setStndrdCode2(lRegOrder.getNewCmdtyStndrd2Code()); // 規格2
        lOrderDetail.setStndrdName2(lCmdty.getStndrdName2()); // 規格2名
        lOrderDetail.setElementCode2(lRegOrder.getNewCmdtyElement2Code()); // エレメント2
        lOrderDetail.setElementName2(lCmdty.getElementName2()); // エレメント2名
        lOrderDetail.setAmount(lRegOrder.getNewCmdtyAmount()); // 数量
        lOrderDetail.setOrgPrice(lCmdty.getUnitPrice()); // 本体値段
        lOrderDetail.setPrice(lCmdty.getFinalUnitPrice()); // 値引き後の購入値段
        lOrderDetail.setTaxFlg(lCmdty.getTaxFlg()); // 税フラグ
        lOrderDetail.setTaxRate(lCmdty.getTaxRate()); // 税率
        lOrderDetail.setCmdtySize(lCmdty.getCmdtySize()); // 商品サイズ
        lOrderDetail.setWrappingFlg(lCmdty.getWrappingFlg()); // ラッピングフラグ
        lOrderDetail.setShopGiftFlg(lGiftFlg); // ショップギフトフラグ
        lOrderDetail.setDeliveryTypeCode(lCmdty.getDeliveryTypeCode()); // 配送種別コード
        lOrderDetail.setDeliveryTypeName(lCmdty.getDeliveryTypeName()); // 配送種別名称
        lOrderDetail.setPriceIncTax(lCmdty.getFinalUnitPriceIncTax()); // 消費税込みの金額
        
        lOrderDetail.setConsignGoodsFee(lCmdty.getConsignGoodsFee());//委託手数料
        lOrderDetail.setColorName(lCmdty.getColorName());//カラー
        lOrderDetail.setUsedNewFlg(lCmdty.getUsedNewFlg());//中古新品区分
        
        lOrderDetail.setSetDetailFlg(SIConfig.SET_DETAIL_FLG_NORMAL);//明細区分
        lOrderDetail.setSetCode("0");//セット番号
        lOrderDetail.setSetCmdtyCode("");//セット商品コード
        lOrderDetail.setSetIndividualCode("");//セット在庫コード
        lOrderDetail.setSetDetailCode("");//セット明細番号
        
        String lCalcPrice="0";
        if (lOrderDetail.getTaxFlg().equals("1")){
          lCalcPrice=SITax.calcPriceIncTax(lOrderDetail.getPrice(),lOrderDetail.getTaxRate());
        }else{
          lCalcPrice=lOrderDetail.getPrice();
        }
        lOrderDetail.setPriceIncTax(lCalcPrice);
        
        // 存在している場合は商品数量追加
        String chkAddKey = lOrderDetail.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN;
        chkAddKey += lOrderDetail.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN;
        chkAddKey += lOrderDetail.getIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN;
        
        boolean isCmdtyFlg = false;
        for (Iterator detailMapIte = detailMap.keySet().iterator(); detailMapIte.hasNext();){
          SIOrderDetail chkOrderDetail = (SIOrderDetail) detailMap.get(detailMapIte.next());
          
          if (chkOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL)) {
            String chkKey = chkOrderDetail.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN;
            chkKey += chkOrderDetail.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN;
            chkKey += chkOrderDetail.getIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN;
            
            if (chkAddKey.equals(chkKey)) { // 存在している
              String amountTmp = chkOrderDetail.getAmount();
              copyOrderDetail(chkOrderDetail, lOrderDetail);
              chkOrderDetail.setAmount(SIUtil.add_LL(amountTmp, lOrderDetail.getAmount()));
              isCmdtyFlg = true;
              break;
            }
          }
        }
        
        // 存在していない場合は商品を追加
        if (!isCmdtyFlg) {
          detailMap.put(lDatailCode, lOrderDetail);
        }
        
        session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMap);
        
        // 既存の配送先に、同一配送種別かつ同一ショップの「本人」がいない場合、新規配送先レコードを作成
        LinkedHashMap deliveryMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME);
        SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
        
        if (deliveryMap.get(lDeliveryCode) == null) {
          lOrderDelivery = new SIOrderDelivery();
          SICustAddress lAddress = new SICustAddress(lRegOrder.getCustCode(), "0");
          lAddress.reset(lConnection);
          
          SICartDetail.copy(lAddress, lOrderDelivery);
          lOrderDelivery.setDeliveryCode(lDeliveryCode);
          lOrderDelivery.setDeliveryTypeName(lCmdty.getDeliveryTypeName());
          lOrderDelivery.setTaxRate(SITax.getTaxRate(lConnection));
          lOrderDelivery.setShopCode(lRegOrder.getNewCmdtyShopCode());
          lOrderDelivery.setShopName(lCmdty.getFrontShopName());
          
          SIMallShop lMallShop = new SIMallShop(lRegOrder.getNewCmdtyShopCode());
          lMallShop.reset(lConnection);
          lOrderDelivery.setDeliveryTaxFlg(lMallShop.getDeliveryTaxFlg());
          lOrderDelivery.setDeliveryTypeCode(lCmdty.getDeliveryTypeCode());
          
          deliveryMap.put(lDeliveryCode, lOrderDelivery);
          session.setAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME, deliveryMap);
        }
      }
    }
    // EDBTG003-00 elecs-matsushima add end
    // 商品追加後、新規入力エリアのクリア
    lRegOrder.setNewCmdtyShopCode("");
    lRegOrder.setNewCmdtyCode("");
    lRegOrder.setNewIndividualCode("");
    lRegOrder.setNewCmdtyStndrd1Code("");
    lRegOrder.setNewCmdtyStndrd2Code("");
    lRegOrder.setNewCmdtyElement1Code("");
    lRegOrder.setNewCmdtyElement2Code("");
    lRegOrder.setNewCmdtyHasStndrd("0");
    lRegOrder.setNewCmdtyAmount("1");
    lRegOrder.setNewCmdtyCompositionFlg("");// EDBTG003-00 ohsugi add end
    session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME, lRegOrder);
  }
  
  //EDBTG003-00 elecs-matsushima add start
  private void deliveryCreateToAddCmdty(HttpServletRequest lRequest, Connection lConnection, UIRegOrder lRegOrder, String lDeliveryCode, SIOrderDetail lOrderDetail, SICartCmdty lSetCmdty){
    HttpSession session = lRequest.getSession(true);// セッションの取得
    
    // 既存の配送先に、同一配送種別かつ同一ショップの「本人」がいない場合、新規配送先レコードを作成
    LinkedHashMap deliveryMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME);
    SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
    
    if (deliveryMap.get(lDeliveryCode) == null) {
      lOrderDelivery = new SIOrderDelivery();
      SICustAddress lAddress = new SICustAddress(lRegOrder.getCustCode(), "0");
      lAddress.reset(lConnection);
      
      SICartDetail.copy(lAddress, lOrderDelivery);
      lOrderDelivery.setDeliveryCode(lDeliveryCode);
      //EDBTG003-00 mod start
//      lOrderDelivery.setDeliveryTypeName(lCmdty.getDeliveryTypeName());
      lOrderDelivery.setDeliveryTypeName(lOrderDetail.getDeliveryTypeName());
      //EDBTG003-00 mod end
      lOrderDelivery.setTaxRate(SITax.getTaxRate(lConnection));
      lOrderDelivery.setShopCode(lRegOrder.getNewCmdtyShopCode());
      //EDBTG003-00 mod start
//      lOrderDelivery.setShopName(lCmdty.getFrontShopName());
      lOrderDelivery.setShopName(lSetCmdty.getFrontShopName());
      //EDBTG003-00 mod end
      
      SIMallShop lMallShop = new SIMallShop(lRegOrder.getNewCmdtyShopCode());
      lMallShop.reset(lConnection);
      lOrderDelivery.setDeliveryTaxFlg(lMallShop.getDeliveryTaxFlg());
      //EDBTG003-00 mod start
//      lOrderDelivery.setDeliveryTypeCode(lCmdty.getDeliveryTypeCode());
      lOrderDelivery.setDeliveryTypeCode(lOrderDetail.getDeliveryTypeCode());
      //EDBTG003-00 mod end
      
      deliveryMap.put(lDeliveryCode, lOrderDelivery);
      session.setAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME, deliveryMap);
    }
  }
  
  private SIOrderDetail copyOrderDetail(SIOrderDetail orderDetail1, SIOrderDetail orderDetail2){
    orderDetail1.setShopCode(orderDetail2.getShopCode()); // ショップコード
    orderDetail1.setCmdtyCode(orderDetail2.getCmdtyCode()); // 商品コード
    orderDetail1.setIndividualCode(orderDetail2.getIndividualCode());// 在庫コード
    orderDetail1.setShopName(orderDetail2.getShopName()); // ショップ名
    orderDetail1.setCmdtyName(orderDetail2.getCmdtyName()); // 商品名
    orderDetail1.setStndrdCode1(orderDetail2.getStndrdCode1()); // 規格1
    orderDetail1.setStndrdName1(orderDetail2.getStndrdName1()); // 規格1名
    orderDetail1.setElementCode1(orderDetail2.getElementCode1());// エレメント1
    orderDetail1.setElementName1(orderDetail2.getElementName1());// エレメント1名
    orderDetail1.setStndrdCode2(orderDetail2.getStndrdCode2()); // 規格1
    orderDetail1.setStndrdName2(orderDetail2.getStndrdName2()); // 規格1名
    orderDetail1.setElementCode2(orderDetail2.getElementCode2());// エレメント1
    orderDetail1.setElementName2(orderDetail2.getElementName2());// エレメント1名
    orderDetail1.setAmount(orderDetail2.getAmount()); // 数量
    orderDetail1.setOrgPrice(orderDetail2.getOrgPrice()); // 本体値段
    orderDetail1.setPrice(orderDetail2.getPrice()); // 値引き後の購入値段
    orderDetail1.setTaxFlg(orderDetail2.getTaxFlg()); // 税フラグ
    orderDetail1.setTaxRate(orderDetail2.getTaxRate()); // 税率
    orderDetail1.setCmdtySize(orderDetail2.getCmdtySize()); // 商品サイズ
    orderDetail1.setWrappingFlg(orderDetail2.getWrappingFlg());// ラッピングフラグ
    orderDetail1.setWrappingCode(orderDetail2.getWrappingCode());// ラッピングコード
    orderDetail1.setWrappingName(orderDetail2.getWrappingName());// ラッピング名
    orderDetail1.setWrappingPrice(orderDetail2.getWrappingPrice());// ラッピング価格
    orderDetail1.setWrappingTaxFlg(orderDetail2.getWrappingTaxFlg());// ラッピング税フラグ
    orderDetail1.setShopGiftFlg(orderDetail2.getShopGiftFlg()); // ショップギフトフラグ
    orderDetail1.setDeliveryTypeCode(orderDetail2.getDeliveryTypeCode());// 配送種別コード
    orderDetail1.setDeliveryTypeName(orderDetail2.getDeliveryTypeName());// 配送種別名称
    orderDetail1.setPriceIncTax(orderDetail2.getPriceIncTax()); // 消費税込みの金額
    orderDetail1.setBranchCode(orderDetail2.getBranchCode());
    orderDetail1.setChargeCode(orderDetail2.getChargeCode());
    orderDetail1.setDeliveryFee(orderDetail2.getDeliveryFee());
    orderDetail1.setPurchasePrice(orderDetail2.getPurchasePrice());// 仕入価格
    orderDetail1.setProcessingExpance(orderDetail2.getProcessingExpance());// 加工費
    orderDetail1.setConsignGoodsFee(orderDetail2.getConsignGoodsFee());// 委託手数料
    orderDetail1.setUsedNewFlg(orderDetail2.getUsedNewFlg());
    orderDetail1.setColorName(orderDetail2.getColorName());
    
    orderDetail1.setSetDetailFlg(orderDetail2.getSetDetailFlg());
    orderDetail1.setSetCmdtyCode(orderDetail2.getSetCmdtyCode());
    orderDetail1.setSetIndividualCode(orderDetail2.getSetIndividualCode());
    return orderDetail1;
  }
  
  private SIOrderDetail getAddCmdtyDetail(SICartCmdty groupDetailCmdty, String amount, String lGiftFlg, SICartCmdty lCmdty){
    String lDeliveryCode = "";
    lDeliveryCode += "0" + SIConfig.SIWEBSHOPPING_TOKEN;
    lDeliveryCode += groupDetailCmdty.getDeliveryTypeName() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDeliveryCode += groupDetailCmdty.getShopCode();
    String lDatailCode = "";
    lDatailCode += groupDetailCmdty.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDatailCode += groupDetailCmdty.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDatailCode += groupDetailCmdty.getIndividualCode() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDatailCode += groupDetailCmdty.getStndrdCode1() == null ? SIConfig.SIWEBSHOPPING_TOKEN : groupDetailCmdty.getStndrdCode1() + SIConfig.SIWEBSHOPPING_TOKEN;
    lDatailCode += groupDetailCmdty.getElementCode1() == null ? SIConfig.SIWEBSHOPPING_TOKEN : groupDetailCmdty.getElementCode1() + SIConfig.SIWEBSHOPPING_TOKEN; // 規格2
    lDatailCode += groupDetailCmdty.getStndrdCode2() == null ? SIConfig.SIWEBSHOPPING_TOKEN : groupDetailCmdty.getStndrdCode2() + SIConfig.SIWEBSHOPPING_TOKEN; // エレメント1
    lDatailCode += groupDetailCmdty.getElementCode2() == null ? SIConfig.SIWEBSHOPPING_TOKEN : groupDetailCmdty.getElementCode2() + SIConfig.SIWEBSHOPPING_TOKEN; // エレメント2
    lDatailCode += "0"; // アドレス帳コード：本人
    lDatailCode +=  SIConfig.SIWEBSHOPPING_TOKEN  + SIConfig.SIWEBSHOPPING_TOKEN; // この時点ではセットコードは不明
    
    SIOrderDetail lOrderDetail = new SIOrderDetail();
    lOrderDetail = new SIOrderDetail();
    lOrderDetail.setEncode(SIConfig.SIENCODE_NONE);
    lOrderDetail.setDeliveryCode(lDeliveryCode); // 配送先コード
    lOrderDetail.setDetailCode(lDatailCode); // 受注詳細コード
    lOrderDetail.setShopCode(groupDetailCmdty.getShopCode()); // ショップコード
    lOrderDetail.setCmdtyCode(groupDetailCmdty.getCmdtyCode()); // 商品コード
    lOrderDetail.setIndividualCode(groupDetailCmdty.getIndividualCode()); // 在庫コード
    lOrderDetail.setShopName(groupDetailCmdty.getFrontShopName()); // ショップ名
    lOrderDetail.setCmdtyName(groupDetailCmdty.getCmdtyName()); // 商品名
    lOrderDetail.setStndrdCode1(groupDetailCmdty.getStndrdCode1()); // 規格1
    lOrderDetail.setStndrdName1(groupDetailCmdty.getStndrdName1()); // 規格1名
    lOrderDetail.setElementCode1(groupDetailCmdty.getElementCode1()); // エレメント1
    lOrderDetail.setElementName1(groupDetailCmdty.getElementName1()); // エレメント1名
    lOrderDetail.setStndrdCode2(groupDetailCmdty.getStndrdCode2()); // 規格2
    lOrderDetail.setStndrdName2(groupDetailCmdty.getStndrdName2()); // 規格2名
    lOrderDetail.setElementCode2(groupDetailCmdty.getElementCode2()); // エレメント2
    lOrderDetail.setElementName2(groupDetailCmdty.getElementName2()); // エレメント2名
    lOrderDetail.setAmount(amount); // 数量
    lOrderDetail.setOrgPrice(groupDetailCmdty.getUnitPrice()); // 本体値段
    lOrderDetail.setPrice(groupDetailCmdty.getFinalUnitPrice()); // 値引き後の購入値段
    lOrderDetail.setTaxFlg(groupDetailCmdty.getTaxFlg()); // 税フラグ
    lOrderDetail.setTaxRate(groupDetailCmdty.getTaxRate()); // 税率
    lOrderDetail.setCmdtySize(groupDetailCmdty.getCmdtySize()); // 商品サイズ
    lOrderDetail.setWrappingFlg(groupDetailCmdty.getWrappingFlg()); // ラッピングフラグ
    lOrderDetail.setShopGiftFlg(lGiftFlg); // ショップギフトフラグ
    lOrderDetail.setDeliveryTypeCode(groupDetailCmdty.getDeliveryTypeCode()); // 配送種別コード
    lOrderDetail.setDeliveryTypeName(groupDetailCmdty.getDeliveryTypeName()); // 配送種別名称
    lOrderDetail.setPriceIncTax(groupDetailCmdty.getFinalUnitPriceIncTax()); // 消費税込みの金額
    lOrderDetail.setConsignGoodsFee(groupDetailCmdty.getConsignGoodsFee());//委託手数料
    lOrderDetail.setColorName(groupDetailCmdty.getColorName());//カラー
    lOrderDetail.setUsedNewFlg(groupDetailCmdty.getUsedNewFlg());//中古新品区分
    lOrderDetail.setSetDetailFlg(groupDetailCmdty.getSetDetailFlg());//明細区分
    
    lOrderDetail.setSetCode(groupDetailCmdty.getSetCode());//セット番号
    lOrderDetail.setSetCmdtyCode(lCmdty.getCmdtyCode());//セット商品コード
    lOrderDetail.setSetIndividualCode(lCmdty.getIndividualCode());//セット在庫コード
    lOrderDetail.setSetDetailCode(groupDetailCmdty.getSetDetailCode());//セット明細番号
    
    String lCalcPrice = "0";
    if (lOrderDetail.getTaxFlg().equals("1")){
      lCalcPrice=SITax.calcPriceIncTax(lOrderDetail.getPrice(),lOrderDetail.getTaxRate());
    }else{
      lCalcPrice=lOrderDetail.getPrice();
    }
    lOrderDetail.setPriceIncTax(lCalcPrice);
    
    return lOrderDetail;
 }
  
  /**
   *
   * @param lConnection コネクション
   * @param detailCmdtyKeys 構成品のkeys
   * @param discountRate //値引率
   * @param lGiftFlg // ギフトフラグ
   * @param lCmdty // 構成品のセット商品
   * @return
   */
  private SIOrderDetail getAddCmdtyDetailFromKey(Connection lConnection, String[] detailCmdtyKeys, String discountRate, String lGiftFlg, SICartCmdty lCmdty){
    SICartCmdty groupDetailCmdty = new SICartCmdty(detailCmdtyKeys[0], detailCmdtyKeys[1], detailCmdtyKeys[2], "","","","");
    groupDetailCmdty.reset(lConnection);
    // 会員値引き率をセット
    groupDetailCmdty.setMemberDiscountRate(discountRate);
    return getAddCmdtyDetail(groupDetailCmdty, detailCmdtyKeys[3], lGiftFlg, lCmdty);
  }
  // EDBTG003-00 elecs-matsushima add end
  
  /**
   * <b>refreshCmdtyDetail</b> 商品別一覧情報のリフレッシュを行います
   * 
   * @param lRequest
   */
  private void refreshCmdtyDetail(HttpServletRequest lRequest) {
    HttpSession session = lRequest.getSession(true);// セッションの取得
    
    LinkedHashMap detailMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
    LinkedHashMap customMap = new LinkedHashMap();
    
    Iterator lDetailIta = detailMap.values().iterator();
    Iterator customIta = null;
    
    SIOrderDetail lOrderDetail = new SIOrderDetail();
    SIOrderCmdty lOrderCmdty = new SIOrderCmdty();
    
    boolean addedFlg = false;
    int ii = 0;
    
    while (lDetailIta.hasNext()) {
      addedFlg = false;
      ii++;
      lOrderDetail = (SIOrderDetail) lDetailIta.next();
      
      customIta = customMap.values().iterator();
      while (customIta.hasNext()) {
        lOrderCmdty = (SIOrderCmdty) customIta.next();
        
        if (lOrderDetail.getShopCode().equals(lOrderCmdty.getShopCode()) && lOrderDetail.getCmdtyCode().equals(lOrderCmdty.getCmdtyCode())
            && lOrderDetail.getIndividualCode().equals(lOrderCmdty.getIndividualCode()) && lOrderDetail.getStndrdCode1().equals(lOrderCmdty.getStndrdCode1())
            && lOrderDetail.getElementCode1().equals(lOrderCmdty.getElementCode1()) && lOrderDetail.getStndrdCode2().equals(lOrderCmdty.getStndrdCode2())
            && lOrderDetail.getElementCode2().equals(lOrderCmdty.getElementCode2())) {
          // ショップコード、商品コード、規格1、エレメント1、規格2、エレメント2 でサマリー
          lOrderCmdty.setAmount(SIUtil.add_LL(lOrderCmdty.getAmount(), lOrderDetail.getAmount()));
          addedFlg = true;
          break;
        }
      }
      if (!addedFlg) {
        lOrderCmdty = new SIOrderCmdty();
        lOrderCmdty.setEncode(SIConfig.SIENCODE_NONE);
        lOrderCmdty.setOrderCode(lOrderDetail.getOrderCode()); // 受注番号
        lOrderCmdty.setShopCode(lOrderDetail.getShopCode()); // ショップコード
        lOrderCmdty.setShopName(lOrderDetail.getShopName()); // ショップ名
        lOrderCmdty.setCmdtyCode(lOrderDetail.getCmdtyCode()); // 商品コード
        lOrderCmdty.setIndividualCode(lOrderDetail.getIndividualCode());// 在庫コード
        lOrderCmdty.setCmdtyName(lOrderDetail.getCmdtyName()); // 商品名
        lOrderCmdty.setStndrdCode1(lOrderDetail.getStndrdCode1()); // 規格1
        lOrderCmdty.setElementCode1(lOrderDetail.getElementCode1()); // エレメント1
        lOrderCmdty.setStndrdCode2(lOrderDetail.getStndrdCode2()); // 規格2
        lOrderCmdty.setElementCode2(lOrderDetail.getElementCode2()); // エレメント2
        lOrderCmdty.setStndrdName1(lOrderDetail.getStndrdName1()); // 規格名1
        lOrderCmdty.setElementName1(lOrderDetail.getElementName1()); // エレメント名1
        lOrderCmdty.setStndrdName2(lOrderDetail.getStndrdName2()); // 規格名2
        lOrderCmdty.setElementName2(lOrderDetail.getElementName2()); // エレメント名2
        lOrderCmdty.setAmount(lOrderDetail.getAmount()); // 数量
        lOrderCmdty.setOrgPrice(lOrderDetail.getOrgPrice()); // 本体価格
        lOrderCmdty.setPrice(lOrderDetail.getPrice()); // 購入価格
        lOrderCmdty.setTaxFlg(lOrderDetail.getTaxFlg()); // 本体価格税区分
        lOrderCmdty.setTaxRate(lOrderDetail.getTaxRate()); // 税率
        lOrderCmdty.setPriceIncTax(lOrderDetail.getPriceIncTax()); // 購入価格
        
        customMap.put(new Integer(ii).toString(), lOrderCmdty);
      }
    }
    session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_DTIL_NAME, customMap);
  }
  
  /**
   * <b>updateOrderTable</b> データベースにレコードを作成します。
   * 
   * @param lRequest
   * @param lConnection
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   * @throws SIMismatchException
   * @throws SIErrorException
   * @throws SIFatalException
   */
  private void updateOrderTable(HttpServletRequest lRequest, Connection lConnection, String lPointManCode) throws SIDuplicateKeyException, SIDBAccessException,
      SIMismatchException, SIErrorException, SIFatalException, SIDebtPointException, SIDisagreementException {
    // セッションの取得
    HttpSession session = lRequest.getSession(true);
    SIURLParameter urlParam = new SIURLParameter(lRequest);
    
    // EDBTG003-00 elecs-matsushima del start
//    LinkedHashMap allocationMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_ALLOCATION);
    // EDBTG003-00 elecs-matsushima del end
    
    // 受注完了画面でのリロード禁止
    if (session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME) == null) return;
    
    // 受注（ヘッダ）情報の取得
    UIRegOrder regOrderID = (UIRegOrder) session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
    if (regOrderID == null) regOrderID = new UIRegOrder();
    
    // 支払情報・金額情報・配送希望日時などの取得
    UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
    lCasher.calcSum(lRequest, lConnection, urlParam); // 総額などの計算
    
    // ログイン（仮ログイン、顧客）ユーザ情報の取得
    SIUserInfo lUserLogin = SIHTMLUtil.getUserInfo(lRequest);
    SILogin siLogin = SIHTMLUtil.getLogin(lRequest);
    
    // 修正対象の受注番号、受注枝番
    String lOrderCode = regOrderID.getOrderCode();
    String lOrderBranchCode = regOrderID.getOrderBranchCode();
    
    String diffPrice = "0";
    
    StringBuffer individualCode = new StringBuffer();// ポイント計算用1
    StringBuffer cmdtyTotalPrice = new StringBuffer();// ポイント計算用2
    
    // EDBTG003-00 elecs-matsushima add start
    LinkedHashMap cartDetailMap = (LinkedHashMap) session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME);
    LinkedHashMap allocationMap = new LinkedHashMap();
    
    if (cartDetailMap != null){
      SIOrderDetail lOrderDetail = new SIOrderDetail();
      
      for (Iterator iteCartDetailMap = cartDetailMap.keySet().iterator();iteCartDetailMap.hasNext(); ){
        String cartDetailKey = (String) iteCartDetailMap.next();
        lOrderDetail = (SIOrderDetail) cartDetailMap.get(cartDetailKey);
        
        if (lOrderDetail.getAllocationMap() != null && lOrderDetail.getAllocationMap().size() > 0){
          allocationMap.put(lOrderCode+"_"+lOrderDetail.getCmdtyCode()+"_"+lOrderDetail.getIndividualCode()+"_"+lOrderDetail.getSetCode()+"_"+lOrderDetail.getSetDetailFlg(), lOrderDetail.getAllocationMap());
        }
      }
    }
    // EDBTG003-00 elecs-matsushima add end
    
    // /////////////////////////////////////////////////////
    // 修正元伝票のキャンセル処理(元伝票を履歴として残す) //
    // /////////////////////////////////////////////////////
    Statement lStatement = null;
    ResultSet lResultSet = null;
    try {
      SIModifyRec lRec = new SIModifyRec();
      SISpcType lSpcType = new SISpcType();
      
      // 商品の在庫管理フラグ
      String lAmountFlg = "1";
      
      if (SIUtil.isNotNull(lOrderCode)) {
        // ポイントを削除する。
        SIPointMan.pointDelete(lConnection, lOrderCode);
        
        // RFM分析テーブルを削除する。
        //(new SIRegRfmOrderLogSrv()).deleteTableData(lConnection, lOrderCode);
        
        /*
         * //受注数量を戻す StringBuffer lSqlBuf = new StringBuffer("SELECT * FROM ").append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME).append(" WHERE OrderCode=");
         * lSqlBuf.append(SIDBUtil.SQL2Str(lOrderCode)); lStatement = lConnection.createStatement (); lResultSet = lStatement.executeQuery(lSqlBuf.toString()); while
         * (lResultSet.next()) { lSpcType = new SISpcType("Amount+"+lResultSet.getString("Amount")); StringBuffer lCmdtySqlBuf=new StringBuffer("SELECT AmountFlg FROM CmdtyMTbl
         * WHERE ShopCode="); lCmdtySqlBuf.append(SIDBUtil.SQL2Str(lResultSet.getString("ShopCode"))); lCmdtySqlBuf.append(" AND
         * CmdtyCode=").append(SIDBUtil.SQL2Str(lResultSet.getString("CmdtyCode"))); lAmountFlg=SIDBUtil.getFirstData(lConnection, lCmdtySqlBuf.toString());
         * log.debug("lCmdtySqlBuf="+lCmdtySqlBuf.toString()+",lAmountFlg="+lAmountFlg); if (lAmountFlg.equals("0")) continue; if
         * (SIUtil.isNull(lResultSet.getString("StndrdCode1"))&&SIUtil.isNull(lResultSet.getString("StndrdCode2"))){ lRec=new SIModifyRec("CmdtyMTbl");
         * lRec.addCondition("ShopCode",lResultSet.getString("ShopCode")); lRec.addCondition("CmdtyCode",lResultSet.getString("CmdtyCode")); }else if
         * (SIUtil.isNotNull(lResultSet.getString("StndrdCode1"))&&SIUtil.isNotNull(lResultSet.getString("StndrdCode2"))){ lRec=new SIModifyRec("CmdtyStndrdMTbl");
         * lRec.addCondition("ShopCode",lResultSet.getString("ShopCode")); lRec.addCondition("CmdtyCode",lResultSet.getString("CmdtyCode"));
         * lRec.addCondition("StndrdCode1",lResultSet.getString("StndrdCode1")); lRec.addCondition("ElementCode1",lResultSet.getString("ElementCode1"));
         * lRec.addCondition("StndrdCode2",lResultSet.getString("StndrdCode2")); lRec.addCondition("ElementCode2",lResultSet.getString("ElementCode2")); }else if
         * (SIUtil.isNotNull(lResultSet.getString("StndrdCode1"))){ lRec=new SIModifyRec("CmdtyStndrdMTbl"); lRec.addCondition("ShopCode",lResultSet.getString("ShopCode"));
         * lRec.addCondition("CmdtyCode",lResultSet.getString("CmdtyCode")); lRec.addCondition("StndrdCode1",lResultSet.getString("StndrdCode1"));
         * lRec.addCondition("ElementCode1",lResultSet.getString("ElementCode1")); }else if (SIUtil.isNotNull(lResultSet.getString("StndrdCode2"))){ lRec=new
         * SIModifyRec("CmdtyStndrdMTbl"); lRec.addCondition("ShopCode",lResultSet.getString("ShopCode")); lRec.addCondition("CmdtyCode",lResultSet.getString("CmdtyCode"));
         * lRec.addCondition("StndrdCode2",lResultSet.getString("StndrdCode2")); lRec.addCondition("ElementCode2",lResultSet.getString("ElementCode2")); }
         * lRec.add("Amount",lSpcType); log.debug("lRec.getSQL()=="+lRec.getSQL()); lRec.execute(lConnection); }
         */
        // 受注ヘッダの修正、有効フラグを無効状態("0")にする
        lRec = new SIModifyRec(SIConfig.SITABLE_ORDER_NAME);
        lRec.addCondition("ORDERCODE", lOrderCode); // 受注番号
        lRec.addCondition("ORDERBRANCHCODE", lOrderBranchCode); // 受注枝番
        lRec.add("ENABLEDFLG", "0");
        lRec.execute(lConnection);
      }
    } catch (SIDuplicateKeyException e) {
      throw new SIDBAccessException(e);
    } catch (SIDBAccessException e) {
      throw new SIDBAccessException(e);
    } catch (SQLException e) {
      throw new SIDBAccessException(e);
    } finally {
      SIDBUtil.close(lStatement, lResultSet);
    }
    
    // ///////////////////////
    // 修正伝票の作成処理 //
    // ///////////////////////
    SITableConditionManager lManCondition = new SITableConditionManager();
    SITableCondition lTableCondition = new SITableCondition();
    
    // 予約商品カート
    SIReserveCartManager lRsrCartManager = (SIReserveCartManager) session.getAttribute(SIConfig.SISESSION_RESERVE_CART_INFO_NAME);
    if (lRsrCartManager == null) lRsrCartManager = new SIReserveCartManager();
    lRsrCartManager.clearUsed();
    
    // 予約注文
    SIReserveOrder lReserveOrder = new SIReserveOrder();
    
    // 処理日時
    SIDateTime lDateTime = new SIDateTime();
    
    StringBuffer lMailBuf = new StringBuffer();
    StringBuffer lSqlBuf = new StringBuffer();
    StringBuffer lSelBuf = new StringBuffer();
    StringBuffer lPointBuf = new StringBuffer();
    
    String lLeftAmount = "0";
    String lLeftReserveAmount = "0";
    String pointEnableFlg = new String("0");
    // ポイントを使用できるかどうか
    pointEnableFlg = SIDBUtil.getPointEnableFlg(lCasher.getCasherShopCode(), lConnection);
    if (SIDBUtil.hasData(lConnection, "SELECT ordercode FROM otherordertbl WHERE ordercode='" + lOrderCode + "'")) pointEnableFlg = "0";
    
    // メール送信オブジェクト
    SISendMail lSendMail = new SISendMail();
    try {
      if (SIUtil.isNull(regOrderID.getMailTemplate())) {
        lSendMail.setMailTemp(lConnection, lCasher.getCasherShopCode(), SIConfig.SIMAIL_TEMPLATE_ORDER_COMFIRM);
        lSendMail.appendMailTitle("【再送】","");
        lMailBuf.append("\n受注メールを再送致します。\n");
        lSendMail.insertContent1(lMailBuf.toString());
        lMailBuf = new StringBuffer();
      } else {
        lSendMail.setMailTemp(lConnection, lCasher.getCasherShopCode(), regOrderID.getMailTemplate());
      }
    } catch (SIFatalException e2) {
      e2.printStackTrace();
    }
    
    // 1.修正伝票の受注枝番の取得
    lOrderBranchCode = SIUtil.add_LL(lOrderBranchCode, "1");
    
    // 2.受注配送先番号の取得
    String lOrderDeliveryCode = "";
    
    // 3.受注ヘッダテーブルにレコードを作製
    SIInsertRec lRec = new SIInsertRec(SIConfig.SITABLE_ORDER_NAME);
    lRec.add("ORDERCODE", lOrderCode); // 受注番号
    lRec.add("ORDERBRANCHCODE", lOrderBranchCode); // 受注枝番
    lRec.add("CUSTCODE", regOrderID.getCustCode()); // 顧客コード
    lRec.add("CUSTCOMPANYFLG", regOrderID.getCustCompanyFlg()); // 法人フラグ
    lRec.add("CUSTNAME", regOrderID.getCustName()); // 顧客名
    lRec.add("CUSTPRONNAME", regOrderID.getCustPronName()); // 顧客名カナ
    lRec.add("EMAIL", regOrderID.getEmail()); // EMAIL
    lRec.add("ORDERADDRESSEE", regOrderID.getOrderAddressee()); // 請求書宛名
    lRec.add("POSTCODE1", regOrderID.getPostCode1()); // 郵便番号1
    lRec.add("POSTCODE2", regOrderID.getPostCode2()); // 郵便番号2
    lRec.add("ADDRESS1", regOrderID.getAddress1()); // 請求書住所1
    lRec.add("ADDRESS2", regOrderID.getAddress2()); // 請求書住所2
    lRec.add("ADDRESS3", regOrderID.getAddress3()); // 請求書住所3
    lRec.add("COMPANYNAME", regOrderID.getCompanyName()); // 会社名
    lRec.add("STORETEL", regOrderID.getStoreTel()); // 店舗電話番号//7.3.0 PI-NES0501 追加
    lRec.add("TEL", regOrderID.getTel()); // 電話番号
    lRec.add("FAX", regOrderID.getFax()); // FAX番号
    lRec.add("JOB", regOrderID.getJob()); // 会社名
    lRec.add("PAYMETHODNAME", lCasher.getPayMethodName()); // 支払方法名称
    lRec.add("PAYMENTFLG", lCasher.getPaymentFlg()); // 先後払いフラグ
    if (SIUtil.isNotNull(lCasher.getPointEnableFlg()) && lCasher.getPointEnableFlg().equals("2")) {
      lRec.add("POINTENABLEFLG", "2"); // ポイントフラグ
    } else {
      lRec.add("POINTENABLEFLG", pointEnableFlg); // ポイントフラグ
    }
    lRec.add("discountFee", lCasher.getDiscountFee());// 手数料調整額
    lRec.add("discountDeliveryFee", lCasher.getDiscountDeliveryFee());// 送料調整額
    lRec.add("FEE", lCasher.getFee()); // 手数料
    lRec.add("FEETAXFLG", lCasher.getFeeTaxFlg()); // 手数料税フラグ
    lRec.add("TAXRATE", regOrderID.getTaxRate()); // 税率
    lRec.add("SUMBYPOINT", lCasher.getSumByPoint()); // ポイント使用額
    lRec.add("SUMOFDISCOUNT", regOrderID.getSumOfDiscount()); // 値引金額
    lRec.add("SENDMAILFLG", "0"); // メール送信フラグ
    lRec.add("CONTACTMSG", lCasher.getContactMsg()); // 連絡事項
    lRec.add("MEMO", regOrderID.getMemo()); // 備考
    // 7.3.0 PI-MES0501 追加 ここから
    if (regOrderID.getCompanyCode().equals("XX")) regOrderID.setCompanyCode("");
    if (regOrderID.getChargeCode().equals("XX")) regOrderID.setChargeCode("");
    lRec.add("BRANCHCODE", regOrderID.getCompanyCode()); // 対応支店
    lRec.add("CHARGECODE", regOrderID.getChargeCode()); // 担当者
    lRec.add("ORDERROUTE", regOrderID.getOrderRoute()); // 受注経路
    if (siLogin.getMallShopCode() != null) lRec.add("UPDATEMALLSHOPCODE", siLogin.getMallShopCode()); // 更新ショップ（モール）コード
    if (siLogin.getUserCode() != null) lRec.add("UPDATEUSERCODE", siLogin.getUserCode()); // 更新ユーザーコード
    // 7.3.0 PI-MES0501 追加 ここまで
    
    // POSTGRESQL
    if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {
      lRec.add("INITDATETIME", regOrderID.getInitDateTime()); // 受注日時
      lRec.add("UPDATEDATETIME", lDateTime.getFullDateTime()); // 修正日時
      // POSTGRESQL以外
    } else {
      SIDateTimeType lTimeType = new SIDateTimeType();
      lTimeType = new SIDateTimeType(regOrderID.getInitDateTime());
      lRec.add("INITDATETIME", lTimeType); // 受注日時
      lTimeType = new SIDateTimeType(lDateTime.getFullDateTime());
      lRec.add("UPDATEDATETIME", lTimeType); // 修正日時
    }
    
    lRec.add("STATUS", "1"); // 受注状態("1"通常)
    String totalPaymentPrice = SIDBUtil.getFirstData(lConnection, "SELECT totalpaymentprice FROM paymentvw WHERE ordercode='" + lOrderCode + "'");
    String paymentDate = SIDBUtil.getFirstData(lConnection,
        "SELECT CASE WHEN maxpaymentdate IS NULL THEN current_date ELSE maxpaymentdate END FROM paymentvw WHERE ordercode='" + lOrderCode + "'");
    if ((lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_POINT) || lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CARD))
        && SIUtil.isNull(regOrderID.getReceiptDate())) {
      lRec.add("RECEIPTDATE", paymentDate); // 入金日
    } else if (SIUtil.isNotNull(totalPaymentPrice) && Integer.parseInt(lCasher.getSumOfF()) <= Integer.parseInt(totalPaymentPrice) && SIUtil.isNull(regOrderID.getReceiptDate())) {
      lRec.add("RECEIPTDATE", paymentDate);
    } else if (SIUtil.isNotNull(totalPaymentPrice) && Integer.parseInt(lCasher.getSumOfF()) > Integer.parseInt(totalPaymentPrice) && SIUtil.isNotNull(regOrderID.getReceiptDate())) {
      lRec.add("RECEIPTDATE", "");
    } else {
      lRec.add("RECEIPTDATE", regOrderID.getReceiptDate());
    }
    lRec.add("SHIPPMENTMAILDATE", regOrderID.getShippmentMailDate());
    lRec.add("KEEPMAILDATE", regOrderID.getKeepMailDate());
    
    // EDBTG003-00 elecs-matsushima add start
    String sumOfSetDiscount = lCasher.getSumOfH();
    if (SIUtil.isNull(sumOfSetDiscount)) sumOfSetDiscount = "0";
    lRec.add("SETDISCOUNT", sumOfSetDiscount);
    // EDBTG003-00 elecs-matsushima add end
    
    // 4.受注ヘッダテーブルのレコードの作成の実行
    lRec.execute(lConnection);
    
    // 5.メールの本文の作成(お客様情報)
    lMailBuf.append("\nお客様の受注番号は ").append(lOrderCode).append("です。");
    lMailBuf.append("\n受注番号は紙などに控えて大切に保管してください。");
    if (SIUtil.isNotNull(lCasher.getContactMsg())) {
      lMailBuf.append("\n\n【連絡事項欄】");
      lMailBuf.append("\n").append(lCasher.getContactMsg());
    }
    lMailBuf.append("\n");
    
    lSendMail.appendContent1(lMailBuf.toString());
    lMailBuf = new StringBuffer();
    
    lMailBuf.append("\n\nお客さま情報");
    lMailBuf.append("\n氏名:").append(regOrderID.getCustName()).append(" 様");
    lMailBuf.append("\nE-Mail:").append(regOrderID.getEmail());
    lMailBuf.append("\n連絡先TEL1:").append(regOrderID.getStoreTel());// 7.3.0 PI-NES0501 修正
    lMailBuf.append("\n連絡先TEL2:").append(regOrderID.getTel());
    lMailBuf.append("\n住所:〒").append(regOrderID.getPostCode()).append(" ");
    lMailBuf.append(regOrderID.getAddress());
    lMailBuf.append("\n支払方法:").append(lCasher.getPayMethodName());
    lMailBuf.append("\n受注日時:" + lDateTime.getFullDateTime());
    
    // EDBTG003-00 elecs-matsushima add start
    //現在の引当情報を取得し、MAPに入れる。
    LinkedHashMap orderAllocationInfoMap = new LinkedHashMap();
    try {
      orderAllocationInfoMap = getOrderAllocationInfo(lConnection, lOrderCode);
    } catch (SQLException e2) {
      e2.printStackTrace();
      throw new SIDuplicateKeyException(e2.getMessage());
    }
    
    //在庫管理があるため、一度既存データを削除する
    if (orderAllocationInfoMap != null) {
      for (Iterator iteAllocationMap = orderAllocationInfoMap.keySet().iterator(); iteAllocationMap.hasNext();){
        Map allocationDataMap = (Map) orderAllocationInfoMap.get(iteAllocationMap.next());
        SIBGUtil.deleteOrderAllocation2(lConnection,
                           (String) allocationDataMap.get("shopcode"),
                           lOrderCode,
                           (String) allocationDataMap.get("cmdtycode"),
                           (String) allocationDataMap.get("individualcode"),
                           (String) allocationDataMap.get("detailcode"));
      }
    }
    // EDBTG003-00 elecs-matsushima add end
    // 6.受注配送先テーブルにレコードの作成
    Collection lDeliveryColl = SICartDetail.getDeliveryCollection(lRequest, lCasher.getShopCode());
    Iterator lDeliveryIta = lDeliveryColl.iterator();
    
    SIDeliveryTime lDeliveryTime = new SIDeliveryTime();
    SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
    SIOrderDetail[] lOrderDetail;
    
    int lDeliveryInx = 0;
    int mapCnt = 0;
    
    while (lDeliveryIta.hasNext()) {
      lDeliveryInx++;
      lDeliveryTime = new SIDeliveryTime();
      lOrderDelivery = (SIOrderDelivery) lDeliveryIta.next();
      
      // 受注配送先コードを取得
      lOrderDeliveryCode = lOrderDelivery.getDeliveryCodeToDB();
      
      lRec = new SIInsertRec(SIConfig.SITABLE_ORDER_DELIVERY_NAME);
      
      lRec.add("ORDERCODE", lOrderCode); // 受注番号
      lRec.add("ORDERBRANCHCODE", lOrderBranchCode); // 受注枝番
      lRec.add("DELIVERYCODE", lOrderDeliveryCode); // 受注配送先項番
      if (lOrderDelivery.getAddressCode().equals("0")) {
        lRec.add("HOMEFLG", "1"); // 自宅フラグ
      } else {
        lRec.add("HOMEFLG", "0"); // 自宅フラグ
      }
      lRec.add("DELIVERYNAME", lOrderDelivery.getDeliveryName()); // 配送先呼称
      lRec.add("DELIVERYADDRESSEE", lOrderDelivery.getDeliveryAddressee()); // 配送先宛名
      lRec.add("EMAIL", lOrderDelivery.getEmail()); // メール
      lRec.add("POSTCODE1", lOrderDelivery.getPostCode1()); // 郵便番号1
      lRec.add("POSTCODE2", lOrderDelivery.getPostCode2()); // 郵便番号2
      lRec.add("ADDRESS1", lOrderDelivery.getAddress1()); // 配送先住所1
      lRec.add("ADDRESS2", lOrderDelivery.getAddress2()); // 配送先住所2
      lRec.add("ADDRESS3", lOrderDelivery.getAddress3()); // 配送先住所3
      lRec.add("COMPANYNAME", lOrderDelivery.getCompanyName()); // 会社名
      lRec.add("TEL", lOrderDelivery.getTel()); // 連絡先電話番号
      lRec.add("FAX", lOrderDelivery.getFax()); // 連絡先FAX番号
      lRec.add("DELIVERYFEE", lOrderDelivery.getDeliveryFee()); // 送料(税抜き)
      lRec.add("DELIVERYTAXFLG", lOrderDelivery.getDeliveryTaxFlg()); // 送料税フラグ
      lRec.add("DELIVERYDATE", ""); // 配送希望日
      
      lDeliveryTime.setDeliveryTime(lCasher.getDeliveryTime(lDeliveryInx));
      lRec.add("DELIVERYTIMEFROM", ""); // 配送希望時間帯From
      lRec.add("DELIVERYTIMETO", ""); // 配送希望時間帯To
      lRec.add("DELIVERYTYPENAME", lOrderDelivery.getDeliveryTypeName()); // 配送種別名称
      lRec.add("TAXRATE", lOrderDelivery.getTaxRate()); // 税率
      lRec.add("CUSTCOMPANYFLG", lOrderDelivery.getCustCompanyFlg()); // 個人法人フラグ//7.4.0 ST2084 追加
      
      lRec.add("CUSTCODE", regOrderID.getCustCode()); // 顧客コード
      lRec.add("ADDRESSCODE", lOrderDelivery.getAddressCode()); // アドレス帳コード
      lRec.add("MALLSHOPCODE", lOrderDelivery.getShopCode()); // 管理コード
      lRec.add("DELIVERYTYPECODE", lOrderDelivery.getDeliveryTypeCode()); // 配送種別コード
      
      // 7.受注配送先レコードの作成の実行
      lRec.execute(lConnection);
      
      // 8.メールの本文の作成(配送先の内容)
      if (lOrderDeliveryCode.equals("1")) { // 7.3.0 PI-NES0501 追加
        lMailBuf.append("\n\n--------------");
        lMailBuf.append("\n配送先");
        lMailBuf.append("\n宛名:").append(lOrderDelivery.getDeliveryAddressee()).append(" 様");
        lMailBuf.append("\n住所:〒").append(lOrderDelivery.getPostCode()).append(" ");
        lMailBuf.append(lOrderDelivery.getAddress());
        // 7.3.0 PI-NES0501 削除 ここから
        /*
         * lMailBuf.append("\n送料:").append(NumberFormat.getNumberInstance().format(new
         * Double(lOrderDelivery.getDeliveryFeeIncTax()))).append("円").append(lOrderDelivery.getDeliveryTaxName());
         * lMailBuf.append("\n配送方法:").append(lOrderDelivery.getDeliveryTypeName()); if (SIUtil.isNotNull(lCasher.getDeliveryDateTime(lDeliveryInx))) {
         * lMailBuf.append("\n配送希望日時:").append(lCasher.getDeliveryDateTime(lDeliveryInx)); }
         */
        // 7.3.0 PI-NES0501 削除 ここまで
        lMailBuf.append("\nTEL:").append(lOrderDelivery.getTel());
      } // 7.3.0 PI-NES0501 追加
      lOrderDetail = (SIOrderDetail[]) SICartDetail.getDetailCollection(lRequest, lOrderDelivery.getDeliveryCode(), lCasher.getShopCode()).toArray(new SIOrderDetail[0]);
      lMailBuf.append("\n");
      lMailBuf.append("\n「").append(lOrderDelivery.getDeliveryTypeName()).append("送料」対象商品");
      // 9.受注明細のレコードの作成
      for (int jj = 0; jj < lOrderDetail.length; jj++) {
        // EDBTG003-00 ohsugi mod start
//        String oldPriceIncTax = SIDBUtil.getFirstData(lConnection,
//            "SELECT CASE WHEN a.taxflg=1 THEN round(a.price * (100+c.taxrate)/100) ELSE a.price END FROM orderdetailtbl a,ordertbl b,taxvw c WHERE a.ordercode='" + lOrderCode
//                + "' AND a.individualcode='" + lOrderDetail[jj].getIndividualCode()
//                + "' AND a.ordercode=b.ordercode AND a.orderbranchcode=(b.orderbranchcode - 1) AND b.enabledflg=1");
        StringBuffer oldPriceIncTaxSql = new StringBuffer();
        oldPriceIncTaxSql.append("SELECT CASE WHEN a.taxflg=1 THEN round(a.price * (100+c.taxrate)/100) ELSE a.price END ");
        oldPriceIncTaxSql.append("FROM orderdetailtbl a,ordertbl b,taxvw c ");
        oldPriceIncTaxSql.append("WHERE a.ordercode = b.ordercode ");
        oldPriceIncTaxSql.append("AND a.orderbranchcode = (b.orderbranchcode - 1) ");
        oldPriceIncTaxSql.append("AND b.enabledflg = 1");
        oldPriceIncTaxSql.append("AND a.ordercode = ").append(SIDBUtil.SQL2Str(lOrderCode, " "));
        oldPriceIncTaxSql.append("AND a.individualcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode(), " "));
        oldPriceIncTaxSql.append("AND a.setcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getSetCode(), " "));
        oldPriceIncTaxSql.append("AND a.setdetailcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getSetDetailCode()));
        String oldPriceIncTax = SIDBUtil.getFirstData(lConnection, oldPriceIncTaxSql.toString());
//        String oldPrice = SIDBUtil.getFirstData(lConnection, "SELECT a.price FROM orderdetailtbl a,ordertbl b WHERE a.ordercode='" + lOrderCode + "' AND a.individualcode='"
//            + lOrderDetail[jj].getIndividualCode() + "' AND a.ordercode=b.ordercode AND a.orderbranchcode=(b.orderbranchcode - 1) AND b.enabledflg=1");
        StringBuffer oldPriceSql = new StringBuffer();
        oldPriceSql.append("SELECT a.price ");
        oldPriceSql.append("FROM orderdetailtbl a,ordertbl b ");
        oldPriceSql.append("WHERE a.ordercode = b.ordercode ");
        oldPriceSql.append("AND a.orderbranchcode = (b.orderbranchcode - 1) ");
        oldPriceSql.append("AND b.enabledflg = 1 ");
        oldPriceSql.append("AND a.ordercode = ").append(SIDBUtil.SQL2Str(lOrderCode, " "));
        oldPriceSql.append("AND a.individualcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode(), " "));
        oldPriceSql.append("AND a.setcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getSetCode(), " "));
        oldPriceSql.append("AND a.setdetailcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getSetDetailCode()));
        String oldPrice = SIDBUtil.getFirstData(lConnection, oldPriceSql.toString());
//        String oldOrgPrice = SIDBUtil.getFirstData(lConnection, "SELECT a.orgprice FROM orderdetailtbl a,ordertbl b WHERE a.ordercode='" + lOrderCode + "' AND a.individualcode='"
//            + lOrderDetail[jj].getIndividualCode() + "' AND a.ordercode=b.ordercode AND a.orderbranchcode=(b.orderbranchcode - 1) AND b.enabledflg=1");
        StringBuffer oldOrgPriceSql = new StringBuffer();
        oldOrgPriceSql.append("SELECT a.orgprice ");
        oldOrgPriceSql.append("FROM orderdetailtbl a,ordertbl b ");
        oldOrgPriceSql.append("WHERE a.ordercode = b.ordercode ");
        oldOrgPriceSql.append("AND a.orderbranchcode = (b.orderbranchcode - 1) ");
        oldOrgPriceSql.append("AND b.enabledflg = 1 ");
        oldOrgPriceSql.append("AND a.ordercode = ").append(SIDBUtil.SQL2Str(lOrderCode, " "));
        oldOrgPriceSql.append("AND a.individualcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode(), " "));
        oldOrgPriceSql.append("AND a.setcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getSetCode(), " "));
        oldOrgPriceSql.append("AND a.setdetailcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getSetDetailCode()));
        String oldOrgPrice = SIDBUtil.getFirstData(lConnection, oldOrgPriceSql.toString());
//        String oldPurchasePrice = SIDBUtil.getFirstData(lConnection, "SELECT a.purchaseprice FROM orderdetailtbl a,ordertbl b,individualtbl c WHERE a.ordercode='" + lOrderCode + "' AND a.individualcode='"
//            + lOrderDetail[jj].getIndividualCode() + "' AND a.ordercode=b.ordercode AND a.orderbranchcode=(b.orderbranchcode - 1) AND b.enabledflg=1 AND a.cmdtycode=c.cmdtycode AND a.individualcode=c.individualcode AND c.amountflg='0'");
        StringBuffer oldPurchasePriceSql = new StringBuffer();
        oldPurchasePriceSql.append("SELECT a.purchaseprice ");
        oldPurchasePriceSql.append("FROM orderdetailtbl a,ordertbl b,individualtbl c ");
        oldPurchasePriceSql.append("WHERE a.ordercode = b.ordercode ");
        oldPurchasePriceSql.append("AND a.orderbranchcode = (b.orderbranchcode - 1) ");
        oldPurchasePriceSql.append("AND b.enabledflg = 1 ");
        oldPurchasePriceSql.append("AND a.cmdtycode = c.cmdtycode ");
        oldPurchasePriceSql.append("AND a.individualcode = c.individualcode ");
        oldPurchasePriceSql.append("AND c.amountflg = '0' ");
        oldPurchasePriceSql.append("AND a.ordercode = ").append(SIDBUtil.SQL2Str(lOrderCode," "));
        oldPurchasePriceSql.append("AND a.individualcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode(), " "));
        oldPurchasePriceSql.append("AND a.setcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getSetCode(), " "));
        oldPurchasePriceSql.append("AND a.setdetailcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getSetDetailCode()));
        String oldPurchasePrice = SIDBUtil.getFirstData(lConnection, oldPurchasePriceSql.toString());
//        String oldConsignGoodsFee = SIDBUtil.getFirstData(lConnection, "SELECT a.consigngoodsfee FROM orderdetailtbl a,ordertbl b WHERE a.ordercode='" + lOrderCode + "' AND a.individualcode='"
//            + lOrderDetail[jj].getIndividualCode() + "' AND a.ordercode=b.ordercode AND a.orderbranchcode=(b.orderbranchcode - 1) AND b.enabledflg=1");
        StringBuffer oldConsignGoodsFeeSql = new StringBuffer();
        oldConsignGoodsFeeSql.append("SELECT a.consigngoodsfee ");
        oldConsignGoodsFeeSql.append("FROM orderdetailtbl a,ordertbl b ");
        oldConsignGoodsFeeSql.append("WHERE a.ordercode = b.ordercode ");
        oldConsignGoodsFeeSql.append("AND a.orderbranchcode = (b.orderbranchcode - 1) ");
        oldConsignGoodsFeeSql.append("AND b.enabledflg = 1 ");
        oldConsignGoodsFeeSql.append("AND a.ordercode = ").append(SIDBUtil.SQL2Str(lOrderCode, " "));
        oldConsignGoodsFeeSql.append("AND a.individualcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode(), " "));
        oldConsignGoodsFeeSql.append("AND a.setcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getSetCode(), " "));
        oldConsignGoodsFeeSql.append("AND a.setdetailcode = ").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getSetDetailCode()));
        String oldConsignGoodsFee = SIDBUtil.getFirstData(lConnection, oldConsignGoodsFeeSql.toString());
        // EDBTG003-00 ohsugi mod end
        
        if (SIUtil.isNull(oldPrice) || SIUtil.isVariableCode(lOrderDetail[jj].getIndividualCode())) {
          oldPrice = lOrderDetail[jj].getPrice();
        }
        if (SIUtil.isNull(oldOrgPrice) || SIUtil.isVariableCode(lOrderDetail[jj].getIndividualCode())) {
          oldOrgPrice = lOrderDetail[jj].getOrgPrice();
        }
        if (SIUtil.isNull(oldPriceIncTax)  || SIUtil.isVariableCode(lOrderDetail[jj].getIndividualCode())) {
          oldPriceIncTax = lOrderDetail[jj].getPriceIncTax();
        }
        if (SIUtil.isNull(oldPurchasePrice) || SIUtil.isVariableCode(lOrderDetail[jj].getIndividualCode())) {
          oldPurchasePrice = lOrderDetail[jj].getPurchasePrice();
        }
        if (SIUtil.isNull(oldConsignGoodsFee)) {
          oldConsignGoodsFee = lOrderDetail[jj].getConsignGoodsFee();
        }
        
        diffPrice = SIUtil.add(diffPrice, SIUtil.sub(lOrderDetail[jj].getPriceIncTax(), oldPriceIncTax));
        lRec = new SIInsertRec(SIConfig.SITABLE_ORDER_DETAIL_NAME);
        
        lRec.add("ORDERCODE", lOrderCode); // 受注番号
        lRec.add("ORDERBRANCHCODE", lOrderBranchCode); // 受注枝番
        lRec.add("DELIVERYCODE", lOrderDeliveryCode); // 受注配送先項番
        lRec.add("DETAILCODE", jj + 1); // 受注明細項番
        lRec.add("SHOPCODE", lOrderDetail[jj].getShopCode()); // ショップコード
        lRec.add("SHOPNAME", lOrderDetail[jj].getShopName()); // ショップ名
        lRec.add("CMDTYCODE", lOrderDetail[jj].getCmdtyCode()); // 商品コード
        lRec.add("individualcode", lOrderDetail[jj].getIndividualCode()); // 在庫コード
        lRec.add("CMDTYNAME", lOrderDetail[jj].getCmdtyName()); // 商品名
        lRec.add("STNDRDCODE1", lOrderDetail[jj].getStndrdCode1()); // 規格コード1
        lRec.add("ELEMENTCODE1", lOrderDetail[jj].getElementCode1()); // エレメント1
        lRec.add("STNDRDCODE2", lOrderDetail[jj].getStndrdCode2()); // 規格コード2
        lRec.add("ELEMENTCODE2", lOrderDetail[jj].getElementCode2()); // エレメント1
        lRec.add("AMOUNT", lOrderDetail[jj].getAmount()); // 数量
        lRec.add("ORGPRICE", oldOrgPrice); // 本体価格
        lRec.add("PRICE", oldPrice); // 購入価格
        lRec.add("TAXFLG", lOrderDetail[jj].getTaxFlg()); // 本体価格税区分
        lRec.add("TAXRATE", lOrderDetail[jj].getTaxRate()); // 税率
        lRec.add("CMDTYSIZE", lOrderDetail[jj].getCmdtySize()); // サイズ
        lRec.add("WRAPPINGCODE", lOrderDetail[jj].getWrappingCode()); // ラッピングコード
        lRec.add("WRAPPINGNAME", lOrderDetail[jj].getWrappingName()); // ラッピング名
        lRec.add("WRAPPINGTAXFLG", lOrderDetail[jj].getWrappingTaxFlg()); // ラッピング税フラグ
        lRec.add("WRAPPINGPRICE", lOrderDetail[jj].getWrappingPrice()); // ラッピング価格
        lRec.add("deliveryfee", lOrderDetail[jj].getDeliveryFeeSingle());
        lRec.add("deliveryfee", lOrderDetail[jj].getDeliveryFeeSingle());// 送料
        lRec.add("deliveryDate", lOrderDetail[jj].getDeliveryDate());// 配送希望日
        lRec.add("deliveryTime", lOrderDetail[jj].getDeliveryTime());// 希望時間帯
        lRec.add("processingexpence", lOrderDetail[jj].getProcessingExpance());// 加工費
        lRec.add("purchaseprice", oldPurchasePrice);// 仕入価格
        lRec.add("consigngoodsfee", oldConsignGoodsFee);// 委託手数料
        String branchCode = lCasher.getBranch("branch" + Integer.toString(mapCnt));
        if (branchCode.equals("XX")) branchCode = null;
        lRec.add("branchcode", branchCode);// 担当支店
        String chargeCode = lCasher.getCharge("charge" + Integer.toString(mapCnt));
        if (chargeCode.equals("XX")) chargeCode = null;
        lRec.add("chargecode", chargeCode);// 担当者
        // EDBTG003-00 elecs-matsushima add start
        lRec.add("setdetailflg",lOrderDetail[jj].getSetDetailFlg() );// 商品構成区分
        lRec.add("setcode",lOrderDetail[jj].getSetCode() );// セット番号
        lRec.add("setcmdtycode",lOrderDetail[jj].getSetCmdtyCode() );// セット商品コード
        lRec.add("setindividualcode",lOrderDetail[jj].getSetIndividualCode() );// セット在庫コード
        lRec.add("setdetailcode",lOrderDetail[jj].getSetDetailCode() );// セット明細項番
        // EDBTG003-00 elecs-matsushima add end
        mapCnt++;
        // 10.受注詳細レコードの作成の実行
        lRec.execute(lConnection);
        
        // EDBTG003-00 elecs-matsushima mod start
//        individualCode.append(lOrderDetail[jj].getIndividualCode()).append(",");
        if (SIUtil.isNotNull(lOrderDetail[jj].getSetDetailFlg()) && !lOrderDetail[jj].getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL)) {
          individualCode.append(lOrderDetail[jj].getSetIndividualCode()).append(",");
        } else {
          individualCode.append(lOrderDetail[jj].getIndividualCode()).append(",");
        }
        // EDBTG003-00 elecs-matsushima mod end
        cmdtyTotalPrice.append(SIUtil.multi(SIUtil.getPriceWithoutTax(lOrderDetail[jj].getPrice(),lOrderDetail[jj].getTaxRate()), lOrderDetail[jj].getAmount())).append(",");
        
        // 11.商品マスターの更新
        lReserveOrder = new SIReserveOrder();
        lReserveOrder.setShopCode(lOrderDetail[jj].getShopCode());
        lReserveOrder.setCmdtyCode(lOrderDetail[jj].getCmdtyCode());
        lReserveOrder.setStndrdCode1(lOrderDetail[jj].getStndrdCode1());
        lReserveOrder.setElementCode1(lOrderDetail[jj].getElementCode1());
        lReserveOrder.setStndrdCode2(lOrderDetail[jj].getStndrdCode2());
        lReserveOrder.setElementCode2(lOrderDetail[jj].getElementCode2());
        lReserveOrder.setAmount(lOrderDetail[jj].getAmount());
        
        int stockAmount = 0;
        int orderAmount = 0;
        
        lSqlBuf = new StringBuffer();
        lSelBuf = new StringBuffer();
        
        lLeftReserveAmount = lRsrCartManager.addUsed(lReserveOrder); // 予約商品数量より多い商品数
        SICartCmdty lCartCmdty = new SICartCmdty(lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(), lOrderDetail[jj].getIndividualCode(), "", "", "", "");// 7.3.0
                                                                                                                                                                        // PI-NES0501
                                                                                                                                                                        // 追加
        
        if (!lCartCmdty.reset(lConnection, false)) {
          SICustomErrors errors = new SICustomErrors();
          errors.addError(new SICustomError("manager.app.sale.expired"));
          lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
          throw new SIFatalException(lOrderDetail[jj].getCartCmdtyName());
        }
        
// EDBTG003-00 elecs-matsushima mod start
//        int sumalloc = SIBGUtil.existAllocation(lConnection, lOrderCode, lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(), lOrderDetail[jj].getIndividualCode(), String.valueOf(jj + 1));
//
//        if (lCartCmdty.getAmountFlg().equals("1")||sumalloc == Integer.parseInt(lLeftReserveAmount)) {
//          if (allocationMap == null) {// 引当情報ナシ
//            if (sumalloc == 0) {// DBにデータが存在しない（新規に商品追加）
//              SIBGUtil.insertOrderAllocation(lConnection, Integer.parseInt(lOrderDetail[jj].getAmount()), lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(),
//                  lOrderDetail[jj].getIndividualCode(), lOrderCode, Integer.parseInt(lOrderDeliveryCode), jj + 1);
//            } else if (sumalloc != Integer.parseInt(lOrderDetail[jj].getAmount())) {
//              SICustomErrors errors = new SICustomErrors();
//              errors.addError(new SICustomError("manager.message.error.allocation2", lOrderDetail[jj].getCartCmdtyName()));
//              lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
//              throw new SIDisagreementException();
//            }
//          } else {
//            // EDBTG003-00 elecs-matsushima mod start
//            //LinkedHashMap map = (LinkedHashMap) allocationMap.get(lOrderCode + "_" + lOrderDetail[jj].getCmdtyCode() + "_" + lOrderDetail[jj].getIndividualCode());
//            LinkedHashMap map = (LinkedHashMap) allocationMap.get(lOrderCode + "_" + lOrderDetail[jj].getCmdtyCode() + "_" + lOrderDetail[jj].getIndividualCode() + "_" + lOrderDetail[jj].getSetDetailFlg());
//            // EDBTG003-00 elecs-matsushima mod end
//            if (map == null) {// 引当情報ナシ
//              if (sumalloc == 0) {// DBにデータが存在しない（新規に商品追加）
//                SIBGUtil.insertOrderAllocation(lConnection, Integer.parseInt(lOrderDetail[jj].getAmount()), lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(),
//                    lOrderDetail[jj].getIndividualCode(), lOrderCode, Integer.parseInt(lOrderDeliveryCode), jj + 1);
//              } else if (sumalloc != Integer.parseInt(lOrderDetail[jj].getAmount())) {
//                SICustomErrors errors = new SICustomErrors();
//                errors.addError(new SICustomError("manager.message.error.allocation2", lOrderDetail[jj].getCartCmdtyName()));
//                lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
//                throw new SIDisagreementException();
//              }
//            } else {// 引当情報アリ
//              if (lOrderDetail[jj].getAmount().equals((String) map.get("sum"))) {// 商品数量と引当数が等しい
//                SIBGUtil.updateOrderAllocation(lConnection, Integer.parseInt(lOrderDetail[jj].getAmount()), lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(),
//                    lOrderDetail[jj].getIndividualCode(), lOrderCode, Integer.parseInt(lOrderDeliveryCode), jj + 1, map);
//              } else {// 商品数量と引当数が等しくない
//                SICustomErrors errors = new SICustomErrors();
//                errors.addError(new SICustomError("manager.message.error.allocation2", lOrderDetail[jj].getCartCmdtyName()));
//                lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
//                throw new SIDisagreementException();
//              }
//
//            }
//          }
//        }
        int sumalloc = existAllocation(orderAllocationInfoMap, lOrderCode, lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(), lOrderDetail[jj].getIndividualCode(), lOrderDetail[jj].getOrderDetailCode());
        if (Integer.parseInt(lLeftReserveAmount) > 0
            && SIUtil.isNull(lOrderDetail[jj].getStndrdCode1() + lOrderDetail[jj].getStndrdCode2() + lOrderDetail[jj].getElementCode1() + lOrderDetail[jj].getElementCode2())) {
          if (lCartCmdty.getAmountFlg().equals("1")||sumalloc == Integer.parseInt(lLeftReserveAmount)) {
            if (allocationMap == null) {// 引当情報ナシ
              if (sumalloc == 0) {// DBにデータが存在しない（新規に商品追加）
                SIBGUtil.insertOrderAllocation(lConnection, Integer.parseInt(lOrderDetail[jj].getAmount()), lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(),
                    lOrderDetail[jj].getIndividualCode(), lOrderCode, Integer.parseInt(lOrderDeliveryCode), jj + 1);
              } else if (sumalloc != Integer.parseInt(lOrderDetail[jj].getAmount())) {
                SICustomErrors errors = new SICustomErrors();
                errors.addError(new SICustomError("manager.message.error.allocation2", lOrderDetail[jj].getCartCmdtyName()));
                lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
                throw new SIDisagreementException();
              } else {
                // 既存のデータをINSERT
                insertOrderAllocation(lConnection, lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(),
                        lOrderDetail[jj].getIndividualCode(), lOrderCode, Integer.parseInt(lOrderDeliveryCode), jj + 1,
                        lOrderDetail[jj].getOrderDetailCode(),orderAllocationInfoMap);
              }
            } else {
//              LinkedHashMap map = (LinkedHashMap) allocationMap.get(lOrderCode + "_" + lOrderDetail[jj].getCmdtyCode() + "_" + lOrderDetail[jj].getIndividualCode());
              LinkedHashMap map = (LinkedHashMap) allocationMap.get(lOrderCode + "_" + lOrderDetail[jj].getCmdtyCode() + "_" + lOrderDetail[jj].getIndividualCode() + "_" + lOrderDetail[jj].getSetCode() + "_" + lOrderDetail[jj].getSetDetailFlg());
              if (map == null) {// 引当情報ナシ
                if (sumalloc == 0) {// DBにデータが存在しない（新規に商品追加）
                  SIBGUtil.insertOrderAllocation(lConnection, Integer.parseInt(lOrderDetail[jj].getAmount()), lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(),
                      lOrderDetail[jj].getIndividualCode(), lOrderCode, Integer.parseInt(lOrderDeliveryCode), jj + 1);
                } else if (sumalloc != Integer.parseInt(lOrderDetail[jj].getAmount())) {
                  SICustomErrors errors = new SICustomErrors();
                  errors.addError(new SICustomError("manager.message.error.allocation2", lOrderDetail[jj].getCartCmdtyName()));
                  lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
                  throw new SIDisagreementException();
                } else {
                  // 既存のデータをINSERT
                  insertOrderAllocation(lConnection, lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(),
                          lOrderDetail[jj].getIndividualCode(), lOrderCode, Integer.parseInt(lOrderDeliveryCode), jj + 1,
                          lOrderDetail[jj].getOrderDetailCode(),orderAllocationInfoMap);
                }
              } else {// 引当情報アリ
                if (lOrderDetail[jj].getAmount().equals((String) map.get("sum"))) {// 商品数量と引当数が等しい
                  SIBGUtil.updateOrderAllocation(lConnection, Integer.parseInt(lOrderDetail[jj].getAmount()), lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(),
                      lOrderDetail[jj].getIndividualCode(), lOrderCode, Integer.parseInt(lOrderDeliveryCode), jj + 1, map);
                } else {// 商品数量と引当数が等しくない
                  SICustomErrors errors = new SICustomErrors();
                  errors.addError(new SICustomError("manager.message.error.allocation2", lOrderDetail[jj].getCartCmdtyName()));
                  lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
                  throw new SIDisagreementException();
                }
                
              }
            }
            
          } else {
            // 既存のデータをINSERT
            insertOrderAllocation(lConnection, lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(),
                      lOrderDetail[jj].getIndividualCode(), lOrderCode, Integer.parseInt(lOrderDeliveryCode), jj + 1,
                      lOrderDetail[jj].getOrderDetailCode(),orderAllocationInfoMap);
          }
          // EDBTG003-00 elecs-matsushima mod end
          
          /*
           * 在庫関連で変更予定 //数量検索 lSelBuf.append("SELECT AMOUNT FROM CMDTYMTBL "); lSelBuf.append(" WHERE SHOPCODE=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getShopCode(), " "));
           * lSelBuf.append(" AND CMDTYCODE=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getCmdtyCode(), " ")); //数量が-9999999以下になるとエラー stockAmount =
           * Integer.parseInt(SIDBUtil.getFirstData(lConnection, lSelBuf.toString())); orderAmount = Integer.parseInt(lLeftReserveAmount); if (lCartCmdty.getAmountFlg().equals("1") &&
           * stockAmount - orderAmount < SIConfig.SISTOCK_AMOUNT_NEGATIVE_MAX) { SICustomErrors errors = new SICustomErrors(); errors.addError(new
           * SICustomError("manager.app.exceed.amount.system.error", lOrderDetail[jj].getCartCmdtyName())); lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
           * throw new SIFatalException(lOrderDetail[jj].getCartCmdtyName()); } else if (lCartCmdty.getAmountFlg().equals("1")) { //在庫の変更（更新） lSqlBuf.append("UPDATE CMDTYMTBL SET
           * AMOUNT=AMOUNT-").append(lLeftReserveAmount); lSqlBuf.append(" WHERE SHOPCODE=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getShopCode(), " ")); lSqlBuf.append(" AND
           * CMDTYCODE=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getCmdtyCode(), " ")); lSqlBuf.append(" AND AMOUNTFLG=1"); }
           */

        } else if (Integer.parseInt(lLeftReserveAmount) > 0) {
          lManCondition = new SITableConditionManager();
          
          lTableCondition = new SITableCondition("", "SHOPCODE", lOrderDetail[jj].getShopCode(), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_NOT);
          lTableCondition.setBlankEnable(true);
          lManCondition.add(lTableCondition);
          
          lTableCondition = new SITableCondition("", "CMDTYCODE", lOrderDetail[jj].getCmdtyCode(), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
          lTableCondition.setBlankEnable(true);
          lManCondition.add(lTableCondition);
          
          lTableCondition = new SITableCondition("", "ELEMENTCODE1", lOrderDetail[jj].getElementCode1(), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
          lManCondition.add(lTableCondition);
          
          lTableCondition = new SITableCondition("", "ElementCODE2", lOrderDetail[jj].getElementCode2(), SIConfig.SICONDITION_TYPE_EQUAL, SIConfig.SICONDITION_TYPE_AND);
          lTableCondition.setBlankEnable(true);
          lManCondition.add(lTableCondition);
          
          lSelBuf.append("SELECT AMOUNT FROM CMDTYSTNDRDMTBL WHERE ");
          
          lSelBuf.append(lManCondition.getCondtionSQL());
          
          // 数量が-9999999以下になるとエラー
          stockAmount = Integer.parseInt((String) SIDBUtil.getFirstData(lConnection, lSelBuf.toString()));
          orderAmount = Integer.parseInt(lLeftReserveAmount);
          
          if (lCartCmdty.getAmountFlg().equals("1") && stockAmount - orderAmount < SIConfig.SISTOCK_AMOUNT_NEGATIVE_MAX) {
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("manager.app.exceed.amount.system.error", lOrderDetail[jj].getCartCmdtyName()));
            lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            throw new SIFatalException(lOrderDetail[jj].getCartCmdtyName());
          } else if (lCartCmdty.getAmountFlg().equals("1")) {
            // 規格商品の在庫の変更（更新）
            lSqlBuf.append("UPDATE CMDTYSTNDRDMTBL SET AMOUNT=AMOUNT-").append(lLeftReserveAmount).append(" WHERE ");
            lSqlBuf.append(lManCondition.getCondtionSQL());
          }
        }
        
        if (SIUtil.isNotNull(lSqlBuf.toString())) {
          SIDBUtil.execSQL(lConnection, lSqlBuf.toString());
        } else {
          log.debug("lSqlBuf=" + lSqlBuf.toString());
        }
        
        lLeftAmount = Integer.toString(stockAmount - orderAmount);
        if (Long.parseLong(lLeftAmount) == 0) {
          SIModifyRec lRec2 = new SIModifyRec("individualtbl");
          lRec2.addCondition("shopcode", lReserveOrder.getShopCode());
          lRec2.addCondition("cmdtycode", lReserveOrder.getCmdtyCode());
          lRec2.addCondition("individualcode", lReserveOrder.getIndividualCode());
          lRec2.add("soldoutdate", lDateTime.getFullDateTime());// 登録日
          lRec2.execute(lConnection);
        }
        
        // 12.メールの本文の作成(受注明細の内容)
        lMailBuf.append("\n=============");
        // EDBTG003-00 elecs-matsushima add start
        if (!lOrderDetail[jj].getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL)){
          lMailBuf.append("\nセットコード:").append(lOrderDetail[jj].getSetIndividualCode());
        }
        // EDBTG003-00 elecs-matsushima add end
        lMailBuf.append("\n商品コード:").append(lOrderDetail[jj].getIndividualCode());
        lMailBuf.append("\n商品名:").append(lOrderDetail[jj].getCartCmdtyName());
        lMailBuf.append("\nカラー:").append(lOrderDetail[jj].getColorName());
        lMailBuf.append("\n数量:").append(NumberFormat.getNumberInstance().format(new Double(lOrderDetail[jj].getAmount())));
        lMailBuf.append("\n単価:").append(NumberFormat.getNumberInstance().format(new Double(oldPriceIncTax))).append("円").append("(" + lOrderDetail[jj].getCmdtyTaxName() + ")");
        lMailBuf.append("\n商品合計額:").append(NumberFormat.getNumberInstance().format(new Double(SIUtil.multi(oldPriceIncTax, lOrderDetail[jj].getAmount())))).append("円");
        //lMailBuf.append("\n送料合計額:").append(NumberFormat.getNumberInstance().format(new Double(lOrderDetail[jj].getDeliveryFee()))).append("円").append(lOrderDelivery.getDeliveryTaxName());
        lMailBuf.append("\n配送希望日:").append(lOrderDetail[jj].getDeliveryDateTxt());// 7.3.0 PI-NES0501 追加
        if(SIUtil.isNotNull(lOrderDetail[jj].getDeliveryTimeTxt())) {
          lMailBuf.append("\n希望時間帯:").append(lOrderDetail[jj].getDeliveryTimeTxt());
        }
        // 7.3.0 PI-NES0501 削除 ここから
        /*
         * if (SIUtil.isNull(lOrderDetail[jj].getWrappingName())) { lMailBuf.append("\nギフト包装:なし"); } else { lMailBuf.append("\nギフト包装:").append(lOrderDetail[jj].getWrappingName()); }
         * lMailBuf.append("\n包装代:").append(lOrderDetail[jj].getWrappingPriceOfTotal()).append("円"); lMailBuf.append(SITax.getFullTaxFlgName2(lOrderDetail[jj].getWrappingTaxFlg(),
         * lOrderDetail[jj].getWrappingPriceOfTotal()));
         */
        // 7.3.0 PI-NES0501 削除 ここまで
        //lMailBuf.append("\n総合計金額:").append(NumberFormat.getNumberInstance().format(new Double(SIUtil.add_LL(SIUtil.multi(oldPriceIncTax, lOrderDetail[jj].getAmount()), lOrderDetail[jj].getDeliveryFee())))).append("円");
        /*
        if (!lOrderDetail[jj].getTaxFlg().equals("0") || !lOrderDetail[jj].getWrappingTaxFlg().equals("0")) {
          lMailBuf.append(SITax.getFullTaxFlgName2("2", lOrderDetail[jj].getPriceIncGift()));
        } else {
          lMailBuf.append(SITax.getFullTaxFlgName2("0", lOrderDetail[jj].getPriceIncGift()));
        }
        */
      }
      lMailBuf.append("\n=============");
    }
    
    if (SIUtil.isNotNull(diffPrice) && !diffPrice.equals("0")) {
      lCasher.setSumOfA(SIUtil.sub(lCasher.getSumOfA(), diffPrice));
      lCasher.setSumOfD(SIUtil.sub(lCasher.getSumOfD(), diffPrice));
      lCasher.setSumOfF(SIUtil.sub(lCasher.getSumOfF(), diffPrice));
    }
    // 13.お客様の
    // 13.メールの本文の作成(合計)
    lMailBuf.append("\n--------------");
    lMailBuf.append("\n合計\n商品合計(A):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfA()))).append("円").append(lCasher.getTaxFlgNameOfA());
    lMailBuf.append("\n送料合計(B):").append(NumberFormat.getNumberInstance().format(new Double(SIUtil.add(lCasher.getSumOfB(), lCasher.getDiscountDeliveryFee())))).append("円")
        .append(lCasher.getTaxFlgNameOfB());
    lMailBuf.append("\n手数料合計(C):").append(NumberFormat.getNumberInstance().format(new Double(SIUtil.add(lCasher.getSumOfC(), lCasher.getDiscountFee())))).append("円").append(
        lCasher.getTaxFlgNameOfC());
    // ポイント使用フラグ
    if (SIUtil.isNotNull(lCasher.getSumOfE()) && Long.parseLong(lCasher.getSumOfE()) > 0) {
      lMailBuf.append("\n小計(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfD()))).append("円").append(lCasher.getTaxFlgNameOfD()).append("※お支払い額ではありません");
      lMailBuf.append("\nポイント使用額（ポイント残高 ").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getMaxPoint()))).append("ポイント）(E):");
      lMailBuf.append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfE()))).append("円");
      // EDBTG003-00 elecs-matsushima mod start
//      if (SIUtil.isNotNull(lCasher.getSumOfG()) && Long.parseLong(lCasher.getSumOfG()) > 0) {
//        lMailBuf.append("\n値引金額(G)：").append(NumberFormat.getNumberInstance().format(new Long(lCasher.getSumOfG()))).append("円");
//        lMailBuf.append("\nお支払い合計額(F=D-E-G):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
//      } else {
//        lMailBuf.append("\nお支払い合計額(F=D-E):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
//      }
      if (SIUtil.isNotNull(lCasher.getSumOfH()) && Double.parseDouble(lCasher.getSumOfH()) > 0) {
        if (SIUtil.isNotNull(lCasher.getSumOfG()) && Long.parseLong(lCasher.getSumOfG()) > 0) {
          lMailBuf.append("\n値引金額(G)：").append(NumberFormat.getNumberInstance().format(new Long(lCasher.getSumOfG()))).append("円");
          lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(lCasher.getSumOfH()))).append("円");
          lMailBuf.append("\nお支払い合計額(F=D-E-G-H):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
        } else {
          lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(lCasher.getSumOfH()))).append("円");
          lMailBuf.append("\nお支払い合計額(F=D-E-H):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
        }
      } else {
        if (SIUtil.isNotNull(lCasher.getSumOfG()) && Long.parseLong(lCasher.getSumOfG()) > 0) {
          lMailBuf.append("\n値引金額(G)：").append(NumberFormat.getNumberInstance().format(new Long(lCasher.getSumOfG()))).append("円");
          lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(lCasher.getSumOfH()))).append("円");
          lMailBuf.append("\nお支払い合計額(F=D-E-G-H):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
        } else {
          lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(lCasher.getSumOfH()))).append("円");
          lMailBuf.append("\nお支払い合計額(F=D-E-H):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
        }
      }
      // EDBTG003-00 elecs-matsushima mod end
    } else {
      // EDBTG003-00 elecs-matsushima mod start
//      if (SIUtil.isNotNull(lCasher.getSumOfG()) && Long.parseLong(lCasher.getSumOfG()) > 0) {
//        lMailBuf.append("\n小計(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfD()))).append("円").append(lCasher.getTaxFlgNameOfD());
//        lMailBuf.append("\n値引金額(G)：").append(NumberFormat.getNumberInstance().format(new Long(lCasher.getSumOfG()))).append("円");
//        lMailBuf.append("\nお支払い合計額(F=D-G):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
//      } else {
//        lMailBuf.append("\nお支払い合計額(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfD());
//      }
      if (SIUtil.isNotNull(lCasher.getSumOfH()) && Double.parseDouble(lCasher.getSumOfH()) > 0) {
        if (SIUtil.isNotNull(lCasher.getSumOfG()) && Long.parseLong(lCasher.getSumOfG()) > 0) {
          lMailBuf.append("\n小計(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfD()))).append("円").append(lCasher.getTaxFlgNameOfD());
          lMailBuf.append("\n値引金額(G)：").append(NumberFormat.getNumberInstance().format(new Long(lCasher.getSumOfG()))).append("円");
          lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(lCasher.getSumOfH()))).append("円");
          lMailBuf.append("\nお支払い合計額(F=D-G-H):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
        } else {
          lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(lCasher.getSumOfH()))).append("円");
          lMailBuf.append("\nお支払い合計額(D=A+B+C-H):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfD());
        }
      } else {
        if (SIUtil.isNotNull(lCasher.getSumOfG()) && Long.parseLong(lCasher.getSumOfG()) > 0) {
          lMailBuf.append("\n小計(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfD()))).append("円").append(lCasher.getTaxFlgNameOfD());
          lMailBuf.append("\n値引金額(G)：").append(NumberFormat.getNumberInstance().format(new Long(lCasher.getSumOfG()))).append("円");
          lMailBuf.append("\nお支払い合計額(F=D-G):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
        } else {
          lMailBuf.append("\nお支払い合計額(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfD());
        }
      }
      // EDBTG003-00 elecs-matsushima mod end
    }
    lMailBuf.append("\n");
    
    // ポイント残高-ポイント使用額がマイナスになったらエラーにする
    lPointBuf.append("SELECT SUM(PointOfIssue) AS AfterPoint");
    lPointBuf.append(" FROM PointManMTbl ");
    lPointBuf.append(" WHERE CustCode = ");
    lPointBuf.append(SIDBUtil.SQL2Str(lUserLogin.getCustCode()));
    lPointBuf.append(" AND ENABLEFLG = '1'");
    lPointBuf.append(" GROUP BY CustCode");
    
    // 7.2.1 ST2009 修正 ここから
    long AfterPoint = 0;
    if (SIUtil.isNotNull(SIDBUtil.getFirstData(lConnection, lPointBuf.toString()))) {
      AfterPoint = Long.parseLong(SIDBUtil.getFirstData(lConnection, lPointBuf.toString()));
    }
    /*
     * int AfterPoint = 0; if(SIUtil.isNotNull(SIDBUtil.getFirstData(lConnection, lPointBuf.toString()))){ AfterPoint = Integer.parseInt(SIDBUtil.getFirstData(lConnection,
     * lPointBuf.toString())); }
     */
    // 7.2.1 ST2009 修正 ここまで
    if (AfterPoint < 0) { throw new SIDebtPointException("ポイント使用額がポイント残高より大きいです。"); }
    
    // ポイントを使用していれば、POINTMANMTBLのUpdateを行う（受注番号）
    if (Integer.parseInt(lCasher.getSumOfE()) > 0) {
      StringBuffer lPointUpBuf = new StringBuffer();
      lPointUpBuf.append("UPDATE PointManMtbl SET OrderCode=").append(lOrderCode).append(" WHERE ");
      lPointUpBuf.append("PointManCode = ").append(lPointManCode);
      log.debug(lPointUpBuf.toString());
      
      if (SIUtil.isNotNull(lPointManCode)) {
        SIDBUtil.execSQL(lConnection, lPointUpBuf.toString());
      }
    }
    
    // 付加ポイント = 本体価格 - (値引き + ポイント使用)
    String lPointPrice = "0";
    String lDiscountPrice = "0";
    if (SIUtil.isNotNull(lCasher.getSumOfG())) lDiscountPrice = SIUtil.add(lCasher.getSumOfE(), lCasher.getSumOfG());
    else lDiscountPrice = lCasher.getSumOfE();
    lDiscountPrice = SIUtil.add_LL(lDiscountPrice, sumOfSetDiscount); // EDBTG003-00 elecs-matsushima add
    lPointPrice = SIUtil.sub_LL(lCasher.getSumOfPrice(), lDiscountPrice);
    lPointPrice = SIUtil.sub(lPointPrice, diffPrice);
    
    // ポイント使用フラグが「１：使用する」の場合のみポイントを付加する
    if (pointEnableFlg.equals("1")) {
      String[] ic = individualCode.toString().split(",");
      String[] ct = cmdtyTotalPrice.toString().split(",");
      String[][] pointData = new String[ic.length][2];
      for (int count=0;count<ic.length;count++){
        pointData[count][0] = ic[count];
        pointData[count][1] = ct[count];
      }
      // ポイントルールは常にモールを使用する。
      SIPointRule lPointRule = new SIPointRule(SIConfig.SIMALL.getMallShopCode());
      lPointRule.reset(lConnection);
      
      // 17.ポイント付加
      lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT DISTINCT ORDERCODE FROM ").append(SIConfig.SIVIEW_ORDER_LATEST_NAME);
      lSqlBuf.append(" WHERE ORDERCODE<>").append(SIDBUtil.SQL2Str(lOrderCode, " "));
      lSqlBuf.append("   AND CUSTCODE=").append(SIDBUtil.SQL2Str(lUserLogin.getCustCode(), " "));
      lSqlBuf.append("   AND STATUS='1'");// 初めて購入
      
      String lPoint = "0";
      try {
        if (SIUtil.isNotNull(SIDBUtil.getFirstData(lConnection, lSqlBuf.toString()))) {
          lPoint = lPointRule.calcPointInUpdateOrder(lConnection, pointData, lDiscountPrice, lUserLogin.getCustCode(), false, regOrderID.getInitDateTime());
        } else {
          lPoint = lPointRule.calcPointInUpdateOrder(lConnection, pointData, lDiscountPrice, lUserLogin.getCustCode(), true, regOrderID.getInitDateTime());
        }
      } catch (SIDBAccessException e1) {
        e1.printStackTrace();
      }
      
      lRec = new SIInsertRec("PointManMTBL");
      lRec.add("CUSTCODE", lUserLogin.getCustCode()); // 顧客コード
      lRec.add("MallShopCODE", lCasher.getCasherShopCode()); // 管理コード
      lRec.add("IssueFLG", "0"); // 発行種別フラグ
      lRec.add("PointOfIssue", lPoint); // 発行／使用ポイント数
      lRec.add("EnableFLG", "2"); // 有効フラグ(仮発行)
      lRec.add("ORDERCODE", lOrderCode); // 受注番号
      
      // POSTGRESQL
      if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {
        lRec.add("ISSUEDATETIME", lDateTime.getFullDateTime()); // 更新日時
        // POSTGRESQL以外
      } else {
        lRec.add("ISSUEDATETIME", new SIDateTimeType(lDateTime.getFullDateTime())); // 更新日時
      }
      lRec.execute(lConnection);
      
      lMailBuf.append("\n獲得予定ポイント数：").append(lPoint).append("ポイント");
      lMailBuf.append("\n");
      
    }
    
    // 14.メールの本文の作成(メールテンプレートの内容2)
    lMailBuf.append("\n");
    lSendMail.appendContent3(lMailBuf.toString());
    lMailBuf = new StringBuffer();
    
    // 15.メールの本文の作成(金融機関情報)
    if (lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_BEFORE) || lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_AFTER)) {
      
      lMailBuf.append("\n＜銀行振込を選択された方へ＞");
      lMailBuf.append("\nご注文後、1週間以内に当社口座へお振込みください。入金確認後、商品の出荷手配をいたします。");
      lMailBuf.append("\n＊「注文番号」を振込人名義の先頭に付加して、お振込みください。");
      //lMailBuf.append("\n例）12345ビューティガレージ");
      lMailBuf.append("\n\n例）").append(lOrderCode).append(lUserLogin.getCustPronName());
      lMailBuf.append("\n\n振込人名義に「注文番号」がない場合や振込人名義がご注文時のお名前と異なる場合、");
      lMailBuf.append("\n入金確認までにお時間を頂戴することになり、納品日のご希望に添えない場合がございます。");
      lMailBuf.append("\n該当されるお客様はお手数ではございますが、当社までその旨ご連絡ください。");
      lMailBuf.append("\n＊振込手数料は、お客様負担となります。");
      lMailBuf.append("\nご入金後、2〜3日以内に納品日の連絡メールが無い場合は、当社までご連絡ください。");
      
      SIPayMethod lPayMethod = new SIPayMethod();
      
      lPayMethod.setEncode(SIConfig.SIENCODE_NONE);
      lPayMethod.setMallShopCode(lCasher.getCasherShopCode());
      lPayMethod.setPayMethodName(lCasher.getPayMethodName());
      
      Collection payeeInfoColl = lPayMethod.getCollection(lConnection);
      Iterator payeeInfoIte = payeeInfoColl.iterator();
      
      int ii = 0;
      
      if (payeeInfoIte.hasNext()) {
        lMailBuf.append("\n【お支払先金融機関】");
        
        while (payeeInfoIte.hasNext()) {
          ii++;
          SIPayeeInfo payeeInfo = (SIPayeeInfo) payeeInfoIte.next();
          
          //lMailBuf.append("\n金融機関" + (ii));
          lMailBuf.append("\n金融機関コード:").append(payeeInfo.getBankCode());
          lMailBuf.append(" /金融機関名:").append(payeeInfo.getBankName());
          lMailBuf.append(" /金融機関名カナ:").append(payeeInfo.getBankNameKana());
          lMailBuf.append("\n支店コード:").append(payeeInfo.getSubBankCode());
          lMailBuf.append(" /支店名:").append(payeeInfo.getSubBankName());
          lMailBuf.append(" /支店名カナ:").append(payeeInfo.getSubBankNameKana());
          lMailBuf.append("\n口座種類:");
          
          if (SIUtil.isNotNull(payeeInfo.getAccountType())) {
            lMailBuf.append(SIFlagConf.SIFLAG_ACCOUNT_TYPE_NAME[Integer.parseInt(payeeInfo.getAccountType())][0]);// 口座種類
          }
          lMailBuf.append(" /口座名義人カナ:").append(payeeInfo.getAccountName());// 口座名義人
          lMailBuf.append(" /口座番号:").append(payeeInfo.getAccountNo());// 口座番号
        }
      }
      lMailBuf.append("\n");
    }else{
      lMailBuf.append("\n＜カード決済・代金引換を選択された方へ＞");
      lMailBuf.append("\nすでにご注文商品の出荷手配に入らせて頂いておりきますので、ご注文内容の変更は出来ません。");
      lMailBuf.append("\n商品の追加・変更等は、新たにご注文を承りますので、ご了承ください。");
      lMailBuf.append("\n");
    }
    
    // 18.メールの本文の作成(メールテンプレートの内容3)
    lSendMail.appendContent2(lMailBuf.toString());
    // 19.メールの本文の作成(メールテンプレートの署名)
    
    // 20.総額のチェック
    SIOrder.checkPrice(lConnection, lOrderCode);
    
    // 21.RFM分析テーブルの更新
    //String rfmAnalyseCode = SIDBUtil.getFirstData(lConnection, SIDBUtil.getNextVal("RFMANALYSETBL_RFMANALYSECD_SEQ"));
    
    SIModifyRec lmRec = new SIModifyRec("RFMANALYSETBL");
    lmRec.addCondition("ORDERCODE", lOrderCode); // 受注番号
    lmRec.add("SUMOFPRICE", lCasher.getSumOfA()); // 合計金額
    lmRec.add("AMOUNT", lCasher.getTotalOfAmount()); // 数量
    
    lmRec.execute(lConnection);
    
    // 22.予約商品の更新
    lRsrCartManager.update(lConnection, lCasher.getShopCode());
    
    // 23.送信開始
    try {
      lSendMail.setToMailAddress(lUserLogin.getEmail());
      // 7.2.1 ST2032 修正個所ここから
      String mailSendFlg = (String) urlParam.getParam("mailSendFlg");
      lRequest.setAttribute("mailSendFlg", mailSendFlg);
      if (SIUtil.isNotNull(mailSendFlg) && mailSendFlg.equals("1")) {
        lSendMail.execute();
      }
      // 7.2.1 ST2032 修正個所ここまで
    } catch (SIFatalException e) {
      e.printStackTrace();
    }
    
    // 24.発注データ修正
    SIModifyRec lModRec = new SIModifyRec("hacchutbl");
    lModRec.addCondition("OrderCode",lOrderCode);
    lModRec.addCondition("EnabledFlg","1");
    lModRec.addCondition("BranchCode","");
    lModRec.addCondition("ChargeCode","");
    lModRec.add("BranchCode",regOrderID.getCompanyCode());
    lModRec.add("ChargeCode",regOrderID.getChargeCode());
    lModRec.execute(lConnection);
    
    // EDBTG003-00 elecs-matsushima add start
    // 26.受注セット品の登録
    SIOrderSetCmdty setCmdty = new SIOrderSetCmdty();
    Collection lSetCmdtyColl = setCmdty.getOrderSetCmdty(lRequest);
    Iterator ite = lSetCmdtyColl.iterator();
    while(ite.hasNext()) {
      SIOrderSetCmdty lSetCmdty = (SIOrderSetCmdty)ite.next();
      SIInsertRec lOrderSetCmdtyRec = new SIInsertRec(SIConfig.SITABLE_ORDER_SET_CMDTY_NAME);
      lOrderSetCmdtyRec.add("ordercode", lOrderCode);
      lOrderSetCmdtyRec.add("orderbranchcode", lOrderBranchCode);
      lOrderSetCmdtyRec.add("setcode", lSetCmdty.getSetCode());
      lOrderSetCmdtyRec.add("setcmdtycode", lSetCmdty.getSetCmdtyCode());
      lOrderSetCmdtyRec.add("setindividualcode", lSetCmdty.getSetIndividualCode());
      lOrderSetCmdtyRec.add("cmdtyname", lSetCmdty.getCmdtyName());
      lOrderSetCmdtyRec.add("setdiscount", lSetCmdty.getSetDiscount());
      lOrderSetCmdtyRec.add("setamount", lSetCmdty.getSetAmount());
      lOrderSetCmdtyRec.execute(lConnection);
    }
    // EDBTG003-00 elecs-matsushima add end
  }
  
  /**
   * <b>refreshOrder</b> DBから受注情報を読み出します
   * 
   * @param lRequest
   * @param lConnection
   * @param lUrlParam
   */
  private void refreshOrderFirst(HttpServletRequest lRequest, Connection lConnection, SIURLParameter lUrlParam) {
    refreshOrderFirst(lRequest, lConnection, lUrlParam, false);
  }
  
  private void refreshOrderFirst(HttpServletRequest lRequest, Connection lConnection, SIURLParameter lUrlParam, boolean firstflg) {
    
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    HttpSession session = lRequest.getSession(true);// セッションの取得
    
    // 受注情報オブジェクト
    UIRegOrder refreshRegOrder = new UIRegOrder();
    refreshRegOrder.init(lRequest, lUrlParam);
    // int totalDelivery = 0;
    
    if (true) {
      // 受注情報のセット
      refreshRegOrder.reset(lRequest, lConnection);
      session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME, refreshRegOrder);
      
      // 顧客情報オブジェクト
      UIRegUpdateOrderUserLogin newOrderUserLogin = new UIRegUpdateOrderUserLogin();
      newOrderUserLogin.init(lRequest, lConnection, lUrlParam, refreshRegOrder.getCustCode());
      
      // カートオブジェクト
      UIMain mainID = new UIMain();
      
      Statement lStatement = null;
      ResultSet lResultSet = null;
      
      // EDBTG003-00 elecs-matsushima add start
      Statement lStatement2 = null;
      ResultSet lResultSet2 = null;
      // EDBTG003-00 elecs-matsushima add end
      // 該当受注の検索
      StringBuffer lSqlBuf = new StringBuffer();
      // EDBTG003-00 mod start
//      lSqlBuf.append("SELECT * ");
      lSqlBuf.append("SELECT aa.* ");
      // EDBTG003-00 mod end
      lSqlBuf.append(" FROM ").append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME).append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa ");
      lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode()));
      if (lLogin.isShop()) {
        lSqlBuf.append(" AND aa.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
      }
      // EDBTG003-00 elecs-matsushima add start
//      lSqlBuf.append(" ORDER BY aa.SHOPCODE, aa.CMDTYCODE");
      lSqlBuf.append(" ORDER BY aa.SHOPCODE, aa.SETCODE, aa.SETDETAILCODE, aa.CMDTYCODE, aa.INDIVIDUALCODE");
      // EDBTG003-00 elecs-matsushima add end
      
      try {
        log.debug("readData:lSql=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        // EDBTG003-00 elecs-matsushima add start
//        while (lResultSet.next()) {
//          mainID = new UIMain();
//          mainID.setCartShopCodeTxt(lResultSet.getString("SHOPCODE"));
//          mainID.setCartCmdtyCodeTxt(lResultSet.getString("CMDTYCODE"));
//          mainID.setCartIndividualCodeTxt(lResultSet.getString("individualCode"));
//          mainID.setCartStndrdCodeTxt1(lResultSet.getString("STNDRDCODE1"));// 規格1
//          mainID.setCartStndrdCodeTxt2(lResultSet.getString("STNDRDCODE2"));// 規格2
//          mainID.setCartElementCodeTxt1(lResultSet.getString("ELEMENTCODE1"));// カートエレメント1
//          mainID.setCartElementCodeTxt2(lResultSet.getString("ELEMENTCODE2"));// カートエレメント2
//          mainID.setCartAmountTxt(lResultSet.getString("AMOUNT"));
//          
//          // カートに追加
//          mainID.addCart(lRequest, lConnection, false);
//        }
        
        // データを設定する。
        LinkedHashMap orderDetailMap = new LinkedHashMap();
        
        while (lResultSet.next()) {
          
          if (lResultSet.getString("SETDETAILFLG").equals(SIConfig.SET_DETAIL_FLG_NORMAL)) { // 通常品
            String keyMap = "";
            keyMap += lResultSet.getString("SHOPCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("CMDTYCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("individualCode") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("STNDRDCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("ELEMENTCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("STNDRDCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("ELEMENTCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("SETCODE") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("SETCODE");
            
            SICartCmdty cartCmdty = new SICartCmdty();
            cartCmdty.setShopCode(lResultSet.getString("SHOPCODE"));
            cartCmdty.setCmdtyCode(lResultSet.getString("CMDTYCODE"));
            cartCmdty.setIndividualCode(lResultSet.getString("individualCode"));
            cartCmdty.setStndrdCode1(lResultSet.getString("STNDRDCODE1"));// 規格1
            cartCmdty.setStndrdCode2(lResultSet.getString("STNDRDCODE2"));// 規格2
            cartCmdty.setElementCode1(lResultSet.getString("ELEMENTCODE1"));// カートエレメント1
            cartCmdty.setElementCode2(lResultSet.getString("ELEMENTCODE2"));// カートエレメント2
            cartCmdty.setAmount(lResultSet.getString("AMOUNT"));
            cartCmdty.setSetDetailFlg(lResultSet.getString("SETDETAILFLG"));
            cartCmdty.setSetCode(lResultSet.getString("SETCODE"));
            cartCmdty.setSetCmdtyCode(lResultSet.getString("SETCMDTYCODE"));
            cartCmdty.setSetIndividualCode(lResultSet.getString("SETINDIVIDUALCODE"));
            cartCmdty.setSetDetailCode(lResultSet.getString("SETDETAILCODE"));
            if (SIUtil.isNull(cartCmdty.getSetDetailCode())) cartCmdty.setSetDetailCode("");
            cartCmdty.setDetailCode(lResultSet.getString("DETAILCODE"));
            cartCmdty.setOldSetCode(lResultSet.getString("SETCODE"));
            cartCmdty.setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_NORMAL);
            
            orderDetailMap.put(keyMap, cartCmdty);
          } else {
            String keyMap = "";
            keyMap += lResultSet.getString("SHOPCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("setcmdtycode") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("setindividualcode") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("STNDRDCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("ELEMENTCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("STNDRDCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("ELEMENTCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("SETCODE") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("SETCODE");
            
            SICartCmdty cartCmdty = (SICartCmdty) orderDetailMap.get(keyMap);
            
            if (cartCmdty == null) {
              cartCmdty = new SICartCmdty();
              String shopCodeTmp = lResultSet.getString("shopcode");
              
              StringBuffer sql = new StringBuffer();
              sql.append("SELECT aa.*, bb.* FROM ordersetcmdtytbl aa, cmdtyunittbl bb ");
              sql.append(" WHERE aa.setcmdtycode = bb.cmdtycode ");
              sql.append(" AND aa.setindividualcode=bb.individualcode ");
              sql.append(" AND bb.SHOPCODE=").append(SIDBUtil.SQL2Str(shopCodeTmp));
              sql.append(" AND aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode()));
              sql.append(" AND aa.orderbranchcode=").append(SIDBUtil.SQL2Str(lResultSet.getString("orderbranchcode")));
              sql.append(" AND aa.setcode=").append(SIDBUtil.SQL2Str(lResultSet.getString("setcode")));
              sql.append(" AND aa.setcmdtycode=").append(SIDBUtil.SQL2Str(lResultSet.getString("setcmdtycode")));
              sql.append(" AND aa.setindividualcode=").append(SIDBUtil.SQL2Str(lResultSet.getString("setindividualcode")));
              
              try {
                lStatement2 = lConnection.createStatement();
                lResultSet2 = lStatement2.executeQuery(sql.toString());
                
                if (lResultSet2.next()){
                  // 親情報を取得する。
                  cartCmdty.setShopCode(shopCodeTmp);
                  cartCmdty.setCmdtyCode(lResultSet2.getString("CMDTYCODE"));
                  cartCmdty.setIndividualCode(lResultSet2.getString("individualCode"));
                  cartCmdty.setAmount(lResultSet2.getString("setamount"));
                  cartCmdty.setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_VARIATION_SET); // 構成品は変動として設定
                  cartCmdty.setSetDiscountPrice(lResultSet2.getString("setdiscount"));
                }
              } catch (SQLException sqle) {
                throw sqle;
              } finally {
                SIDBUtil.close(lStatement2, lResultSet2);
              }
            }
            String compKey = cartCmdty.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + cartCmdty.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + cartCmdty.getIndividualCode();
            Collection composition = new ArrayList();
            if (cartCmdty.getCartsCmdtyCompositionDetailMap() == null) {
              cartCmdty.setCartsCmdtyCompositionDetailMap(new LinkedHashMap());
            } else {
              composition = (Collection) cartCmdty.getCartsCmdtyCompositionDetailMap().get(compKey);
              if (composition == null) composition = new ArrayList();
            }
            
            // 子情報を設定
            String getSetDetailFlg = lResultSet.getString("SETDETAILFLG");
            String cmdtySetAmount = SIUtil.div(lResultSet.getString("AMOUNT"), cartCmdty.getAmount());
            String setCmdtyKeyName = lResultSet.getString("shopcode") + SIConfig.SIWEBSHOPPING_TOKEN
                                     + lResultSet.getString("CMDTYCODE") + SIConfig.SIWEBSHOPPING_TOKEN
                                     + lResultSet.getString("individualCode") + SIConfig.SIWEBSHOPPING_TOKEN
                                     + cmdtySetAmount + SIConfig.SIWEBSHOPPING_TOKEN
                                     + getSetDetailFlg + SIConfig.SIWEBSHOPPING_TOKEN
                                     + lResultSet.getString("DETAILCODE");
            composition.add(setCmdtyKeyName);
            cartCmdty.getCartsCmdtyCompositionDetailMap().put(compKey, composition);
            orderDetailMap.put(keyMap, cartCmdty);
          }
        }
        // カート投入
        addCartOrderDetail(lRequest, lConnection, orderDetailMap, mainID);
        // EDBTG003-00 elecs-matsushima add end
      } catch (SQLException sqle) {
        sqle.printStackTrace();
      // EDBTG003-00 elecs-matsushima add start
      } catch (SIFatalException e) {
        e.printStackTrace();
      // EDBTG003-00 elecs-matsushima add end
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      
      // ギフトフラグ取得
      String lGiftFlg = "0";
      
      if (SIConfig.SIRUNNING_MODE_CURRENT == SIConfig.SIRUNNING_MODE_INDIVIDUAL && lLogin.isShop()) {
        lSqlBuf = new StringBuffer("SELECT GIFTFLG FROM MALLSHOPVW WHERE MALLSHOPCODE=");
        lSqlBuf.append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
        try {
          log.debug("readData:lSql=" + lSqlBuf.toString());
          
          lStatement = lConnection.createStatement();
          lResultSet = lStatement.executeQuery(lSqlBuf.toString());
          
          if (lResultSet.next()) {
            lGiftFlg = lResultSet.getString("GIFTFLG");
          }
        } catch (SQLException sqle) {
          sqle.printStackTrace();
        } finally {
          SIDBUtil.close(lStatement, lResultSet);
        }
        // モール管理者がログインしている場合
      } else if (lLogin.isMall()) {
        lGiftFlg = SIConfig.SIMALL.getGiftFlg();
      }
      
      // 受注明細取得
      LinkedHashMap detailMap = new LinkedHashMap();
      SIOrderDetail lOrderDetail = new SIOrderDetail();
      // EDBTG003-00 elecs-matsushima add start
      Map setCmdtyKeyMap = new HashMap(); // セット情報キー
      // EDBTG003-00 elecs-matsushima add end
      
      lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT aa.* ");
      lSqlBuf.append(",bb.DELIVERYTYPENAME, bb.DELIVERYTYPECODE, bb.ADDRESSCODE ");
      lSqlBuf.append(",dd.purchaseprice, dd.processingexpence,unit.usednewflg,color.colorname ");
      // lSqlBuf.append(",cc.WRAPPINGFLG ");
      lSqlBuf.append(" FROM cmdtyunittbl unit,colortbl color,ORDERDETAILVW aa ");
      lSqlBuf.append(" INNER JOIN ORDERDELIVERYVW bb ");
      lSqlBuf.append("   ON aa.ORDERCODE = bb.ORDERCODE AND aa.DELIVERYCODE = bb.DELIVERYCODE ");
      // lSqlBuf.append(" INNER JOIN CMDTYMVW").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("cc ");
      // lSqlBuf.append(" ON aa.SHOPCODE = cc.SHOPCODE AND aa.CMDTYCODE = cc.CMDTYCODE ");
      lSqlBuf.append(" INNER JOIN (SELECT x.ordercode,x.deliverycode,x.detailcode,x.purchaseprice,x.processingexpence FROM orderdetailtbl x,ordertbl y");
      lSqlBuf.append(" WHERE x.ordercode=y.ordercode and x.orderbranchcode=y.orderbranchcode and y.enabledflg='1')").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("dd ");
      lSqlBuf.append(" ON aa.ORDERCODE = dd.ORDERCODE AND aa.DELIVERYCODE = dd.DELIVERYCODE AND aa.DETAILCODE = dd.DETAILCODE ");
      lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode()));
      if (lLogin.isShop()) {
        lSqlBuf.append("   AND aa.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
      }
      lSqlBuf.append(" AND aa.individualcode=unit.individualcode ");
      lSqlBuf.append(" AND unit.colorcode=color.colorcode ");
      // EDBTG003-00 elecs-matsushima mod start
//      lSqlBuf.append(" ORDER BY aa.SHOPCODE, bb.DELIVERYTYPECODE, bb.ADDRESSCODE, aa.CMDTYCODE");
      lSqlBuf.append(" ORDER BY aa.SHOPCODE, aa.SETCODE, aa.SETDETAILCODE, bb.DELIVERYTYPECODE, bb.ADDRESSCODE, aa.CMDTYCODE, aa.INDIVIDUALCODE");
      // EDBTG003-00 elecs-matsushima mod end
      
      try {
        log.debug("readData:lSql=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        while (lResultSet.next()) {
          lOrderDetail = new SIOrderDetail();
          lOrderDetail.setEncode(SIConfig.SIENCODE_NONE);
          
          String lDeliveryCode = "";
          lDeliveryCode += lResultSet.getString("ADDRESSCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDeliveryCode += lResultSet.getString("DELIVERYTYPENAME") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDeliveryCode += lResultSet.getString("SHOPCODE");
          
          String lDatailCode = "";
          lDatailCode += lResultSet.getString("SHOPCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("CMDTYCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("individualcode") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("STNDRDCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("ELEMENTCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("STNDRDCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("ELEMENTCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("ADDRESSCODE");
          //EDBTG003-00 add start
          lDatailCode += lResultSet.getString("SETCODE") == null ? SIConfig.SIWEBSHOPPING_TOKEN + "0" : SIConfig.SIWEBSHOPPING_TOKEN + lResultSet.getString("SETCODE");
          lDatailCode += lResultSet.getString("setdetailcode") == null ? SIConfig.SIWEBSHOPPING_TOKEN : SIConfig.SIWEBSHOPPING_TOKEN + lResultSet.getString("setdetailcode");
          //EDBTG003-00 add end
          
          lOrderDetail.setDeliveryCode(lDeliveryCode); // 配送先コード
          lOrderDetail.setDetailCode(lDatailCode); // 受注詳細コード
          lOrderDetail.setShopCode(lResultSet.getString("SHOPCODE")); // ショップコード
          lOrderDetail.setCmdtyCode(lResultSet.getString("CMDTYCODE")); // 商品コード
          lOrderDetail.setIndividualCode(lResultSet.getString("individualcode"));// 在庫コード
          lOrderDetail.setShopName(lResultSet.getString("SHOPNAME")); // ショップ名
          lOrderDetail.setCmdtyName(lResultSet.getString("CMDTYNAME")); // 商品名
          lOrderDetail.setStndrdCode1(lResultSet.getString("STNDRDCODE1")); // 規格1
          lOrderDetail.setStndrdName1(lResultSet.getString("STNDRDNAME1")); // 規格1名
          lOrderDetail.setElementCode1(lResultSet.getString("ELEMENTCODE1"));// エレメント1
          lOrderDetail.setElementName1(lResultSet.getString("ELEMENTNAME1"));// エレメント1名
          lOrderDetail.setStndrdCode2(lResultSet.getString("STNDRDCODE2")); // 規格2
          lOrderDetail.setStndrdName2(lResultSet.getString("STNDRDNAME2")); // 規格2名
          lOrderDetail.setElementCode2(lResultSet.getString("ELEMENTCODE2"));// エレメント2
          lOrderDetail.setElementName2(lResultSet.getString("ELEMENTNAME2"));// エレメント2名
          lOrderDetail.setAmount(lResultSet.getString("AMOUNT")); // 数量
          lOrderDetail.setOrgPrice(lResultSet.getString("ORGPRICE")); // 本体値段
          lOrderDetail.setPrice(lResultSet.getString("PRICE")); // 値引き後の購入値段
          lOrderDetail.setTaxFlg(lResultSet.getString("TAXFLG")); // 税フラグ
          lOrderDetail.setTaxRate(lResultSet.getString("TAXRATE")); // 税率
          lOrderDetail.setCmdtySize(lResultSet.getString("CMDTYSIZE")); // 商品サイズ
          // lOrderDetail.setWrappingFlg(lResultSet.getString("WRAPPINGFLG")); //ラッピングフラグ
          lOrderDetail.setWrappingCode(lResultSet.getString("WRAPPINGCODE"));// ラッピングコード
          lOrderDetail.setWrappingName(lResultSet.getString("WRAPPINGNAME"));// ラッピング名
          lOrderDetail.setWrappingPrice(lResultSet.getString("WRAPPINGPRICE"));// ラッピング価格
          lOrderDetail.setWrappingTaxFlg(lResultSet.getString("WRAPPINGTAXFLG"));// ラッピング税フラグ
          lOrderDetail.setShopGiftFlg(lGiftFlg); // ショップギフトフラグ
          lOrderDetail.setDeliveryTypeCode(lResultSet.getString("DELIVERYTYPECODE"));// 配送種別コード
          lOrderDetail.setDeliveryTypeName(lResultSet.getString("DELIVERYTYPENAME"));// 配送種別名称
          lOrderDetail.setPriceIncTax(lResultSet.getString("PRICEINCTAX")); // 消費税込みの金額
          lOrderDetail.setBranchCode(lResultSet.getString("branchcode"));
          lOrderDetail.setChargeCode(lResultSet.getString("chargeCode"));
          lOrderDetail.setDeliveryFee(lResultSet.getString("deliveryfee"));
          lOrderDetail.setDeliveryDate(lResultSet.getString("deliveryDate"));
          lOrderDetail.setDeliveryTime(lResultSet.getString("deliveryTime"));
          lOrderDetail.setPurchasePrice(lResultSet.getString("purchaseprice"));// 仕入価格
          lOrderDetail.setProcessingExpance(lResultSet.getString("processingexpence"));// 加工費
          lOrderDetail.setConsignGoodsFee(lResultSet.getString("consignGoodsFee"));// 委託手数料
          lOrderDetail.setUsedNewFlg(lResultSet.getInt("usedNewFlg"));
          lOrderDetail.setColorName(lResultSet.getString("colorName"));
          
          // totalDelivery = totalDelivery + lResultSet.getInt("deliveryfee");
          // EDBTG003-00 elecs-matsushima add start
          lOrderDetail.setSetDetailFlg(lResultSet.getString("setdetailflg"));
          lOrderDetail.setSetCode(lResultSet.getString("setcode"));
          if (SIUtil.isNull(lOrderDetail.getSetCode())) lOrderDetail.setSetCode("0");
          lOrderDetail.setSetCmdtyCode(lResultSet.getString("setcmdtycode"));
          lOrderDetail.setSetIndividualCode(lResultSet.getString("setindividualcode"));
          lOrderDetail.setSetDetailCode(lResultSet.getString("setdetailcode"));
          if (SIUtil.isNull(lOrderDetail.getSetDetailCode())) lOrderDetail.setSetDetailCode("");
          lOrderDetail.setOrderDetailCode(lResultSet.getString("detailcode"));
          lOrderDetail.setOldSetCode(lResultSet.getString("setcode"));
          // EDBTG003-00 elecs-matsushima add end
          
          detailMap.put(lDatailCode, lOrderDetail);
          // EDBTG003-00 elecs-matsushima add start
          // セット情報を取得
          if (!lResultSet.getString("setdetailflg").equals(SIConfig.SET_DETAIL_FLG_NORMAL)) {
            SIOrderDetail orderSetDetail = new SIOrderDetail();
            orderSetDetail.setOrderCode(lResultSet.getString("ORDERCODE")); // 受注番号
            orderSetDetail.setOrderBranchCode(lResultSet.getString("ORDERBRANCHCODE")); // 受注番号枝番
            orderSetDetail.setShopCode(lResultSet.getString("SHOPCODE")); // ショップコード
            orderSetDetail.setSetDetailFlg(lResultSet.getString("setdetailflg"));// 商品構成フラグ
            orderSetDetail.setSetCode(lResultSet.getString("setcode"));// セット番号
            orderSetDetail.setSetCmdtyCode(lResultSet.getString("setcmdtycode"));// セット商品コード
            orderSetDetail.setSetIndividualCode(lResultSet.getString("setindividualcode"));// セット在庫コード
            
            String mapKey = lResultSet.getString("ORDERCODE") + "~"
                          + lResultSet.getString("ORDERBRANCHCODE") + "~"
                          + lResultSet.getString("SHOPCODE") + "~"
                          + lResultSet.getString("SETCODE") + "~"
                          + lResultSet.getString("SETCMDTYCODE") + "~"
                          + lResultSet.getString("SETINDIVIDUALCODE");
            setCmdtyKeyMap.put(mapKey, orderSetDetail);
          }
          // EDBTG003-00 elecs-matsushima add end
        }
      } catch (SQLException sqle) {
        sqle.printStackTrace();
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMap);
      
      // 配送先情報取得
      LinkedHashMap deliveryMap = new LinkedHashMap();
      SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
      
      lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT aa.*, bb.SHOPCODE, bb.SHOPNAME ");
      lSqlBuf.append(" FROM ").append(SIConfig.SIVIEW_ORDER_DELIVERY_LATEST_NAME).append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa ");
      lSqlBuf.append(" INNER JOIN ").append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME).append(SIDBMultiConf.SIALIAS_CURR_NAME).append("bb ");
      lSqlBuf.append("   ON aa.ORDERCODE = bb.ORDERCODE AND aa.DELIVERYCODE = bb.DELIVERYCODE AND bb.DETAILCODE = 1 ");
      if (lLogin.isShop()) {
        lSqlBuf.append("  AND bb.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
      }
      lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode()));
      lSqlBuf.append(" ORDER BY aa.DELIVERYCODE");
      
      try {
        log.debug("readData:lSql=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        while (lResultSet.next()) {
          lOrderDelivery = new SIOrderDelivery();
          lOrderDelivery.setEncode(SIConfig.SIENCODE_NONE);
          
          String lDeliveryCode = "";
          lDeliveryCode += lResultSet.getString("ADDRESSCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDeliveryCode += lResultSet.getString("DELIVERYTYPENAME") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDeliveryCode += lResultSet.getString("SHOPCODE");
          
          lOrderDelivery.setDeliveryCode(lDeliveryCode);
          lOrderDelivery.setDeliveryName(lResultSet.getString("DELIVERYNAME")); // 配送先呼称
          lOrderDelivery.setDeliveryAddressee(lResultSet.getString("DELIVERYADDRESSEE"));// 配送先宛名
          lOrderDelivery.setEmail(lResultSet.getString("EMAIL")); // メール
          lOrderDelivery.setPostCode1(lResultSet.getString("POSTCODE1")); // 郵便番号1
          lOrderDelivery.setPostCode2(lResultSet.getString("POSTCODE2")); // 郵便番号2
          lOrderDelivery.setAddress1(lResultSet.getString("ADDRESS1")); // 配送先住所1
          lOrderDelivery.setAddress2(lResultSet.getString("ADDRESS2")); // 配送先住所2
          lOrderDelivery.setAddress3(lResultSet.getString("ADDRESS3")); // 配送先住所3
          lOrderDelivery.setCompanyName(lResultSet.getString("COMPANYNAME")); // 会社名
          lOrderDelivery.setTel(lResultSet.getString("TEL")); // 連絡先電話番号
          lOrderDelivery.setFax(lResultSet.getString("FAX")); // 連絡先FAX番号
          lOrderDelivery.setCustCompanyFlg(lResultSet.getString("CUSTCOMPANYFLG")); // 個人法人フラグ
          lOrderDelivery.setAddressCode(lResultSet.getString("ADDRESSCODE")); // アドレス帳コード
          lOrderDelivery.setDeliveryFee(lResultSet.getString("DELIVERYFEE"));
          lOrderDelivery.setDeliveryTaxFlg(lResultSet.getString("DELIVERYTAXFLG"));
          lOrderDelivery.setTaxRate(lResultSet.getString("TAXRATE"));
          lOrderDelivery.setShopCode(lResultSet.getString("SHOPCODE"));
          lOrderDelivery.setShopName(lResultSet.getString("SHOPNAME"));
          lOrderDelivery.setDeliveryTypeCode(lResultSet.getString("DELIVERYTYPECODE"));
          lOrderDelivery.setDeliveryTypeName(lResultSet.getString("DELIVERYTYPENAME"));
          
          deliveryMap.put(lDeliveryCode, lOrderDelivery);
        }
      } catch (SQLException sqle) {
        sqle.printStackTrace();
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      session.setAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME, deliveryMap);
      
      // 商品別明細
      LinkedHashMap orderCmdtyMap = new LinkedHashMap();
      SIOrderCmdty lOrderCmdty = new SIOrderCmdty();
      
      lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT aa.ORDERCODE, aa.SHOPCODE, aa.SHOPNAME, aa.CMDTYCODE, aa.CMDTYNAME ");
      lSqlBuf.append(",aa.STNDRDCODE1, aa.ELEMENTCODE1, aa.STNDRDCODE2, aa.ELEMENTCODE2 ");
      lSqlBuf.append(",aa.STNDRDNAME1, aa.ELEMENTNAME1, aa.STNDRDNAME2, aa.ELEMENTNAME2 ");
      lSqlBuf.append(",aa.ORGPRICE, aa.PRICE, SUM(aa.AMOUNT) AS AMOUNT, aa.TAXFLG, aa.TAXRATE ");
      lSqlBuf.append(" FROM ORDERDETAILVW").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa ");
      lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode(), " "));
      if (lLogin.isShop()) {
        lSqlBuf.append("AND aa.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode(), ""));
      }
      lSqlBuf.append(" GROUP BY aa.ORDERCODE, aa.SHOPCODE, aa.SHOPNAME, aa.CMDTYCODE, aa.CMDTYNAME");
      lSqlBuf.append(",aa.STNDRDCODE1, aa.ELEMENTCODE1, aa.STNDRDCODE2, aa.ELEMENTCODE2");
      lSqlBuf.append(",aa.STNDRDNAME1, aa.ELEMENTNAME1, aa.STNDRDNAME2, aa.ELEMENTNAME2");
      lSqlBuf.append(",aa.ORGPRICE, aa.PRICE, aa.TAXFLG, aa.TAXRATE ");
      lSqlBuf.append(" ORDER BY aa.CMDTYCODE, aa.SHOPCODE");
      
      try {
        log.debug("getConnection:lSqlBuf=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        int ii = 0;
        
        while (lResultSet.next()) {
          ii++;
          lOrderCmdty = new SIOrderCmdty();
          lOrderCmdty.setEncode(SIConfig.SIENCODE_NONE);
          lOrderCmdty.setOrderCode(lResultSet.getString("ORDERCODE")); // 受注番号
          lOrderCmdty.setShopCode(lResultSet.getString("SHOPCODE"));
          lOrderCmdty.setShopName(lResultSet.getString("SHOPNAME"));
          lOrderCmdty.setCmdtyCode(lResultSet.getString("CMDTYCODE"));
          lOrderCmdty.setCmdtyName(lResultSet.getString("CMDTYNAME"));
          lOrderCmdty.setStndrdCode1(lResultSet.getString("STNDRDCODE1"));
          lOrderCmdty.setStndrdName1(lResultSet.getString("STNDRDNAME1"));
          lOrderCmdty.setElementCode1(lResultSet.getString("ELEMENTCODE1"));
          lOrderCmdty.setElementName1(lResultSet.getString("ELEMENTNAME1"));
          lOrderCmdty.setStndrdCode2(lResultSet.getString("STNDRDCODE2"));
          lOrderCmdty.setStndrdName2(lResultSet.getString("STNDRDNAME2"));
          lOrderCmdty.setElementCode2(lResultSet.getString("ELEMENTCODE2"));
          lOrderCmdty.setElementName2(lResultSet.getString("ELEMENTNAME2"));
          lOrderCmdty.setAmount(lResultSet.getString("AMOUNT"));
          lOrderCmdty.setOrgPrice(lResultSet.getString("ORGPRICE"));
          lOrderCmdty.setPrice(lResultSet.getString("PRICE"));
          lOrderCmdty.setTaxFlg(lResultSet.getString("TAXFLG"));
          lOrderCmdty.setTaxRate(lResultSet.getString("TAXRATE"));// 税率
          
          // 消費税込みの金額の算出、セット
          String lCalcPrice = "0";
          if (lOrderCmdty.getTaxFlg().equals("1")) {
            lCalcPrice = SITax.calcPriceIncTax(lOrderCmdty.getPrice(), lOrderCmdty.getTaxRate());
          } else {
            lCalcPrice = lOrderCmdty.getPrice();
          }
          lOrderCmdty.setPriceIncTax(lCalcPrice);
          
          orderCmdtyMap.put(new Integer(ii).toString(), lOrderCmdty);
        }
        session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_DTIL_NAME, orderCmdtyMap);
      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      
      // EDBTG003-00 elecs-matsushima add start
      Map setCmdtyMap = new LinkedHashMap();
      
      Iterator iteSetCmdtyKeyMap = setCmdtyKeyMap.keySet().iterator();
      while (iteSetCmdtyKeyMap.hasNext()){
        SIOrderDetail orderCmdtyDetail = (SIOrderDetail) setCmdtyKeyMap.get(iteSetCmdtyKeyMap.next());
        if (orderCmdtyDetail != null){
          
          // セットデータ
          lSqlBuf = new StringBuffer();
          lSqlBuf.append("SELECT aa.ORDERCODE, aa.ORDERBRANCHCODE, aa.SETCODE, aa.SETCMDTYCODE, aa.SETINDIVIDUALCODE ");
          lSqlBuf.append(",aa.CMDTYNAME, aa.SETDISCOUNT, aa.SETAMOUNT ");
          lSqlBuf.append(" FROM ORDERSETCMDTYTBL").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa ");
          lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getOrderCode(), " "));
          lSqlBuf.append(" AND aa.ORDERBRANCHCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getOrderBranchCode(), " "));
          lSqlBuf.append(" AND aa.SETCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getSetCode(), " "));
          lSqlBuf.append(" AND aa.SETCMDTYCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getSetCmdtyCode(), " "));
          lSqlBuf.append(" AND aa.SETINDIVIDUALCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getSetIndividualCode(), " "));
          
          try {
            log.debug("getConnection:lSqlBuf=" + lSqlBuf.toString());
            lStatement = lConnection.createStatement();
            lResultSet = lStatement.executeQuery(lSqlBuf.toString());
            
            while (lResultSet.next()) {
              SIOrderSetCmdty setCmdty = new SIOrderSetCmdty();
              setCmdty.setEncode(SIConfig.SIENCODE_NONE);
              setCmdty.setOrderCode(lResultSet.getString("ORDERCODE")); // 受注番号
              setCmdty.setOrderBranchCode(lResultSet.getString("ORDERBRANCHCODE")); // 受注番号枝番
              setCmdty.setSetCode(lResultSet.getString("SETCODE")); // セット番号
              setCmdty.setSetCmdtyCode(lResultSet.getString("SETCMDTYCODE")); // セット商品コード
              setCmdty.setSetIndividualCode(lResultSet.getString("SETINDIVIDUALCODE")); // セット在庫コード
              setCmdty.setCmdtyName(lResultSet.getString("CMDTYNAME")); // セット商品名
              setCmdty.setSetDiscount(lResultSet.getString("SETDISCOUNT")); // セット値引き
              setCmdty.setSetAmount(lResultSet.getString("SETAMOUNT")); // セット数量
              
              // 受注セット品設定
              String setCmdtyKey = setCmdty.getSetCode() + SIConfig.SIWEBSHOPPING_TOKEN
                                 + setCmdty.getSetCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                                 + setCmdty.getSetIndividualCode();
              setCmdtyMap.put(setCmdtyKey, setCmdty);
            }
          } catch (SQLException e) {
            e.printStackTrace();
          } finally {
            SIDBUtil.close(lStatement, lResultSet);
          }
        }
      }
      session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, setCmdtyMap);
      LinkedHashMap setCmdtyMapTmp = new LinkedHashMap(setCmdtyMap);
      // EDBTG003-00 elecs-matsushima add end
      
      // 支払条件オブジェクト
      UICasher lCasher = new UICasher();
      lCasher.readData(lRequest, lConnection, lUrlParam, refreshRegOrder.getOrderCode(), refreshRegOrder.getSumOfDiscount());
      // lCasher.setSumOfB(Integer.toString(totalDelivery));
      
      SICartDetail.resetDelivery(lRequest, lConnection, lOrderDelivery.getAddressCode(), firstflg);
      session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMap);
      session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, setCmdtyMapTmp); // EDBTG003-00 elecs-matsushima add
      session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
      
      // EDBTG003-00 elecs-matsushima add start
      // cartManのソート順がおかしくなり、画面が再描画されなくなるので並び替えてカートに投入する。
      SICartManager cartMan=new SICartManager();
      cartMan.adjustAmount(lRequest,lConnection);
      session.setAttribute(SIConfig.SISESSION_CART_INFO_NAME,cartMan);
      // EDBTG003-00 elecs-matsushima add end
    }
  }
  
  // EDBTG003-00 elecs-matsushima add start
  private void addCartOrderDetail(HttpServletRequest lRequest, Connection lConnection, Map orderDetailMap, UIMain mainID){
    for (Iterator iteOrderDetailMap = orderDetailMap.keySet().iterator(); iteOrderDetailMap.hasNext();){
      mainID = new UIMain();
      SICartCmdty cartCmdty = (SICartCmdty) orderDetailMap.get(iteOrderDetailMap.next());
      
      if (cartCmdty.getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_NORMAL)){
        mainID.setCartShopCodeTxt(cartCmdty.getShopCode());
        mainID.setCartCmdtyCodeTxt(cartCmdty.getCmdtyCode());
        mainID.setCartIndividualCodeTxt(cartCmdty.getIndividualCode());
        mainID.setCartStndrdCodeTxt1(cartCmdty.getStndrdCode1());
        mainID.setCartStndrdCodeTxt2(cartCmdty.getStndrdCode2());
        mainID.setCartElementCodeTxt1(cartCmdty.getElementCode1());
        mainID.setCartElementCodeTxt2(cartCmdty.getElementCode2());
        mainID.setCartAmountTxt(cartCmdty.getAmount());
        mainID.setCmdtyCompositionFlg(cartCmdty.getCmdtyCompositionFlg());
        mainID.setOldSetcode(cartCmdty.getOldSetCode());
        mainID.setDetailCode(cartCmdty.getDetailCode());
      } else {
        mainID.setCartShopCodeTxt(cartCmdty.getShopCode());
        mainID.setCartCmdtyCodeTxt(cartCmdty.getCmdtyCode());
        mainID.setCartIndividualCodeTxt(cartCmdty.getIndividualCode());
        mainID.setCartStndrdCodeTxt1(cartCmdty.getStndrdCode1());
        mainID.setCartStndrdCodeTxt2(cartCmdty.getStndrdCode2());
        mainID.setCartElementCodeTxt1(cartCmdty.getElementCode1());
        mainID.setCartElementCodeTxt2(cartCmdty.getElementCode2());
        mainID.setCartAmountTxt(cartCmdty.getAmount());
        mainID.setSetDiscount(cartCmdty.getSetDiscountPrice());
        mainID.setCmdtyCompositionFlg(cartCmdty.getCmdtyCompositionFlg());
        mainID.setOldSetcode(cartCmdty.getOldSetCode());
        
        String compKey = cartCmdty.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN
                         + cartCmdty.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                         + cartCmdty.getIndividualCode();
        
        Collection compositionColl = (Collection) cartCmdty.getCartsCmdtyCompositionDetailMap().get(compKey);
        
        Collection groupList = new ArrayList();
        Collection optionList = new ArrayList();
        Collection appendedList = new ArrayList();
        
        for (Iterator iteCompositionColl = compositionColl.iterator(); iteCompositionColl.hasNext();){
          String compositionKey = (String) iteCompositionColl.next();
          String[] compositionKeyList = compositionKey.split(SIConfig.SIWEBSHOPPING_TOKEN);
          
          String compositionDetailKey = compositionKeyList[0] + SIConfig.SIWEBSHOPPING_TOKEN
                                         + compositionKeyList[1] + SIConfig.SIWEBSHOPPING_TOKEN
                                         + compositionKeyList[2] + SIConfig.SIWEBSHOPPING_TOKEN
                                         + compositionKeyList[3] + SIConfig.SIWEBSHOPPING_TOKEN
                                         + compositionKeyList[5];
          if (compositionKeyList[4].equals(SIConfig.SET_DETAIL_FLG_COMPOSITION)){
            groupList.add(compositionDetailKey);
          } else if (compositionKeyList[4].equals(SIConfig.SET_DETAIL_FLG_OPTION)){
            optionList.add(compositionDetailKey);
          } else if (compositionKeyList[4].equals(SIConfig.SET_DETAIL_FLG_APPENDED)){
            appendedList.add(compositionDetailKey);
          }
        }
        mainID.setCompositionDetail((String[]) groupList.toArray(new String[0]));
        mainID.setCompositionGroupCount(String.valueOf(groupList.size()));
        mainID.setCompositionAppended((String[]) appendedList.toArray(new String[0]));
        mainID.setCompositionOption((String[]) optionList.toArray(new String[0]));
      }
      mainID.addCartPos2(lRequest, lConnection, false, false);
    }
  }
  
  /**
   * 商品が構成商品かどうかを判断します
   *
   * @param lConnection
   * @param cmdtyCode
   * @param individualCode
   * @return
   * @throws SIDBAccessException
   */
  private String getCmdtyComposition(Connection lConnection, String cmdtyCode, String individualCode) throws SIDBAccessException{
    if (SIUtil.isNull(cmdtyCode) && SIUtil.isNull(individualCode)){
      return null;
    }
    
    StringBuffer sqlStm = new StringBuffer();
    sqlStm.append("SELECT cmdtycompositionflg FROM cmdtyunittbl aa ");
    sqlStm.append("WHERE aa.shopcode = '0' ");
    if (SIUtil.isNotNull(cmdtyCode)) {
      sqlStm.append("  AND aa.cmdtycode=").append(SIDBUtil.SQL2Str(cmdtyCode, " "));
    }
    if (SIUtil.isNotNull(individualCode)) {
      sqlStm.append("  AND aa.individualcode=").append(SIDBUtil.SQL2Str(individualCode, " "));
    }
    return SIDBUtil.getFirstData(lConnection, sqlStm.toString());
  }
  
  private String getOrderAllocationInfoKey(String lOrderCode, String lDetailCode, String lShopcode, String lCmdtyCode, String lIndividualCode, String lBranchCode) {
    String mapKey = lOrderCode + SIConfig.SIWEBSHOPPING_TOKEN;
    mapKey += lDetailCode + SIConfig.SIWEBSHOPPING_TOKEN;
    mapKey += lCmdtyCode + SIConfig.SIWEBSHOPPING_TOKEN;
    mapKey += lIndividualCode + SIConfig.SIWEBSHOPPING_TOKEN;
    mapKey += lShopcode + SIConfig.SIWEBSHOPPING_TOKEN;
    mapKey += lBranchCode;
    return mapKey;
  }
  
  private LinkedHashMap getOrderAllocationInfo(Connection lConnection, String lOrderCode) throws SQLException {
    
    StringBuffer orderallocationSql = new StringBuffer();
    LinkedHashMap allocationData = new LinkedHashMap();
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    orderallocationSql.append("SELECT * FROM orderallocationinfotbl ");
    orderallocationSql.append("WHERE orderCode = ").append(SIDBUtil.SQL2Str(lOrderCode," "));
    orderallocationSql.append("ORDER BY detailcode, cmdtycode, individualcode, branchcode ");
    
    try {
      lStatement = lConnection.createStatement();
      
      log.debug("getOrderAllocationInfosql:" + orderallocationSql.toString());
      lResultSet = lStatement.executeQuery(orderallocationSql.toString());
      
      while (lResultSet.next()){
        Map allocationMap = new HashMap();
        allocationMap.put("ordercode", lResultSet.getString("ordercode"));
        allocationMap.put("deliverycode", lResultSet.getString("deliverycode"));
        allocationMap.put("detailcode", lResultSet.getString("detailcode"));
        allocationMap.put("shopcode", lResultSet.getString("shopcode"));
        allocationMap.put("orderbranchcode", lResultSet.getString("orderbranchcode"));
        allocationMap.put("cmdtycode", lResultSet.getString("cmdtycode"));
        allocationMap.put("individualcode", lResultSet.getString("individualcode"));
        allocationMap.put("branchcode", lResultSet.getString("branchcode"));
        allocationMap.put("orderallocationnumber", lResultSet.getString("orderallocationnumber"));
        allocationMap.put("initdatetime", lResultSet.getString("initdatetime"));
        allocationMap.put("updatedatetime", lResultSet.getString("updatedatetime"));
        String mapKey = getOrderAllocationInfoKey(lResultSet.getString("ordercode"), lResultSet.getString("detailcode"),
                                                  lResultSet.getString("shopcode"), lResultSet.getString("cmdtycode"),
                                                  lResultSet.getString("individualcode"), lResultSet.getString("branchcode"));
        allocationData.put(mapKey, allocationMap);
      }
    } catch (SQLException e) {
      throw e;
    } finally {
      SIDBUtil.close(lStatement,lResultSet);
    }
    return allocationData;
  }
  
  private int existAllocation(Map allocationMap, String lOrderCode, String lShopcode, String lCmdtyCode, String lIndividualCode, String lOldDetailCode) {
    if (allocationMap == null) return 0;
    
    String chkKey = getOrderAllocationInfoKey(lOrderCode, lOldDetailCode, lShopcode, lCmdtyCode, lIndividualCode, "");
    int alloc = 0;
    
    for (Iterator iteAllocationMap = allocationMap.keySet().iterator(); iteAllocationMap.hasNext();){
      String allocationMapKey = (String) iteAllocationMap.next();
      Map allocationDataMap = (Map) allocationMap.get(allocationMapKey);
      
      if (allocationMapKey.startsWith(chkKey)) {
        String allocStr = (String)allocationDataMap.get("orderallocationnumber");
        if (SIUtil.isNotNull(allocStr)) {
          alloc += Integer.parseInt(allocStr);
        }
      }
    }
    return alloc;
  }
  
  private void insertOrderAllocation(Connection conn, String lShopcode, String lCmdtyCode, String lIndividualCode, String lOrderCode, int lDeliveryCode, int lDetailCode,String lOldDetailCode, LinkedHashMap allocationmap) throws NumberFormatException, SIDBAccessException{
    
   // 前のDetailCodeがない場合は処理を行わない
   if (SIUtil.isNull(lOldDetailCode)) return;
   if (allocationmap == null)  return;
   
    String chkKey = getOrderAllocationInfoKey(lOrderCode, String.valueOf(lOldDetailCode), lShopcode, lCmdtyCode, lIndividualCode, "");
    for (Iterator iteAllocationMap = allocationmap.keySet().iterator(); iteAllocationMap.hasNext();){
      
      String allocationMapKey = (String) iteAllocationMap.next();
      Map allocationDataMap = (Map) allocationmap.get(allocationMapKey);
      
      if (allocationMapKey.startsWith(chkKey)) { // 既存に該当データがあればINSERT
        SIBGUtil.insertOrderAllocation(conn,
                      Integer.parseInt((String) allocationDataMap.get("orderallocationnumber")),
                        (String) allocationDataMap.get("shopcode"),
                        (String) allocationDataMap.get("cmdtycode"),
                        (String) allocationDataMap.get("individualcode"),
                        lOrderCode, lDeliveryCode, lDetailCode,
                        (String) allocationDataMap.get("branchcode"));
      }
    }
  }
  //EDBTG003-00 elecs-matsushima add end
  
  private void reserveCheck(Connection lConnection, String lOrderCode) throws SIDBAccessException, SQLException, SIDuplicateKeyException {
    if (SIUtil.isNull(lOrderCode)) return;
    
    Statement lStatement = lConnection.createStatement();
    ResultSet lResultSet = lStatement.executeQuery("SELECT reservecode From orderreservetbl WHERE ordercode=" + SIDBUtil.SQL2Str(lOrderCode));
    
    while (lResultSet.next()) {
      StringBuffer lSqlBuffer = new StringBuffer();
      lSqlBuffer.append("SELECT a.ordercode FROM orderallocationinfotbl a,reserveordertbl b ");
      lSqlBuffer.append("WHERE a.cmdtycode=b.cmdtycode AND a.individualcode=b.individualcode AND a.branchcode=b.reservebranch ");
      lSqlBuffer.append("AND a.ordercode=").append(SIDBUtil.SQL2Str(lOrderCode, " "));
      lSqlBuffer.append("AND b.reservecode=").append(SIDBUtil.SQL2Str(lResultSet.getString("reservecode")));
      if (!SIDBUtil.hasData(lConnection, lSqlBuffer.toString())) {
        SIDeleteRec lRec = new SIDeleteRec("orderreservetbl");
        lRec.addCondition("ordercode", lOrderCode);
        lRec.addCondition("reservecode", lResultSet.getString("reservecode"));
        lRec.execute(lConnection);
      }
    }
    SIDBUtil.close(lStatement, lResultSet);
  }
}