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

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;

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.SIFrontBasic;
import jp.co.sint.basic.SIReserveOrder;
import jp.co.sint.basic.SIUserInfo;
import jp.co.sint.beans.front.UIReserve;
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;
import jp.co.sint.database.SIDuplicateKeyException;
import jp.co.sint.database.SIInsertRec;
import jp.co.sint.database.SIModifyRec;
import jp.co.sint.database.SISpcType;
//import jp.co.sint.database.SITableCondition;
//import jp.co.sint.database.SITableConditionManager;
import jp.co.sint.mail.SISendMail;
import jp.co.sint.servlet.SIServlet;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIDateTime;
import jp.co.sint.tools.SIErrorFactory;
import jp.co.sint.tools.SIFatalException;
//import jp.co.sint.tools.SIFlagUtil;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIURLMap;
import jp.co.sint.tools.SIUtil;

import org.apache.log4j.Category;
import jp.co.sint.tools.SIURLParameter;//7.1.1 ST0236 追加

/**
 * @version $Id: SIIReserveSrv.java,v 1.0 2004/03/05 Exp $
 * @author  fukuda
 * <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>
 * fukuda         2004/03/05 15:00:05 Original
 */
public class SIIReserveSrv 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{
      Connection lConnection=databaseConnection.getConnection();

      String actionName=this.getActionName(urlParam);//画面からのアクション 7.1.1 ST0236 修正
      String editMode=this.getEditMode(urlParam);//DBへの編集モード 7.1.1 ST0236 修正

