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

import java.io.IOException;
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.text.NumberFormat;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
//import java.util.Map;

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.SICartCmdty;
import jp.co.sint.basic.SICust;
import jp.co.sint.basic.SICartDetail;
import jp.co.sint.basic.SICartManager;
import jp.co.sint.basic.SIDeliveryTime;
//import jp.co.sint.basic.SIKeepDetail;
import jp.co.sint.basic.SICmdty;
import jp.co.sint.basic.SILogin; // 7.3.0 ST2023 追加
import jp.co.sint.basic.SIOrder;
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.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.UICatalogCmdty;
import jp.co.sint.beans.front.UICmdtyInfo;
import jp.co.sint.beans.front.UICmdtyInfoForQuickOrder;
import jp.co.sint.beans.front.UIDeliveryHist;
import jp.co.sint.beans.front.UIDeliveryList;
import jp.co.sint.beans.front.UIOrderCounter;
import jp.co.sint.beans.front.UIWrapping;
import jp.co.sint.beans.mallmgr.UINewOrderDeli;
//import jp.co.sint.beans.mallmgr.UIRegNewKeep;
import jp.co.sint.bscvsmdk.SIBSCVSMDKAction; // 7.2.0 ST0300 追加
import jp.co.sint.bscvsmdk.SIBSCVSMDKConfig; // 7.4.0 ST2057 追加
import jp.co.sint.bscvsmdk.SIBSCVSMDKException;// 7.2.0 ST0300 追加
import jp.co.sint.bscvsmdk.SIBSCVSMDKUtil; // 7.2.0 ST0300 追加
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.SIDeleteRec;// 7.2.0 ST0296追加
import jp.co.sint.database.SIDuplicateKeyException;
import jp.co.sint.database.SIInsertRec;
import jp.co.sint.database.SIModifyRec;
import jp.co.sint.database.SITableCondition;
import jp.co.sint.database.SITableConditionManager;
import jp.co.sint.mail.SISendMail;
import jp.co.sint.mail.SIMail;
import jp.co.sint.mdk.SIMDKAction;
//import jp.co.sint.mdk.SIMDKAction3G;
import jp.co.sint.servlet.SIServlet;
import jp.co.sint.servlet.mallmgr.SIHacchuSrv;
import jp.co.sint.servlet.mallmgr.SIRegOrderSrv;
import jp.co.sint.tools.SIBGUtil;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIDateTime;
import jp.co.sint.tools.SIErrorException;
import jp.co.sint.tools.SIFatalException;
//import jp.co.sint.tools.SIFlagUtil;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIMismatchException;
import jp.co.sint.tools.SIURLMap;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.tools.SIStringUtil;
import jp.co.sint.tools.SIURLParameter;// 7.1.1 ST0236 追加
import jp.co.sint.tools.SIDebtPointException;// 7.2.0 ST0296追加

import org.apache.log4j.Category;

/**
 * @version $Id: SICartSrv.java,v 1.0 2003/11/24 Exp $
 * @author <a href="mailto: jwchen@sint.co.jp">jwchen</a> <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>
 * jwchen 2003/11/24 14:59:39 Original
 */
