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

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: SIVReserveSrv.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 SIVReserveSrv 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/v/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.vod.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.vod.main");
                }else if(lUserInfo.isNotLogin(request)){
                //7.1.1 ST0156 修正 ここまで
                  String lUrl="";
                  if(SIUtil.isNull(reserve.getShopCode())){
                    lUrl=SIURLMap.getUrl("webshop.servlet.front.vod.login")+"?nid="+SIURLMap.getUrl("webshop.servlet.front.vod.reserve");
                  }else{
                    lUrl=SIURLMap.getUrl("webshop.servlet.front.vod.login")+"?nid="+SIURLMap.getUrl("webshop.servlet.front.vod.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.vod.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.vod.reserve");
                  }
                  //7.0.1 削除forwardKey(request,response,"webshop.jsp.front.vod.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.vod.reserve");
            }
          }else if(this.getServletPath(request).equals("/mobile/v/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.vod.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.vod.login")+"?nid="+SIURLMap.getUrl("webshop.servlet.front.vod.reserve.list");
                }else{
                  lUrl=SIURLMap.getUrl("webshop.servlet.front.vod.login")+"?nid="+SIURLMap.getUrl("webshop.servlet.front.vod.reserve.list")+"?shc="+reserve.getShopCode();
                }
                redirectHttps(request,response,lUrl);
              }else{
                //予約商品を登録
                forwardKey(request,response,"webshop.jsp.front.vod.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.vod.reserve.list");
              }
              forwardKey(request,response,"webshop.jsp.front.vod.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.vod.reserve.list");
              }
              forwardKey(request,response,"webshop.jsp.front.vod.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.vod.reserve.list");
              }
              forwardKey(request,response,"webshop.jsp.front.vod.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);
      }
    }
}