      if(this.getServletPath(request).equals("/mobile/i/reserve")){//商品予約
        if(SIConfig.SIACTION_CONFIRM.equals(actionName)||SIUtil.isNull(actionName)){
          UIReserve reserve=(UIReserve)session.getAttribute(SIConfig.SISESSION_RESERVE_EDIT_NAME);
          if(reserve==null) reserve=new UIReserve();//7.1.1 ST0237 追加
          boolean lResult=true;
          if(SIConfig.SIACTION_CONFIRM.equals(actionName)){//予約数量の変更
            reserve.initAmount1(request,urlParam);//7.1.1 ST0236 修正
            session.setAttribute(SIConfig.SISESSION_RESERVE_EDIT_NAME,reserve);
            lResult=reserve.validateAmount(false,request,lConnection);//7.1.1 ST0156 修正
          }
          if (!lResult){//予約数量のチェック
            forwardKey(request,response,"webshop.jsp.front.imode.reserve");
          }else{
            SIUserInfo lUserInfo=SIHTMLUtil.getUserInfo(request);
            //7.1.1 ST0156 修正 ここから
            if(SIUtil.isNull(reserve.getAmountTxt())||Integer.parseInt(reserve.getAmountTxt())<1){//7.1.1 ST0237 修正
              redirectKey(request,response,"webshop.servlet.front.imode.main");
            }else if(lUserInfo.isNotLogin(request)){
            //7.1.1 ST0156 修正 ここまで
              String lUrl="";
              if(SIUtil.isNull(reserve.getShopCode())){
                lUrl=SIURLMap.getUrl("webshop.servlet.front.imode.login")+"?nid="+SIURLMap.getUrl("webshop.servlet.front.imode.reserve");
              }else{
                lUrl=SIURLMap.getUrl("webshop.servlet.front.imode.login")+"?nid="+SIURLMap.getUrl("webshop.servlet.front.imode.reserve")+"?shc="+reserve.getShopCode();
              }
              redirectHttps(request,response,lUrl);
            }else{//チェックOKかつログインした
              //予約商品を登録
              try{
                insertReserveOrderTbl(lConnection,reserve,lUserInfo);
                session.setAttribute(SIConfig.SISESSION_RESERVE_EDIT_NAME,reserve);
                try {lConnection.commit();}catch(SQLException sqle){}
                forwardKey(request,response,"webshop.jsp.front.imode.reserve.result");// 7.0.1 追加
              }catch(SIDBAccessException sqle){
                try{lConnection.rollback();}catch(SQLException ee){}
                sqle.printStackTrace();
                SICustomErrors errors=new SICustomErrors();
                errors.addError(new SICustomError("database.execute.error"));
                request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
                forwardKey(request,response,"webshop.jsp.front.imode.reserve");
              }
              //7.0.1 削除forwardKey(request,response,"webshop.jsp.front.imode.reserve.result");
            }
          }
        }else if(SIConfig.SIACTION_NEW.equals(actionName)){//商品予約画面を開く
          UIReserve reserve=new UIReserve();
          reserve.init(request,urlParam);//7.1.1 ST0236 修正
          session.setAttribute(SIConfig.SISESSION_RESERVE_EDIT_NAME,reserve);
          forwardKey(request,response,"webshop.jsp.front.imode.reserve");
        }
      }else if(this.getServletPath(request).equals("/mobile/i/reservelist")){//予約確認
        if(SIConfig.SIACTION_MODIFY.equals(actionName)){//商品数変更
          UIReserve reserve=new UIReserve();
          reserve.initAmount2(request,urlParam);//7.1.1 ST0236 修正
          session.setAttribute(SIConfig.SISESSION_RESERVE_LIST_NAME,reserve);
          if(reserve.validateAmount(true,request,lConnection)){//7.1.1 ST0156 修正
            try{
              SIUserInfo lUserInfo=SIHTMLUtil.getUserInfo(request);
              updateReserveOrderTbl(lConnection,reserve,lUserInfo);
              try{lConnection.commit();}catch(SQLException sqle){}
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME,SIErrorFactory.getErrorMsg("manager.message.success.modify"));
            }catch(SIDBAccessException e){
              try{lConnection.rollback();}catch(SQLException sqle){}
              e.printStackTrace();
              SICustomErrors errors=new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
            }
          }
          forwardKey(request,response,"webshop.jsp.front.imode.reserve.list");
        }else if (SIUtil.isNull(actionName) || SIConfig.SIACTION_BACK.equals(actionName)){
          UIReserve reserve=new UIReserve();
          if(SIConfig.SIACTION_BACK.equals(actionName)){
            reserve = (UIReserve)session.getAttribute(SIConfig.SISESSION_RESERVE_LIST_NAME);
          }else{
            reserve.initList(request,urlParam);//7.1.1 ST0236 修正
            session.setAttribute(SIConfig.SISESSION_RESERVE_LIST_NAME,reserve);
          }
          SIUserInfo lUserInfo=SIHTMLUtil.getUserInfo(request);
          if(lUserInfo.isNotLogin(request)){
            String lUrl="";
            if(SIUtil.isNull(reserve.getShopCode())){
              lUrl=SIURLMap.getUrl("webshop.servlet.front.imode.login")+"?nid="+SIURLMap.getUrl("webshop.servlet.front.imode.reserve.list");
            }else{
              lUrl=SIURLMap.getUrl("webshop.servlet.front.imode.login")+"?nid="+SIURLMap.getUrl("webshop.servlet.front.imode.reserve.list")+"?shc="+reserve.getShopCode();
            }
            redirectHttps(request,response,lUrl);
          }else{
            //予約商品を登録
            forwardKey(request,response,"webshop.jsp.front.imode.reserve.list");
          }
        }else if (SIConfig.SIACTION_CART.equals(actionName)){//商品購入
          Connection connection = lConnection;
          try{
            //カート登録
            SIFrontBasic basicID=new SIFrontBasic();
            basicID.initCart(urlParam);//7.1.1 ST0236 修正
            basicID.addCart(request,connection);
            //予約を注文済み状態に変更
            updateReserveOrderTbl(connection,(String)urlParam.getParam("reserveCodeTxt"),"3");//7.1.1 ST0236 修正
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME,"カートに追加しました。");
            try{lConnection.commit();}catch(SQLException sqle){}
          }catch(SIDBAccessException sqle){
            try{lConnection.rollback();}catch(SQLException ee){}
            sqle.printStackTrace();
            SICustomErrors errors=new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
            forwardKey(request,response,"webshop.jsp.front.imode.reserve.list");
          }
          forwardKey(request,response,"webshop.jsp.front.imode.cart");
        }else if(SIConfig.SIACTION_DELETE.equals(actionName)){//削除
          UIReserve reserve=new UIReserve();
          reserve.initAmount2(request,urlParam);//7.1.1 ST0236 修正
          try{
            deleteReserveOrderTbl(lConnection,reserve);
            try{lConnection.commit();}catch(SQLException ee){}
          }catch(SIDBAccessException e){
            try{lConnection.rollback();}catch(SQLException ee){}
            e.printStackTrace();
            SICustomErrors errors=new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
            forwardKey(request,response,"webshop.jsp.front.imode.reserve.list");
          }
          forwardKey(request,response,"webshop.jsp.front.imode.reserve.list");
        }else if(SIConfig.SIACTION_CLEAR.equals(actionName)){
          Connection connection = lConnection;
          try{
            //予約をキャンセル
            //SIUserInfo lUserInfo=SIHTMLUtil.getUserInfo(request);
            updateReserveOrderTbl(connection,(String)urlParam.getParam("reserveCodeTxt"),"2");//7.1.1 ST0236 修正
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME,"キャンセルしました。");
            try {lConnection.commit();}catch(SQLException sqle){}
          }catch (SIDBAccessException sqle){
            try {lConnection.rollback();}catch(SQLException ee){}
            sqle.printStackTrace();
            SICustomErrors errors=new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
            forwardKey(request,response,"webshop.jsp.front.imode.reserve.list");
          }
          forwardKey(request,response,"webshop.jsp.front.imode.reserve.list");
        }
      }
    }catch (SQLException e){
      e.printStackTrace();
      throw new ServletException();
    }catch (NamingException e){
      e.printStackTrace();
      throw new ServletException();
    }finally{
      databaseConnection.close();
    }
  }

  /**
   * <b>insertReserveOrderTbl</b>
   * 予約商品を新規登録します。
   * @param lConnection DBへのコネクション
   * @param reserve 挿入するデータ
   * @param lUserInfo 顧客情報
   * @return なし
   * @throws SIDBAccessException
   */
  private void insertReserveOrderTbl(Connection lConnection,UIReserve reserve,SIUserInfo lUserInfo) throws SIDBAccessException{
    String lReserveDateTime=(new SIDateTime()).getFullDateTime();
    //予約番号の采番
    String lReserveOrderCode=SIDBUtil.getFirstData(lConnection,SIDBUtil.getNextVal("RESERVEORDERTBL_RESERVECD_SEQ"));
    SICartCmdty lCartCmdty=new SICartCmdty(reserve.getRsrvShopCodeTxt(),reserve.getRsrvCmdtyCodeTxt(),reserve.getRsrvIndividualCodeTxt(),
                                           reserve.getRsrvStndrdCodeTxt1(),reserve.getRsrvElementCodeTxt1(),
                                           reserve.getRsrvStndrdCodeTxt2(),reserve.getRsrvElementCodeTxt2());
    lCartCmdty.reset(lConnection);

    SIInsertRec lRec=new SIInsertRec("ReserveOrderTbl");
    lRec.add("ReserveCode",lReserveOrderCode);//予約番号
    lRec.add("CustCode",lUserInfo.getCustCode());//顧客コード
    lRec.add("CustName",lUserInfo.getCustName());//顧客名
    lRec.add("CustPronName",lUserInfo.getCustPronName());//顧客名カナ
    lRec.add("Email",lUserInfo.getEmail());//EMAIL
    lRec.add("ShopCode",reserve.getRsrvShopCodeTxt());//ショップコード
    lRec.add("ShopName",lCartCmdty.getFrontShopName());//ショップ名
    lRec.add("CmdtyCode",reserve.getRsrvCmdtyCodeTxt());//商品コード
    lRec.add("IndividualCode",reserve.getRsrvIndividualCodeTxt());//在庫コード
    lRec.add("CmdtyName",lCartCmdty.getCartCmdtyName());//商品名
    lRec.add("StndrdCode1",reserve.getRsrvStndrdCodeTxt1());//規格コード１
    lRec.add("ElementCode1",reserve.getRsrvElementCodeTxt1());//エレメントコード１
    lRec.add("StndrdCode2",reserve.getRsrvStndrdCodeTxt2());//規格コード２
    lRec.add("ElementCode2",reserve.getRsrvElementCodeTxt2());//エレメントコード２
    lRec.add("Amount",reserve.getAmountTxt());//数量
    lRec.add("SplitFlg",reserve.getSplitFlgRdo());//分割可能
    if (SIDBMultiConf.SIDB_CURRENT_INX ==SIDBMultiConf.SIDB_POSTGRESQL_INX){
      lRec.add("ReserveDateTime",lReserveDateTime);//予約日時
    }else{
      lRec.add("ReserveDateTime",new SIDateTimeType(lReserveDateTime));//予約日時
    }
    lRec.add("ReserveFlg","0");//予約状態フラグ
    lRec.add("ArrivalScheduleMsg",lCartCmdty.getArrivalScheduleMsg());// 入荷時期コメント
    try{
      //商品マスタテーブルの挿入
      lRec.execute(lConnection);
      String rsrvAmount = SIDBUtil.getFirstData(lConnection,"SELECT rsrvamount FROM individualtbl WHERE cmdtycode='"+reserve.getRsrvCmdtyCodeTxt()+"' AND individualcode='"+reserve.getRsrvIndividualCodeTxt()+"'");
      SIModifyRec lMod=new SIModifyRec("Individualtbl");
      if(SIUtil.isNotNull(rsrvAmount)){
        lMod.addCondition("CmdtyCode",reserve.getRsrvCmdtyCodeTxt());//商品コード
        lMod.addCondition("IndividualCode",reserve.getRsrvIndividualCodeTxt());//在庫コード
        lMod.add("RsrvAmount",SIUtil.sub(rsrvAmount,reserve.getAmountTxt()));
        lMod.execute(lConnection);
      }
      reserve.setReserveCodeTxt(lReserveOrderCode);
    }catch(SIDuplicateKeyException e){
      throw new SIDBAccessException(e);
    }

    //予約受付メールを送信
    StringBuffer lMailBuf=new StringBuffer();
    SISendMail lSendMail=new SISendMail();
    try{
      lSendMail.setMailTemp(lConnection,reserve.getRsrvShopCodeTxt(),SIConfig.SIMAIL_TEMPLATE_RESERVE_COMFIRM);
    }catch(SIFatalException e2){
      e2.printStackTrace();
    }

    lMailBuf.append("\n予約日時:"+lReserveDateTime);
    lMailBuf.append("\n予約番号:"+lReserveOrderCode);

    //メールの本文の作成(予約商品情報)
    lMailBuf.append("\n\nご予約商品");
    lMailBuf.append("\n=============");
    //lMailBuf.append("\nショップ名:").append(lCartCmdty.getFrontShopName());
    lMailBuf.append("\n商品コード:").append(lCartCmdty.getIndividualCode());
    lMailBuf.append("\n商品名:").append(lCartCmdty.getCartCmdtyName());
    lMailBuf.append("\n予約数:").append(reserve.getAmountTxt());
    //lMailBuf.append("\n一部割当:").append(SIFlagUtil.getFlagName(SIFlagConf.SIFLAG_SPLIT_FLG_INX,reserve.getSplitFlgRdo()));
    lMailBuf.append("\n=============");

    //14.メールの本文の作成(メールテンプレートの内容2)
    lMailBuf.append("\n");
    lSendMail.appendContent1(lMailBuf.toString());
    lMailBuf=new StringBuffer();
    //18.メールの本文の作成(メールテンプレートの内容3)
    lSendMail.appendContent2(lMailBuf.toString());

    //21.送信開始
    try{
      lSendMail.setToMailAddress(lUserInfo.getEmail());
      lSendMail.execute();
    }catch(SIFatalException e){e.printStackTrace();}
  }

  private void deleteReserveOrderTbl(Connection lConnection,UIReserve reserve) throws SIDBAccessException{
    SIDeleteRec lRec=new SIDeleteRec("ReserveOrderTbl");
    lRec.addCondition("ReserveCode",reserve.getReserveCodeTxt());
    try{
      lRec.execute(lConnection);
    }catch (SIDuplicateKeyException e){
      throw new SIDBAccessException();
    }
  }

  /**
   * <b>updateReserveOrderTbl</b>
   * 予約商品を変更します。
   * @param lConnection DBへのコネクション
   * @param reserve 挿入するデータ
   * @param lUserInfo 顧客情報
   * @return なし
   * @throws SIDBAccessException
   */
  private void updateReserveOrderTbl(Connection lConnection,UIReserve reserve, SIUserInfo lUserinfo) throws SIDBAccessException{
    SIModifyRec lRec=new SIModifyRec("ReserveOrderTbl");
    lRec.addCondition("ReserveCode",reserve.getReserveCodeTxt());
    lRec.add("Amount",reserve.getAmountTxt());
    lRec.add("SplitFlg",reserve.getSplitFlgRdo());

    try{
      lRec.execute(lConnection);

      //予約変更メールを送信
      StringBuffer lMailBuf=new StringBuffer();
      SISendMail lSendMail=new SISendMail();
      SICartCmdty lCartCmdty=new SICartCmdty(reserve.getRsrvShopCodeTxt(),reserve.getRsrvCmdtyCodeTxt(),
      reserve.getRsrvStndrdCodeTxt1(),reserve.getRsrvElementCodeTxt1(),
      reserve.getRsrvStndrdCodeTxt2(),reserve.getRsrvElementCodeTxt2());
      lCartCmdty.reset(lConnection);
      try{
        lSendMail.setMailTemp(lConnection,reserve.getRsrvShopCodeTxt(),SIConfig.SIMAIL_TEMPLATE_RESERVE_CHANGE);
      }catch(SIFatalException e2){
        e2.printStackTrace();
      }

      String lReserveChangeDateTime=(new SIDateTime()).getFullDateTime();
      lMailBuf.append("\n変更日時:"+lReserveChangeDateTime);
      lMailBuf.append("\n予約番号:"+reserve.getReserveCodeTxt());

      //メールの本文の作成(予約商品情報)
      lMailBuf.append("\n\nご予約商品");
      lMailBuf.append("\n=============");
      //lMailBuf.append("\nショップ名:").append(lCartCmdty.getFrontShopName());
      lMailBuf.append("\n商品コード:").append(lCartCmdty.getIndividualCode());
      lMailBuf.append("\n商品名:").append(lCartCmdty.getCartCmdtyName());
      lMailBuf.append("\n予約数:").append(reserve.getAmountTxt());
      //lMailBuf.append("\n一部割当:").append(SIFlagUtil.getFlagName(SIFlagConf.SIFLAG_SPLIT_FLG_INX,reserve.getSplitFlgRdo()));
      lMailBuf.append("\n=============");

      //14.メールの本文の作成(メールテンプレートの内容2)
      lMailBuf.append("\n");
      lSendMail.appendContent1(lMailBuf.toString());
      lMailBuf=new StringBuffer();
      //18.メールの本文の作成(メールテンプレートの内容3)
      lSendMail.appendContent2(lMailBuf.toString());

      //21.送信開始
      try{
        lSendMail.setToMailAddress(lUserinfo.getEmail());
        lSendMail.execute();
      }catch(SIFatalException e){e.printStackTrace();}
    }catch (SIDuplicateKeyException e){
      throw new SIDBAccessException();
    }
  }

  /**
   * <b>updateReserveOrderTbl</b>
   * 予約商品を変更します。
   * @param lConnection DBへのコネクション
   * @param reserve 挿入するデータ
   * @param lUserInfo 顧客情報
   * @return なし
   * @throws SIDBAccessException
   */
  private void updateReserveOrderTbl(Connection lConnection,String ReserveCode,String lReserveFlg) throws SIDBAccessException{
    try{
      SIReserveOrder lReserveOrder=new SIReserveOrder(ReserveCode);
      lReserveOrder.reset(lConnection);

      //1.予約フラグの更新
      SIModifyRec lRec=new SIModifyRec("ReserveOrderTbl");
      lRec.addCondition("ReserveCode",ReserveCode);//予約番号
      lRec.add("ReserveFlg",lReserveFlg);//予約状態フラグ
      lRec.execute(lConnection);
      if(lReserveFlg.equals("2")){
        //予約キャンセルメールを送信(キャンセル処理の場合)
        StringBuffer lMailBuf=new StringBuffer();
        SISendMail lSendMail=new SISendMail();
        SICartCmdty lCartCmdty=new SICartCmdty(lReserveOrder.getShopCode(),lReserveOrder.getCmdtyCode(),lReserveOrder.getIndividualCode(),
        lReserveOrder.getStndrdCode1(),lReserveOrder.getElementCode1(),lReserveOrder.getStndrdCode2(),lReserveOrder.getElementCode2());
        lCartCmdty.reset(lConnection);
        try{
          lSendMail.setMailTemp(lConnection,lReserveOrder.getShopCode(),SIConfig.SIMAIL_TEMPLATE_RESERVE_CANCEL);
        }catch(SIFatalException e2){
          e2.printStackTrace();
        }

        String lReserveChangeDateTime=(new SIDateTime()).getFullDateTime();
        lMailBuf.append("\nキャンセル日時:"+lReserveChangeDateTime);
        lMailBuf.append("\n予約番号:"+lReserveOrder.getReserveCode());

        //メールの本文の作成(予約商品情報)
        lMailBuf.append("\n\nキャンセル商品");
        lMailBuf.append("\n=============");
        //lMailBuf.append("\nショップ名:").append(lReserveOrder.getShopName());
        lMailBuf.append("\n商品コード:").append(lReserveOrder.getIndividualCode());
        lMailBuf.append("\n商品名:").append(lReserveOrder.getCmdtyName());
        lMailBuf.append("\n予約数:").append(lReserveOrder.getAmount());
        //lMailBuf.append("\n一部割当:").append(SIFlagUtil.getFlagName(SIFlagConf.SIFLAG_SPLIT_FLG_INX,lReserveOrder.getSplitFlg()));
        lMailBuf.append("\n=============");

        //14.メールの本文の作成(メールテンプレートの内容2)
        lMailBuf.append("\n");
        lSendMail.appendContent1(lMailBuf.toString());
        lMailBuf=new StringBuffer();
        //18.メールの本文の作成(メールテンプレートの内容3)
        lSendMail.appendContent2(lMailBuf.toString());

        //21.送信開始
        try{
          lSendMail.setToMailAddress(lReserveOrder.getEmail());
          lSendMail.execute();
        }catch(SIFatalException e){e.printStackTrace();}
      }

      StringBuffer lSqlBuf=new StringBuffer();
      lSqlBuf.append("SELECT AmountFlg FROM IndividualTbl ");
      lSqlBuf.append("WHERE ShopCode=").append(SIDBUtil.SQL2Str(lReserveOrder.getShopCode()," "));
      lSqlBuf.append("AND CmdtyCode=").append(SIDBUtil.SQL2Str(lReserveOrder.getCmdtyCode()," "));
      lSqlBuf.append("AND IndividualCode=").append(SIDBUtil.SQL2Str(lReserveOrder.getIndividualCode()));

      String lAmountFlg= SIDBUtil.getFirstData(lConnection,lSqlBuf.toString());

      if(lAmountFlg.equals("1")&&lReserveFlg.equals("2")&&lReserveOrder.getReserveFlg().equals("1")){//キャンセル
        lSqlBuf=new StringBuffer();
        //SITableConditionManager lConditionMan=new SITableConditionManager();
        //SITableCondition lTableCondition=new SITableCondition();

        //商品在庫の更新
        lRec=new SIModifyRec("storestocktbl");
        lRec.addCondition("ShopCode",lReserveOrder.getShopCode());
        lRec.addCondition("CmdtyCode",lReserveOrder.getCmdtyCode());
        lRec.addCondition("IndividualCode",lReserveOrder.getIndividualCode());
        lRec.addCondition("BranchCode",lReserveOrder.getReserveBranchCode());
        lRec.add("Amount",new SISpcType("Amount+"+lReserveOrder.getAmount()));
        lRec.execute(lConnection);
      }
    }catch(SIDuplicateKeyException e){
      throw new SIDBAccessException(e);
    }catch(SIDBAccessException e){
      throw new SIDBAccessException(e);
    }
  }
}