public class SICartSrv 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 {
    HttpSession session = request.getSession(true);// セッションの取得
    SIDatabaseConnection databaseConnection = new SIDatabaseConnection();// DBへのコネクションの作成
    SIURLParameter urlParam = new SIURLParameter(request);// 7.1.1 ST0236 追加
    try {
      String actionName = this.getActionName(urlParam);// 画面からのアクション //7.1.1 ST0236 修正
      String editMode = this.getEditMode(urlParam);// DBへの編集モード //7.1.1 ST0236 修正
      log.debug("doUpdate:actionName=" + actionName);
      
      if (this.getServletPath(request).equals("/cart_param")) {// カート //7.1.1 ST0236 修正
        if (SIUtil.isNull(actionName) || SIConfig.SIACTION_LIST.equalsIgnoreCase(actionName)) {// カート情報を見る
          UICart cart = new UICart();
          cart.init(request, urlParam);// 7.1.1 ST0236 修正
          session.setAttribute(SIConfig.SISESSION_CART_EDIT_NAME, cart);
          forwardKey(request, response, "webshop.jsp.front.cart.main");
        } else if (SIConfig.SIACTION_CLEAR.equalsIgnoreCase(actionName)) {// カートの全ての商品をクリア
          try {
            SIReserveCartManager.cancel(request, databaseConnection.getConnection());
            databaseConnection.getConnection().commit();
            SIReserveCartManager.clear(request);
          } catch (Exception e) {
            e.printStackTrace();
          }
          SICartManager.clear(request);
          // 7.1.1 ST0207 修正 ここから
          UICart cart = new UICart();
          cart.init(request, urlParam);// 7.1.1 ST0236 修正
          redirect(request, response, SIURLMap.getUrl("webshop.servlet.front.main"));// 7.3.0 PI-NES0501 修正
          // 7.1.1 ST0207 修正 ここまで
        } else if (SIConfig.SIACTION_MODIFY.equals(actionName)) {// カートに商品の数量を修正
          UICart cart = new UICart();
          cart.init(request, urlParam);// 7.1.1 ST0236 修正
          cart.validate(request, databaseConnection.getConnection());
          session.setAttribute(SIConfig.SISESSION_CART_EDIT_NAME, cart);
          forwardKey(request, response, "webshop.jsp.front.cart.main");
        } else if (SIConfig.SIACTION_BACK.equals(actionName)) {
          forwardKey(request, response, "webshop.jsp.front.cart.main");
        } else if (SIConfig.SIACTION_DELETE.equals(actionName)) {// カートに商品の数量を削除
          UICart cart = new UICart();
          cart.init(request, urlParam);
          String delRow = (String) urlParam.getParam("delRowTxt");
          if (SIUtil.isNotNull(delRow)) {
            cart.setAmount0(delRow, "0");
            cart.validate(request, databaseConnection.getConnection());
            session.setAttribute(SIConfig.SISESSION_CART_EDIT_NAME, cart);
          }
          forwardKey(request, response, "webshop.jsp.front.cart.main");
        } else if (SIConfig.SIACTION_ADD.equals(actionName)) {
          UICart cart = new UICart();
          cart.initCart(urlParam);
          cart.addCart(request, databaseConnection.getConnection());
          redirect(request, response, SIURLMap.getUrl("webshop.servlet.front.cart"));
        }
      } else if (this.getServletPath(request).equals("/counter")) {// レジ（配送先・ギフト設定）
        if (SIHTMLUtil.cartIsEmpty(request)) {
          redirect(request, response, SIURLMap.getUrl("webshop.servlet.front.main"));// 7.1.1 ST0180 修正
        } else if (SIUtil.isNull(actionName)) {// レジ（配送先・ギフト設定）
          boolean returnFlg = false;
          UICart cart = new UICart();
          cart.init(request, urlParam);// 7.1.1 ST0236 修正
          returnFlg = !cart.validate(request, databaseConnection.getConnection());
          session.setAttribute(SIConfig.SISESSION_CART_EDIT_NAME, cart);
          if (returnFlg) forwardKey(request, response, "webshop.jsp.front.cart.main");
          else{
          // 7.1.1 ST0204 修正 ここから
          SIUserInfo lUserInfo = SIHTMLUtil.getUserInfo(request);
          if (lUserInfo.isNotLogin(request)) {
            // 7.1.1 ST0212 修正 ここから
            String lCtc = "ctc=" + SIHTMLUtil.URLEncode((String) urlParam.getParam("ctc"));// 7.1.1 ST0236 修正
            StringBuffer lUrlBuf = new StringBuffer(SIURLMap.getUrl("webshop.servlet.front.user.login"));
            lUrlBuf.append("?").append(lCtc);// カテゴリ
            lUrlBuf.append("&nid=").append(SIHTMLUtil.URLEncode(SIURLMap.getUrl("webshop.servlet.front.counter")));// 画面ID
            lUrlBuf.append(SIHTMLUtil.URLEncode("?")).append(SIHTMLUtil.URLEncode(lCtc));
            // 7.1.1 ST0212 修正 ここまで
            redirectHttps(request, response, lUrlBuf.toString());
          } else {
            SICartDetail.reset(request, databaseConnection.getConnection());
            UIOrderCounter orderCounter = new UIOrderCounter();
            orderCounter.init(request, databaseConnection.getConnection(), urlParam);// 7.1.1 ST0236 修正
            orderCounter.setShopCode(SIConfig.SIMALL.getMallShopCode());
            // 7.1.1 ST0204 修正 ここまで
            session.setAttribute(SIConfig.SISESSION_ORDER_COUNTER_NAME, orderCounter);
            session.removeAttribute(SIConfig.SISESSION_ORDER_DELI);
            forwardKey(request, response, "webshop.jsp.front.ordercounter");
          }
          }
        } else if (SIConfig.SIACTION_CLEAR.equalsIgnoreCase(actionName)) {// カートの全ての商品をクリア
          try {
            SIReserveCartManager.cancel(request, databaseConnection.getConnection());
            databaseConnection.getConnection().commit();
            SIReserveCartManager.clear(request);
          } catch (Exception e) {
            e.printStackTrace();
          }
          SICartManager.clear(request);
          redirect(request, response, SIURLMap.getUrl("webshop.servlet.front.main"));// 7.1.1 ST0180 修正
        } else if (SIConfig.SIACTION_RETURN.equals(actionName)) {// 決済画面から戻る
          SIUserInfo lUserInfo = SIHTMLUtil.getUserInfo(request);
          if (lUserInfo.isNotLogin(request)) forwardKey(request, response, "webshop.jsp.front.user.login");
          else forwardKey(request, response, "webshop.jsp.front.ordercounter");
        } else if (SIConfig.SIACTION_MODIFY.equals(actionName)) {// カートに商品の数量を修正
          UIOrderCounter orderCounter = new UIOrderCounter();
          UINewOrderDeli newOrderDeli = new UINewOrderDeli();
          newOrderDeli.init(request, urlParam);
          if (SIUtil.isNotNull(newOrderDeli.getDelRow())) {
            orderCounter.initAmountDel(request, urlParam, newOrderDeli.getDelRow());
          } else {
            orderCounter.initAmount(request, urlParam);// 7.1.1 ST0236 修正
          }
          // EDBTG005-00 nagayoshi mod start
          // orderCounter.validate(request, databaseConnection.getConnection());
          boolean error = orderCounter.validate(request, databaseConnection.getConnection());
          // EDBTG005-00 nagayoshi mod end
          SICartDetail.resetDelivery(request, databaseConnection.getConnection(), newOrderDeli.getAddress());
          session.setAttribute(SIConfig.SISESSION_ORDER_COUNTER_NAME, orderCounter);
          session.setAttribute(SIConfig.SISESSION_ORDER_DELI, newOrderDeli);
          // EDBTG005-00 nagayoshi mod start
          // forwardKey(request, response, "webshop.jsp.front.ordercounter");
          if (SIURLMap.isSmartPhone(request) && error) {
            String url = SIURLMap.getUrl("webshop.servlet.front.casher") + "/a/sp_move_confirm";
            redirectHttps(request, response, url);
          } else {
            forwardKey(request, response, "webshop.jsp.front.ordercounter");
          }
          // EDBTG005-00 nagayoshi mod end
        // EDBTG005-00 nagayoshi add start
        } else if (actionName.equals(SIConfig.SIACTION_SP_MOVE_ADDRESS)) {// (スマートフォンの場合）配送先変更画面の遷移
          // 配達希望日・希望時間帯を設定
          UINewOrderDeli newOrderDeli = (UINewOrderDeli)session.getAttribute(SIConfig.SISESSION_ORDER_DELI);
          SICartDetail.resetDelivery(request, databaseConnection.getConnection(), newOrderDeli.getAddress());
          // 連絡事項を設定
          UICasher lCasher = (UICasher)session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
          lCasher.setContactMsg((String) urlParam.getParam("contactMsg"));
          forwardKey(request, response, "webshop.jsp.front.ordercounter");
        // EDBTG005-00 nagayoshi add end
        } else if (SIConfig.SIACTION_REGIST.equals(actionName)) {//
          UIOrderCounter orderCounter = new UIOrderCounter();
          orderCounter.initDeliveryType(request, databaseConnection.getConnection(), urlParam);// 7.1.1 ST0236 修正
          forwardKey(request, response, "webshop.jsp.front.casher.main");
        } else if (SIConfig.SIACTION_REFRESH.equals(actionName)) {// 配送先選択orギフト包装選択後、画面リフレッシュ
          forwardKey(request, response, "webshop.jsp.front.ordercounter");
        } else if (SIConfig.SIACTION_DELIVERY.equals(actionName)) {
          UINewOrderDeli newOrderDeli = new UINewOrderDeli();
          newOrderDeli.init(request, urlParam);
          UICart cart = new UICart();
          cart.init(request, urlParam);
          session.setAttribute(SIConfig.SISESSION_CART_EDIT_NAME, cart);
          SICartDetail.resetDelivery(request, databaseConnection.getConnection(), newOrderDeli.getAddress());
          UIOrderCounter orderCounter = new UIOrderCounter();
          orderCounter.init(request, databaseConnection.getConnection(), urlParam);
          session.setAttribute(SIConfig.SISESSION_ORDER_COUNTER_NAME, orderCounter);
          session.setAttribute(SIConfig.SISESSION_ORDER_DELI, newOrderDeli);
          forwardKey(request, response, "webshop.jsp.front.ordercounter");
        }
      } else if (this.getServletPath(request).equals("/delivery")) {// 配送先選択
        if (SIConfig.SIACTION_LIST.equals(actionName)) {
          UIDeliveryList lDeliveryList = new UIDeliveryList();
          lDeliveryList.init(request, urlParam);// 7.1.1 ST0236 修正
          session.setAttribute(SIConfig.SISESSION_DELIVERY_LIST_NAME, lDeliveryList);
        } else if (SIConfig.SIACTION_MODIFY.equals(actionName)) {// 配送ごとに商品の数量を修正
          UIDeliveryList lDeliveryList = new UIDeliveryList();
          lDeliveryList.initAmount(request, urlParam);// 7.1.1 ST0236 修正
          lDeliveryList.validate(request, databaseConnection.getConnection());
          session.setAttribute(SIConfig.SISESSION_DELIVERY_LIST_NAME, lDeliveryList);
        } else if (SIConfig.SIACTION_REFRESH.equals(actionName)) {// リフレッシュ時
          UIDeliveryList lDeliveryList = new UIDeliveryList();
          lDeliveryList.initRefresh(request, urlParam);// 7.1.1 ST0236 修正
          lDeliveryList.deliveryRefresh(request, databaseConnection.getConnection());
          session.setAttribute(SIConfig.SISESSION_DELIVERY_LIST_NAME, lDeliveryList);
        } else if (SIConfig.SIACTION_BACK.equals(actionName)) {// 配送先履歴から戻るとき
        }
        forwardKey(request, response, "webshop.jsp.front.deliverylist");
      } else if (this.getServletPath(request).equals("/deliveryhist")) {// 配送先履歴
        UIDeliveryHist lDeliveryHist = new UIDeliveryHist();
        lDeliveryHist.init(request, urlParam);// 7.1.1 ST0236 修正
        SIUserInfo lUserLogin = SIHTMLUtil.getUserInfo(request);
        lDeliveryHist.setCustCode(lUserLogin.getCustCode());// 7.2.0 ST0328 追加
        if (SIUtil.isNull(lDeliveryHist.getCustCode()) || !lDeliveryHist.getCustCode().equals(lUserLogin.getCustCode())) {
          redirect(request, response, SIURLMap.getUrl("webshop.servlet.front.main"));// 7.1.1 ST0180 修正
        } else {
          session.setAttribute(SIConfig.SISESSION_DELIVERY_HIST_NAME, lDeliveryHist);
          forwardKey(request, response, "webshop.jsp.front.deliveryhist");
        }
      } else if (this.getServletPath(request).equals("/wrapping")) {// ギフト包装選択
        if (SIUtil.isNull(actionName) || SIConfig.SIACTION_LIST.equals(actionName)) {
          UIWrapping lWrapping = new UIWrapping();
          lWrapping.init(request, urlParam);// 7.1.1 ST0236 修正
          session.setAttribute(SIConfig.SISESSION_CART_WRAPPING_NAME, lWrapping);
        } else if (SIConfig.SIACTION_MODIFY.equals(actionName)) {// ギフトコード選択
          UIWrapping lWrapping = new UIWrapping();
          lWrapping.init(request, urlParam);// 7.1.1 ST0236 修正
          lWrapping.validate(request, databaseConnection.getConnection());
          session.setAttribute(SIConfig.SISESSION_CART_WRAPPING_NAME, lWrapping);
        }
        forwardKey(request, response, "webshop.jsp.front.wrapping");
      } else if (this.getServletPath(request).equals("/casher") || this.getServletPath(request).equals("/thanks")) {// レジ（決済方法の選択)
        // EDBTG005-00 nagayoshi mod start
        // if (session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME) == null) {
        if ((!SIURLMap.isSmartPhone(request)
            && session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME) == null) || 
            // EDBTG005-00 kamata add start
            (this.getServletPath(request).equals("/thanks") && session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME) == null)) {
            // EDBTG005-00 kamata add end
        // EDBTG005-00 nagayoshi mod end
          if (actionName.equals(SIConfig.SIACTION_MAIL)) {
            SIUserInfo lUserLogin = SIHTMLUtil.getUserInfo(request);
            SICust lCust = new SICust();
            if (lUserLogin.isLogin(request)) {
              lCust = lUserLogin;
            } else {
              Statement lStatement = databaseConnection.getConnection().createStatement();
              ResultSet lResultSet = lStatement.executeQuery("SELECT * FROM ordertbl WHERE enabledflg=1 AND ordercode="+SIDBUtil.SQL2Str((String) urlParam.getParam("orderCode")));
              if (lResultSet.next()) {
                lCust.setCustCode(lResultSet.getString("custCode"));
                lCust.setCustName(lResultSet.getString("custName"));
                lCust.setAddress1(lResultSet.getString("address1"));
                lCust.setAddress2(lResultSet.getString("address2"));
                lCust.setAddress3(lResultSet.getString("address3"));
                lCust.setEmail(lResultSet.getString("email"));
              }
              SIDBUtil.close(lStatement,lResultSet);
            }
            try{
              SIMail lMail = new SIMail();
              lMail.setSubject("【ご意見BOX】ビューティガレージ顧客お問い合わせ");
              lMail.setFrom("center@beautygarage.jp");
              lMail.addTo("branch@beautygarage.jp");
              StringBuffer body = new StringBuffer();
              body.append("表題：").append((String) urlParam.getParam("titleParam")).append("\r\n\r\n");
              body.append("ご意見・ご要望など\r\n");
              body.append((String) urlParam.getParam("bodyArea")).append("\r\n\r\n");
              body.append("受注番号：").append((String) urlParam.getParam("orderCode")).append("\r\n");
              body.append("顧客コード：").append(lCust.getCustCode()).append("\r\n");
              body.append("お客様名：").append(lCust.getCustName()).append("\r\n");
              body.append("ご住所：").append(lCust.getAddress()).append("\r\n");
              body.append("E-mail:").append(lCust.getEmail());
              lMail.setContent(body.toString());
              lMail.sendMail();
              String chargeName = "";
              if (SIUtil.isNotNull(lCust.getCharge())){
                chargeName = SIDBUtil.getFirstData(databaseConnection.getConnection(), "SELECT chargeName FROM chargetbl WHERE chargecode="+SIDBUtil.SQL2Str(lCust.getCharge()));
              }
              String comment = (String) urlParam.getParam("bodyArea");
              
              SIInsertRec lRec = new SIInsertRec("opiniontbl");
              lRec.add("custcode", lCust.getCustCode());
              lRec.add("custname", lCust.getCustName());
              lRec.add("email", lCust.getEmail());
              lRec.add("address", lCust.getAddress());
              lRec.add("job", lCust.getJob());
              lRec.add("chargeName", chargeName);
              lRec.add("ordercode", (String) urlParam.getParam("orderCode"));
              lRec.add("title", (String) urlParam.getParam("titleParam"));
              lRec.add("comment", comment);
              lRec.add("route","0");
              lRec.execute(databaseConnection.getConnection());
              
              if (SIUtil.isNotNull(comment)&&comment.length()>5) {
                SIDateTime lDate = new SIDateTime();
                String time = lDate.getFullDateTime();
                String num = SIDBUtil.getFirstData(databaseConnection.getConnection(), "SELECT max(CommentNumber)+1 FROM purchaseCommentTbl WHERE custcode = "+SIDBUtil.SQL2Str(lCust.getCustCode()));
                if (SIUtil.isNull(num)) num="1";
                SIInsertRec iRec = new SIInsertRec("purchaseCommentTbl");
                iRec.add("CustCode", lCust.getCustCode());
                iRec.add("CommentNumber", num);
                iRec.add("InitDateTime", time);
                iRec.add("UpdateDateTime", time);
                iRec.add("UserName", "ご意見BOX");
                iRec.add("Comment", comment);
                iRec.add("MemoStatus", "");
                iRec.execute(databaseConnection.getConnection());
              }
              databaseConnection.getConnection().commit();
              
            }catch(Exception e){}
            forwardKey(request, response, "webshop.jsp.front.casher.result2");
          }else{
            // 7.1.1 ST0154 修正 ここから
            SICartManager cartMan = (SICartManager) session.getAttribute(SIConfig.SISESSION_CART_INFO_NAME);
            if (cartMan == null || cartMan.isEmpty()) {
              redirect(request, response, SIURLMap.getUrl("webshop.servlet.front.main"));// メイン画面//7.1.1 ST0180 修正
            } else {
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("input.casher.confirm"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              forwardKey(request, response, "webshop.jsp.front.cart.main");
            }
            // 7.1.1 ST0154 修正 ここまで
          }
        } else if (SIConfig.SIACTION_MODIFY.equals(actionName)) {// レジ（配送先・ギフト設定）の画面からレジの画面への遷移
          UIOrderCounter orderCounter = new UIOrderCounter();
          UINewOrderDeli newOrderDeli = new UINewOrderDeli();
          newOrderDeli.init(request, urlParam);
          if (SIUtil.isNotNull(newOrderDeli.getDelRow())) {
            orderCounter.initAmountDel(request, urlParam, newOrderDeli.getDelRow());
          } else {
            orderCounter.initAmount(request, urlParam);
          }
          if (!orderCounter.validate(request, databaseConnection.getConnection())) {
            SICartDetail.resetDelivery(request, databaseConnection.getConnection(), newOrderDeli.getAddress());
            session.setAttribute(SIConfig.SISESSION_ORDER_COUNTER_NAME, orderCounter);
            session.setAttribute(SIConfig.SISESSION_ORDER_DELI, newOrderDeli);
            forwardKey(request, response, "webshop.jsp.front.ordercounter");
          } else {
            SICartDetail.resetDelivery(request, databaseConnection.getConnection(), newOrderDeli.getAddress());
            UICasher lCasher = new UICasher();
            lCasher.init(request, databaseConnection.getConnection(), urlParam);
            orderCounter.calcSum(request, databaseConnection.getConnection(), urlParam);
            if (lCasher.validateDigit2(request, orderCounter)) {// 7.1.1 ST0236 修正
              lCasher.initDeliveryType(request, databaseConnection.getConnection(), urlParam);// 7.1.1 ST0236 修正
              lCasher.validatePayment(request);
              /*
               * UINewOrderDeli newOrderDeli=new UINewOrderDeli(); newOrderDeli.init(request,urlParam);
               */
              // 7.2.0 ST1030 追加 ここから（手数料再計算のため）
              lCasher.calcSum(request, databaseConnection.getConnection(), urlParam);
              // 7.2.0 ST1030 追加 ここまで
              session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
              session.setAttribute(SIConfig.SISESSION_ORDER_DELI, newOrderDeli);
              forwardKey(request, response, "webshop.jsp.front.casher.main");
            } else {
              session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
              forwardKey(request, response, "webshop.jsp.front.ordercounter");
            }
          }
        } else if (SIUtil.isNull(actionName)||actionName.equals(SIConfig.SIACTION_REFRESH)) {// 支払方法を選択するときに、このイベントが発生
          // EDBTG005-00 nagayoshi add start
          if (SIURLMap.isSmartPhone(request)) {
            // 配達希望日・希望時間帯を設定
            UINewOrderDeli newOrderDeli = (UINewOrderDeli)session.getAttribute(SIConfig.SISESSION_ORDER_DELI);
            SICartDetail.resetDelivery(request, databaseConnection.getConnection(), newOrderDeli.getAddress());
          }
          // EDBTG005-00 nagayoshi add end
          // 7.2.0 ST0331 修正 ここから
          UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
          if (lCasher == null) lCasher = new UICasher();
          // UICasher lCasher=new UICasher();
          lCasher.init(request, databaseConnection.getConnection(), urlParam);// 7.1.1 ST0236 修正
          // 7.2.0 ST0331 修正 ここまで
          lCasher.validatePayment(request);
          // 7.2.0 ST1030 追加 ここから（手数料再計算のため）
          lCasher.calcSum(request, databaseConnection.getConnection(), urlParam);
          // 7.2.0 ST1030 追加 ここまで
          // EDBTG005-00 nagayoshi mod start
          // session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
          // forwardKey(request, response, "webshop.jsp.front.casher.main");
          if (SIURLMap.isSmartPhone(request)) {
            lCasher.setChecked(true);
            session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
            forwardKey(request, response, "webshop.jsp.front.casher.confirm");
          } else {
            session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
            forwardKey(request, response, "webshop.jsp.front.casher.main");
          }
          // EDBTG005-00 nagayoshi mod end
        } else if (actionName.equals(SIConfig.SIACTION_DELETE)) {// カード情報の削除
          SIUserInfo lUserInfo = SIHTMLUtil.getUserInfo(request);
          lUserInfo.setCcLastOrderCode("");
          lUserInfo.setCcLastOrderDate("");
          SIModifyRec lMod = new SIModifyRec(SIConfig.SITABLE_CUST_NAME);
          lMod.addCondition("CustCode", lUserInfo.getCustCode());
          lMod.add("CCLastOrderCode", "");
          lMod.add("CCLastOrderDate", "");
          lMod.add("CardNumber1", "");
          lMod.add("CardNumber2", "");
          try{
            lMod.execute(databaseConnection.getConnection());
            databaseConnection.getConnection().commit();
          }catch (Exception e){
            e.printStackTrace();
          }
          request.getSession().setAttribute(SIConfig.SISESSION_USERINFO_NAME,lUserInfo);
          forwardKey(request, response, "webshop.jsp.front.casher.main");
        } else if (actionName.equals(SIConfig.SIACTION_CANCEL)) {// 3Dセキュア決済失敗
          String msg = (String)request.getAttribute("errmsg");
          SICustomErrors errors = new SICustomErrors();
          errors.addError(new SICustomError("manager.message.freeword",msg));
          request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
          forwardKey(request, response, "webshop.jsp.front.casher.main");
        } else if (actionName.equals(SIConfig.SIACTION_REDO)) {// ポイント使用額の再計算
          // EDBTG005-00 nagayoshi add start
          if (SIURLMap.isSmartPhone(request)) {
            // 配達希望日・希望時間帯を設定
            UINewOrderDeli newOrderDeli = (UINewOrderDeli)session.getAttribute(SIConfig.SISESSION_ORDER_DELI);
            SICartDetail.resetDelivery(request, databaseConnection.getConnection(), newOrderDeli.getAddress());
          }
          // EDBTG005-00 nagayoshi add end
          // 7.2.0 ST0331 修正 ここから
          UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
          if (lCasher == null) lCasher = new UICasher();
          // UICasher lCasher=new UICasher();
          lCasher.init(request, databaseConnection.getConnection(), urlParam);// 7.1.1 ST0236 修正
          // 7.2.0 ST0331 修正 ここまで
          lCasher.validateRedo(request);
          // EDBTG005-00 nagayoshi mod start
          // session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
          // forwardKey(request, response, "webshop.jsp.front.casher.main");
          if (SIURLMap.isSmartPhone(request)) {
            lCasher.setChecked(true);
            session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
            forwardKey(request, response, "webshop.jsp.front.casher.confirm");
          } else {
            session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
            forwardKey(request, response, "webshop.jsp.front.casher.main");
          }
          // EDBTG005-00 nagayoshi mod end
        } else if (actionName.equals(SIConfig.SIACTION_CONFIRM)) {// 確認画面へ遷移するまえに、データの取得とデータのチェック
          // 7.2.0 ST0331 修正 ここから
          UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
          if (lCasher == null) lCasher = new UICasher();
          // UICasher lCasher=new UICasher();
          lCasher.init(request, databaseConnection.getConnection(), urlParam);// 7.1.1 ST0236 修正
          // 7.2.0 ST0331 修正 ここまで
          // 7.1.1 ST0154 削除 session.setAttribute(SIConfig.SISESSION_CASHER_NAME,lCasher);
          // 7.1.1 ST0156 修正 ここから
          if (SICartDetail.isEmpty(request, lCasher.getShopCode())) {
            redirect(request, response, SIURLMap.getUrl("webshop.servlet.front.main"));// 7.1.1 ST0180 修正
          } else if (lCasher.validate(request, databaseConnection.getConnection(), true) == true) {
            // 7.1.1 ST0156 修正 ここまで
            // 7.1.1 ST0154 追加 ここから
            lCasher.setChecked(true);
            session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
            // 7.1.1 ST0154 追加 ここまで
            forwardKey(request, response, "webshop.jsp.front.casher.confirm");// 確認画面へ
          } else {
            // 7.1.1 ST0154 追加 ここから
            lCasher.setChecked(false);
            session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
            // 7.1.1 ST0154 追加 ここまで
            forwardKey(request, response, "webshop.jsp.front.casher.main");// 編集画面へ
          }
          
        // EDBTG005-00 kamata add start
        } else if (actionName.equals(SIConfig.SIACTION_SP_BACK_CONFIRM)) {// （スマートフォンの場合）配送先変更画面から確認画面へ戻る
          // Casher情報 - 配送情報の設定
          String address = (String) urlParam.getParam("address");
          if (SIUtil.isNotNull(address)) {          UINewOrderDeli newOrderDeli = (UINewOrderDeli)session.getAttribute(SIConfig.SISESSION_ORDER_DELI);
            newOrderDeli.setAddress(address);
            UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
            // 支払い情報の値を退避
            String paymentFlg = lCasher.getPaymentFlg();
            String payMethodName = lCasher.getPayMethodName();
            String reAuthFlg = lCasher.getReAuthFlg();
            String cardExpiredMonth = lCasher.getCardExpiredMonth();
            String cardExpiredYear = lCasher.getCardExpiredYear();
            String reUseFlg = lCasher.getReUseFlg();
            String custNameOfCard = lCasher.getCustNameOfCard();
            String cardNo1 = lCasher.getCardNo1();
            String cardNo2 = lCasher.getCardNo2();
            String cardNo3 = lCasher.getCardNo3();
            String cardNo4 = lCasher.getCardNo4();
            
            lCasher.setChecked(true);
            SICartDetail.resetDelivery(request, databaseConnection.getConnection(), newOrderDeli.getAddress());
            lCasher.initDeliveryType(request, databaseConnection.getConnection(), urlParam);
            
            // 支払い情報を再設定
            lCasher.setPaymentFlg(paymentFlg);
            lCasher.setPayMethodName(payMethodName);
            lCasher.setReAuthFlg(reAuthFlg);
            lCasher.setCardExpiredYear(cardExpiredYear);
            lCasher.setCardExpiredMonth(cardExpiredMonth);
            lCasher.setReUseFlg(reUseFlg);
            lCasher.setCustNameOfCard(custNameOfCard);
            lCasher.setCardNo1(cardNo1);
            lCasher.setCardNo2(cardNo2);
            lCasher.setCardNo3(cardNo3);
            lCasher.setCardNo4(cardNo4);
          }
          forwardKey(request, response, "webshop.jsp.front.casher.confirm");// 確認画面へ
        // EDBTG005-00 kamata add end
          
        // EDBTG005-00 nagayoshi add start
        } else if (actionName.equals(SIConfig.SIACTION_SP_CONFIRM)) {// （スマートフォンの場合）確認画面へ遷移
          UICart cart = new UICart();
          // カート - リクエストパラメータ設定
          cart.init(request, urlParam);
          // カート - 入力チェック
          if(!cart.validate(request, databaseConnection.getConnection())) {
            // エラー発生時 - カート画面へ遷移
            forwardKey(request, response, "webshop.jsp.front.cart.main");
            return;
          }
          // ログイン有無チェック
          SIUserInfo lUserInfo = SIHTMLUtil.getUserInfo(request);
          if (lUserInfo.isNotLogin(request)) {
            // 未ログイン時、確認画面へのリダイレクトURLを設定しログイン画面へ遷移
            String lCtc = "ctc=" + SIHTMLUtil.URLEncode((String) urlParam.getParam("ctc"));
            StringBuffer lUrlBuf = new StringBuffer(SIURLMap.getUrl("webshop.servlet.front.user.login"));
            lUrlBuf.append("?").append(lCtc);
            lUrlBuf.append("&nid=").append(SIHTMLUtil.URLEncode(SIURLMap.getUrl("webshop.servlet.front.casher")));
            lUrlBuf.append(SIHTMLUtil.URLEncode("?")).append(SIHTMLUtil.URLEncode(lCtc));
            lUrlBuf.append(SIHTMLUtil.URLEncode("&actionNameTxt=")).append(SIHTMLUtil.URLEncode(SIConfig.SIACTION_SP_CONFIRM));
            redirectHttps(request, response, lUrlBuf.toString());
            return;
          }
          // カート内商品セッションのクリア
          session.removeAttribute(SIConfig.SISESSION_ORDER_DELI);
          // カート内商品のリセット（再設定処理）
          SICartDetail.reset(request, databaseConnection.getConnection());
          // 配送情報 - 初期設定処理を実施
          UIOrderCounter orderCounter = new UIOrderCounter();
          orderCounter.initAmount(request, urlParam);
          orderCounter.setShopCode(SIConfig.SIMALL.getMallShopCode());
          orderCounter.calcSum(request, databaseConnection.getConnection(), urlParam);
          // 配送情報 - 入力チェック
          if (!orderCounter.validate(request, databaseConnection.getConnection())) {
            // エラー発生時 - カート画面へ遷移
            forwardKey(request, response, "webshop.jsp.front.cart.main");
            return;
          }
          // レジ（配送先・ギフト設定）- 初期設定処理を実施
          UINewOrderDeli newOrderDeli = new UINewOrderDeli();
          
          // EDBTG005-00 kamata mod start
          // デフォルト配送先設定
          // newOrderDeli.setAddress("0");
          
          // 配送情報を元に、カート内商品のリセット（再設定処理）を実施
          SICartDetail.resetDelivery(request, databaseConnection.getConnection(), newOrderDeli);
          // EDBTG005-00 kamata mod end
          
          // Casher情報 - 初期設定処理を実施
          UICasher lCasher = new UICasher();
          // 配送情報の再計算実施
          orderCounter.calcSum(request, databaseConnection.getConnection(), urlParam);
          if (!lCasher.validateDigit2(request, orderCounter)) {
            // エラー発生時 - カート画面へ遷移
            forwardKey(request, response, "webshop.jsp.front.cart.main");
            return;
          }
          // Casher情報 - 配送情報の設定
          lCasher.initDeliveryType(request, databaseConnection.getConnection(), urlParam);
          lCasher.setOrderRoute("0");
          lCasher.validatePayment(request);
          String lTaxRate = SITax.getTaxRate(databaseConnection.getConnection());
          lCasher.setTaxRate(lTaxRate);
          // Casher情報 - 再計算処理実施
          lCasher.calcSum(request, databaseConnection.getConnection(), urlParam);
          // セッション情報を設定
          lCasher.setChecked(true);
          
          // EDBTG005-00 kamata mod start
          if (SIURLMap.isSmartPhone(request)) {
            SICartDetail.getCasherInfoForSp(request, databaseConnection.getConnection(), lCasher);
          }
          // EDBTG005-00 kamata mod end
          
          session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
          session.setAttribute(SIConfig.SISESSION_ORDER_DELI, newOrderDeli);
          forwardKey(request, response, "webshop.jsp.front.casher.confirm");
        } else if (actionName.equals("sp_move_confirm")) {// (スマートフォンの場合）他の画面からの戻るボタン確認画面遷移
          UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
          // Casherのチェック状態を済みとする
          lCasher.setChecked(true);
          // 画面制御パラメータをセッションから削除
          session.removeAttribute(SIConfig.SISESSION_CASHER_DISPLAY_VALUE);
          forwardKey(request, response, "webshop.jsp.front.casher.confirm");// 確認画面へ
        // EDBTG005-00 nagayoshi add end
        } else if (actionName.equals(SIConfig.SIACTION_REGIST)) {// データベースへのレコードの登録
          // 7.1.1 ST0156 追加 ここから
          UICasher lCasherID = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
          
          // EDBTG005-00 kamata add start
          if (SIURLMap.isSmartPhone(request)) {
            // スマートフォンの場合
            // 配達希望日・希望時間帯を設定
            UINewOrderDeli newOrderDeli = (UINewOrderDeli)session.getAttribute(SIConfig.SISESSION_ORDER_DELI);
            SICartDetail.resetDelivery(request, databaseConnection.getConnection(), newOrderDeli.getAddress());
            // Casher情報 - 配送情報の設定
            lCasherID.initDeliveryType(request, databaseConnection.getConnection(), urlParam);
            lCasherID.init(request, databaseConnection.getConnection(), urlParam);
            lCasherID.setChecked(true);
          }
          // EDBTG005-00 kamata add end
          
          if (lCasherID == null || SICartDetail.isEmpty(request, lCasherID.getShopCode())) {
            redirect(request, response, SIURLMap.getUrl("webshop.servlet.front.main"));// メイン画面//7.1.1 ST0180 修正
          } else if (lCasherID.getChecked() == false) {
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("input.casher.confirm"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            // EDBTG005-00 nagayoshi mod start
            // forwardKey(request, response, "webshop.jsp.front.casher.main");// 編集画面へ
            if (SIURLMap.isSmartPhone(request)) {
              forwardKey(request, response, "webshop.jsp.front.casher.confirm");// 編集画面へ
            } else {
              forwardKey(request, response, "webshop.jsp.front.casher.main");// 編集画面へ
            }
            // EDBTG005-00 nagayoshi mod end
          } else if (lCasherID.validate(request, databaseConnection.getConnection(), true) == false) {
            // EDBTG005-00 nagayoshi mod start
            // forwardKey(request, response, "webshop.jsp.front.casher.main");// 編集画面へ
            if (SIURLMap.isSmartPhone(request)) {
              forwardKey(request, response, "webshop.jsp.front.casher.confirm");// 編集画面へ
            } else {
              forwardKey(request, response, "webshop.jsp.front.casher.main");// 編集画面へ
            }
          /* 3-Dセキュア
          } else if (lCasherID.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CARD)&&"0".equals(lCasherID.getReAuthFlg())&&(request.getAttribute("result")==null)) {//クレジットカード（初回取引）
            forwardKey(request, response, "webshop.servlet.front.auth");
          */
          } else {
            // 7.1.1 ST0156 追加 ここまで
            // 7.2.0 ST0296 追加ここから
            String lPointManCode = "";
            try {
              lPointManCode = insertPointTableData(request, databaseConnection.getConnection());
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
            } catch (SIDuplicateKeyException e1) {
              e1.printStackTrace();
            } catch (SIDBAccessException e1) {
              e1.printStackTrace();
            }
            // 7.2.0 ST0296 追加ここまで
            try {
              RLockForOrderStock(request, databaseConnection.getConnection());// 7.2.0 ST0297追加
              insertOrderTableData(request, databaseConnection.getConnection(), lPointManCode);// 7.2.0 ST0296修正
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
              // 顧客ポイントの更新
              SIUserInfo lUserInfo = SIHTMLUtil.getUserInfo(request);
              lUserInfo.reset(databaseConnection.getConnection(), lUserInfo.getEmail());
              session.setAttribute(SIConfig.SISESSION_USERINFO_NAME, lUserInfo);
              if (SIConfig.SIRUNNING_MODE_CURRENT == SIConfig.SIRUNNING_MODE_TOGETHER) {
                SIReserveCartManager.clear(request);
                SICartManager.clear(request);
              } else {
                UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
                if (lCasher == null) lCasher = new UICasher();
                SICartManager.clear(request, lCasher.getCasherShopCode());
                SIReserveCartManager.clear(request, lCasher.getCasherShopCode());
              }
              session.removeAttribute(SIConfig.SISESSION_MDK_AUTH_NAME);
              forwardKey(request, response, "webshop.jsp.front.casher.result");
            } catch (SIDuplicateKeyException sqle) {
              try {
                databaseConnection.getConnection().rollback();
              } catch (SQLException ee) {}
              // 7.2.0 ST0296 追加ここから
              deletePointTableData(request, databaseConnection.getConnection(), lPointManCode);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException ee) {}
              // 7.2.0 ST0296 追加ここまで
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.insert.duplicate"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              //SIMDKAction3G.cancelByFailuer(request);
              SIMDKAction.cancelByFailuer(request);
              forwardKey(request, response, "webshop.jsp.front.casher.main");
            } catch (SIDBAccessException sqle) {
              try {
                databaseConnection.getConnection().rollback();
              } catch (SQLException ee) {}
              // 7.2.0 ST0296 追加ここから
              deletePointTableData(request, databaseConnection.getConnection(), lPointManCode);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException ee) {}
              // 7.2.0 ST0296 追加ここまで
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              //SIMDKAction3G.cancelByFailuer(request);
              SIMDKAction.cancelByFailuer(request);
              forwardKey(request, response, "webshop.jsp.front.casher.main");
            } catch (SIMismatchException e) {
              e.printStackTrace();
              try {
                databaseConnection.getConnection().rollback();
              } catch (SQLException ee) {
                ee.printStackTrace();
              }
              // 7.2.0 ST0296 追加ここから
              deletePointTableData(request, databaseConnection.getConnection(), lPointManCode);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException ee) {}
              // 7.2.0 ST0296 追加ここまで
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("manager.app.price.mismatch"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              //SIMDKAction3G.cancelByFailuer(request);
              SIMDKAction.cancelByFailuer(request);
              forwardKey(request, response, "webshop.jsp.front.casher.main");
            } catch (SIErrorException e) {
              e.printStackTrace();
              try {
                databaseConnection.getConnection().rollback();
              } catch (SQLException ee) {
                ee.printStackTrace();
              }
              // 7.2.0 ST0296 追加ここから
              deletePointTableData(request, databaseConnection.getConnection(), lPointManCode);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException ee) {}
              // 7.2.0 ST0296 追加ここまで
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("manager.app.card.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              //SIMDKAction3G.cancelByFailuer(request);
              SIMDKAction.cancelByFailuer(request);
              // EDBTG005-00 kamata mod start
              if (SIURLMap.isSmartPhone(request)) {
                  forwardKey(request, response, "webshop.jsp.front.casher.confirm");
              } else {
                  forwardKey(request, response, "webshop.jsp.front.casher.main");
              }
              // EDBTG005-00 kamata mod end
            } catch (SIFatalException e) {
              e.printStackTrace();
              try {
                databaseConnection.getConnection().rollback();
              } catch (SQLException ee) {
                ee.printStackTrace();
              }
              // 7.2.0 ST0296 追加ここから
              deletePointTableData(request, databaseConnection.getConnection(), lPointManCode);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException ee) {}
              // 7.2.0 ST0296 追加ここまで
              // 7.1.1 ST0211 削除 ここから
              // SICustomErrors errors=new SICustomErrors();
              // errors.addError(new SICustomError("manager.app.exceed.amount",e.getExceptionMessage()));
              // request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
              // 7.1.1 ST0211 削除 ここまで
              //SIMDKAction3G.cancelByFailuer(request);
              SIMDKAction.cancelByFailuer(request);
              /*
              SIMDKAction lMDKAction=(SIMDKAction)session.getAttribute(SIConfig.SISESSION_MDK_AUTH_NAME);
              try{
                if (!SIDBUtil.hasData(databaseConnection.getConnection(), "SELECT * FROM ordertbl WHERE ordercode="+SIDBUtil.SQL2Str(lMDKAction.getOrderCode()))) {
                  SIMDKAction.cancelByFailuer(request);
                }
              }catch(Exception ex){
                SIMDKAction.cancelByFailuer(request);
              }
              */
              if (SIURLMap.isSmartPhone(request)) {
                forwardKey(request, response, "webshop.jsp.front.casher.confirm");
              } else {
                forwardKey(request, response, "webshop.jsp.front.ordercounter");
              }
              // 7.2.0 ST0296 追加ここから
            } catch (SIDebtPointException e) {
              e.printStackTrace();
              try {
                databaseConnection.getConnection().rollback();
              } catch (SQLException ee) {
                ee.printStackTrace();
              }
              deletePointTableData(request, databaseConnection.getConnection(), lPointManCode);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("input.data.less", "ポイント使用額", "ポイント残高"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              //SIMDKAction3G.cancelByFailuer(request);
              SIMDKAction.cancelByFailuer(request);
              forwardKey(request, response, "webshop.jsp.front.ordercounter");
              // 7.2.0 ST0296 追加ここまで
            }
            // 7.2.0 ST0300 追加 ここから
            catch (SIBSCVSMDKException e) {
              e.printStackTrace();
              try {
                databaseConnection.getConnection().rollback();
              } catch (SQLException ee) {
                ee.printStackTrace();
              }
              deletePointTableData(request, databaseConnection.getConnection(), lPointManCode);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException ee) {}
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("manager.app.cvs.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              //SIMDKAction3G.cancelByFailuer(request);
              SIMDKAction.cancelByFailuer(request);
              forwardKey(request, response, "webshop.jsp.front.casher.main");
            }
            // 7.2.0 ST0300 追加 ここまで
          }// 7.1.1 ST0156 追加
          
        } else if (actionName.equals(SIConfig.SIACTION_REMODIFY)) {
          forwardKey(request, response, "webshop.jsp.front.casher.main");// 編集画面
        }
      } else if (this.getServletPath(request).equals("/catalog")) {
        if (SIUtil.isNull(actionName)) {
          UICatalogCmdty cmdtys = new UICatalogCmdty();
          session.setAttribute(SIConfig.SISESSION_CATALOG_CARTIN_NAME, cmdtys);
          forwardKey(request, response, "webshop.jsp.front.catalog.cmdty");
          // EDBTG005-00 kamata add start
        } else if (actionName.equals(SIConfig.SIACTION_CART)) {
          UICmdtyInfo cmdtyList = new UICmdtyInfo();
          String taishoRow = "_r"+ this.getParameter(urlParam, "lTaishoRow");
          cmdtyList.initCartForQuickOrder(urlParam, taishoRow);
          SICmdty lCmdty = new SICmdty("0",cmdtyList.getCartCmdtyCodeTxt(),cmdtyList.getCartIndividualCodeTxt());
          if (!cmdtyList.getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_NORMAL)) {
            // カート投入商品が通常品以外の場合、画面パラメータよりセット品構成情報・オプション情報を取得
            cmdtyList.initSetCartForQuichOrder(request, urlParam, taishoRow);
            cmdtyList.addCart(request, databaseConnection.getConnection());
          }else if(lCmdty.reset(databaseConnection.getConnection(),false,true)){
            cmdtyList.addCart(request, databaseConnection.getConnection());
          }
          forward(request, response, "/other/cart_detail.jsp");
        } else if (SIConfig.SIACTION_GET_CMDTY.equalsIgnoreCase(actionName)) {
          // データ取得
          String taishoRow = this.getParameter(urlParam, "lTaishoRow");
          String individualCode = this.getParameter(urlParam,"lIndividualCode");
          String cmdtyCode = null;
          
          Connection connection = databaseConnection.getConnection();
          
          // 在庫コードの保管
          StringBuffer lSqlBuf1 = new StringBuffer();
          lSqlBuf1.append("SELECT individualcode FROM individualtbl ");
          lSqlBuf1.append("WHERE individualcode like '" + individualCode + "%' ");
          individualCode = SIDBUtil.getFirstData(connection, lSqlBuf1.toString());
          
          // 商品コード取得
          lSqlBuf1 = new StringBuffer();
          lSqlBuf1.append("SELECT cmdtycode FROM individualtbl ");
          lSqlBuf1.append("WHERE individualcode=" + SIDBUtil.SQL2Str(individualCode));
          cmdtyCode = SIDBUtil.getFirstData(connection, lSqlBuf1.toString());
          
          UICmdtyInfoForQuickOrder cmdtyList = new UICmdtyInfoForQuickOrder();
          cmdtyList.setTaishoRow(taishoRow);
          cmdtyList.setShopCodeTxt("0");
          cmdtyList.setCmdtyCodeTxt(cmdtyCode);
          cmdtyList.setIndividualCodeTxt(individualCode);
          
          SICmdty cmdty=new SICmdty("0", cmdtyCode, individualCode);
          
          StringBuffer sql = new StringBuffer("SELECT * FROM bgdisptbl WHERE individualcode=").append(SIDBUtil.SQL2Str(individualCode));
          boolean bgDispFlg = SIDBUtil.hasData(connection, sql.toString());
          boolean dispEnable=cmdty.reset(connection,true,true);
          if (dispEnable&&bgDispFlg) {
            // 存在する場合
            dispCheckForQuickOrder(request, connection, individualCode, cmdtyList);
          } else {
            cmdtyList.setErrFlg("1");
            cmdtyList.setErrMsg("該当する商品コードがありません。");
          }
          cmdtyList.setDispEnable(dispEnable&&bgDispFlg);
          
          session.setAttribute(SIConfig.SISESSION_CATALOG_CARTIN_NAME, cmdty);
          session.setAttribute(SIConfig.SISESSION_CMDTY_LIST_NAME, cmdtyList);
          // EDBTG005-00 kamata mod start
          if (SIURLMap.isSmartPhone(request)) {
            // スマートフォンの場合
            forward(request, response, "/sp/include/cmdty_inc_info_quick_order.jsp");
          } else {
            // スマートフォン以外（PC版など）の場合
            forward(request, response, "/include/cmdty_inc_info_quick_order.jsp");
          }
          // EDBTG005-00 kamata mod end
        }
        // EDBTG005-00 kamata add end
      }
    // EDBTG005-00 kamata add start
    } catch (SIDBAccessException e) {
      e.printStackTrace();
    // EDBTG005-00 kamata add end
    } catch (SQLException e) {
      e.printStackTrace();
      throw new ServletException();
    } catch (NamingException e) {
      e.printStackTrace();
      throw new ServletException();
    } finally {
      databaseConnection.close();
    }
  }
  
  //  EDBTG005-00 kamata add start
  /**
   * 商品コード(在庫コード)の入力チェックを行います（クイックオーダー用）
   * @param request         リクエスト
   * @param connection      コネクション
   * @param individualCode  商品コード
   * @param cmdtyList       商品情報
   * @throws SIDBAccessException
   */
  private void dispCheckForQuickOrder(HttpServletRequest request,Connection connection, String individualCode, UICmdtyInfoForQuickOrder cmdtyList) throws SIDBAccessException{
      SIUserInfo lUserInfo = new SIUserInfo();
      if (request != null) lUserInfo = SIHTMLUtil.getUserInfo(request);
      StringBuffer mk = new StringBuffer();
      if (lUserInfo.getMaker()!=null && lUserInfo.getMaker().length>0) {
      for (int m=0;m<lUserInfo.getMaker().length;m++) {
        if (m>0) mk.append(",");
        mk.append(SIDBUtil.SQL2Str(lUserInfo.getMaker()[m]));
        }
      }
      StringBuffer lSqlBuf2 = new StringBuffer();
      lSqlBuf2.append("SELECT CASE ");
      if (SIUtil.isNotNull(mk.toString())) {
        lSqlBuf2.append("WHEN m.contractFlg='1' AND m.makercode NOT IN (").append(mk.toString()).append(") THEN 0 ");//要契約
      } else {
        lSqlBuf2.append("WHEN m.contractFlg='1' THEN 0 ");//要契約
      }
      if (!"1".equals(lUserInfo.getHairCosmeFlg())) {//水物契約なしの場合
        lSqlBuf2.append("WHEN substring(c.individualcode,1,1) IN ('V','H','L') THEN 5 ");
      }
      lSqlBuf2.append("WHEN c.frontdispFlg='0' THEN 1 ");//非表示
      lSqlBuf2.append("WHEN c.inquiryFlg='1' THEN 2 ");//お問い合わせ
      lSqlBuf2.append("WHEN c.amountFlg='0' THEN 9 ");//カート
      lSqlBuf2.append("WHEN c.amount>'0' THEN 9 ");//カート
      lSqlBuf2.append("WHEN c.rsrvEnableFlg='1' AND coalesce(c.rsrvAmount,'1')!='0' THEN 3 ");//予約
      lSqlBuf2.append("WHEN c.rsrvEnableFlg='1' AND coalesce(c.rsrvAmount,'1')='0' THEN 4 ");//SOLD OUT
      lSqlBuf2.append("WHEN c.soldOutDate IS NULL OR soldOutDate+"+SIConfig.DEFAULT_SOLDOUT+" > CURRENT_DATE THEN 4 ");//SOLDOUT
      lSqlBuf2.append("WHEN c.usedNewFlg IN ('1','7') THEN 4 ");//SOLDOUT
      lSqlBuf2.append("ELSE 1 END ");//非表示
      lSqlBuf2.append("FROM cmdtyunittbl c,makertbl m ");
      lSqlBuf2.append("WHERE c.makercode=m.makercode ");
      lSqlBuf2.append("AND c.individualcode=" + SIDBUtil.SQL2Str(individualCode));
  
      String dispCheck = SIDBUtil.getFirstData(connection, lSqlBuf2.toString());
      cmdtyList.setDispCheck(dispCheck);
      cmdtyList.setErrFlg("1");
      if ("1".equals(dispCheck)) {
        cmdtyList.setErrMsg("廃盤、または商品コードが変更となった可能性があります。0120-974-554までお問い合わせ下さい。");
      } else {
          cmdtyList.setErrFlg("0");
      }
  }
  // EDBTG005-00 kamata add end
  
  /**
   * <b>insertTableData</b> データベースにレコードを作成します。 Front用です。
   * 
   * @param lConnection DBへのコネクション
   * @param regCmdty 入力したデータ
   * @return なし
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   */
  public static void insertOrderTableData(HttpServletRequest lRequest, Connection lConnection, String lPointManCode) throws SIDuplicateKeyException, SIDBAccessException,
      SIMismatchException, SIErrorException, SIFatalException, SIDebtPointException, SIBSCVSMDKException {// 7.2.0 ST0296修正 //7.2.0 ST0300 修正
    insertOrderTableData(lRequest, lConnection, true, lPointManCode);// 7.2.0 ST0296修正
  }
  
  /**
   * <b>insertTableData</b> データベースにレコードを作成します。
   * 
   * @param lRequest
   * @param lConnection
   * @param mode (true:Front false:back)
   * @param mail (true:送信する false:送信しない)
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   * @throws SIMismatchException
   * @throws SIErrorException
   * @throws SIFatalException
   */
  public static void insertOrderTableData(HttpServletRequest lRequest, Connection lConnection, boolean mode, String lPointManCode) throws SIDuplicateKeyException,
      SIDBAccessException, SIMismatchException, SIErrorException, SIFatalException, SIDebtPointException, SIBSCVSMDKException {
    insertOrderTableData(lRequest, lConnection, mode, lPointManCode, true);
  }
  
  public static void insertOrderTableData(HttpServletRequest lRequest, Connection lConnection, boolean mode, String lPointManCode, boolean mail) throws SIDuplicateKeyException,
      SIDBAccessException, SIMismatchException, SIErrorException, SIFatalException, SIDebtPointException, SIBSCVSMDKException {
    SITableConditionManager lManCondition = new SITableConditionManager();
    SITableCondition lTableCondition = new SITableCondition();
    SIURLParameter urlParam = new SIURLParameter(lRequest);// 7.1.1 ST0236 追加
    
    HttpSession session = lRequest.getSession(true);// セッションの取得
    // SIDateTime lSes=new SIDateTime(session.getLastAccessedTime());
    SIReserveCartManager lRsrCartManager = (SIReserveCartManager) session.getAttribute(SIConfig.SISESSION_RESERVE_CART_INFO_NAME);
    if (lRsrCartManager == null) lRsrCartManager = new SIReserveCartManager();
    lRsrCartManager.clearUsed();// 7.1.1 ST0211 追加
    UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
    lCasher.calcSum(lRequest, lConnection, urlParam);// 総額などの計算 //7.1.1 ST0236 修正
    SIUserInfo lUserLogin = SIHTMLUtil.getUserInfo(lRequest);
    SIDateTime lDateTime = new SIDateTime();
    StringBuffer lMailBuf = new StringBuffer();
    StringBuffer lSqlBuf = new StringBuffer();
    StringBuffer lSelBuf = new StringBuffer();
    StringBuffer lPointBuf = new StringBuffer();// 7.2.0 ST0296追加
    String lLeftAmount = "0";
    String lLeftReserveAmount = "0";
    SIReserveOrder lReserveOrder = new SIReserveOrder();
    // lSes=new SIDateTime(session.getLastAccessedTime());
    StringBuffer analyticsBuf = new StringBuffer();// 解析タグ用文字列main
    StringBuffer analyticsBuf2 = new StringBuffer();// 解析タグ用文字列main
    StringBuffer itemBuf = new StringBuffer();// 解析タグ用文字列item
    StringBuffer itemBuf2 = new StringBuffer();// 解析タグ用文字列item
    StringBuffer analyticsBufM = new StringBuffer();// 携帯解析タグ用文字列main
    StringBuffer itemBufM = new StringBuffer();// 携帯解析タグ用文字列item
    StringBuffer analyticsBufMO = new StringBuffer();// 携帯解析タグ用文字列モビログ
    StringBuffer individualCode = new StringBuffer();// ポイント計算用1
    StringBuffer cmdtyTotalPrice = new StringBuffer();// ポイント計算用2
    
    // 受注完了画面でのリロード禁止
    if (session.getAttribute(SIConfig.SISESSION_CART_DETAIL_NAME) == null) { return; }
    
    // ポイントを使用できるかどうか。
    String pointEnableFlg = SIDBUtil.getPointEnableFlg(lCasher.getCasherShopCode(), lConnection);
    
    SISendMail lSendMail = new SISendMail();
    try {
      lSendMail.setMailTemp(lConnection, lCasher.getCasherShopCode(), SIConfig.SIMAIL_TEMPLATE_ORDER_COMFIRM);
    } catch (SIFatalException e2) {
      e2.printStackTrace();
    }
    
    // 1.受注番号の取得
    String lOrderCode = SIDBUtil.getFirstData(lConnection, SIDBUtil.getNextVal("ORDERTBL_ORDERCD_SEQ"));
    // 7.2.1 ST2007 追加 ここから 再チェック
    reCheck(lRequest, lConnection, mode, lOrderCode);
    lRsrCartManager.clearUsed();
    // 7.2.1 ST2007 追加 ここまで 再チェック
    
    // 7.4.0 ST2057 追加 ここから
    // コンビニ決済.受付番号
    String receiptNo = "";
    // コンビニ決済.払込票URL
    String haraikomiURL = "";
    // コンビニ決済.支払い期限
    String shiharaiKigen = "";
    // 7.4.0 ST2057 追加 ここまで
    
    if (lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CARD)) {// クレジットカード
      //SIMDKAction3G lMDKAction = new SIMDKAction3G();
      SIMDKAction lMDKAction = new SIMDKAction();
      lMDKAction.setOrderCode(lOrderCode);
      lMDKAction.setCardExpired(lCasher.getCardExpired());
      lMDKAction.setCardNo(lCasher.getCardNo());
      lMDKAction.setPrice(lCasher.getSumOfF());
      lMDKAction.setCustNameOfCard(lCasher.getCustNameOfCard());
      lMDKAction.setSecurityCode(lCasher.getSecurityCode());
      if("1".equals(lCasher.getReAuthFlg())) {
        lMDKAction.setReOrderCode(lUserLogin.getCcLastOrderCode());
        session.removeAttribute(SIConfig.SISESSION_MDK_AUTH_NAME);
        //if (!lMDKAction.reAuthAction()) throw new SIErrorException("決済カードの認証失敗しました。");
        if (!lMDKAction.reauthAction()) throw new SIErrorException("決済カードの認証失敗しました。");
      } else {
        if (!lMDKAction.authCaptureAction()) throw new SIErrorException("決済カードの認証失敗しました。");
        /* 3-Dセキュア
        session.removeAttribute(SIConfig.SISESSION_MDK_AUTH_NAME);
        Map receiveParams = (Map) lRequest.getAttribute("result");
        if (receiveParams != null) {
          String xMsgVersion = (String)receiveParams.get(Jp.BuySmart.DddLib.Transaction.RES_TAG_V_3D_MSG_VERSION);
          String xID = (String)receiveParams.get(Jp.BuySmart.DddLib.Transaction.RES_TAG_V_3D_XID);
          String xStatus = (String)receiveParams.get(Jp.BuySmart.DddLib.Transaction.RES_TAG_V_3D_XSTATUS);
          String xCavvAlgorithm = (String)receiveParams.get(Jp.BuySmart.DddLib.Transaction.RES_TAG_V_3D_CAVV_ALGORITHM);
          String xCavv = (String)receiveParams.get(Jp.BuySmart.DddLib.Transaction.RES_TAG_V_3D_CAVV);
          String xEci = (String)receiveParams.get(Jp.BuySmart.DddLib.Transaction.RES_TAG_V_3D_ECI);
          
          if (!lMDKAction.authCaptureAction(xMsgVersion,xID,xStatus,xCavvAlgorithm,xCavv,xEci)) throw new SIErrorException("決済カードの認証失敗しました。");
        } else {
          if (!lMDKAction.authCaptureAction()) throw new SIErrorException("決済カードの認証失敗しました。");
        }
        */
      }
      
      if (Long.parseLong(lMDKAction.getActionTime()) > Long.parseLong(SIConfig.SIMDK_LIMIT_TIMEOUT)) {
        log.debug("insertOrderTableData:authCaptureAction Action Time =" + lMDKAction.getActionTime());
        //lMDKAction.cancelAction();// 7.2.1 ST2007 修正 与信売上の取消に変更
        lMDKAction.cancelCaptureAction();// 7.2.1 ST2007 修正 与信売上の取消に変更
        /*
        if (!SIDBUtil.hasData(lConnection, "SELECT * FROM ordertbl WHERE ordercode="+SIDBUtil.SQL2Str(lMDKAction.getOrderCode()))) {
          lMDKAction.cancelCaptureAction();
        }
        */
        throw new SIErrorException("決済カードの認証タイムアウトしました。");
      }
      session.setAttribute(SIConfig.SISESSION_MDK_AUTH_NAME, lMDKAction);
      
      SIModifyRec lMod = new SIModifyRec(SIConfig.SITABLE_CUST_NAME);
      lMod.addCondition("CustCode", lUserLogin.getCustCode());
      lMod.add("CCLastOrderCode", lOrderCode);
      lMod.add("CCLastOrderDate", lDateTime.getFullDate());
      if ("0".equals(lCasher.getReAuthFlg())) {
        lMod.add("CardNumber1", lCasher.getCardNo1().substring(0,2));
        lMod.add("CardNumber2", lCasher.getCardNo4());
      }
      //カード情報を登録するOR再取引時のみ記録
      if ("1".equals(lCasher.getReUseFlg())||"1".equals(lCasher.getReAuthFlg())) lMod.execute(lConnection);
    }

    // 7.2.0 ST0300 追加 ここから
    // コンビニ決済使用時
    else if (lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CVS)) {
      // マーチャントIDを取得
      String merchantID = SIConfig.SIMALL.getMdkMerchantID();
      // 電子署名鍵を取得
      String signatureKey = SIConfig.SIMALL.getMdkSignatureKey();
      // 支払期限
      // 7.4.0 ST2057 修正 ここから
      int pay_limit_days = 0;
      if (SIUtil.isNotNull(SIConfig.SIMALL.getMdkPaymentLimitDays())) {
        pay_limit_days = new Integer(SIConfig.SIMALL.getMdkPaymentLimitDays()).intValue();
      }
      // 7.4.0 ST2057 修正 ここまで
      
      SIBSCVSMDKAction cvsMdkAct = new SIBSCVSMDKAction(merchantID, signatureKey);
      // 取引ID(最多25桁)
      cvsMdkAct.setOrderCode(lOrderCode);
      // CVSタイプ
      cvsMdkAct.setCvsType(lCasher.getCvsTypeCode());
      // 金額
      cvsMdkAct.setAmount(lCasher.getSumOfF());
      // 氏名
      cvsMdkAct.setFamilyName(lCasher.getFamilyName());
      cvsMdkAct.setFirstName(lCasher.getFirstName());
      // カナ
      cvsMdkAct.setKanaName(lUserLogin.getCustPronName());
      // 電話番号
      cvsMdkAct.setTelNo(lUserLogin.getTel());
      // 支払期限
      SIDateTime pay_limit = new SIDateTime();
      pay_limit.addDay(pay_limit_days);
      cvsMdkAct.setPayLimit(pay_limit.getFullDate());
      shiharaiKigen = pay_limit.getFullDate();// 7.4.0 ST2057 追加
      
      try {
        // コンビニ決済処理
        cvsMdkAct.doTransaction();
        
        // 7.4.0 ST2057 追加 ここから
        // コンビニ決済.受付番号
        receiptNo = cvsMdkAct.getReceiptNo();
        // コンビニ決済.払込票URL
        haraikomiURL = cvsMdkAct.getHaraikomiURL();
        // 7.4.0 ST2057 追加 ここまで
      } catch (SIBSCVSMDKException e) {
        throw e;
      }
    }
    // 7.2.0 ST0300 追加 ここまで
    
    // 2.受注配送先番号の取得
    int lOrderDeliveryCode = 0;
    
    // 3.受注ヘッダテーブルにレコードを作製
    SIInsertRec lRec = new SIInsertRec(SIConfig.SITABLE_ORDER_NAME);// 7.2.0 ST1030 修正
    lRec.add("OrderCode", lOrderCode);// 受注番号
    lRec.add("CustCode", lUserLogin.getCustCode());// 顧客コード
    lRec.add("CustCompanyFlg", lUserLogin.getCustCompanyFlg());// 法人フラグ
    lRec.add("CustName", lUserLogin.getCustName());// 顧客名
    lRec.add("CustPronName", lUserLogin.getCustPronName());// 顧客名カナ
    lRec.add("Email", lUserLogin.getEmail());// EMAIL
    lRec.add("OrderAddressee", lUserLogin.getCustName());// 請求書宛名
    lRec.add("PostCode1", lUserLogin.getPostCode1());// 郵便番号1
    lRec.add("PostCode2", lUserLogin.getPostCode2());// 郵便番号2
    lRec.add("Address1", lUserLogin.getAddress1());// 請求書住所1
    lRec.add("Address2", lUserLogin.getAddress2());// 請求書住所2
    lRec.add("Address3", lUserLogin.getAddress3());// 請求書住所3
    lRec.add("CompanyName", lUserLogin.getCorporationName());// 会社名
    lRec.add("Tel", lUserLogin.getTel());// 電話番号
    lRec.add("StoreTel", lUserLogin.getStoreTel());// 店舗電話番号//7.3.0 PI-NES0501 追加
    lRec.add("Fax", lUserLogin.getFax());// FAX番号
    lRec.add("Job", lUserLogin.getJob());// 営業形態
    lRec.add("PayMethodName", lCasher.getPayMethodName());// 支払方法名称
    lRec.add("PaymentFlg", lCasher.getPaymentFlg());// 先後払いフラグ
    // 7.2.0 ST0300 追加 ここから
    if (lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CVS)) {
      lRec.add("CVSTYPECODE", lCasher.getCvsTypeCode());// コンビニコード
    }
    // 7.2.0 ST0300 追加 ここまで
    lRec.add("PointEnableFlg", pointEnableFlg);// ポイントフラグ
    lRec.add("Fee", lCasher.getFee());// 手数料
    lRec.add("FeeTaxFlg", lCasher.getFeeTaxFlg());// 手数料税フラグ
    lRec.add("TaxRate", SITax.getTaxRate(lConnection));// 税率
    lRec.add("SumByPoint", lCasher.getSumByPoint());// ポイント使用額
    lRec.add("SendMailFlg", lUserLogin.getNewMailFlg());// メール送信フラグ
    lRec.add("ContactMsg", lCasher.getContactMsg());// 連絡事項
    lRec.add("OrderRoute", lCasher.getOrderRoute());// 受注経路7.3.0 PI-NES0501 追加
    lRec.add("discountFee", lCasher.getDiscountFee());// 手数料調整額
    lRec.add("discountDeliveryFee", lCasher.getDiscountDeliveryFee());// 送料調整額
    lRec.add("sumOfDiscount", lCasher.getSumOfG());// 値引き合計
    // 7.3.0 PI-NES0501 追加 ここから
    String orderbranch = lCasher.getBranchCode();
    if (orderbranch.equals("XX")) orderbranch = null;
    lRec.add("branchcode", orderbranch);// 担当支店
    String ordercharge = lCasher.getChargeCode();
    if (ordercharge.equals("XX")) ordercharge = null;
    lRec.add("chargecode", ordercharge);// 担当者
    // 7.3.0 PI-NES0501 追加 ここまで
    if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {
      lRec.add("InitDateTime", lDateTime.getFullDateTime());// 受注日時
      lRec.add("Updatedatetime", lDateTime.getFullDateTime());// 修正日時
    } else {
      SIDateTimeType lTimeType = new SIDateTimeType();
      lTimeType = new SIDateTimeType(lDateTime.getFullDateTime());
      lRec.add("InitDateTime", lTimeType);// 受注日時
      lRec.add("updatedatetime", lTimeType);// 修正日時
    }
    
    lRec.add("Status", "1");// 受注状態("1"通常)
    // 7.4.0 ST2057 修正 ここから（ST0300の再修正。コンビニは未入金として扱う）
    // 7.2.0 ST0300 修正 ここから
    if (lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_POINT) || lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CARD)) {// ||
      // lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CVS)){
      // 7.2.0 ST0300 修正 ここまで
      // 7.4.0 ST2057 修正 ここまで
      lRec.add("ReceiptDate", lDateTime.getFullDate());// 入金日
    }
    // 7.3.0 ST2023 追加 ここから
    SILogin siLogin = SIHTMLUtil.getLogin(lRequest);
    
    if (siLogin.getMallShopCode() != null) {
      lRec.add("UpdateMallShopCode", siLogin.getMallShopCode()); // 更新ショップ（モール）コード
    }
    if (siLogin.getUserCode() != null) {
      lRec.add("UpdateUserCode", siLogin.getUserCode()); // 更新ユーザーコード
    }
    // 7.3.0 ST2023 追加 ここまで
    // 7.4.0 ST2057 追加 ここから
    if (lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CVS)) {
      lRec.add("CVS_RECEIPT_NO", receiptNo);
      lRec.add("CVS_HARAIKOMI_URL", haraikomiURL);
      lRec.add("CVS_SHIHARAI_KIGEN", shiharaiKigen);
    }
    // 7.4.0 ST2057 追加 ここまで
    // EDBTG003-00 nagayoshi add start
    lRec.add("setdiscount", lCasher.getSumOfH());// セット値引き合計
    // EDBTG003-00 nagayoshi 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(lUserLogin.getCustName()).append(" 様");
    lMailBuf.append("\nE-Mail:").append(lUserLogin.getEmail());
    lMailBuf.append("\n連絡先TEL1:").append(lUserLogin.getStoreTel());// 7.3.0 PI-NES0501 追加
    lMailBuf.append("\n連絡先TEL2:").append(lUserLogin.getTel());
    lMailBuf.append("\n住所:〒").append(lUserLogin.getPostCode()).append(" ");
    lMailBuf.append(lUserLogin.getAddress());
    lMailBuf.append("\n支払方法:").append(lCasher.getPayMethodName());
    // 7.2.0 ST0300 追加 ここから
    // コンビニ決済使用時
    if (lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CVS)) {
      lMailBuf.append("(").append(SIBSCVSMDKUtil.getCvsName(lCasher.getCvsTypeCode())).append(")");// コンビニ名称
    }
    // 7.2.0 ST0300 追加 ここまで
    // 7.3.0 PI-NES0501 削除
    // lMailBuf.append("/手数料:").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfC()))).append("円").append(lCasher.getFeeTaxName());//税込み
    
    if (lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CARD)) {// カード情報
      lMailBuf.append("\nカード番号:" + SIStringUtil.passwordChange(lCasher.getCardNo1()) + "-" + SIStringUtil.passwordChange(lCasher.getCardNo2()) + "-"
          + SIStringUtil.passwordChange(lCasher.getCardNo3()) + "-" + lCasher.getCardNo4());// カード番号
      lMailBuf.append("\nカード名義人:" + lCasher.getCustNameOfCard());// 名義人
      lMailBuf.append("\nカード有効期限:" + lCasher.getCardExpired());// 有効期限
    }
    // 7.4.0 ST2057 追加 ここから
    else if (lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CVS)) {
      lMailBuf.append("\n受付番号:").append(receiptNo);// 受付番号
      if (SIUtil.isNotNull(haraikomiURL)) {
        lMailBuf.append("\n払込URL: ").append(haraikomiURL);// 払込URL
      }
    }
    // 7.4.0 ST2057 追加 ここまで
    lMailBuf.append("\n受注日時:" + lDateTime.getFullDateTime());
    // 7.4.0 ST2057 追加 ここから
    if (lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CVS)) {
      lMailBuf.append("\n支払期限:").append(shiharaiKigen);// 支払期限
    }
    if (lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CVS) && lCasher.getCvsTypeCode().equals(SIBSCVSMDKConfig.MDK_CVS_TYPE_LAWSON)) {
      lMailBuf.append("\n\n※").append(SIBSCVSMDKConfig.MDK_CVS_COMMENT_01);
      if (SIUtil.isNotNull(haraikomiURL)) {
        lMailBuf.append("\n※").append(SIBSCVSMDKConfig.MDK_CVS_COMMENT_02);
      }
    }
    // 7.4.0 ST2057 追加 ここまで
    
    // 6.受注配送先テーブルにレコードの作成
    Collection lDeliveryColl = SICartDetail.getDeliveryCollection(lRequest, lCasher.getShopCode());
    int lDeliveryInx = 0;
    Iterator lDeliveryIta = lDeliveryColl.iterator();
    SIDeliveryTime lDeliveryTime = new SIDeliveryTime();
    
    SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
    SIOrderDetail[] lOrderDetail;
    
    while (lDeliveryIta.hasNext()) {
      lDeliveryInx++;
      lDeliveryTime = new SIDeliveryTime();
      lOrderDelivery = (SIOrderDelivery) lDeliveryIta.next();
      
      // 受注配送先コードをインクリメント
      lOrderDeliveryCode++;
      
      lRec = new SIInsertRec(SIConfig.SITABLE_ORDER_DELIVERY_NAME);// 7.2.0 ST1030 修正
      
      lRec.add("OrderCode", lOrderCode);// 受注番号
      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 追加
      
      // 7.2.0 ST1030 追加 ここから
      lRec.add("CUSTCODE", lUserLogin.getCustCode()); // 顧客コード
      lRec.add("ADDRESSCODE", lOrderDelivery.getAddressCode()); // アドレス帳コード
      lRec.add("MALLSHOPCODE", lOrderDelivery.getShopCode()); // 管理コード
      lRec.add("DELIVERYTYPECODE", lOrderDelivery.getDeliveryTypeCode()); // 配送種別コード
      // 7.2.0 ST1030 追加 ここまで
      
      // 7.受注配送先レコードの作成の実行
      lRec.execute(lConnection);
      
      // 8.メールの本文の作成(配送先の内容)
      if (lOrderDeliveryCode == 1) { // 7.3.0 PI-NES0501 追加
        lMailBuf.append("\n\n--------------");// 7.4.0 ST2057 修正(改行の挿入)
        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.getDeliveryDates(lDeliveryInx));//7.2.0 ST1077 修正 }
         */
        // 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++) {
        lRec = new SIInsertRec(SIConfig.SITABLE_ORDER_DETAIL_NAME);// 7.2.0 ST1030 修正
        
        lRec.add("OrderCode", lOrderCode);// 受注番号
        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", lOrderDetail[jj].getOrgPrice());// 本体価格
        lRec.add("Price", lOrderDetail[jj].getPrice());// 購入価格
        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("deliveryDate", lOrderDetail[jj].getDeliveryDate());// 配送希望日
        lRec.add("deliveryTime", lOrderDetail[jj].getDeliveryTime());// 希望時間帯
        lRec.add("purchasePrice", lOrderDetail[jj].getPurchasePrice());// 仕入価格
        lRec.add("processingExpence", lOrderDetail[jj].getProcessingExpance());// 加工費
        lRec.add("consigngoodsfee", lOrderDetail[jj].getConsignGoodsFee());// 委託手数料
        String branchCode = lCasher.getBranch("branch" + Integer.toString(jj));
        if (branchCode.equals("XX")) branchCode = null;
        lRec.add("branchcode", branchCode);// 担当支店
        String chargeCode = lCasher.getCharge("charge" + Integer.toString(jj));
        if (chargeCode.equals("XX")) chargeCode = null;
        lRec.add("chargecode", chargeCode);// 担当者
        // EDBTG003-00 nagayoshi 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 nagayoshi add end
        
        // 10.受注詳細レコードの作成の実行
        lRec.execute(lConnection);
        
        itemBuf.append("\nUTM:I|").append(lOrderCode);// 受注番号
        itemBuf.append("|").append(lOrderDetail[jj].getIndividualCode());// 在庫コード
        itemBuf.append("|").append(lOrderDetail[jj].getCmdtyName());// 商品名
        itemBuf.append("|").append(lOrderDetail[jj].getIndividualCode().substring(0, 2));// カテゴリ
        itemBuf.append("|").append(lOrderDetail[jj].getPrice());// 単価
        itemBuf.append("|").append(lOrderDetail[jj].getAmount());// 数量
        itemBuf2.append("\n_gaq.push(['_addItem','").append(lOrderCode).append("'");// 受注番号
        itemBuf2.append(",'").append(lOrderDetail[jj].getIndividualCode()).append("'");// 在庫コード
        itemBuf2.append(",'").append(lOrderDetail[jj].getCmdtyName()).append("'");// 商品名
        itemBuf2.append(",'").append(lOrderDetail[jj].getIndividualCode().substring(0, 2)).append("'");// カテゴリ
        itemBuf2.append(",'").append(lOrderDetail[jj].getPrice()).append("'");// 単価
        itemBuf2.append(",'").append(lOrderDetail[jj].getAmount()).append("']);");// 数量
        
        if (SIUtil.isNotNull(itemBufM.toString())) itemBufM.append(",");
        try{
          itemBufM.append("&utmt=").append(URLEncoder.encode("item", "UTF-8"));
          itemBufM.append("&utmtid=").append(URLEncoder.encode(lOrderCode, "UTF-8"));
          itemBufM.append("&utmipc=").append(URLEncoder.encode(lOrderDetail[jj].getIndividualCode(), "UTF-8"));
          itemBufM.append("&utmipn=").append(URLEncoder.encode(lOrderDetail[jj].getCmdtyName(), "UTF-8"));
          itemBufM.append("&utmiva=").append(URLEncoder.encode(lOrderDetail[jj].getIndividualCode().substring(0, 2), "UTF-8"));
          itemBufM.append("&utmipr=").append(URLEncoder.encode(lOrderDetail[jj].getPrice(), "UTF-8"));
          itemBufM.append("&utmiqt=").append(URLEncoder.encode(lOrderDetail[jj].getAmount(), "UTF-8"));
        }catch(Exception e){e.printStackTrace();}
        if (SIUtil.isNotNull(analyticsBufMO.toString())) analyticsBufMO.append("/");
        else analyticsBufMO.append("detail=");
        analyticsBufMO.append(lOrderDetail[jj].getIndividualCode()).append("_");
        analyticsBufMO.append(lOrderDetail[jj].getAmount()).append("_");
        analyticsBufMO.append(lOrderDetail[jj].getPrice());
        
        // EDBTG003-00 nagayoshi 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 nagayoshi 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.setIndividualCode(lOrderDetail[jj].getIndividualCode());
        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);// 予約商品数量より多い商品数
        // 7.3.0 PI-NES 0601 追加 ここから
        String codes = "";// 予約コード一覧
        String lSql = "";
        Statement statement = null;
        ResultSet result = null;
        
        if (!SIUtil.sub(lOrderDetail[jj].getAmount(), lLeftReserveAmount).equals("0"))// 予約数量!=0の場合
        {
          codes = "'";
          Iterator rcIte = lRsrCartManager.getReserveCodes().keySet().iterator();
          while (rcIte.hasNext()) {
            codes = codes + (String) rcIte.next() + "'";
            if (rcIte.hasNext()) codes = codes + ",'";
          }
          lSql = "SELECT assignamount,reservebranch FROM reserveordertbl WHERE cmdtycode='" + lOrderDetail[jj].getCmdtyCode() + "' AND individualcode='"
              + lOrderDetail[jj].getIndividualCode() + "' AND reservecode IN (" + codes + ")";
          try {
            statement = lConnection.createStatement();
            result = statement.executeQuery(lSql);
          } catch (Exception e) {
            e.printStackTrace();
          }
        }
        // 7.3.0 PI-NES 0601 追加 ここまで
        
        // SICartCmdty lCartCmdty=new SICartCmdty(lOrderDetail[jj].getShopCode(),lOrderDetail[jj].getCmdtyCode());
        SICartCmdty lCartCmdty = new SICartCmdty(lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(), lOrderDetail[jj].getIndividualCode(), "", "", "", "");// 7.3.0
        // PI-NES0501
        // 追加
        // 7.1.1 ST0211 修正 ここから
        if (!lCartCmdty.reset(lConnection, mode)) {
          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());
        }
        // 7.1.1 ST0211 修正 ここまで
        
        if (Integer.parseInt(lLeftReserveAmount) > 0
            && SIUtil.isNull(lOrderDetail[jj].getStndrdCode1() + lOrderDetail[jj].getStndrdCode2() + lOrderDetail[jj].getElementCode1() + lOrderDetail[jj].getElementCode2())) {
          // 数量検索
          /*
           * 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()," "));
           */
          // 7.3.0 PI-NES0501 追加
          lSelBuf.append("SELECT Amount FROM totalstockvw ");
          lSelBuf.append(" WHERE CmdtyCode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getCmdtyCode(), " "));
          lSelBuf.append(" AND IndiVidualCode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode(), " "));
          // 数量が-9999999以下になるとエラー
          stockAmount = Integer.parseInt(SIDBUtil.getFirstData(lConnection, lSelBuf.toString()));
          orderAmount = Integer.parseInt(lLeftReserveAmount);
          
          String branch = (String) session.getAttribute(SIConfig.SISESSION_MAN_POS_BRANCH_NAME);
          if (SIUtil.isNull(branch)) branch = "";
          
          if (lCartCmdty.getAmountFlg().equals("1") && stockAmount - orderAmount < SIConfig.SISTOCK_AMOUNT_NEGATIVE_MAX) {
            // 7.1.1 ST0211 追加 ここから
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("manager.app.exceed.amount", lOrderDetail[jj].getCartCmdtyName()));
            lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            // 7.1.1 ST0211 追加 ここまで
            throw new SIFatalException(lOrderDetail[jj].getCartCmdtyName());
          } else if (!lLeftReserveAmount.equals("0") && !lOrderDetail[jj].getAmount().equals(lLeftReserveAmount)) {
            SIBGUtil.insertOrderAllocation(lConnection, orderAmount, lCartCmdty.getShopCode(), lCartCmdty.getCmdtyCode(), lCartCmdty.getIndividualCode(), lOrderCode,
                lOrderDeliveryCode, jj + 1, branch);
            // 7.3.0 PI-NES 0601 修正 ここから
            try {
              while (result.next()) {
                SIBGUtil.recaOrderAllocation(lConnection, Integer.parseInt(result.getString("assignamount")), lCartCmdty.getShopCode(), lCartCmdty.getCmdtyCode(), lCartCmdty
                    .getIndividualCode(), lOrderCode, lOrderDeliveryCode, jj + 1, result.getString("reservebranch"));
              }
            } catch (Exception e) {
              e.printStackTrace();
            }
            // 7.3.0 PI-NES 0601 修正 ここまで
          } 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");
             */
            SIBGUtil.insertOrderAllocation(lConnection, orderAmount, lCartCmdty.getShopCode(), lCartCmdty.getCmdtyCode(), lCartCmdty.getIndividualCode(), lOrderCode,
                lOrderDeliveryCode, jj + 1, branch);
          }
        } 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) {
            // 7.1.1 ST0211 追加 ここから
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("manager.app.exceed.amount", lOrderDetail[jj].getCartCmdtyName()));
            lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            // 7.1.1 ST0211 追加 ここまで
            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());
          }
        } else if (lLeftReserveAmount.equals("0")) {
          // 7.3.0 PI-NES 0601 修正 ここから
          try {
            while (result.next()) {
              SIBGUtil.reserveOrderAllocation(lConnection, Integer.parseInt(result.getString("assignamount")), lCartCmdty.getShopCode(), lCartCmdty.getCmdtyCode(), lCartCmdty
                  .getIndividualCode(), lOrderCode, lOrderDeliveryCode, jj + 1, result.getString("reservebranch"));
            }
          } catch (Exception e) {
            e.printStackTrace();
          }
          // 7.3.0 PI-NES 0601 修正 ここまで
        }
        
        if (SIUtil.isNotNull(lSqlBuf.toString())) SIDBUtil.execSQL(lConnection, lSqlBuf.toString());
        else log.debug("lSqlBuf=" + lSqlBuf.toString());
        
        // Frontかつ在庫無販売なしかつ在庫管理するとき時のみ在庫の確認を行う。
        if (lCartCmdty.getAmountFlg().equals("1") && lCartCmdty.getNoStockFlg().equals("0")) {
          lLeftAmount = Integer.toString(stockAmount - orderAmount);
          log.debug("checkAmount:" + lOrderDetail[jj].getCartCmdtyName() + ",lLeftAmount=" + lLeftAmount);
          // 7.1.1 ST0211 修正 ここから
          if (Long.parseLong(lLeftAmount) < 0) {
            // 予約数量の取得
            String lReserveAmount = lRsrCartManager.getAmount(lReserveOrder.getShopCode(), lReserveOrder.getCmdtyCode(), lReserveOrder.getIndividualCode(), lReserveOrder
                .getStndrdCode1(), lReserveOrder.getElementCode1(), lReserveOrder.getStndrdCode2(), lReserveOrder.getElementCode2());
            String lErrorName = "";
            SICustomErrors errors = new SICustomErrors();
            if (Integer.parseInt(lReserveAmount) > 0) lErrorName = "manager.app.exceed.amount.with.reserve";
            else if (stockAmount <= 0) lErrorName = "manager.app.exceed.amount.no.reserve";
            else lErrorName = "manager.app.exceed.amount";
            errors.addError(new SICustomError(lErrorName, lOrderDetail[jj].getCartCmdtyName()));
            lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            throw new SIFatalException(lOrderDetail[jj].getCartCmdtyName());
            // 7.3.0 PI-NES0501 追加 ここから
          } else 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);
          }
          // 7.3.0 PI-NES0501 追加 ここまで
          
          // 7.1.1 ST0211 修正 ここまで
        }
        
        // 12.メールの本文の作成(受注明細の内容)
        lMailBuf.append("\n=============");
        // EDBTG003-00 nagayoshi add start
        if (SIUtil.isNotNull(lOrderDetail[jj].getSetDetailFlg()) && !lOrderDetail[jj].getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL)) {
          lMailBuf.append("\nセットコード:").append(lOrderDetail[jj].getSetIndividualCode());
        }
        // EDBTG003-00 nagayoshi 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(lOrderDetail[jj].getPriceIncTax()))).append("円").append(
            "(" + lOrderDetail[jj].getCmdtyTaxName() + ")");
        lMailBuf.append("\n商品合計額:").append(NumberFormat.getNumberInstance().format(new Double(lOrderDetail[jj].getPriceOfCmdty()))).append("円");
        //lMailBuf.append("\n送料合計額:").append(NumberFormat.getNumberInstance().format(new Double(lOrderDetail[jj].getDeliveryFee()))).append("円").append(lOrderDelivery.getDeliveryTaxName());
        lMailBuf.append("\n配送希望日:").append(lOrderDetail[jj].getDeliveryDateTxt());
        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(lOrderDetail[jj].getPriceIncGift(), 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()));
        }
        */
        SIDBUtil.close(statement, result);
      }
      lMailBuf.append("\n=============");
    }
    
    // 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 (pointEnableFlg.equals("1")) {
      lMailBuf.append("\n小計(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfD()))).append("円").append(lCasher.getTaxFlgNameOfD()).append("※お支払い額ではありません");
      // EDBTG003-00 del start
//      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 del end
      if(SIUtil.isNotNull(lCasher.getSumOfG()) && Double.parseDouble(lCasher.getSumOfG()) > 0){
        lMailBuf.append("\n値引金額(G):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfG()))).append("円");
        // EDBTG003-00 nagayoshi mod start
//        lMailBuf.append("\nお支払い合計額(F=D-E-G):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
        if (SIUtil.isNotNull(lCasher.getSumOfH()) && Double.parseDouble(lCasher.getSumOfH()) > 0) {
          lMailBuf.append("\nセット値引金額(H):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfH()))).append("円");
          lMailBuf.append("\nポイント使用額（ポイント残高 ").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getMaxPoint()))).append("ポイント）(E):");
          lMailBuf.append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfE()))).append("円");
          lMailBuf.append("\nお支払い合計額(F=D-G-H-E):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
        } else {
          lMailBuf.append("\nポイント使用額（ポイント残高 ").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getMaxPoint()))).append("ポイント）(E):");
          lMailBuf.append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfE()))).append("円");
          lMailBuf.append("\nお支払い合計額(F=D-G-E):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
        }
        // EDBTG003-00 nagayoshi mod end
      } else {
        // EDBTG003-00 nagayoshi mod start
//        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) {
          lMailBuf.append("\nセット値引金額(H):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfH()))).append("円");
          lMailBuf.append("\nポイント使用額（ポイント残高 ").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getMaxPoint()))).append("ポイント）(E):");
          lMailBuf.append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfE()))).append("円");
          lMailBuf.append("\nお支払い合計額(F=D-H-E):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
        } else {
          lMailBuf.append("\nポイント使用額（ポイント残高 ").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getMaxPoint()))).append("ポイント）(E):");
          lMailBuf.append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfE()))).append("円");
          lMailBuf.append("\nお支払い合計額(F=D-E):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfF());
        }
        // EDBTG003-00 nagayoshi mod end
      }
    } else {
      // EDBTG003-00 nagayoshi mod start
//      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) {
        lMailBuf.append("\nセット値引金額(H):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfH()))).append("円");
        lMailBuf.append("\nお支払い合計額(D=A+B+C-H):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfD());
      } else {
        lMailBuf.append("\nお支払い合計額(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Double(lCasher.getSumOfF()))).append("円").append(lCasher.getTaxFlgNameOfD());
      }
      // EDBTG003-00 nagayoshi mod end
    }
    lMailBuf.append("\n");
    
    analyticsBuf.append("UTM:T|").append(lOrderCode);// 受注番号
    analyticsBuf.append("|ビューティガレージEC");// ショップ名
    analyticsBuf.append("|").append(lCasher.getSumOfF());// 支払合計金額
    analyticsBuf.append("|");// 税
    analyticsBuf.append("|").append(lCasher.getSumOfB());// 送料
    analyticsBuf.append("|");// 市区
    analyticsBuf.append("|").append(lUserLogin.getAddress1());// 都道府県
    analyticsBuf.append("|日本");// 国
    analyticsBuf.append(itemBuf);
    session.setAttribute(SIConfig.SISESSION_ANALYTICS_PARAM_NAME, analyticsBuf.toString());
    analyticsBuf2.append("_gaq.push(['_addTrans','").append(lOrderCode).append("'");
    analyticsBuf2.append(",'ビューティガレージEC'");// ショップ名
    analyticsBuf2.append(",'").append(lCasher.getSumOfF()).append("'");// 支払合計金額
    analyticsBuf2.append(",''");// 税
    analyticsBuf2.append(",'").append(lCasher.getSumOfB()).append("'");// 送料
    analyticsBuf2.append(",''");// 市区
    analyticsBuf2.append(",'").append(lUserLogin.getAddress1()).append("'");// 都道府県
    analyticsBuf2.append(",'日本']);");// 国
    analyticsBuf2.append(itemBuf2);
    session.setAttribute(SIConfig.SISESSION_ANALYTICS_PARAM_NAME13, analyticsBuf2.toString());
    
    try{
      analyticsBufM.append("&utmt=").append(URLEncoder.encode("tran", "UTF-8"));
      analyticsBufM.append("&utmtid=").append(URLEncoder.encode(lOrderCode, "UTF-8"));
      analyticsBufM.append("&utmtst=").append(URLEncoder.encode("ビューティガレージモバイル", "UTF-8"));
      analyticsBufM.append("&utmtto=").append(URLEncoder.encode(lCasher.getSumOfF(), "UTF-8"));
      analyticsBufM.append("&utmtsp=").append(URLEncoder.encode(lCasher.getSumOfB(), "UTF-8"));
      analyticsBufM.append("&utmtci=").append(URLEncoder.encode(lUserLogin.getAddress1(), "UTF-8"));
      analyticsBufM.append("&utmtco=").append(URLEncoder.encode("日本", "UTF-8"));
    }catch(Exception e){e.printStackTrace();}
    session.setAttribute(SIConfig.SISESSION_ANALYTICS_PARAM_NAME_MT, analyticsBufM.toString());
    session.setAttribute(SIConfig.SISESSION_ANALYTICS_PARAM_NAME_MI, itemBufM.toString().split(","));
    
    analyticsBufMO.append("\ntotalofprice=").append(lCasher.getSumOfF());
    analyticsBufMO.append("\nordercode=").append(lOrderCode);
    analyticsBufMO.append("\ndeliveryfee=").append(lCasher.getSumOfB());
    analyticsBufMO.append("\naddress=").append(lUserLogin.getAddress1());
    session.setAttribute(SIConfig.SISESSION_ANALYTICS_PARAM_NAME_MO, analyticsBufMO.toString());
    
    // 7.2.0 ST0296 追加ここから
    // ポイント残高-ポイント使用額がマイナスになったらエラーにする
    lPointBuf.append("SELECT SUM(PointOfIssue) ");
    lPointBuf.append(" AS AfterPoint FROM PointManMTbl ");// 7.2.0 ST0323 修正
    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("ポイント使用額がポイント残高より大きいです。"); }
    // 7.2.0 ST0296 追加ここまで
    
    if (Integer.parseInt(lCasher.getSumOfE()) > 0) {
      // 7.2.0 ST0296 追加ここから
      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());
      }
      // 7.2.0 ST0296 追加ここまで
      // 7.2.0 ST0296 削除ここから
      // //16.ポイント管理のレコードの作成
      // lRec=new SIInsertRec("PointManMTbl");
      // lRec.add("CustCode",lUserLogin.getCustCode());//顧客コード
      // lRec.add("MallShopCode",lCasher.getCasherShopCode());//管理コード
      // lRec.add("IssueFlg","0");//発行種別フラグ
      // lRec.add("PointOfIssue","-"+lCasher.getSumOfE());//発行／使用ポイント数
      // lRec.add("OrderCode",lOrderCode);//受注番号
      // if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
      // lRec.add("ISSUEDATETIME",lDateTime.getFullDateTime());//更新日時
      // }else{
      // lRec.add("ISSUEDATETIME",new SIDateTimeType(lDateTime.getFullDateTime()));//更新日時
      // }
      // lRec.execute(lConnection);
      // 7.2.0 ST0296 削除ここまで
    }
    
    //String lPointPrice = "0";// ポイント付加
    //lPointPrice = SIUtil.sub_LL(lCasher.getSumOfPrice(), lCasher.getSumOfE());// =本体価格-(値引き+ポイント使用)
    // ポイント使用フラグが「１：使用する」の場合のみポイントを付加する
    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();
      // 7.2.0 ST1030 修正 ここから
      lSqlBuf.append("SELECT DISTINCT OrderCode FROM ").append(SIConfig.SIVIEW_ORDER_LATEST_NAME);
      // lSqlBuf.append("SELECT DISTINCT OrderCode FROM OrderTbl ");
      lSqlBuf.append(" WHERE OrderCode <> ").append(SIDBUtil.SQL2Str(lOrderCode, " "));
      lSqlBuf.append("   AND CustCode=").append(SIDBUtil.SQL2Str(lUserLogin.getCustCode()));// 初めて購入
      lSqlBuf.append("   AND Status =  '1'");
      // 7.2.0 ST1030 修正 ここまで
      String lPoint = "0";
      try {
        if (SIUtil.isNotNull(SIDBUtil.getFirstData(lConnection, lSqlBuf.toString()))) {
          // EDBTG003-00 nagayoshi mod start
//          lPoint = lPointRule.calcPoint(lConnection, pointData, SIUtil.add(lCasher.getSumOfE(), lCasher.getSumOfG()), lUserLogin.getCustCode(), false);
          lPoint = lPointRule.calcPoint(lConnection, pointData, SIUtil.add(SIUtil.add(lCasher.getSumOfE(), lCasher.getSumOfG()), lCasher.getSumOfH()), lUserLogin.getCustCode(), false);
          // EDBTG003-00 nagayoshi mod end
        } else {
          // EDBTG003-00 nagayoshi mod start
//          lPoint = lPointRule.calcPoint(lConnection, pointData, SIUtil.add(lCasher.getSumOfE(), lCasher.getSumOfG()), lUserLogin.getCustCode(), true);
          lPoint = lPointRule.calcPoint(lConnection, pointData, SIUtil.add(SIUtil.add(lCasher.getSumOfE(), lCasher.getSumOfG()), lCasher.getSumOfH()), lUserLogin.getCustCode(), true);
          // EDBTG003-00 nagayoshi mod end
        }
      } 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);// 受注番号
      if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {
        lRec.add("ISSUEDATETIME", lDateTime.getFullDateTime());// 更新日時
      } 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\n【お支払先金融機関】");
        while (payeeInfoIte.hasNext()) {
          SIPayeeInfo payeeInfo = (SIPayeeInfo) payeeInfoIte.next();
          ii++;
          //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"));
    lRec = new SIInsertRec("rfmAnalyseTbl");
    lRec.add("rfmAnalyseCode", rfmAnalyseCode);// 受注番号
    lRec.add("custCode", lUserLogin.getCustCode());// 顧客コード
    lRec.add("sumOfPrice", lCasher.getSumOfA());// 合計金額
    lRec.add("amount", lCasher.getTotalOfAmount());// 数量
    lRec.add("address1", lUserLogin.getAddress1());// 請求書住所1
    if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {
      lRec.add("InitDateTime", lDateTime.getFullDateTime());// 登録日
    } else {
      lRec.add("InitDateTime", new SIDateTimeType(lDateTime.getFullDateTime()));// 登録日
    }
    lRec.add("orderCode", lOrderCode);// 受注番号
    lRec.execute(lConnection);
    
    // カード決済時のみ入金データ作成
    if (lCasher.getPaymentFlg().equals(SIFlagConf.SIFLAG_PAYMENTFLG_CARD)) {
      SIInsertRec lCardPayRec = new SIInsertRec("paymenttbl");
      lCardPayRec.add("OrderCode", lOrderCode);
      lCardPayRec.add("PaymentNumber", "1");
      lCardPayRec.add("PaymentPrice", lCasher.getSumOfF());
      lCardPayRec.add("PaymentFee", "0");
      lCardPayRec.add("PaymentType", SIConfig.PAYMETHOD_CARD);
      lCardPayRec.add("ExpectedPaymentDate", lDateTime.getFullDate());
      lCardPayRec.add("PaymentDate", lDateTime.getFullDate());
      lCardPayRec.add("Status", "0");
      lCardPayRec.execute(lConnection);
    }
    
    // Frontのときのみ
    if (mode) {
      // 22.受注完了メッセージのセット
      StringBuffer lSql = new StringBuffer();
      lSql.append("SELECT * FROM msgtemplatemtbl ");
      lSql.append("WHERE MallShopCode = ");
      lSql.append(SIDBUtil.SQL2Str(lCasher.getCasherShopCode()));
      lSql.append(" AND msgType = 1");
      
      HashMap lMap = SIDBUtil.getOneRowData(lConnection, lSql.toString());
      lCasher.setEncode(SIConfig.SIENCODE_NONE);
      lCasher.setMsgTitleTxt((String) lMap.get("title"));
      lCasher.setMsgContent1Txt((String) lMap.get("content1"));
      lCasher.setMsgContent2Txt((String) lMap.get("content2"));
      lCasher.setMsgContent3Txt((String) lMap.get("content3"));
    }
    lCasher.setOrderCode(lOrderCode);
    session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
    
    // 23.予約商品の更新
    lRsrCartManager.update(lConnection, lCasher.getShopCode());
    lRsrCartManager.insertOrderReserve(lConnection, lOrderCode);
    
    // 24.送信開始
    try {
      lSendMail.setToMailAddress(lUserLogin.getEmail());
      if (mail) lSendMail.execute();
    } catch (SIFatalException e) {
      e.printStackTrace();
    }
    
    //25 発注データ作成
    try {
      SIHacchuSrv.createHacchuData(lConnection, lOrderCode);
    } catch (SQLException e) {
      e.printStackTrace();
    }
    // EDBTG003-00 nagayoshi 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", "1");
      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 nagayoshi add end
    //27.自動受注処理
    if (isAutoExecute(lConnection, lOrderCode)){
      String[] setting = getAutoSetting(lConnection,lOrderCode,lOrderDelivery.getAddress1());
      
      SIModifyRec autoExecRec = new SIModifyRec("ordertbl");
      autoExecRec.addCondition("ordercode", lOrderCode);
      autoExecRec.addCondition("orderbranchcode", "1");
      autoExecRec.add("branchcode", setting[0]);
      autoExecRec.add("chargecode", setting[1]);
      autoExecRec.execute(lConnection);
      
      String[] cashParam = new String[2];
      if ("代金引換".equals(lCasher.getPayMethodName()))cashParam[0]="18";
      cashParam[1]=lCasher.getSumOfF();
      try {
        new SIRegOrderSrv().sendMail2(lRequest,lConnection,lOrderCode, "自動受注処理により作成", setting[2],cashParam);
      }catch(SQLException sqle){
        sqle.printStackTrace();
      }
    }else if (isCustGroup(lConnection,lOrderCode)) {
      String[] setting = getAutoSetting(lConnection,lOrderCode,lOrderDelivery.getAddress1());
      SIModifyRec autoExecRec = new SIModifyRec("ordertbl");
      autoExecRec.addCondition("ordercode", lOrderCode);
      autoExecRec.addCondition("orderbranchcode", "1");
      autoExecRec.add("branchcode", setting[0]);
      autoExecRec.execute(lConnection);
    }
  }
  
  // 7.2.1 ST2007 追加ここから
  /**
   * <b>reCheck</b> 決済を行なう前に、再チェックします。
   * 
   * @param lRequest
   * @param lConnection
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   * @return なし
   */
  public static void reCheck(HttpServletRequest lRequest, Connection lConnection, boolean mode, String lOrderCode) throws SIDuplicateKeyException, SIDBAccessException,
      SIMismatchException, SIErrorException, SIFatalException, SIDebtPointException, SIBSCVSMDKException {
    SITableConditionManager lManCondition = new SITableConditionManager();
    SITableCondition lTableCondition = new SITableCondition();
    SIURLParameter urlParam = new SIURLParameter(lRequest);
    
    HttpSession session = lRequest.getSession(true);// セッションの取得
    SIReserveCartManager lRsrCartManager = (SIReserveCartManager) session.getAttribute(SIConfig.SISESSION_RESERVE_CART_INFO_NAME);
    if (lRsrCartManager == null) lRsrCartManager = new SIReserveCartManager();
    lRsrCartManager.clearUsed();
    UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
    lCasher.calcSum(lRequest, lConnection, urlParam);// 総額などの計算
    SIUserInfo lUserLogin = SIHTMLUtil.getUserInfo(lRequest);
    StringBuffer lSqlBuf = new StringBuffer();
    StringBuffer lSelBuf = new StringBuffer();
    StringBuffer lPointBuf = new StringBuffer();
    String lLeftAmount = "0";
    String lLeftReserveAmount = "0";
    SIReserveOrder lReserveOrder = new SIReserveOrder();
    boolean cashFlg = false;
    boolean contractFlg = false;
    boolean hairCosmeFlg = false;
    
    // 重複コードのチェック
    lSqlBuf = new StringBuffer("SELECT OrderCode FROM OrderTbl WHERE OrderCode=");
    lSqlBuf.append(lOrderCode);
    if (SIDBUtil.hasData(lConnection, lSqlBuf.toString())) { throw new SIDuplicateKeyException("重複コードが存在しています。重複コード=" + lOrderCode); }
    
    int lOrderDeliveryCode = 0;// 受注配送先番号
    
    // 受注配送先明細
    Collection lDeliveryColl = SICartDetail.getDeliveryCollection(lRequest, lCasher.getShopCode());
    int lDeliveryInx = 0;
    Iterator lDeliveryIta = lDeliveryColl.iterator();
    // SIDeliveryTime lDeliveryTime=new SIDeliveryTime();
    
    SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
    SIOrderDetail[] lOrderDetail;
    
    while (lDeliveryIta.hasNext()) {
      lDeliveryInx++;
      // lDeliveryTime=new SIDeliveryTime();
      lOrderDelivery = (SIOrderDelivery) lDeliveryIta.next();
      
      // 受注配送先コードをインクリメント
      lOrderDeliveryCode++;
      
      lOrderDetail = (SIOrderDetail[]) SICartDetail.getDetailCollection(lRequest, lOrderDelivery.getDeliveryCode(), lCasher.getShopCode()).toArray(new SIOrderDetail[0]);
      
      // 受注明細のレコードの作成
      for (int jj = 0; jj < lOrderDetail.length; jj++) {
        // 商品マスターの更新
        lReserveOrder = new SIReserveOrder();
        lReserveOrder.setShopCode(lOrderDetail[jj].getShopCode());
        lReserveOrder.setCmdtyCode(lOrderDetail[jj].getCmdtyCode());
        lReserveOrder.setIndividualCode(lOrderDetail[jj].getIndividualCode());
        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());
        
        String checkCmdtyCode = lOrderDetail[jj].getCmdtyCode();
        if (SIUtil.isNotNull(lOrderDetail[jj].getSetCmdtyCode())) checkCmdtyCode = lOrderDetail[jj].getSetCmdtyCode();
        StringBuffer lSql = new StringBuffer();
        lSql.append("SELECT m.makercode FROM makertbl m,cmdtymtbl c ");
        lSql.append("WHERE m.makercode=c.makercode AND m.contractflg<>'0' ");
        lSql.append("AND c.cmdtycode=").append(SIDBUtil.SQL2Str(checkCmdtyCode));
        
        if (!contractFlg) {
          String maker = SIDBUtil.getFirstData(lConnection, lSql.toString());
          if (SIUtil.isNotNull(maker)) {
            lSql = new StringBuffer();
            lSql.append("SELECT makercode FROM custmakertbl ");
            lSql.append("WHERE custcode=").append(SIDBUtil.SQL2Str(lUserLogin.getCustCode()));
            lSql.append(" AND makercode=").append(SIDBUtil.SQL2Str(maker));
            if (!SIDBUtil.hasData(lConnection, lSql.toString())) contractFlg = true;
          }
        }
        
        if (!"1".equals(lUserLogin.getHairCosmeFlg())&&!hairCosmeFlg) {
          String checkIndividualCode = lOrderDetail[jj].getIndividualCode();
          if (SIUtil.isNotNull(lOrderDetail[jj].getSetIndividualCode())) checkIndividualCode = lOrderDetail[jj].getSetIndividualCode();
          if (checkIndividualCode.substring(0, 1).equals("V")||checkIndividualCode.substring(0, 1).equals("H")||checkIndividualCode.substring(0, 1).equals("L")) {
            hairCosmeFlg = true;
          }
        }
        
        int stockAmount = 0;
        int orderAmount = 0;
        if (lCasher.getPayMethodName().equals("代金引換")) {
          boolean reserveFlg = true;
          boolean hasReserve = false;
          String lReserveCode = "";
          SIReserveCartManager lRsrCartManager2 = (SIReserveCartManager) session.getAttribute(SIConfig.SISESSION_RESERVE_CART_INFO_NAME);
          if (lRsrCartManager2 == null) {
            reserveFlg = false;
            lRsrCartManager2 = new SIReserveCartManager();
          }
          try {
            if (reserveFlg) {
              Iterator lReserveCodeIte = lRsrCartManager2.getReserveCodes().keySet().iterator();
              hasReserve = false;
              String buyAmount = lOrderDetail[jj].getAmount();
              while (lReserveCodeIte.hasNext()) {
                lReserveCode = (String) lReserveCodeIte.next();
                if (SIDBUtil.hasData(lConnection, "SELECT reservecode FROM reserveordertbl WHERE reservecode='" + lReserveCode + "' AND cmdtycode='"
                    + lOrderDetail[jj].getCmdtyCode() + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'")) {
                  hasReserve = true;
                }
                // 物流A以外に引き当てられた予約商品の場合
                if (hasReserve
                    && SIDBUtil.hasData(lConnection, "SELECT reservecode FROM reserveordertbl WHERE reservebranch!='999' AND reservecode='" + lReserveCode + "' AND cmdtycode='"
                        + lOrderDetail[jj].getCmdtyCode() + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'")) {
                  cashFlg = true;
                }
                // 物流Aに引き当てられた予約商品の場合
                if (hasReserve
                    && SIDBUtil.hasData(lConnection, "SELECT reservecode FROM reserveordertbl WHERE reservebranch='999' AND reservecode='" + lReserveCode + "' AND cmdtycode='"
                        + lOrderDetail[jj].getCmdtyCode() + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'")) {
                  String rsrvAmount = SIDBUtil.getFirstData(lConnection, "SELECT assignamount FROM reserveordertbl WHERE reservebranch='999' AND reservecode='" + lReserveCode
                      + "' AND cmdtycode='" + lOrderDetail[jj].getCmdtyCode() + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'");
                  if (Integer.parseInt(buyAmount) > Integer.parseInt(rsrvAmount)) {
                    buyAmount = SIUtil.sub(buyAmount, rsrvAmount);
                  }
                }
              }
              // 物流Aに引き当てられた予約商品で、予約数以上の注文の場合
              if (!cashFlg && hasReserve && buyAmount != lOrderDetail[jj].getAmount() && Integer.parseInt(buyAmount) > 0) {
                if (!cashFlg
                    && SIDBUtil.hasData(lConnection, "SELECT individualcode FROM individualtbl WHERE amountflg='1' AND cmdtycode='" + lOrderDetail[jj].getCmdtyCode()
                        + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'")) {
                  if (SIDBUtil.hasData(lConnection, "SELECT branchcode FROM storestocktbl WHERE branchcode!='999' AND amount!='0' AND salespriorityflg='1' AND cmdtycode='"
                      + lOrderDetail[jj].getCmdtyCode() + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'")
                      || SIDBUtil.hasData(lConnection, "SELECT branchcode FROM storestocktbl WHERE branchcode='999' AND amount<'" + buyAmount + "' AND cmdtycode='"
                          + lOrderDetail[jj].getCmdtyCode() + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'")) {
                    cashFlg = true;
                  }
                }
              }
              // 予約商品でない場合
              if (!cashFlg && !hasReserve) {
                if (!cashFlg
                    && SIDBUtil.hasData(lConnection, "SELECT individualcode FROM individualtbl WHERE amountflg='1' AND cmdtycode='" + lOrderDetail[jj].getCmdtyCode()
                        + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'")) {
                  if (SIDBUtil.hasData(lConnection, "SELECT branchcode FROM storestocktbl WHERE branchcode!='999' AND amount!='0' AND salespriorityflg='1' AND cmdtycode='"
                      + lOrderDetail[jj].getCmdtyCode() + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'")
                      || SIDBUtil.hasData(lConnection, "SELECT branchcode FROM storestocktbl WHERE branchcode='999' AND amount<'" + lOrderDetail[jj].getAmount()
                          + "' AND cmdtycode='" + lOrderDetail[jj].getCmdtyCode() + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'")) {
                    cashFlg = true;
                  }
                }
              }
            } else {// 予約商品を含まない受注の場合
              if (!cashFlg
                  && SIDBUtil.hasData(lConnection, "SELECT individualcode FROM individualtbl WHERE amountflg='1' AND cmdtycode='" + lOrderDetail[jj].getCmdtyCode()
                      + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'")) {
                if (SIDBUtil.hasData(lConnection, "SELECT branchcode FROM storestocktbl WHERE branchcode!='999' AND amount!='0' AND salespriorityflg='1' AND cmdtycode='"
                    + lOrderDetail[jj].getCmdtyCode() + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'")
                    || SIDBUtil.hasData(lConnection, "SELECT branchcode FROM storestocktbl WHERE branchcode='999' AND amount<'" + lOrderDetail[jj].getAmount()
                        + "' AND cmdtycode='" + lOrderDetail[jj].getCmdtyCode() + "' AND individualcode='" + lOrderDetail[jj].getIndividualCode() + "'")) {
                  cashFlg = true;
                }
              }
            }
          } catch (Exception e) {
            e.printStackTrace();
            cashFlg = false;
          }
        } else {
          cashFlg = true;
        }
        
        lSqlBuf = new StringBuffer();
        lSelBuf = new StringBuffer();
        lLeftReserveAmount = lRsrCartManager.addUsed(lReserveOrder);// 予約商品数量より多い商品数
        // SICartCmdty lCartCmdty=new SICartCmdty(lOrderDetail[jj].getShopCode(),lOrderDetail[jj].getCmdtyCode());
        SICartCmdty lCartCmdty = new SICartCmdty(lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(), lOrderDetail[jj].getIndividualCode(), "", "", "", "");// 7.3.0
        // PI-NES0501 追加
        String branch = (String) session.getAttribute(SIConfig.SISESSION_MAN_POS_BRANCH_NAME);
        if (SIUtil.isNull(branch)) branch = "";
        if (!lCartCmdty.reset(lConnection, mode, branch)) {
          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());// 販売期間が過ぎる
        }
        
        if (Integer.parseInt(lLeftReserveAmount) > 0
            && SIUtil.isNull(lOrderDetail[jj].getStndrdCode1() + lOrderDetail[jj].getStndrdCode2() + lOrderDetail[jj].getElementCode1() + lOrderDetail[jj].getElementCode2())) {
          // 数量検索
          /*
           * 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()," "));
           */
          // 7.3.0 PI-NES0501 追加
          lSelBuf.append("SELECT Amount FROM totalstockvw ");
          lSelBuf.append(" WHERE CmdtyCode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getCmdtyCode(), " "));
          lSelBuf.append(" AND IndiVidualCode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode(), " "));
          
          // 商品が購入制限対象の場合、購入回数チェック
          if (SIDBUtil.hasData(lConnection, "SELECT * FROM saleslimittbl WHERE total>0 AND individualcode="+SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode()))){
            StringBuffer sql = new StringBuffer();
            sql.append("SELECT d.individualcode FROM orderlatestvw h,orderdetaillatestvw d,saleslimittbl l ");
            sql.append("WHERE h.ordercode=d.ordercode AND d.individualcode=l.individualcode AND h.status=1 ");
            sql.append("AND h.custcode=").append(SIDBUtil.SQL2Str(lUserLogin.getCustCode(), " "));
            sql.append("AND d.individualcode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode(), " "));
            sql.append("GROUP BY d.individualcode,l.total HAVING count(DISTINCT h.ordercode)>=l.total ");
            if (SIDBUtil.hasData(lConnection, sql.toString())) {
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("manager.message.freeword",lOrderDetail[jj].getCartCmdtyName()+"は購入回数制限のため購入できません。<br>お手数ですがカートから該当商品を削除して再度ご注文ください。"));
              lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              throw new SIFatalException(lOrderDetail[jj].getCartCmdtyName()+"は購入回数制限のため購入できません。");
            }
          }
          
          // 数量が-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", lOrderDetail[jj].getCartCmdtyName()));
            lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            throw new SIFatalException(lOrderDetail[jj].getCartCmdtyName());// 在庫なし
          }
        } 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", lOrderDetail[jj].getCartCmdtyName()));
            lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            throw new SIFatalException(lOrderDetail[jj].getCartCmdtyName());// 在庫無し
          }
        }
        
        // Frontかつ在庫無販売なしかつ在庫管理するとき時のみ在庫の確認を行う。
        if (lCartCmdty.getAmountFlg().equals("1") && mode && lCartCmdty.getNoStockFlg().equals("0")) {
          lLeftAmount = Integer.toString(stockAmount - orderAmount);
          log.debug("checkAmount:" + lOrderDetail[jj].getCartCmdtyName() + ",lLeftAmount=" + lLeftAmount);
          if (Long.parseLong(lLeftAmount) < 0) {
            // 予約数量の取得
            String lReserveAmount = lRsrCartManager.getAmount(lReserveOrder.getShopCode(), lReserveOrder.getCmdtyCode(), lReserveOrder.getIndividualCode(), lReserveOrder
                .getStndrdCode1(), lReserveOrder.getElementCode1(), lReserveOrder.getStndrdCode2(), lReserveOrder.getElementCode2());
            String lErrorName = "";
            SICustomErrors errors = new SICustomErrors();
            if (Integer.parseInt(lReserveAmount) > 0) lErrorName = "manager.app.exceed.amount.with.reserve";
            else if (stockAmount <= 0) lErrorName = "manager.app.exceed.amount.no.reserve";
            else lErrorName = "manager.app.exceed.amount";
            errors.addError(new SICustomError(lErrorName, lOrderDetail[jj].getCartCmdtyName()));
            lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            throw new SIFatalException(lOrderDetail[jj].getCartCmdtyName());// 在庫無し
          }
        }
        
      }
    }
    if (!cashFlg) {
      SICustomErrors errors = new SICustomErrors();
      errors.addError(new SICustomError("manager.app.sell.nocash"));
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      throw new SIFatalException("代金引換できません");// 代金引換の禁止
    }
    
    if (contractFlg) {
      SICustomErrors errors = new SICustomErrors();
      errors.addError(new SICustomError("manager.message.freeword","未契約ブランドの商品が存在するため受注できません。"));
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      throw new SIFatalException("未契約ブランドの商品が存在するため受注できません");// 未契約受注
    }
    
    if (hairCosmeFlg) {
      SICustomErrors errors = new SICustomErrors();
      errors.addError(new SICustomError("manager.message.freeword","化粧品購買/販売特約が未契約のため受注できません。"));
      lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
      throw new SIFatalException("化粧品購買/販売特約が未契約のため受注できません。");// 未契約受注
    }
    
    // ポイント残高-ポイント使用額がマイナスになったらエラーにする
    lPointBuf.append("SELECT SUM(PointOfIssue) ");
    lPointBuf.append(" AS AfterPoint FROM PointManMTbl ");
    lPointBuf.append(" WHERE CustCode = ");
    lPointBuf.append(SIDBUtil.SQL2Str(lUserLogin.getCustCode()));
    lPointBuf.append(" AND ENABLEFLG = '1'");
    lPointBuf.append(" GROUP BY CustCode");
    
    long AfterPoint = 0;
    if (SIUtil.isNotNull(SIDBUtil.getFirstData(lConnection, lPointBuf.toString()))) {
      AfterPoint = Long.parseLong(SIDBUtil.getFirstData(lConnection, lPointBuf.toString()));
    }
    
    if (AfterPoint < 0) { throw new SIDebtPointException("ポイント使用額がポイント残高より大きいです。");// 残高チェック
    }
  }
  
  // 7.2.1 ST2007 追加ここまで
  
  // 7.2.0 ST0296 追加ここから
  /**
   * <b>insertPointTableData</b> データベースに使用ポイントのレコードを作成します。
   * 
   * @param lRequest
   * @param lConnection
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   * @return lPointManCode;
   */
  public static String insertPointTableData(HttpServletRequest lRequest, Connection lConnection) throws SIDuplicateKeyException, SIDBAccessException {
    HttpSession session = lRequest.getSession(true);// セッションの取得
    UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
    SIUserInfo lUserLogin = SIHTMLUtil.getUserInfo(lRequest);
    SIDateTime lDateTime = new SIDateTime();
    // PointManCodeの取得
    String lPointManCode = "";
    // ポイントを使用できるかどうか。
    String pointEnableFlg = SIDBUtil.getPointEnableFlg(lCasher.getCasherShopCode(), lConnection);
    if (pointEnableFlg.equals("1")) {
      lPointManCode = SIDBUtil.getFirstData(lConnection, SIDBUtil.getNextVal("POINTMANMTBL_POINTMANCD_SEQ"));
      SIInsertRec lRec = new SIInsertRec("PointManMTbl");
      lRec.add("PointManCode", lPointManCode);
      lRec.add("CustCode", lUserLogin.getCustCode());// 顧客コード
      lRec.add("MallShopCode", lCasher.getCasherShopCode());// 管理コード
      lRec.add("IssueFlg", "0");// 発行種別フラグ
      lRec.add("PointOfIssue", "-" + lCasher.getSumByPoint());// 発行／使用ポイント数
      lRec.add("EnableFlg", "1");// 有効フラグ(有効)
      if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {
        lRec.add("ISSUEDATETIME", lDateTime.getFullDateTime());// 更新日時
      } else {
        lRec.add("ISSUEDATETIME", new SIDateTimeType(lDateTime.getFullDateTime()));// 更新日時
      }
      lRec.execute(lConnection);
    }
    return lPointManCode;
  }
  
  /**
   * <b>deletePointTableData</b> データベースに使用ポイントのレコードを作成します。
   * 
   * @param lRequest
   * @param lConnection
   * @param lPointManCode
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   */
  public static void deletePointTableData(HttpServletRequest lRequest, Connection lConnection, String lPointManCode) {
    HttpSession session = lRequest.getSession(true);// セッションの取得
    SIUserInfo lUserLogin = SIHTMLUtil.getUserInfo(lRequest);
    UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
    
    SIDeleteRec lDeleteRec = new SIDeleteRec();
    lDeleteRec.setTableName("PointManMtbl");
    lDeleteRec.addCondition("CustCode", lUserLogin.getCustCode());
    lDeleteRec.addCondition("MallShopCode", lCasher.getCasherShopCode());
    lDeleteRec.addCondition("PointManCode", lPointManCode);
    lDeleteRec.addCondition("EnableFlg", "1");
    try {
      lDeleteRec.execute(lConnection);
    } catch (SIDuplicateKeyException e) {
      e.printStackTrace();
    } catch (SIDBAccessException e) {
      e.printStackTrace();
    }
    // 7.2.0 ST0296 追加ここまで
  }
  
  // 7.2.0 ST0297 追加ここから
  /**
   * <b>deletePointTableData</b> 在庫の更新を同時に行わないようにレコードロックします。
   * 
   * @param lRequest
   * @param lConnection
   * @throws NumberFormatException
   * @throws SIDBAccessException
   * @throws SIFatalException
   */
  public synchronized static void RLockForOrderStock(HttpServletRequest lRequest, Connection lConnection) throws NumberFormatException, SIDBAccessException, SIFatalException {
    RLockForOrderStock(lRequest,lConnection,"");
  }
  public synchronized static void RLockForOrderStock(HttpServletRequest lRequest, Connection lConnection,String lOrderCode) throws NumberFormatException, SIDBAccessException, SIFatalException {
    SITableConditionManager lManCondition = new SITableConditionManager();
    SITableCondition lTableCondition = new SITableCondition();
    SIURLParameter urlParam = new SIURLParameter(lRequest);
    
    HttpSession session = lRequest.getSession(true);// セッションの取得
    SIReserveCartManager lRsrCartManager = (SIReserveCartManager) session.getAttribute(SIConfig.SISESSION_RESERVE_CART_INFO_NAME);
    if (lRsrCartManager == null) lRsrCartManager = new SIReserveCartManager();
    lRsrCartManager.clearUsed();
    UICasher lCasher = (UICasher) session.getAttribute(SIConfig.SISESSION_CASHER_NAME);
    lCasher.calcSum(lRequest, lConnection, urlParam);// 総額などの計算
    // SIUserInfo lUserLogin=SIHTMLUtil.getUserInfo(lRequest);
    StringBuffer lSelBuf = new StringBuffer();
    StringBuffer lSelBuf2 = new StringBuffer();
    StringBuffer lSqlBuf = new StringBuffer();
    // String lLeftAmount="0";
    String lLeftReserveAmount = "0";
    SIReserveOrder lReserveOrder = new SIReserveOrder();
    
    // 受注配送先番号の取得
    // int lOrderDeliveryCode=0;
    // 受注配送先テーブルにレコードの作成
    Collection lDeliveryColl = SICartDetail.getDeliveryCollection(lRequest, lCasher.getShopCode());
    int lDeliveryInx = 0;
    Iterator lDeliveryIta = lDeliveryColl.iterator();
    // SIDeliveryTime lDeliveryTime=new SIDeliveryTime();
    
    SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
    
    while (lDeliveryIta.hasNext()) {
      lDeliveryInx++;
      // lDeliveryTime=new SIDeliveryTime();
      lOrderDelivery = (SIOrderDelivery) lDeliveryIta.next();
      
      SIOrderDetail[] lOrderDetail;
      lOrderDetail = (SIOrderDetail[]) SICartDetail.getDetailCollection(lRequest, lOrderDelivery.getDeliveryCode(), lCasher.getShopCode()).toArray(new SIOrderDetail[0]);
      
      // 9.受注明細のレコードの作成
      for (int jj = 0; jj < lOrderDetail.length; jj++) {
        // 11.商品マスターの更新
        lReserveOrder = new SIReserveOrder();
        lReserveOrder.setShopCode(lOrderDetail[jj].getShopCode());
        lReserveOrder.setCmdtyCode(lOrderDetail[jj].getCmdtyCode());
        lReserveOrder.setIndividualCode(lOrderDetail[jj].getIndividualCode());
        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());
        
        lLeftReserveAmount = lRsrCartManager.addUsed(lReserveOrder);// 予約商品数量より多い商品数
        
        int stockAmount = 0;
        int orderAmount = 0;
        
        lSqlBuf = new StringBuffer();
        lSelBuf = new StringBuffer();
        
        // SICartCmdty lCartCmdty=new SICartCmdty(lOrderDetail[jj].getShopCode(),lOrderDetail[jj].getCmdtyCode());
        SICartCmdty lCartCmdty = new SICartCmdty(lOrderDetail[jj].getShopCode(), lOrderDetail[jj].getCmdtyCode(), lOrderDetail[jj].getIndividualCode(), "", "", "", "");// 7.3.0
        // PI-NES0501
        // 追加
        
        if (!lCartCmdty.reset(lConnection, SIUtil.isNull(lOrderCode))) {
          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());
        }
        
        if (Integer.parseInt(lLeftReserveAmount) > 0
            && SIUtil.isNull(lOrderDetail[jj].getStndrdCode1() + lOrderDetail[jj].getStndrdCode2() + lOrderDetail[jj].getElementCode1() + lOrderDetail[jj].getElementCode2())) {
          // 数量検索
          // 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()," "));
          // 7.3.0 PI-NES0501 追加
          lSelBuf.append("SELECT Amount FROM totalstockvw ");
          lSelBuf.append(" WHERE CmdtyCode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getCmdtyCode(), " "));
          lSelBuf.append(" AND IndiVidualCode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode(), " "));
          
          // 数量が-9999999以下になるとエラー
          stockAmount = Integer.parseInt(SIDBUtil.getFirstData(lConnection, lSelBuf.toString()));
          orderAmount = Integer.parseInt(lLeftReserveAmount);
          
          if(SIUtil.isNotNull(lOrderCode)){
            lSelBuf2 = new StringBuffer();
            lSelBuf2.append("SELECT sum(orderallocationnumber) FROM orderallocationinfotbl ");
            lSelBuf2.append("WHERE CmdtyCode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getCmdtyCode(), " "));
            lSelBuf2.append("AND IndividualCode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode(), " "));
            lSelBuf2.append("AND OrderCode=").append(SIDBUtil.SQL2Str(lOrderCode, " "));
            // EDBTG003-00 elecs-matsushima mod start
            //lSelBuf2.append("GROUP BY OrderCode,CmdtyCode,IndividualCode");
            if (SIUtil.isNull(lOrderDetail[jj].getOrderDetailCode())){
              lSelBuf2.append(" AND detailcode is null ");
            } else {
              lSelBuf2.append(" AND detailcode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getOrderDetailCode(), " "));
            }
            lSelBuf2.append("GROUP BY OrderCode,CmdtyCode,IndividualCode,detailcode");
            // EDBTG003-00 elecs-matsushima mod end
            
            String alloc = SIDBUtil.getFirstData(lConnection, lSelBuf2.toString());
            if(SIUtil.isNotNull(alloc)){
              stockAmount = stockAmount + Integer.parseInt(alloc);
            }
          }
          
          if (lCartCmdty.getAmountFlg().equals("1") && stockAmount - orderAmount < SIConfig.SISTOCK_AMOUNT_NEGATIVE_MAX) {
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("manager.app.exceed.amount", 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("SELECT * FROM CmdtyMTbl "); 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"); lSqlBuf.append(" FOR UPDATE");
             */
            lSqlBuf.append("SELECT * FROM storestocktbl ");
            lSqlBuf.append(" WHERE ShopCode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getShopCode(), " "));
            lSqlBuf.append(" AND CmdtyCode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getCmdtyCode(), " "));
            lSqlBuf.append(" AND individualcode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode(), " "));
            lSqlBuf.append(" FOR UPDATE");
            SIDBUtil.getFirstData(lConnection, lSqlBuf.toString());
          }
        } 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(SIUtil.isNotNull(lOrderCode)){
            lSelBuf2 = new StringBuffer();
            lSelBuf2.append("SELECT sum(orderallocationnumber) FROM orderallocationinfotbl ");
            lSelBuf2.append("WHERE CmdtyCode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getCmdtyCode(), " "));
            lSelBuf2.append("AND IndividualCode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getIndividualCode(), " "));
            lSelBuf2.append("AND OrderCode=").append(SIDBUtil.SQL2Str(lOrderCode, " "));
            // EDBTG003-00 elecs-matsushima mod start
            //lSelBuf2.append("GROUP BY OrderCode,CmdtyCode,IndividualCode");
            if (SIUtil.isNull(lOrderDetail[jj].getOrderDetailCode())){
              lSelBuf2.append(" AND detailcode is null ");
            } else {
              lSelBuf2.append(" AND detailcode=").append(SIDBUtil.SQL2Str(lOrderDetail[jj].getOrderDetailCode(), " "));
            }
            lSelBuf2.append("GROUP BY OrderCode,CmdtyCode,IndividualCode,detailcode");
            // EDBTG003-00 elecs-matsushima mod end
            String alloc = SIDBUtil.getFirstData(lConnection, lSelBuf2.toString());
            if(SIUtil.isNotNull(alloc)){
              stockAmount = stockAmount + Integer.parseInt(alloc);
            }
          }
          
          if (lCartCmdty.getAmountFlg().equals("1") && stockAmount - orderAmount < SIConfig.SISTOCK_AMOUNT_NEGATIVE_MAX) {
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("manager.app.exceed.amount", 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("SELECT * FROM CmdtyStndrdMTbl").append(" WHERE ");
            lSqlBuf.append(lManCondition.getCondtionSQL());
            lSqlBuf.append(" FOR UPDATE");
            SIDBUtil.getFirstData(lConnection, lSqlBuf.toString());
          }
        }
      }
    }
    return;
  }
  // 7.2.0 ST0297 追加ここまで
  public static boolean isAutoExecute(Connection lConnection,String orderCode) {
    boolean res = false;
    if (SIUtil.isNull(orderCode)) return false;
    
    try {
      StringBuffer str = new StringBuffer();
      str.append("SELECT h.ordercode FROM ordersumvw h,custtbl c,orderdeliverylatestvw l,orderdetaillatestvw d ");
      str.append("LEFT OUTER JOIN orderallocationinfotbl a ");
      str.append("ON d.ordercode=a.ordercode AND d.detailcode=a.detailcode AND d.individualcode=a.individualcode ");
      str.append("WHERE h.ordercode=d.ordercode AND h.ordercode=l.ordercode AND l.deliverycode=1 AND h.status=1 AND h.orderbranchcode=1 AND h.branchcode IS NULL ");
      str.append("AND h.custcode=c.custcode AND CASE WHEN c.receivableflg='1' THEN true ELSE h.paymethodname IN ('カード','代金引換','ポイント全額') END ");
      str.append("AND h.contactmsg IS NULL AND h.ordercode=").append(SIDBUtil.SQL2Str(orderCode," "));
      str.append("AND CASE WHEN h.paymethodname='カード' AND h.totalofprice+h.totalofdeliveryfee+h.totaloffee-h.setdiscount>=60000 ");
      str.append(" AND (CASE WHEN l.companyname IS NULL THEN true WHEN l.companyname IN ('無し','なし','未定') THEN true WHEN l.companyname LIKE '個人%' THEN true ELSE false END) ");
      str.append(" THEN false ");//カード＋6万円超え＋配送先サロン名が怪しい時は自動で出荷依頼しない
      str.append(" WHEN h.paymethodname='カード' AND NOT EXISTS (SELECT o.ordercode FROM orderlatestvw o WHERE o.status=1 AND o.custcode=h.custcode AND o.ordercode<h.ordercode) ");
      str.append(" THEN false ELSE true END ");//カード決済＆初回注文の場合は自動で出荷依頼しない
      str.append("AND c.norequestflg=0 ");//自動出荷不可の場合は送信しない
      str.append("GROUP BY h.ordercode HAVING count(*)=sum(CASE WHEN a.branchcode='18' THEN 1 ELSE 0 END)");
      res = SIDBUtil.hasData(lConnection, str.toString());
    }catch (Exception e){
      e.printStackTrace();
      res=false;
    }
    return res;
  }
  
  public static String[] getAutoSetting(Connection lConnection,String OrderCode,String Address1) {
    String[] setting = new String[3];
    Statement lStatement = null;
    ResultSet lResultSet = null;
    
    StringBuffer str1 = new StringBuffer();
    str1.append("SELECT g.branchcode,g.chargecode,c.email ");
    str1.append("FROM orderlatestvw h,custgrouptbl g,chargetbl c ");
    str1.append("WHERE g.chargecode=c.chargecode ");
    str1.append("AND g.custcode=h.custcode ");
    str1.append("AND h.ordercode=").append(SIDBUtil.SQL2Str(OrderCode));
    
    StringBuffer str2 = new StringBuffer();
    str2.append("SELECT p.branchcode,p.chargecode,c.email ");
    str2.append("FROM orderprefecturetbl p,chargetbl c ");
    str2.append("WHERE p.chargecode=c.chargecode ");
    str2.append("AND p.prefecturename=").append(SIDBUtil.SQL2Str(Address1));
    
    try{
      lStatement = lConnection.createStatement();
      lResultSet = lStatement.executeQuery(str1.toString());
      if (lResultSet.next()) {
        setting[0]=lResultSet.getString("branchcode");
        setting[1]=lResultSet.getString("chargecode");
        setting[2]=lResultSet.getString("email");
      }else{
        lResultSet = lStatement.executeQuery(str2.toString());
        if (lResultSet.next()) {
          setting[0]=lResultSet.getString("branchcode");
          setting[1]=lResultSet.getString("chargecode");
          setting[2]=lResultSet.getString("email");
        }
      }
    }catch(Exception e){
      e.printStackTrace();
      setting = new String[3];
    }finally{
      SIDBUtil.close(lResultSet, lStatement);
    }
    return setting;
  }
  
  public static boolean isCustGroup(Connection lConnection,String orderCode) throws SIDBAccessException{
    return SIDBUtil.hasData(lConnection, "SELECT * FROM orderlatestvw o,custgrouptbl g WHERE o.custcode=g.custcode AND o.ordercode="+SIDBUtil.SQL2Str(orderCode));
  }
}