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

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
// import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;

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

import org.apache.log4j.Category;

import jp.co.sint.basic.SICartCmdty;
import jp.co.sint.basic.SICartDetail;
import jp.co.sint.basic.SICartManager;
import jp.co.sint.basic.SILogin;
import jp.co.sint.basic.SIOrder;
import jp.co.sint.basic.SIOrderCmdty;
import jp.co.sint.basic.SIOrderDelivery;
import jp.co.sint.basic.SIOrderDetail;
import jp.co.sint.basic.SIOrderSetCmdty;
import jp.co.sint.basic.SIPayMethod;
import jp.co.sint.basic.SIPayeeInfo;
import jp.co.sint.basic.SIPayment;
import jp.co.sint.basic.SIPointMan;
import jp.co.sint.basic.SITax;
import jp.co.sint.beans.front.UICasher;
import jp.co.sint.beans.front.UIMain;
// import jp.co.sint.beans.mallmgr.UIIOExcelListCond;
import jp.co.sint.beans.mallmgr.UIPayListCond;
import jp.co.sint.beans.mallmgr.UIRegOrder;
import jp.co.sint.beans.mallmgr.UIRegOrderDelivery;
import jp.co.sint.beans.mallmgr.UIRegOrderDetail;
import jp.co.sint.beans.mallmgr.UIRegUpdateOrderUserLogin;
import jp.co.sint.bscvsmdk.SIBSCVSMDKConfig;
import jp.co.sint.bscvsmdk.SIBSCVSMDKUtil;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
import jp.co.sint.config.SIExcelConf;
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.docs.SIExcelRWrite;
import jp.co.sint.mail.SISendMail;
import jp.co.sint.servlet.SIServlet;
// 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.SIErrorFactory;
import jp.co.sint.tools.SIFatalException;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIURLParameter;
import jp.co.sint.tools.SIUtil;

/**
 * @version $Id: SIRegPaySrv.java,v 1.0 2006/03/28 Exp $
 * @author 入金関連を処理します。 <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>
 * Hong.M.J 2006/03/28 12:20:42 Original
 */
public class SIRegPaySrv extends SIServlet {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  /**
   * <b>doUpdate</b> HTTP リクエストの処理
   * 
   * @param request リクエスト
   * @param response
   * @return なし
   * @throws ServletException
   * @throws IOException
   */
  public void doUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    SILogin manLogin = SIHTMLUtil.getLogin(request);
    // SIRegMngAccesslogSrv siRegMngAccesslogSrv = new SIRegMngAccesslogSrv();
    // Connection conn = null;
    
    if (!manLogin.isLogin()) {
      forwardKey(request, response, "webshop.jsp.manager.login");
      return;
    }
    
    HttpSession session = request.getSession(true);// セッションの取得
    SIDatabaseConnection databaseConnection = new SIDatabaseConnection();// DBへのコネクションの作成
    SIURLParameter urlParam = new SIURLParameter(request);
    
    try {
      String actionName = this.getActionName(urlParam);// 画面からのアクション
      // SILogin lLogin=SIHTMLUtil.getLogin(request);
      
      if (this.getServletPath(request).equals("/mallmgr/RegPaySrv")) {// 一覧画面から呼ばれる
        session.removeAttribute(SIConfig.SISESSION_MAN_PAY_EDIT_NAME);// 入金編集情報削除
        session.removeAttribute(SIConfig.SISESSION_MAN_PAY_CHECK_NAME);// 入金編集情報削除
        
        if (SIConfig.SIACTION_LIST.equalsIgnoreCase(actionName)) {// 一覧と検索などの画面のレコードの表示
          UIPayListCond payListID = new UIPayListCond();
          payListID = new UIPayListCond(request, urlParam);
          if (payListID.getBranchFlgCbo().equals("2")) payListID.setBranchListEnable(true);
          else payListID.setBranchListEnable(false);
          if (payListID.getChargeFlgCbo().equals("2")) payListID.setChargeListEnable(true);
          else payListID.setChargeListEnable(false);
          payListID.validate(request);// データチェック
          session.setAttribute(SIConfig.SISESSION_MAN_PAY_LIST_NAME, payListID);
          forwardKey(request, response, "webshop.jsp.manager.pay.list");
        } else if (SIConfig.SIACTION_REFRESH.equalsIgnoreCase(actionName)) {
          UIPayListCond payListID = new UIPayListCond();
          payListID = new UIPayListCond(request, urlParam);
          payListID.setBelongingBranchCode(payListID.getCompanyCode());
          if (payListID.getBranchFlgCbo().equals("2")) payListID.setBranchListEnable(true);
          else payListID.setBranchListEnable(false);
          if (payListID.getChargeFlgCbo().equals("2")) payListID.setChargeListEnable(true);
          else payListID.setChargeListEnable(false);
          payListID.setChargeNameCdo("");
          payListID.validate(request);// データチェック
          session.setAttribute(SIConfig.SISESSION_MAN_PAY_LIST_NAME, payListID);
          forwardKey(request, response, "webshop.jsp.manager.pay.list");
        } else if (SIConfig.SIACTION_DETAIL.equalsIgnoreCase(actionName)) {// レコードの編集画面へ
          // DBから受注データの取得
          session.removeAttribute(SIConfig.SISESSION_CART_INFO_NAME);
          session.removeAttribute(SIConfig.SISESSION_MAN_ORDER_ALLOCATION);
          session.removeAttribute(SIConfig.SISESSION_UPDATEORDER_DELALLOCATION_NAME);
          //refreshOrderFirst(request, databaseConnection.getConnection(), urlParam, true);
          UIRegOrder regOrder = new UIRegOrder((String)urlParam.getParam("orderCode"));
          regOrder.reset(databaseConnection.getConnection());
          session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME,regOrder);
          session.setAttribute(SIConfig.SISESSION_MAN_NAVIGATER_LIST_NAME, SIConfig.SINAVI_PAY_LIST);
          forwardKey(request, response, "webshop.jsp.manager.pay.update");
        } else if (SIConfig.SIACTION_BILL.equalsIgnoreCase(actionName)) {// 請求書発行
          UIPayListCond payListID = new UIPayListCond();
          payListID.initDelete(request, urlParam);
          if (payListID.validateBillCheck(request)) {
            this.printBillList(response, databaseConnection.getConnection(), payListID, manLogin);
            if (!response.isCommitted()) {// 請求書発行失敗
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("database.query.notexist", "請求書発行データ"));
              forwardKey(request, response, "webshop.jsp.manager.pay.list");
            } else {
              try {
                this.updateBillTableDataList(databaseConnection.getConnection(), payListID, actionName);
                try {
                  databaseConnection.getConnection().commit();
                } catch (SQLException sqle) {}
                session.removeAttribute(SIConfig.SISESSION_MAN_PAY_CHECK_NAME);
              } catch (SIDuplicateKeyException e1) {
                try {
                  databaseConnection.getConnection().rollback();
                } catch (SQLException ee) {}
                e1.printStackTrace();
                SICustomErrors errors = new SICustomErrors();
                errors.addError(new SICustomError("database.insert.duplicate"));
                request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
              } catch (SIDBAccessException e1) {
                try {
                  databaseConnection.getConnection().rollback();
                } catch (SQLException ee) {}
                e1.printStackTrace();
                SICustomErrors errors = new SICustomErrors();
                errors.addError(new SICustomError("database.execute.error"));
                request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
              }
            }
          } else {
            forwardKey(request, response, "webshop.jsp.manager.pay.list");
          }
        }
      } else if (this.getServletPath(request).equals("/mallmgr/RegUpdatePaySrv")) {// 明細画面から呼ばれる
        if (SIConfig.SIACTION_MODIFY.equalsIgnoreCase(actionName)) {// 入金明細データ変更
          SIPayment payment = new SIPayment();
          payment.initUpdate(request, urlParam);
          UIPayListCond payList = new UIPayListCond();
          payList.initCheck(request, urlParam);
          session.setAttribute(SIConfig.SISESSION_MAN_PAY_EDIT_NAME, payment);
          if (payment.validateUpdate(request, databaseConnection.getConnection())) {// データチェック成功
            try {
              updatePaymentTableData(databaseConnection.getConnection(), payment);
              if (payList.getMailSendFlg().equals("1")) {
                if (sendMail(request, databaseConnection.getConnection(), payList)) {
                  request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.modify.mail"));
                } else {
                  request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.modify.mail2"));
                }
              } else {
                request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.modify"));
              }
              session.removeAttribute(SIConfig.SISESSION_MAN_PAY_EDIT_NAME);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
              updateReceiptDate(databaseConnection.getConnection(), payment);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
            } catch (SIDuplicateKeyException e1) {
              try {
                databaseConnection.getConnection().rollback();
              } catch (SQLException ee) {}
              e1.printStackTrace();
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.insert.duplicate"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
            } catch (SIDBAccessException e1) {
              try {
                databaseConnection.getConnection().rollback();
              } catch (SQLException ee) {}
              e1.printStackTrace();
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
            }
          }
          forwardKey(request, response, "webshop.jsp.manager.pay.update");
        } else if (SIConfig.SIACTION_DELETE.equalsIgnoreCase(actionName)) {// 入金明細データ削除
          SIPayment payment = new SIPayment();
          payment.init(request, urlParam);
          try {
            deletePaymentTableData(databaseConnection.getConnection(), payment);
            try {
              databaseConnection.getConnection().commit();
            } catch (SQLException sqle) {}
            updateReceiptDate(databaseConnection.getConnection(), payment);
            try {
              databaseConnection.getConnection().commit();
            } catch (SQLException sqle) {}
          } catch (SIDuplicateKeyException e1) {
            try {
              databaseConnection.getConnection().rollback();
            } catch (SQLException ee) {}
            e1.printStackTrace();
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.insert.duplicate"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
          } catch (SIDBAccessException e1) {
            try {
              databaseConnection.getConnection().rollback();
            } catch (SQLException ee) {}
            e1.printStackTrace();
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
          }
          forwardKey(request, response, "webshop.jsp.manager.pay.update");
        } else if (SIConfig.SIACTION_CONFIRM.equalsIgnoreCase(actionName)) {// 入金明細データ登録
          SIPayment payment = new SIPayment();
          payment.init(request, urlParam);
          session.setAttribute(SIConfig.SISESSION_MAN_PAY_EDIT_NAME, payment);
          UIPayListCond payList = new UIPayListCond();
          payList.initCheck(request, urlParam);
          if (payment.validate(request)) {// データチェック成功
            try {
              insertPaymentTableData(databaseConnection.getConnection(), payment);
              if (payList.getMailSendFlg().equals("1")) {
                if (sendMail(request, databaseConnection.getConnection(), payList)) {
                  request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.insert.mail"));
                } else {
                  request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.insert.mail2"));
                }
              } else {
                request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.insert"));
              }
              session.removeAttribute(SIConfig.SISESSION_MAN_PAY_EDIT_NAME);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
              updateReceiptDate(databaseConnection.getConnection(), payment);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
            } catch (SIDuplicateKeyException e1) {
              try {
                databaseConnection.getConnection().rollback();
              } catch (SQLException ee) {}
              e1.printStackTrace();
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.insert.duplicate"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
            } catch (SIDBAccessException e1) {
              try {
                databaseConnection.getConnection().rollback();
              } catch (SQLException ee) {}
              e1.printStackTrace();
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
            }
          }
          forwardKey(request, response, "webshop.jsp.manager.pay.update");
        } else if (SIConfig.SIACTION_BACK.equalsIgnoreCase(actionName)) {// 詳細から戻る
          forwardKey(request, response, "webshop.jsp.manager.pay.list");
        } else if (SIConfig.SIACTION_MAIL.equalsIgnoreCase(actionName)) {// 督促メール
          UIPayListCond payList = new UIPayListCond();
          payList.initCheck(request, urlParam);
          session.setAttribute(SIConfig.SISESSION_MAN_PAY_CHECK_NAME, payList);
          if (payList.getMailSendFlg().equals("1") && payList.validateCheck(request, databaseConnection.getConnection(), SIConfig.SIACTION_MAIL)) {
            try {
              if (sendMail(request, databaseConnection.getConnection(), payList)) {
                request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.mail"));
              } else {
                request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.failure.mail"));
              }
              session.removeAttribute(SIConfig.SISESSION_MAN_PAY_CHECK_NAME);
            } catch (SIDBAccessException e1) {
              e1.printStackTrace();
            }
          }
          forwardKey(request, response, "webshop.jsp.manager.pay.update");
        } else if (SIConfig.SIACTION_BILL.equalsIgnoreCase(actionName)) {// 請求書発行
          UIPayListCond payList = new UIPayListCond();
          payList.initCheck(request, urlParam);
          session.setAttribute(SIConfig.SISESSION_MAN_PAY_CHECK_NAME, payList);
          if (payList.validateCheck(request, databaseConnection.getConnection(), SIConfig.SIACTION_BILL)) {
            this.printBill(response, databaseConnection.getConnection(), payList, manLogin);
            if (!response.isCommitted()) {// 請求書発行失敗
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("database.query.notexist", "請求書発行データ"));
              forwardKey(request, response, "webshop.jsp.manager.pay.update");
            } else {
              try {
                this.updateBillTableData(databaseConnection.getConnection(), payList, actionName);
                try {
                  databaseConnection.getConnection().commit();
                } catch (SQLException sqle) {}
                session.removeAttribute(SIConfig.SISESSION_MAN_PAY_CHECK_NAME);
              } catch (SIDuplicateKeyException e1) {
                try {
                  databaseConnection.getConnection().rollback();
                } catch (SQLException ee) {}
                e1.printStackTrace();
                SICustomErrors errors = new SICustomErrors();
                errors.addError(new SICustomError("database.insert.duplicate"));
                request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
              } catch (SIDBAccessException e1) {
                try {
                  databaseConnection.getConnection().rollback();
                } catch (SQLException ee) {}
                e1.printStackTrace();
                SICustomErrors errors = new SICustomErrors();
                errors.addError(new SICustomError("database.execute.error"));
                request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
              }
            }
          } else {
            forwardKey(request, response, "webshop.jsp.manager.pay.update");
          }
        } else if (SIConfig.SIACTION_RECEIPT.equalsIgnoreCase(actionName)) {// 領収書発行
          UIPayListCond payList = new UIPayListCond();
          payList.initCheck(request, urlParam);
          session.setAttribute(SIConfig.SISESSION_MAN_PAY_CHECK_NAME, payList);
          if (payList.validateCheck(request, databaseConnection.getConnection(), SIConfig.SIACTION_RECEIPT)) {
            this.printReceipt(response, databaseConnection.getConnection(), payList, manLogin);
            if (!response.isCommitted()) {// 領収書発行失敗
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("database.query.notexist", "領収書発行データ"));
              forwardKey(request, response, "webshop.jsp.manager.pay.update");
            } else {
              try {
                this.updateReceiptTableData(databaseConnection.getConnection(), payList, actionName);
                session.removeAttribute(SIConfig.SISESSION_MAN_PAY_CHECK_NAME);
                try {
                  databaseConnection.getConnection().commit();
                } catch (SQLException sqle) {}
              } catch (SIDuplicateKeyException e1) {
                try {
                  databaseConnection.getConnection().rollback();
                } catch (SQLException ee) {}
                e1.printStackTrace();
                SICustomErrors errors = new SICustomErrors();
                errors.addError(new SICustomError("database.insert.duplicate"));
                request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
              } catch (SIDBAccessException e1) {
                try {
                  databaseConnection.getConnection().rollback();
                } catch (SQLException ee) {}
                e1.printStackTrace();
                SICustomErrors errors = new SICustomErrors();
                errors.addError(new SICustomError("database.execute.error"));
                request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
              }
            }
          } else {
            forwardKey(request, response, "webshop.jsp.manager.pay.update");
          }
        } else if (SIConfig.SIACTION_UPDATE.equalsIgnoreCase(actionName)) {// 受注メモ追記
          String memo = (String) urlParam.getParam("memo");
          String contactMsg = (String) urlParam.getParam("contactMsg");
          String orderCode= (String) urlParam.getParam("orderCode");
          try {
            SIModifyRec lRec = new SIModifyRec("ordertbl");
            lRec.addCondition("ordercode",orderCode);
            lRec.addCondition("enabledflg","1");
            lRec.add("contactMsg",contactMsg);
            lRec.add("memo",memo);
            lRec.execute(databaseConnection.getConnection());
            try {databaseConnection.getConnection().commit();} catch (SQLException sqle) {}
            UIRegOrder regOrderID = (UIRegOrder)session.getAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME);
            regOrderID.setContactMsg(contactMsg);
            regOrderID.setMemo(memo);
            session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME,regOrderID);
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.update"));
          } catch (Exception e) {
            e.printStackTrace();
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
            try {databaseConnection.getConnection().rollback();}catch (SQLException ee){}
          }
          forwardKey(request, response, "webshop.jsp.manager.pay.update");
        }
      }
    } catch (SQLException e) {
      e.printStackTrace();
      throw new ServletException();
    } catch (NamingException e) {
      e.printStackTrace();
      throw new ServletException();
    // EDBTG003-00 elecs-tani add start
    } catch (SIDBAccessException e) {
        e.printStackTrace();
        throw new ServletException();
    // EDBTG003-00 elecs-tani add end
    } finally {
      databaseConnection.close();
    }
  }
  
  /**
   * <b>deletePaymentTableData</b> データベースにレコードを削除します。(STATUSを無効にする)
   * 
   * @param lConnection DBへのコネクション
   * @param lListCond 削除するデータ
   * @return なし
   * @throws SIDBAccessException
   * @throws SIDuplicateKeyException
   */
  private void deletePaymentTableData(Connection lConnection, SIPayment payment) throws SIDuplicateKeyException, SIDBAccessException {
    SIModifyRec lRec = new SIModifyRec(SIConfig.SITABLE_ORDER_PAYMENT_NAME);
    lRec.addCondition("ORDERCODE", payment.getOrderCode());
    lRec.addCondition("PAYMENTNUMBER", payment.getPaymentNumber());
    lRec.add("STATUS", "1");// ステータス
    lRec.execute(lConnection);
  }
  
  /**
   * <b>updatePaymentTableData</b> データベースにレコードを更新します。
   * 
   * @param lConnection DBへのコネクション
   * @param lListCond 削除するデータ
   * @return なし
   * @throws SIDBAccessException
   * @throws SIDuplicateKeyException
   */
  private void updatePaymentTableData(Connection lConnection, SIPayment payment) throws SIDuplicateKeyException, SIDBAccessException {
    SIModifyRec lRec = new SIModifyRec(SIConfig.SITABLE_ORDER_PAYMENT_NAME);
    lRec.addCondition("ORDERCODE", payment.getOrderCode());
    lRec.addCondition("PAYMENTNUMBER", payment.getPaymentNumber());
    for (int i = 0; i < payment.getPaymentNumberUpdate().length; i++) {
      if (payment.getPaymentNumber().equals(payment.getPaymentNumberUpdate()[i])) {
        lRec.add("PAYMENTPRICE", payment.getPaymentPriceUpdate()[i]);// 入金金額
        lRec.add("PAYMENTFEE", payment.getPaymentFeeUpdate()[i]);// 入金手数料
        lRec.add("PAYMENTTYPE", payment.getPaymnetTypeUpdate()[i]);// 入金種別
        lRec.add("EXPECTEDPAYMENTDATE", payment.getExpectedPaymentDateUpdate()[i]);// 入金予定日
        lRec.add("PAYMENTDATE", payment.getPaymentDateUpdate()[i]);// 入金日
        lRec.add("STATUS", "0");
        break;
      }
    }
    lRec.execute(lConnection);
  }
  
  /**
   * <b>updateReceiptDate</b> 受注ヘッダの入金日を更新する
   * 
   * @param lConnection DBへのコネクション
   * @param lListCond 削除するデータ
   * @return なし
   * @throws SIDBAccessException
   * @throws SIDuplicateKeyException
   * @throws SQLException
   */
  private void updateReceiptDate(Connection lConnection, SIPayment payment) throws SIDuplicateKeyException, SIDBAccessException, SQLException {
    boolean execute = false;
    String totalPaymentPrice = "0";
    try {
      totalPaymentPrice = SIDBUtil.getFirstData(lConnection, "SELECT TOTALPAYMENTPRICE FROM PAYMENTVW WHERE ORDERCODE=" + SIDBUtil.SQL2Str(payment.getOrderCode()));
    } catch (SIDBAccessException e) {
      e.printStackTrace();
    }
    if (SIUtil.isNotNull(totalPaymentPrice) && (Long.parseLong(totalPaymentPrice) >= Long.parseLong(payment.getTotalPrice()))) {
      execute = true;
    }
    if (execute && SIUtil.isNotNull(payment.getOrderCode())) {
      String maxPaymentDate = SIDBUtil.getFirstData(lConnection,"SELECT CASE WHEN maxpaymentdate IS NULL THEN current_date ELSE maxpaymentdate END FROM paymentvw WHERE ordercode=" + SIDBUtil.SQL2Str(payment.getOrderCode()));
      SIModifyRec lRec = new SIModifyRec();
      lRec = new SIModifyRec(SIConfig.SITABLE_ORDER_NAME);
      lRec.addCondition("OrderCode", payment.getOrderCode());// 受注コード
      lRec.add("ReceiptDate", maxPaymentDate);// 入金日
      lRec.execute(lConnection);
      
      // ポイント使用区分の変更
      SIPointMan.changeEnableFlg(lConnection, payment.getOrderCode());
    } else {
      SIModifyRec lRec = new SIModifyRec();
      lRec = new SIModifyRec(SIConfig.SITABLE_ORDER_NAME);
      lRec.addCondition("OrderCode", payment.getOrderCode());// 受注コード
      lRec.add("ReceiptDate", "");// 入金日
      lRec.execute(lConnection);
      
      // ポイント使用区分の変更
      SIPointMan.changeEnableFlg(lConnection, payment.getOrderCode());
    }
  }
  
  /**
   * <b>updateTableData</b> データベースにレコードを更新します。(領収書発行日)
   * 
   * @param lConnection DBへのコネクション
   * @param lListCond 削除するデータ
   * @return なし
   * @throws SIDBAccessException
   * @throws SIDuplicateKeyException
   */
  private void updateReceiptTableData(Connection lConnection, UIPayListCond payList, String actionName) throws SIDuplicateKeyException, SIDBAccessException {
    SIModifyRec lRec = null;
    SISpcType lSpcType = new SISpcType();
    String paymentNumber = new String();
    
    lSpcType = new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp");
    paymentNumber = payList.getPaymentNumberHid()[Integer.parseInt(payList.getPaymentNumberChk()[0])];
    lRec = new SIModifyRec(SIConfig.SITABLE_ORDER_PAYMENT_NAME);
    lRec.addCondition("ORDERCODE", payList.getOrderCodeTxt());
    lRec.addCondition("PAYMENTNUMBER", paymentNumber);
    lRec.add("receiptissueddate", lSpcType);// 請求書発行日
    lRec.execute(lConnection);
  }
  
  /**
   * <b>updateTableData</b> データベースにレコードを更新します。(請求書発行日)
   * 
   * @param lConnection DBへのコネクション
   * @param lListCond 削除するデータ
   * @return なし
   * @throws SIDBAccessException
   * @throws SIDuplicateKeyException
   */
  private void updateBillTableData(Connection lConnection, UIPayListCond payList, String actionName) throws SIDuplicateKeyException, SIDBAccessException {
    SIModifyRec lRec = null;
    SISpcType lSpcType = new SISpcType();
    SIPayment payment = null;
    lSpcType = new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp");
    Collection coll = payList.getCollection(lConnection, payList.getOrderCodeTxt());
    Iterator it = coll.iterator();
    while (it.hasNext()) {
      payment = (SIPayment) it.next();
      lRec = new SIModifyRec(SIConfig.SITABLE_ORDER_PAYMENT_NAME);
      lRec.addCondition("ORDERCODE", payment.getOrderCode());
      lRec.addCondition("PAYMENTNUMBER", payment.getPaymentNumber());
      lRec.addCondition("PAYMENTDATE", "");
      lRec.add("billissueddate", lSpcType);// 請求書発行日
      lRec.execute(lConnection);
    }
  }
  private void updateBillTableDataList(Connection lConnection, UIPayListCond payList, String actionName) throws SIDuplicateKeyException, SIDBAccessException {
    SIModifyRec lRec = null;
    SISpcType lSpcType = new SISpcType();
    SIPayment payment = null;
    lSpcType = new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp");
    for (int i=0;i<payList.getOrderCodeChk().length;i++) {
      Collection coll = payList.getCollection(lConnection, payList.getOrderCodeHid()[Integer.parseInt(payList.getOrderCodeChk()[i])]);
      Iterator it = coll.iterator();
      while (it.hasNext()) {
        payment = (SIPayment) it.next();
        lRec = new SIModifyRec(SIConfig.SITABLE_ORDER_PAYMENT_NAME);
        lRec.addCondition("ORDERCODE", payment.getOrderCode());
        lRec.addCondition("PAYMENTNUMBER", payment.getPaymentNumber());
        lRec.addCondition("PAYMENTDATE", "");
        lRec.add("billissueddate", lSpcType);// 請求書発行日
        lRec.execute(lConnection);
      }
    }
  }
  
  /**
   * <b>insertPaymentTableData</b> データベースにレコードを登録します。
   * 
   * @param lConnection DBへのコネクション
   * @param lListCond 削除するデータ
   * @return なし
   * @throws SIDBAccessException
   * @throws SIDuplicateKeyException
   */
  private void insertPaymentTableData(Connection lConnection, SIPayment payment) throws SIDuplicateKeyException, SIDBAccessException {
    SIInsertRec lRec = new SIInsertRec(SIConfig.SITABLE_ORDER_PAYMENT_NAME);
    lRec.add("ORDERCODE", payment.getOrderCode());
    lRec.add("PAYMENTNUMBER", payment.getPaymentNumber(lConnection));
    lRec.add("PAYMENTPRICE", payment.getPaymentPrice());// 入金金額
    lRec.add("PAYMENTFEE", payment.getPaymentFee());// 入金手数料
    lRec.add("PAYMENTTYPE", payment.getPaymnetType());// 入金種別
    lRec.add("EXPECTEDPAYMENTDATE", new SIDateTimeType(payment.getExpectedPaymentDate()));// 入金予定日
    if (SIUtil.isNotNull(payment.getPaymentDate())) {
      lRec.add("PAYMENTDATE", payment.getPaymentDate());// 入金日
    }
    lRec.add("STATUS", "0");
    lRec.execute(lConnection);
  }
  
  /**
   * <b>refreshOrderFirst</b> 受注データを設定する
   * 
   * @param lRequest
   * @param lConnection DBへのコネクション
   * @param lUrlParam
   * @return なし
   * @throws なし
   */
  private void refreshOrderFirst(HttpServletRequest lRequest, Connection lConnection, SIURLParameter lUrlParam, boolean firstflg) {
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    HttpSession session = lRequest.getSession(true);// セッションの取得
    
    // 受注情報オブジェクト
    UIRegOrder refreshRegOrder = new UIRegOrder();
    refreshRegOrder.init(lRequest, lUrlParam);
    int exSumOfB1 = 0;
    int exSumOfB2 = 0;
    
    if (true) {
      // 受注情報のセット
      refreshRegOrder.reset(lRequest, lConnection);
      session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_NAME, refreshRegOrder);
      
      // 顧客情報オブジェクト
      UIRegUpdateOrderUserLogin newOrderUserLogin = new UIRegUpdateOrderUserLogin();
      newOrderUserLogin.init(lRequest, lConnection, lUrlParam, refreshRegOrder.getCustCode());
      
      // カートオブジェクト
      UIMain mainID = new UIMain();
      
      Statement lStatement = null;
      ResultSet lResultSet = null;
      // EDBTG003-00 elecs-matsushima add start
      Statement lStatement2 = null;
      ResultSet lResultSet2 = null;
      // EDBTG003-00 elecs-matsushima add end
      
      // 該当受注の検索
      StringBuffer lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT * ");
      lSqlBuf.append(" FROM ").append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME).append(" aa ");
      lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode()));
      if (lLogin.isShop()) {
        lSqlBuf.append(" AND aa.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
      }
      // EDBTG003-00 elecs-matsushima add start
//      lSqlBuf.append(" ORDER BY aa.SHOPCODE, aa.CMDTYCODE");
      lSqlBuf.append(" ORDER BY aa.SHOPCODE, aa.SETCODE, aa.SETDETAILCODE, aa.CMDTYCODE, aa.INDIVIDUALCODE");
      // EDBTG003-00 elecs-matsushima add end
      
      try {
        log.debug("readData:lSql=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        // EDBTG003-00 elecs-matsushima mod start
//        while (lResultSet.next()) {
//          mainID = new UIMain();
//          mainID.setCartShopCodeTxt(lResultSet.getString("SHOPCODE"));
//          mainID.setCartCmdtyCodeTxt(lResultSet.getString("CMDTYCODE"));
//          mainID.setCartIndividualCodeTxt(lResultSet.getString("individualCode"));
//          mainID.setCartStndrdCodeTxt1(lResultSet.getString("STNDRDCODE1"));// 規格1
//          mainID.setCartStndrdCodeTxt2(lResultSet.getString("STNDRDCODE2"));// 規格2
//          mainID.setCartElementCodeTxt1(lResultSet.getString("ELEMENTCODE1"));// カートエレメント1
//          mainID.setCartElementCodeTxt2(lResultSet.getString("ELEMENTCODE2"));// カートエレメント2
//          mainID.setCartAmountTxt(lResultSet.getString("AMOUNT"));
//          // カートに追加
//          mainID.addCart(lRequest, lConnection, false);
//        }
        
        // データを設定する。
        LinkedHashMap orderDetailMap = new LinkedHashMap();
        
        while (lResultSet.next()) {
          if (lResultSet.getString("SETDETAILFLG").equals(SIConfig.SET_DETAIL_FLG_NORMAL)) { // 通常品
            String keyMap = "";
            keyMap += lResultSet.getString("SHOPCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("CMDTYCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("individualCode") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("STNDRDCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("ELEMENTCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("STNDRDCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("ELEMENTCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("SETCODE") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("SETCODE");
            
            SICartCmdty cartCmdty = new SICartCmdty();
            cartCmdty.setShopCode(lResultSet.getString("SHOPCODE"));
            cartCmdty.setCmdtyCode(lResultSet.getString("CMDTYCODE"));
            cartCmdty.setIndividualCode(lResultSet.getString("individualCode"));
            cartCmdty.setStndrdCode1(lResultSet.getString("STNDRDCODE1"));// 規格1
            cartCmdty.setStndrdCode2(lResultSet.getString("STNDRDCODE2"));// 規格2
            cartCmdty.setElementCode1(lResultSet.getString("ELEMENTCODE1"));// カートエレメント1
            cartCmdty.setElementCode2(lResultSet.getString("ELEMENTCODE2"));// カートエレメント2
            cartCmdty.setAmount(lResultSet.getString("AMOUNT"));
            cartCmdty.setSetDetailFlg(lResultSet.getString("SETDETAILFLG"));
            cartCmdty.setSetCode(lResultSet.getString("SETCODE"));
            cartCmdty.setSetCmdtyCode(lResultSet.getString("SETCMDTYCODE"));
            cartCmdty.setSetIndividualCode(lResultSet.getString("SETINDIVIDUALCODE"));
            cartCmdty.setSetDetailCode(lResultSet.getString("SETDETAILCODE"));
            if (SIUtil.isNull(cartCmdty.getSetDetailCode())) cartCmdty.setSetDetailCode("");
            cartCmdty.setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_NORMAL);
            cartCmdty.setOldSetCode(lResultSet.getString("SETCODE"));
            
            orderDetailMap.put(keyMap, cartCmdty);
          } else {
            String keyMap = "";
            keyMap += lResultSet.getString("SHOPCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("setcmdtycode") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("setindividualcode") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("STNDRDCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("ELEMENTCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("STNDRDCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("ELEMENTCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
            keyMap += lResultSet.getString("SETCODE") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("SETCODE");
            
            SICartCmdty cartCmdty = (SICartCmdty) orderDetailMap.get(keyMap);
            
            if (cartCmdty == null) {
              cartCmdty = new SICartCmdty();
              String shopCodeTmp = lResultSet.getString("shopcode");
              
              StringBuffer sql = new StringBuffer();
              sql.append("SELECT aa.*, bb.* FROM ordersetcmdtytbl aa, cmdtyunittbl bb ");
              sql.append(" WHERE aa.setcmdtycode = bb.cmdtycode ");
              sql.append(" AND aa.setindividualcode=bb.individualcode ");
              sql.append(" AND bb.SHOPCODE=").append(SIDBUtil.SQL2Str(shopCodeTmp));
              sql.append(" AND aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode()));
              sql.append(" AND aa.orderbranchcode=").append(SIDBUtil.SQL2Str(lResultSet.getString("orderbranchcode")));
              sql.append(" AND aa.setcode=").append(SIDBUtil.SQL2Str(lResultSet.getString("setcode")));
              sql.append(" AND aa.setcmdtycode=").append(SIDBUtil.SQL2Str(lResultSet.getString("setcmdtycode")));
              sql.append(" AND aa.setindividualcode=").append(SIDBUtil.SQL2Str(lResultSet.getString("setindividualcode")));
              
              try {
                  lStatement2 = lConnection.createStatement();
                  lResultSet2 = lStatement2.executeQuery(sql.toString());
                  
                  if (lResultSet2.next()){
                    // 親情報を取得する。
                    cartCmdty.setShopCode(shopCodeTmp);
                    cartCmdty.setCmdtyCode(lResultSet2.getString("CMDTYCODE"));
                    cartCmdty.setIndividualCode(lResultSet2.getString("individualCode"));
                    cartCmdty.setAmount(lResultSet2.getString("setamount"));
                    cartCmdty.setCmdtyCompositionFlg(SIConfig.CMDTY_COMPOSITION_VARIATION_SET); // 構成品は変動として設定
                    cartCmdty.setSetDiscountPrice(lResultSet2.getString("setdiscount"));
                    cartCmdty.setOldSetCode(lResultSet.getString("SETCODE"));
                  }
                } catch (SQLException sqle) {
                  throw sqle;
                } finally {
                   SIDBUtil.close(lStatement2, lResultSet2);
                }
            }
            
            String compKey = cartCmdty.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + cartCmdty.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                             + cartCmdty.getIndividualCode();
            
            Collection composition = new ArrayList();
            if (cartCmdty.getCartsCmdtyCompositionDetailMap() == null) {
              cartCmdty.setCartsCmdtyCompositionDetailMap(new LinkedHashMap());
            } else {
              composition = (Collection) cartCmdty.getCartsCmdtyCompositionDetailMap().get(compKey);
              if (composition == null) composition = new ArrayList();
            }
            
            // 子情報を設定
            String getSetDetailFlg = lResultSet.getString("SETDETAILFLG");
            String cmdtySetAmount = SIUtil.div(lResultSet.getString("AMOUNT"), cartCmdty.getAmount());
            
            String setCmdtyKeyName = lResultSet.getString("shopcode") + SIConfig.SIWEBSHOPPING_TOKEN
                                     + lResultSet.getString("CMDTYCODE") + SIConfig.SIWEBSHOPPING_TOKEN
                                     + lResultSet.getString("individualCode") + SIConfig.SIWEBSHOPPING_TOKEN
                                     + cmdtySetAmount + SIConfig.SIWEBSHOPPING_TOKEN
                                     + getSetDetailFlg;
            composition.add(setCmdtyKeyName);
            cartCmdty.getCartsCmdtyCompositionDetailMap().put(compKey, composition);
            orderDetailMap.put(keyMap, cartCmdty);
          }
        }
        // カート投入
        addCartOrderDetail(lRequest, lConnection, orderDetailMap, mainID);
        // EDBTG003-00 elecs-matsushima mod end
      } catch (SQLException sqle) {
        sqle.printStackTrace();
      // EDBTG003-00 elecs-matsushima add start
      } catch (SIFatalException e) {
        e.printStackTrace();
      // EDBTG003-00 elecs-matsushima add end
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      
      // ギフトフラグ取得
      String lGiftFlg = "0";
      
      if (SIConfig.SIRUNNING_MODE_CURRENT == SIConfig.SIRUNNING_MODE_INDIVIDUAL && lLogin.isShop()) {
        lSqlBuf = new StringBuffer("SELECT GIFTFLG FROM MALLSHOPVW WHERE MALLSHOPCODE=");
        lSqlBuf.append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
        try {
          log.debug("readData:lSql=" + lSqlBuf.toString());
          
          lStatement = lConnection.createStatement();
          lResultSet = lStatement.executeQuery(lSqlBuf.toString());
          
          if (lResultSet.next()) {
            lGiftFlg = lResultSet.getString("GIFTFLG");
          }
        } catch (SQLException sqle) {
          sqle.printStackTrace();
        } finally {
          SIDBUtil.close(lStatement, lResultSet);
        }
        
        // モール管理者がログインしている場合
      } else if (lLogin.isMall()) {
        lGiftFlg = SIConfig.SIMALL.getGiftFlg();
      }
      
      // 受注明細取得
      LinkedHashMap detailMap = new LinkedHashMap();
      SIOrderDetail lOrderDetail = new SIOrderDetail();
      
      // EDBTG003-00 elecs-matsushima add start
      Map setCmdtyKeyMap = new HashMap(); // セット情報キー
      // EDBTG003-00 elecs-matsushima add end
      
      lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT aa.* ");
      lSqlBuf.append(",bb.DELIVERYTYPENAME, bb.DELIVERYTYPECODE, bb.ADDRESSCODE ");
      lSqlBuf.append(",dd.purchaseprice, dd.processingexpence ");
      lSqlBuf.append(" FROM ORDERDETAILVW aa ");
      lSqlBuf.append(" INNER JOIN ORDERDELIVERYVW bb ");
      lSqlBuf.append(" ON aa.ORDERCODE = bb.ORDERCODE AND aa.DELIVERYCODE = bb.DELIVERYCODE ");
      lSqlBuf.append(" INNER JOIN (SELECT x.ordercode,x.deliverycode,x.detailcode,x.purchaseprice,x.processingexpence FROM orderdetailtbl x,ordertbl y");
      lSqlBuf.append(" WHERE x.ordercode=y.ordercode and x.orderbranchcode=y.orderbranchcode and y.enabledflg='1') dd ");
      lSqlBuf.append(" ON aa.ORDERCODE = dd.ORDERCODE AND aa.DELIVERYCODE = dd.DELIVERYCODE AND aa.DETAILCODE = dd.DETAILCODE ");
      lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode()));
      if (lLogin.isShop()) {
        lSqlBuf.append("   AND aa.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
      }
      // EDBTG003-00 elecs-matsushima mod start
      //lSqlBuf.append(" ORDER BY aa.SHOPCODE, bb.DELIVERYTYPECODE, bb.ADDRESSCODE, aa.CMDTYCODE");
      lSqlBuf.append(" ORDER BY aa.SHOPCODE, aa.SETCODE, aa.SETDETAILCODE, bb.DELIVERYTYPECODE, bb.ADDRESSCODE, aa.CMDTYCODE, aa.INDIVIDUALCODE");
      // EDBTG003-00 elecs-matsushima mod end
      
      try {
        log.debug("readData:lSql=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        while (lResultSet.next()) {
          lOrderDetail = new SIOrderDetail();
          lOrderDetail.setEncode(SIConfig.SIENCODE_NONE);
          
          String lDeliveryCode = "";
          lDeliveryCode += lResultSet.getString("ADDRESSCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDeliveryCode += lResultSet.getString("DELIVERYTYPENAME") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDeliveryCode += lResultSet.getString("SHOPCODE");
          
          String lDatailCode = "";
          lDatailCode += lResultSet.getString("SHOPCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("CMDTYCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("individualcode") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("STNDRDCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("ELEMENTCODE1") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE1") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("STNDRDCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("STNDRDCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("ELEMENTCODE2") == null ? SIConfig.SIWEBSHOPPING_TOKEN : lResultSet.getString("ELEMENTCODE2") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDatailCode += lResultSet.getString("ADDRESSCODE");
          //EDBTG003-00 add start
          lDatailCode += lResultSet.getString("SETCODE") == null ? SIConfig.SIWEBSHOPPING_TOKEN + "0" : SIConfig.SIWEBSHOPPING_TOKEN + lResultSet.getString("SETCODE");
          lDatailCode += lResultSet.getString("setdetailcode") == null ? SIConfig.SIWEBSHOPPING_TOKEN : SIConfig.SIWEBSHOPPING_TOKEN + lResultSet.getString("setdetailcode");
          //EDBTG003-00 add end
          
          lOrderDetail.setDeliveryCode(lDeliveryCode); // 配送先コード
          lOrderDetail.setDetailCode(lDatailCode); // 受注詳細コード
          lOrderDetail.setShopCode(lResultSet.getString("SHOPCODE")); // ショップコード
          lOrderDetail.setCmdtyCode(lResultSet.getString("CMDTYCODE")); // 商品コード
          lOrderDetail.setIndividualCode(lResultSet.getString("individualcode"));// 在庫コード
          lOrderDetail.setShopName(lResultSet.getString("SHOPNAME")); // ショップ名
          lOrderDetail.setCmdtyName(lResultSet.getString("CMDTYNAME")); // 商品名
          lOrderDetail.setStndrdCode1(lResultSet.getString("STNDRDCODE1")); // 規格1
          lOrderDetail.setStndrdName1(lResultSet.getString("STNDRDNAME1")); // 規格1名
          lOrderDetail.setElementCode1(lResultSet.getString("ELEMENTCODE1"));// エレメント1
          lOrderDetail.setElementName1(lResultSet.getString("ELEMENTNAME1"));// エレメント1名
          lOrderDetail.setStndrdCode2(lResultSet.getString("STNDRDCODE2")); // 規格2
          lOrderDetail.setStndrdName2(lResultSet.getString("STNDRDNAME2")); // 規格2名
          lOrderDetail.setElementCode2(lResultSet.getString("ELEMENTCODE2"));// エレメント2
          lOrderDetail.setElementName2(lResultSet.getString("ELEMENTNAME2"));// エレメント2名
          lOrderDetail.setAmount(lResultSet.getString("AMOUNT")); // 数量
          lOrderDetail.setOrgPrice(lResultSet.getString("ORGPRICE")); // 本体値段
          lOrderDetail.setPrice(lResultSet.getString("PRICE")); // 値引き後の購入値段
          lOrderDetail.setTaxFlg(lResultSet.getString("TAXFLG")); // 税フラグ
          lOrderDetail.setTaxRate(lResultSet.getString("TAXRATE")); // 税率
          lOrderDetail.setCmdtySize(lResultSet.getString("CMDTYSIZE")); // 商品サイズ
          lOrderDetail.setWrappingCode(lResultSet.getString("WRAPPINGCODE"));// ラッピングコード
          lOrderDetail.setWrappingName(lResultSet.getString("WRAPPINGNAME"));// ラッピング名
          lOrderDetail.setWrappingPrice(lResultSet.getString("WRAPPINGPRICE"));// ラッピング価格
          lOrderDetail.setWrappingTaxFlg(lResultSet.getString("WRAPPINGTAXFLG"));// ラッピング税フラグ
          lOrderDetail.setShopGiftFlg(lGiftFlg); // ショップギフトフラグ
          lOrderDetail.setDeliveryTypeCode(lResultSet.getString("DELIVERYTYPECODE"));// 配送種別コード
          lOrderDetail.setDeliveryTypeName(lResultSet.getString("DELIVERYTYPENAME"));// 配送種別名称
          lOrderDetail.setPriceIncTax(lResultSet.getString("PRICEINCTAX")); // 消費税込みの金額
          lOrderDetail.setBranchCode(lResultSet.getString("branchcode"));
          lOrderDetail.setChargeCode(lResultSet.getString("chargeCode"));
          lOrderDetail.setDeliveryFee(lResultSet.getString("deliveryfee"));
          lOrderDetail.setDeliveryDate(lResultSet.getString("deliveryDate"));
          lOrderDetail.setPurchasePrice(lResultSet.getString("purchaseprice"));// 仕入価格
          lOrderDetail.setProcessingExpance(lResultSet.getString("processingexpence"));// 加工費
          // EDBTG003-00 elecs-matsushima add start
          lOrderDetail.setSetDetailFlg(lResultSet.getString("setdetailflg"));
          lOrderDetail.setSetCode(lResultSet.getString("setcode"));
          if (SIUtil.isNull(lOrderDetail.getSetCode())) lOrderDetail.setSetCode("0");
          lOrderDetail.setSetCmdtyCode(lResultSet.getString("setcmdtycode"));
          lOrderDetail.setSetIndividualCode(lResultSet.getString("setindividualcode"));
          lOrderDetail.setSetDetailCode(lResultSet.getString("setdetailcode"));
          if (SIUtil.isNull(lOrderDetail.getSetDetailCode())) lOrderDetail.setSetDetailCode("");
          lOrderDetail.setOrderDetailCode(lResultSet.getString("detailcode"));
          // EDBTG003-00 elecs-matsushima add start
          detailMap.put(lDatailCode, lOrderDetail);
          
          // EDBTG003-00 elecs-matsushima add start
          // セット情報を取得
          if (!lResultSet.getString("setdetailflg").equals(SIConfig.SET_DETAIL_FLG_NORMAL)) {
            SIOrderDetail orderSetDetail = new SIOrderDetail();
            orderSetDetail.setOrderCode(lResultSet.getString("ORDERCODE")); // 受注番号
            orderSetDetail.setOrderBranchCode(lResultSet.getString("ORDERBRANCHCODE")); // 受注番号枝番
            orderSetDetail.setShopCode(lResultSet.getString("SHOPCODE")); // ショップコード
            orderSetDetail.setSetDetailFlg(lResultSet.getString("setdetailflg"));// 商品構成フラグ
            orderSetDetail.setSetCode(lResultSet.getString("setcode"));// セット番号
            orderSetDetail.setSetCmdtyCode(lResultSet.getString("setcmdtycode"));// セット商品コード
            orderSetDetail.setSetIndividualCode(lResultSet.getString("setindividualcode"));// セット在庫コード
            
            String mapKey = lResultSet.getString("ORDERCODE") + "~"
                          + lResultSet.getString("ORDERBRANCHCODE") + "~"
                          + lResultSet.getString("SHOPCODE") + "~"
                          + lResultSet.getString("SETCODE") + "~"
                          + lResultSet.getString("SETCMDTYCODE") + "~"
                          + lResultSet.getString("SETINDIVIDUALCODE");
            setCmdtyKeyMap.put(mapKey, orderSetDetail);
          }
          // EDBTG003-00 elecs-matsushima add end
        }
      } catch (SQLException sqle) {
        sqle.printStackTrace();
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMap);
      
      // 配送先情報取得
      LinkedHashMap deliveryMap = new LinkedHashMap();
      SIOrderDelivery lOrderDelivery = new SIOrderDelivery();
      
      lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT aa.*, bb.SHOPCODE, bb.SHOPNAME ");
      lSqlBuf.append(" FROM ").append(SIConfig.SIVIEW_ORDER_DELIVERY_LATEST_NAME).append(" aa ");
      lSqlBuf.append(" INNER JOIN ").append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME).append(" bb ");
      lSqlBuf.append(" ON aa.ORDERCODE = bb.ORDERCODE AND aa.DELIVERYCODE = bb.DELIVERYCODE AND bb.DETAILCODE='1' ");
      if (lLogin.isShop()) {
        lSqlBuf.append(" AND bb.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode()));
      }
      lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode()));
      lSqlBuf.append(" ORDER BY aa.DELIVERYCODE");
      
      try {
        log.debug("readData:lSql=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        int i = 0;
        while (lResultSet.next()) {
          lOrderDelivery = new SIOrderDelivery();
          lOrderDelivery.setEncode(SIConfig.SIENCODE_NONE);
          
          String lDeliveryCode = "";
          lDeliveryCode += lResultSet.getString("ADDRESSCODE") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDeliveryCode += lResultSet.getString("DELIVERYTYPENAME") + SIConfig.SIWEBSHOPPING_TOKEN;
          lDeliveryCode += lResultSet.getString("SHOPCODE");
          
          lOrderDelivery.setDeliveryCode(lDeliveryCode);
          lOrderDelivery.setDeliveryName(lResultSet.getString("DELIVERYNAME")); // 配送先呼称
          lOrderDelivery.setDeliveryAddressee(lResultSet.getString("DELIVERYADDRESSEE"));// 配送先宛名
          lOrderDelivery.setEmail(lResultSet.getString("EMAIL")); // メール
          lOrderDelivery.setPostCode1(lResultSet.getString("POSTCODE1")); // 郵便番号1
          lOrderDelivery.setPostCode2(lResultSet.getString("POSTCODE2")); // 郵便番号2
          lOrderDelivery.setAddress1(lResultSet.getString("ADDRESS1")); // 配送先住所1
          lOrderDelivery.setAddress2(lResultSet.getString("ADDRESS2")); // 配送先住所2
          lOrderDelivery.setAddress3(lResultSet.getString("ADDRESS3")); // 配送先住所3
          lOrderDelivery.setCompanyName(lResultSet.getString("COMPANYNAME")); // 会社名
          lOrderDelivery.setTel(lResultSet.getString("TEL")); // 連絡先電話番号
          lOrderDelivery.setFax(lResultSet.getString("FAX")); // 連絡先FAX番号
          lOrderDelivery.setCustCompanyFlg(lResultSet.getString("CUSTCOMPANYFLG")); // 個人法人フラグ
          lOrderDelivery.setAddressCode(lResultSet.getString("ADDRESSCODE")); // アドレス帳コード
          lOrderDelivery.setDeliveryFee(lResultSet.getString("DELIVERYFEE"));
          lOrderDelivery.setDeliveryTaxFlg(lResultSet.getString("DELIVERYTAXFLG"));
          lOrderDelivery.setTaxRate(lResultSet.getString("TAXRATE"));
          lOrderDelivery.setShopCode(lResultSet.getString("SHOPCODE"));
          lOrderDelivery.setShopName(lResultSet.getString("SHOPNAME"));
          lOrderDelivery.setDeliveryTypeCode(lResultSet.getString("DELIVERYTYPECODE"));
          lOrderDelivery.setDeliveryTypeName(lResultSet.getString("DELIVERYTYPENAME"));
          
          if (i == 0) {
            exSumOfB1 = lResultSet.getInt("DELIVERYFEE");
          } else if (i == 1) {
            exSumOfB2 = lResultSet.getInt("DELIVERYFEE");
          }
          i++;
          deliveryMap.put(lDeliveryCode, lOrderDelivery);
        }
      } catch (SQLException sqle) {
        sqle.printStackTrace();
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      session.setAttribute(SIConfig.SISESSION_CART_DELIVERY_NAME, deliveryMap);
      
      // 商品別明細
      LinkedHashMap orderCmdtyMap = new LinkedHashMap();
      SIOrderCmdty lOrderCmdty = new SIOrderCmdty();
      
      lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT aa.ORDERCODE, aa.SHOPCODE, aa.SHOPNAME, aa.CMDTYCODE, aa.CMDTYNAME ");
      lSqlBuf.append(",aa.STNDRDCODE1, aa.ELEMENTCODE1, aa.STNDRDCODE2, aa.ELEMENTCODE2 ");
      lSqlBuf.append(",aa.STNDRDNAME1, aa.ELEMENTNAME1, aa.STNDRDNAME2, aa.ELEMENTNAME2 ");
      lSqlBuf.append(",aa.ORGPRICE, aa.PRICE, SUM(aa.AMOUNT) AS AMOUNT, aa.TAXFLG, aa.TAXRATE ");
      lSqlBuf.append(" FROM ORDERDETAILVW").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa ");
      lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(refreshRegOrder.getOrderCode(), " "));
      if (lLogin.isShop()) {
        lSqlBuf.append("AND aa.SHOPCODE=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode(), ""));
      }
      lSqlBuf.append(" GROUP BY aa.ORDERCODE, aa.SHOPCODE, aa.SHOPNAME, aa.CMDTYCODE, aa.CMDTYNAME");
      lSqlBuf.append(",aa.STNDRDCODE1, aa.ELEMENTCODE1, aa.STNDRDCODE2, aa.ELEMENTCODE2");
      lSqlBuf.append(",aa.STNDRDNAME1, aa.ELEMENTNAME1, aa.STNDRDNAME2, aa.ELEMENTNAME2");
      lSqlBuf.append(",aa.ORGPRICE, aa.PRICE, aa.TAXFLG, aa.TAXRATE ");
      lSqlBuf.append(" ORDER BY aa.CMDTYCODE, aa.SHOPCODE");
      
      try {
        log.debug("getConnection:lSqlBuf=" + lSqlBuf.toString());
        
        lStatement = lConnection.createStatement();
        lResultSet = lStatement.executeQuery(lSqlBuf.toString());
        
        int ii = 0;
        
        while (lResultSet.next()) {
          ii++;
          lOrderCmdty = new SIOrderCmdty();
          lOrderCmdty.setEncode(SIConfig.SIENCODE_NONE);
          lOrderCmdty.setOrderCode(lResultSet.getString("ORDERCODE")); // 受注番号
          lOrderCmdty.setShopCode(lResultSet.getString("SHOPCODE"));
          lOrderCmdty.setShopName(lResultSet.getString("SHOPNAME"));
          lOrderCmdty.setCmdtyCode(lResultSet.getString("CMDTYCODE"));
          lOrderCmdty.setCmdtyName(lResultSet.getString("CMDTYNAME"));
          lOrderCmdty.setStndrdCode1(lResultSet.getString("STNDRDCODE1"));
          lOrderCmdty.setStndrdName1(lResultSet.getString("STNDRDNAME1"));
          lOrderCmdty.setElementCode1(lResultSet.getString("ELEMENTCODE1"));
          lOrderCmdty.setElementName1(lResultSet.getString("ELEMENTNAME1"));
          lOrderCmdty.setStndrdCode2(lResultSet.getString("STNDRDCODE2"));
          lOrderCmdty.setStndrdName2(lResultSet.getString("STNDRDNAME2"));
          lOrderCmdty.setElementCode2(lResultSet.getString("ELEMENTCODE2"));
          lOrderCmdty.setElementName2(lResultSet.getString("ELEMENTNAME2"));
          lOrderCmdty.setAmount(lResultSet.getString("AMOUNT"));
          lOrderCmdty.setOrgPrice(lResultSet.getString("ORGPRICE"));
          lOrderCmdty.setPrice(lResultSet.getString("PRICE"));
          lOrderCmdty.setTaxFlg(lResultSet.getString("TAXFLG"));
          lOrderCmdty.setTaxRate(lResultSet.getString("TAXRATE"));// 税率
          
          // 消費税込みの金額の算出、セット
          String lCalcPrice = "0";
          if (lOrderCmdty.getTaxFlg().equals("1")) {
            lCalcPrice = SITax.calcPriceIncTax(lOrderCmdty.getPrice(), lOrderCmdty.getTaxRate());
          } else {
            lCalcPrice = lOrderCmdty.getPrice();
          }
          lOrderCmdty.setPriceIncTax(lCalcPrice);
          orderCmdtyMap.put(new Integer(ii).toString(), lOrderCmdty);
        }
        session.setAttribute(SIConfig.SISESSION_MAN_ORDER_EDIT_DTIL_NAME, orderCmdtyMap);
      } catch (SQLException e) {
        e.printStackTrace();
      } finally {
        SIDBUtil.close(lStatement, lResultSet);
      }
      
      // EDBTG003-00 elecs-matsushima add start
      Map setCmdtyMap = new LinkedHashMap();
      
      Iterator iteSetCmdtyKeyMap = setCmdtyKeyMap.keySet().iterator();
      while (iteSetCmdtyKeyMap.hasNext()){
        SIOrderDetail orderCmdtyDetail = (SIOrderDetail) setCmdtyKeyMap.get(iteSetCmdtyKeyMap.next());
        if (orderCmdtyDetail != null){
          
          // セットデータ
          lSqlBuf = new StringBuffer();
          lSqlBuf.append("SELECT aa.ORDERCODE, aa.ORDERBRANCHCODE, aa.SETCODE, aa.SETCMDTYCODE, aa.SETINDIVIDUALCODE ");
          lSqlBuf.append(",aa.CMDTYNAME, aa.SETDISCOUNT, aa.SETAMOUNT ");
          lSqlBuf.append(" FROM ORDERSETCMDTYTBL").append(SIDBMultiConf.SIALIAS_CURR_NAME).append("aa ");
          lSqlBuf.append(" WHERE aa.ORDERCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getOrderCode(), " "));
          lSqlBuf.append(" AND aa.ORDERBRANCHCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getOrderBranchCode(), " "));
          lSqlBuf.append(" AND aa.SETCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getSetCode(), " "));
          lSqlBuf.append(" AND aa.SETCMDTYCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getSetCmdtyCode(), " "));
          lSqlBuf.append(" AND aa.SETINDIVIDUALCODE=").append(SIDBUtil.SQL2Str(orderCmdtyDetail.getSetIndividualCode(), " "));
          
          try {
            log.debug("getConnection:lSqlBuf=" + lSqlBuf.toString());
            lStatement = lConnection.createStatement();
            lResultSet = lStatement.executeQuery(lSqlBuf.toString());
            
            while (lResultSet.next()) {
              SIOrderSetCmdty setCmdty = new SIOrderSetCmdty();
              setCmdty.setEncode(SIConfig.SIENCODE_NONE);
              setCmdty.setOrderCode(lResultSet.getString("ORDERCODE")); // 受注番号
              setCmdty.setOrderBranchCode(lResultSet.getString("ORDERBRANCHCODE")); // 受注番号枝番
              setCmdty.setSetCode(lResultSet.getString("SETCODE")); // セット番号
              setCmdty.setSetCmdtyCode(lResultSet.getString("SETCMDTYCODE")); // セット商品コード
              setCmdty.setSetIndividualCode(lResultSet.getString("SETINDIVIDUALCODE")); // セット在庫コード
              setCmdty.setCmdtyName(lResultSet.getString("CMDTYNAME")); // セット商品名
              setCmdty.setSetDiscount(lResultSet.getString("SETDISCOUNT")); // セット値引き
              setCmdty.setSetAmount(lResultSet.getString("SETAMOUNT")); // セット数量
              
              // 受注セット品設定
              String setCmdtyKey = setCmdty.getSetCode() + SIConfig.SIWEBSHOPPING_TOKEN
                                 + setCmdty.getSetCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                                 + setCmdty.getSetIndividualCode();
              
              setCmdtyMap.put(setCmdtyKey, setCmdty);
            }
          } catch (SQLException e) {
            e.printStackTrace();
          } finally {
            SIDBUtil.close(lStatement, lResultSet);
          }
        }
      }
      session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, setCmdtyMap);
      LinkedHashMap setCmdtyMaptmp = new LinkedHashMap(setCmdtyMap);
      // EDBTG003-00 elecs-matsushima add end
      
      // 支払条件オブジェクト
      UICasher lCasher = new UICasher();
      lCasher.readData(lRequest, lConnection, lUrlParam, refreshRegOrder.getOrderCode(), refreshRegOrder.getSumOfDiscount(), Integer.toString(exSumOfB1), Integer.toString(exSumOfB2));
      
      SICartDetail.resetDelivery(lRequest, lConnection, lOrderDelivery.getAddressCode(), firstflg);
      session.setAttribute(SIConfig.SISESSION_CART_DETAIL_NAME, detailMap);
      session.setAttribute(SIConfig.SISESSION_CART_SET_CMDTY_NAME, setCmdtyMaptmp); // EDBTG003-00 elecs-matsushima add
      session.setAttribute(SIConfig.SISESSION_CASHER_NAME, lCasher);
      
      // EDBTG003-00 elecs-matsushima add start
      // cartManのソート順がおかしくなり、画面が再描画されなくなるので並び替えてカートに投入する。
      SICartManager cartMan=new SICartManager();
      cartMan.adjustAmount(lRequest,lConnection);
      session.setAttribute(SIConfig.SISESSION_CART_INFO_NAME,cartMan);
      // EDBTG003-00 elecs-matsushima add end
    }
  }
  
  //EDBTG003-00 elecs-matsushima add start
  private void addCartOrderDetail(HttpServletRequest lRequest, Connection lConnection, Map orderDetailMap, UIMain mainID){
    
    for (Iterator iteOrderDetailMap = orderDetailMap.keySet().iterator(); iteOrderDetailMap.hasNext();){
      mainID = new UIMain();
      SICartCmdty cartCmdty = (SICartCmdty) orderDetailMap.get(iteOrderDetailMap.next());
      
      if (cartCmdty.getCmdtyCompositionFlg().equals(SIConfig.CMDTY_COMPOSITION_NORMAL)){
        mainID.setCartShopCodeTxt(cartCmdty.getShopCode());
        mainID.setCartCmdtyCodeTxt(cartCmdty.getCmdtyCode());
        mainID.setCartIndividualCodeTxt(cartCmdty.getIndividualCode());
        mainID.setCartStndrdCodeTxt1(cartCmdty.getStndrdCode1());
        mainID.setCartStndrdCodeTxt2(cartCmdty.getStndrdCode2());
        mainID.setCartElementCodeTxt1(cartCmdty.getElementCode1());
        mainID.setCartElementCodeTxt2(cartCmdty.getElementCode2());
        mainID.setCartAmountTxt(cartCmdty.getAmount());
        mainID.setCmdtyCompositionFlg(cartCmdty.getCmdtyCompositionFlg());
        mainID.setOldSetcode(cartCmdty.getOldSetCode());
      } else {
        mainID.setCartShopCodeTxt(cartCmdty.getShopCode());
        mainID.setCartCmdtyCodeTxt(cartCmdty.getCmdtyCode());
        mainID.setCartIndividualCodeTxt(cartCmdty.getIndividualCode());
        mainID.setCartStndrdCodeTxt1(cartCmdty.getStndrdCode1());
        mainID.setCartStndrdCodeTxt2(cartCmdty.getStndrdCode2());
        mainID.setCartElementCodeTxt1(cartCmdty.getElementCode1());
        mainID.setCartElementCodeTxt2(cartCmdty.getElementCode2());
        mainID.setCartAmountTxt(cartCmdty.getAmount());
        mainID.setSetDiscount(cartCmdty.getSetDiscountPrice());
        mainID.setCmdtyCompositionFlg(cartCmdty.getCmdtyCompositionFlg());
        mainID.setOldSetcode(cartCmdty.getOldSetCode());
        
        String compKey = cartCmdty.getShopCode() + SIConfig.SIWEBSHOPPING_TOKEN
                        + cartCmdty.getCmdtyCode() + SIConfig.SIWEBSHOPPING_TOKEN
                        + cartCmdty.getIndividualCode();
        
        Collection compositionColl = (Collection) cartCmdty.getCartsCmdtyCompositionDetailMap().get(compKey);
        
        Collection groupList = new ArrayList();
        Collection optionList = new ArrayList();
        Collection appendedList = new ArrayList();
        
        for (Iterator iteCompositionColl = compositionColl.iterator(); iteCompositionColl.hasNext();){
          String compositionKey = (String) iteCompositionColl.next();
          String[] compositionKeyList = compositionKey.split(SIConfig.SIWEBSHOPPING_TOKEN);
          
          String compositionDetailKey = compositionKeyList[0] + SIConfig.SIWEBSHOPPING_TOKEN
                                        + compositionKeyList[1] + SIConfig.SIWEBSHOPPING_TOKEN
                                        + compositionKeyList[2] + SIConfig.SIWEBSHOPPING_TOKEN
                                        + compositionKeyList[3];
          
          if (compositionKeyList[4].equals(SIConfig.SET_DETAIL_FLG_COMPOSITION)){
            groupList.add(compositionDetailKey);
          } else if (compositionKeyList[4].equals(SIConfig.SET_DETAIL_FLG_OPTION)){
            optionList.add(compositionDetailKey);
          } else if (compositionKeyList[4].equals(SIConfig.SET_DETAIL_FLG_APPENDED)){
            appendedList.add(compositionDetailKey);
          }
        }
        mainID.setCompositionDetail((String[]) groupList.toArray(new String[0]));
        mainID.setCompositionGroupCount(String.valueOf(groupList.size()));
        mainID.setCompositionAppended((String[]) appendedList.toArray(new String[0]));
        mainID.setCompositionOption((String[]) optionList.toArray(new String[0]));
      }
      
      mainID.addCartPos2(lRequest, lConnection, false, false);
    }
  }
  //EDBTG003-00 elecs-matsushima add end
 
  /**
   * <b>sendMail</b> メール送信
   * 
   * @param request
   * @param lConnection DBへのコネクション
   * @param lListCond データ
   * @return なし
   * @throws SIDBAccessException
   */
  private boolean sendMail(HttpServletRequest request, Connection lConnection, UIPayListCond payList) throws SIDBAccessException {
    SILogin lLogin = SIHTMLUtil.getLogin(request);
    boolean result = true;
    StringBuffer lMailBuf = new StringBuffer();
    SISendMail lSendMail = new SISendMail();
    
    UIRegOrder lRegOrder = new UIRegOrder();
    UIRegOrderDelivery lOrderDelivery = new UIRegOrderDelivery();
    UIRegOrderDetail lRegOrderDetail = new UIRegOrderDetail();
    
    Collection lOrderDeliveryColl = new ArrayList();
    Collection lOrderDetailColl = new ArrayList();
    
    Iterator lOrderDeliveryIta;
    Iterator lOrderDetailIta;
    
    String sumOfA = "0";// 商品の購入価格の合計(税込み)
    String sumOfB = "0";// 送料合計(税込み)
    String sumOfC = "0";// 手数料合計(税込み)
    String sumOfD = "0";// 小計(税込み)
    String sumOfE = "0";// ポイント使用値
    String sumOfF = "0";// 支払額
    String sumOfG = "0";// 値引き額
    String sumOfH = "0";// セット値引き額 //EDBTG003-00 add
    String taxFlgOfA = "0";
    String taxFlgOfB = "0";
    String taxFlgOfC = "0";
    String taxFlgOfD = "0";
    String taxFlgOfE = "0";
    String taxFlgOfF = "0";
    String taxFlgOfG = "0";
    String taxFlgOfH = "0";
    String discountFee = "0";// 手数料調整額
    String discountDeliveryFee = "0";// 送料調整額
    
    String lOrderCode = payList.getOrderCodeTxt();
    
    sumOfA = "0";
    sumOfB = "0";
    sumOfC = "0";
    sumOfD = "0";
    sumOfE = "0";
    sumOfF = "0";
    sumOfG = "0";
    sumOfH = "0";
    taxFlgOfA = "0";
    taxFlgOfB = "0";
    taxFlgOfC = "0";
    taxFlgOfD = "0";
    taxFlgOfE = "0";
    taxFlgOfF = "0";
    taxFlgOfG = "0";
    taxFlgOfH = "0";
    
    try {
      lMailBuf = new StringBuffer();
      lSendMail = new SISendMail();
      boolean sendflg = true;
      // 受注情報取得
      lRegOrder = new UIRegOrder();
      lRegOrder.setOrderCode(lOrderCode);
      lRegOrder.reset(lConnection);
      lRegOrder.setMaxPoint(SIPointMan.getMaxPoint(lConnection, lRegOrder.getCustCode(), lLogin.getMallShopCode()));
      
      lOrderDeliveryColl = lRegOrder.getCollection(lConnection, lLogin);// 配送先リスト
      lOrderDeliveryIta = lOrderDeliveryColl.iterator();
      
      int lDeliveryInx = 0;
      sumOfC = lRegOrder.getFeeIncTax();
      if (taxFlgOfC.equals("0") && !lRegOrder.getFeeTaxFlg().equals("0")) taxFlgOfC = "2";
      
      sumOfE = lRegOrder.getSumByPoint();
      sumOfG = lRegOrder.getSumOfDiscount();
      sumOfH = lRegOrder.getSumOfSetDiscount(); // EDBTG003-00 elecs-tani add
      
      discountFee = lRegOrder.getDiscountFee();
      discountDeliveryFee = lRegOrder.getDiscountDeliveryFee();
      
      // 1.入金確認メールで入金日が設定されていないときは設定する。
      // if(lListCond.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_RECEIPT_COMFIRM)&& SIUtil.isNull(lRegOrder.getReceiptDate())){
      // this.updateReceiptDate(lConnection,lOrderCode,lListCond.getReceiptDate());
      // }
      
      // 処理を行うショップコード
      String mallShopCode = (new SIOrder()).getMailShopCode(lConnection, lRegOrder.getOrderCode());
      
      try {
        lSendMail.setMailTemp(lConnection, mallShopCode, payList.getMailType());
      } catch (SIFatalException e2) {
        e2.printStackTrace();
      }
      
      // 2.メールの本文の作成(メールテンプレートの内容1)
      
      // 再受注で確認メールを送信する場合を除く
      // if(lListCond.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_ORDER_COMFIRM)){
      // lMailBuf.append("\n受注メールを再送致します。\n");
      // lSendMail.insertContent1(lMailBuf.toString());
      // lMailBuf=new StringBuffer();
      // }else{
      lMailBuf.append("\n");
      lSendMail.appendContent1(lMailBuf.toString());
      lMailBuf = new StringBuffer();
      // }
      
      // 3.メールの本文の作成(入金督促)
      if (payList.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_RECEIPT_DEMAND) || payList.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_ORDER_COMFIRM)) {
        SIPayMethod lPayMethod = new SIPayMethod();
        lPayMethod.setEncode(SIConfig.SIENCODE_NONE);
        lPayMethod.setMallShopCode(mallShopCode);
        lPayMethod.setPayMethodName(lRegOrder.getPayMethodName());
        Collection payeeInfoColl = lPayMethod.getCollection(lConnection);
        Iterator payeeInfoIte = payeeInfoColl.iterator();
        int jj = 0;
        if (payeeInfoIte.hasNext()) {
          lMailBuf.append("\n【お支払先金融機関】");
          while (payeeInfoIte.hasNext()) {
            SIPayeeInfo payeeInfo = (SIPayeeInfo) payeeInfoIte.next();
            jj++;
            lMailBuf.append("\n金融機関" + (jj));
            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\n");
      if (payList.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_ORDER_COMFIRM)) {
        lSendMail.insertContent3(lMailBuf.toString());
      } else {
        lSendMail.appendContent1(lMailBuf.toString());
      }
      lMailBuf = new StringBuffer();
      
      lMailBuf.append("\n\n=============");
      
      // 4.メールの本文の作成(お客様情報)
      lMailBuf.append("\n受注番号:").append(lRegOrder.getOrderCode());
      lMailBuf.append("\n\nお客さま情報");
      lMailBuf.append("\n氏名:").append(lRegOrder.getCustName()).append(" 様");
      lMailBuf.append("\nE-Mail:").append(lRegOrder.getEmail());
      lMailBuf.append("\n連絡先電話番号１:").append(lRegOrder.getStoreTel());
      lMailBuf.append("\n連絡先電話番号２:").append(lRegOrder.getTel());
      lMailBuf.append("\n住所:〒").append(lRegOrder.getPostCode()).append(" ");
      lMailBuf.append(lRegOrder.getAddress());
      lMailBuf.append("\n支払方法:").append(lRegOrder.getPayMethodName());
      if (SIUtil.isNotNull(lRegOrder.getContactMsg())) {
        lMailBuf.append("\n連絡事項:");
        lMailBuf.append("\n").append(lRegOrder.getContactMsg());
      }
      // コンビニ決済使用時
      if (SIUtil.isNotNull(lRegOrder.getCvsTypeCode())) {
        lMailBuf.append("(").append(SIBSCVSMDKUtil.getCvsName(lRegOrder.getCvsTypeCode())).append(")");// コンビニ名称
      }
      if (SIUtil.isNotNull(lRegOrder.getCvsTypeCode())) {
        lMailBuf.append("\n受付番号:").append(lRegOrder.getCvsReceiptNo());// 受付番号
        if (SIUtil.isNotNull(lRegOrder.getCvsHaraikomiURL())
            && (payList.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_ORDER_COMFIRM) || payList.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_RECEIPT_DEMAND))) {
          lMailBuf.append("\n払込URL: ").append(lRegOrder.getCvsHaraikomiURL());// 払込URL
        }
      }
      lMailBuf.append("\n受注日時:").append(lRegOrder.getInitDateTime());
      if (SIUtil.isNotNull(lRegOrder.getCvsTypeCode())
          && (payList.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_ORDER_COMFIRM) || payList.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_RECEIPT_DEMAND))) {
        lMailBuf.append("\n支払期限:").append(lRegOrder.getCvsShiharaiKigen());// 支払期限
      }
      
      // コンビニ用注意書き
      if (SIUtil.isNotNull(lRegOrder.getCvsTypeCode()) && lRegOrder.getCvsTypeCode().equals(SIBSCVSMDKConfig.MDK_CVS_TYPE_LAWSON)
          && (payList.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_ORDER_COMFIRM) || payList.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_RECEIPT_DEMAND))) {
        lMailBuf.append("\n\n※").append(SIBSCVSMDKConfig.MDK_CVS_COMMENT_01);
        if (SIUtil.isNotNull(lRegOrder.getCvsHaraikomiURL())) {
          lMailBuf.append("\n※").append(SIBSCVSMDKConfig.MDK_CVS_COMMENT_02);
        }
      }
      
      if (lOrderDeliveryIta.hasNext()) {
        lDeliveryInx++;
        lOrderDelivery = (UIRegOrderDelivery) lOrderDeliveryIta.next();
        if (taxFlgOfB.equals("0") && !lOrderDelivery.getDeliveryTaxFlg().equals("0")) taxFlgOfB = "2";
        lMailBuf.append("\n\n--------------");
        lMailBuf.append("\n配送先");
        lMailBuf.append("\n宛名:").append(lOrderDelivery.getDeliveryAddressee()).append(" 様");
        lMailBuf.append("\n住所:〒").append(lOrderDelivery.getPostCode()).append(" ");
        lMailBuf.append(lOrderDelivery.getAddress());
        lMailBuf.append("\nTEL:").append(lOrderDelivery.getTel());
      }
      lMailBuf.append("\n--------------");
      lMailBuf.append("\n");
      lOrderDeliveryColl = lRegOrder.getCollection(lConnection, lLogin);// 配送先リスト
      lOrderDeliveryIta = lOrderDeliveryColl.iterator();
      while (lOrderDeliveryIta.hasNext()) {
        lOrderDelivery = (UIRegOrderDelivery) lOrderDeliveryIta.next();
        lOrderDetailColl = lOrderDelivery.getDetailCollection(lConnection);
        lOrderDetailIta = lOrderDetailColl.iterator();
        // String deliveryTypeCode = lOrderDelivery.getDeliveryTypeCode();
        lMailBuf.append("\n「").append(lOrderDelivery.getDeliveryTypeName()).append("送料」対象商品");
        while (lOrderDetailIta.hasNext()) {
          lRegOrderDetail = (UIRegOrderDetail) lOrderDetailIta.next();
          sumOfA = SIUtil.add(sumOfA, lRegOrderDetail.getPriceIncGift());
          if (taxFlgOfA.equals("0") && (!lRegOrderDetail.getTaxFlg().equals("0") || !lRegOrderDetail.getWrappingTaxFlg().equals("0"))) {
            taxFlgOfA = "2";
          }
          lMailBuf.append("\n=============");
          // EDBTG003-00 elecs-tani add start
          if (SIUtil.isNotNull(lRegOrderDetail.getSetIndividualCode())) {
            lMailBuf.append("\nセットコード:").append(lRegOrderDetail.getSetIndividualCode());
          }
          // EDBTG003-00 elecs-tani add end
          lMailBuf.append("\n商品コード:").append(lRegOrderDetail.getIndividualCode());
          lMailBuf.append("\n商品名:").append(lRegOrderDetail.getCartCmdtyName());// 7.2.0 ST0334 修正
          lMailBuf.append("\n数量:").append(NumberFormat.getNumberInstance().format(new Long(lRegOrderDetail.getAmount())));
          lMailBuf.append("\n単価:").append(NumberFormat.getNumberInstance().format(new Long(lRegOrderDetail.getPriceIncTax()))).append("円").append(
              "(" + lRegOrderDetail.getCmdtyTaxName() + ")");
          lMailBuf.append("\n商品合計額:").append(NumberFormat.getNumberInstance().format(new Long(lRegOrderDetail.getPriceOfCmdty()))).append("円");
          lMailBuf.append("\n個別送料:").append(lRegOrderDetail.getDeliveryFee()).append("円");
          sumOfB = SIUtil.add(sumOfB, lRegOrderDetail.getDeliveryFee());
          lMailBuf.append("\n配送希望日:").append(lRegOrderDetail.getDeliveryDateTxt());
          if(SIUtil.isNotNull(lRegOrderDetail.getDeliveryTimeTxt())) {
            lMailBuf.append("\n希望時間帯:").append(lRegOrderDetail.getDeliveryTimeTxt());
          }
          lMailBuf.append("\n総合計金額:").append(NumberFormat.getNumberInstance().format(new Long(SIUtil.add_LL(lRegOrderDetail.getPriceIncGift(), lRegOrderDetail.getDeliveryFee()))))
              .append("円");
          if (!lRegOrderDetail.getTaxFlg().equals("0") || !lRegOrderDetail.getWrappingTaxFlg().equals("0")) {
            lMailBuf.append(SITax.getFullTaxFlgName2("2", lRegOrderDetail.getPriceIncGift()));
          } else {
            lMailBuf.append(SITax.getFullTaxFlgName2("0", lRegOrderDetail.getPriceIncGift()));
          }
        }
        lMailBuf.append("\n");
      }
      lMailBuf.append("\n=============");
      lMailBuf.append("\n");
      
      sumOfD = SIUtil.add(SIUtil.add(sumOfA, sumOfB, sumOfC), discountFee, discountDeliveryFee);
      if (!taxFlgOfA.equals("0") || !taxFlgOfB.equals("0") || !taxFlgOfC.equals("0")) taxFlgOfD = "2";
      
      // 7.メールの本文の作成(合計)
      lMailBuf.append("\n--------------");
      lMailBuf.append("\n合計\n商品合計(A):").append(NumberFormat.getNumberInstance().format(new Long(sumOfA))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfA, sumOfA));
      lMailBuf.append("\n送料合計(B):").append(NumberFormat.getNumberInstance().format(new Long(SIUtil.add(sumOfB, discountDeliveryFee)))).append("円").append(
          SITax.getFullTaxFlgName2(taxFlgOfB, sumOfB));
      lMailBuf.append("\n手数料合計(C):").append(NumberFormat.getNumberInstance().format(new Long(SIUtil.add(sumOfC, discountFee)))).append("円").append(
          SITax.getFullTaxFlgName2(taxFlgOfC, sumOfC));
      
      if (lRegOrder.getPointEnableFlg().equals("1")) {
        // EDBTG003-00 elecs-tani mod start
        //sumOfF = SIUtil.sub_LL(SIUtil.sub_LL(sumOfD, sumOfG), sumOfE);
        sumOfF = SIUtil.sub_LL(SIUtil.sub_LL(SIUtil.sub_LL(sumOfD, sumOfG), sumOfE), sumOfH);
        // EDBTG003-00 elecs-tani mod end
        if (!taxFlgOfD.equals("0") || !taxFlgOfG.equals("0") || !taxFlgOfE.equals("0")) taxFlgOfF = "2";// お支払い合計額の税区分
          
        lMailBuf.append("\n小計(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Long(sumOfD))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfD, sumOfD));
        lMailBuf.append("\nポイント使用額（ポイント残高 ").append(NumberFormat.getNumberInstance().format(new Long(lRegOrder.getMaxPoint()))).append("ポイント）(D):");
        lMailBuf.append(NumberFormat.getNumberInstance().format(new Long(sumOfE))).append("円");
        if (SIUtil.isNotNull(sumOfG) && Long.parseLong(sumOfG) > 0) {
          lMailBuf.append("\n値引金額(G)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfG))).append("円");
          // EDBTG003-00 elecs-tani mod start
          // EDBTG003-00 [不具合管理票-No37] 2013/03/25 nagayoshi mod start
          if (SIUtil.isNotNull(sumOfH) && Long.parseLong(sumOfH) > 0) {
            lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfH))).append("円");
            //lMailBuf.append("\nお支払い合計額(F=D-E-G):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
            lMailBuf.append("\nお支払い合計額(F=D-E-G-H):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
          } else {
            lMailBuf.append("\nお支払い合計額(F=D-E-G):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
          }
          // EDBTG003-00 [不具合管理票-No37] 2013/03/25 nagayoshi mod end
          // EDBTG003-00 elecs-tani mod end
        } else {
          // EDBTG003-00 elecs-tani mod start
          // EDBTG003-00 [不具合管理票-No37] 2013/03/25 nagayoshi mod start
          if (SIUtil.isNotNull(sumOfH) && Long.parseLong(sumOfH) > 0) {
            lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfH))).append("円");
            //lMailBuf.append("\nお支払い合計額(F=D-E):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
            lMailBuf.append("\nお支払い合計額(F=D-E-H):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
          } else {
            lMailBuf.append("\nお支払い合計額(F=D-E):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
          }
          // EDBTG003-00 [不具合管理票-No37] 2013/03/25 nagayoshi mod end
          // EDBTG003-00 elecs-tani mod end
        }
      } else {
        // EDBTG003-00 elecs-tani mod start
        //sumOfF = SIUtil.sub_LL(sumOfD, sumOfG);
        sumOfF = SIUtil.sub_LL(SIUtil.sub_LL(sumOfD, sumOfG), sumOfH);
        // EDBTG003-00 elecs-tani mod end
        if (!taxFlgOfD.equals("0") || !taxFlgOfG.equals("0")) taxFlgOfF = "2";// お支払い合計額の税区分
          
        if (SIUtil.isNotNull(sumOfG) && Long.parseLong(sumOfG) > 0) {
          lMailBuf.append("\n小計(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Long(sumOfD))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfD, sumOfD));
          lMailBuf.append("\n値引金額(G)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfG))).append("円");
          // EDBTG003-00 elecs-tani mod start
          // EDBTG003-00 [不具合管理票-No37] 2013/03/25 nagayoshi mod start
          if (SIUtil.isNotNull(sumOfH) && Long.parseLong(sumOfH) > 0) {
            lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfH))).append("円");
            //lMailBuf.append("\nお支払い合計額(F=D-G):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
            lMailBuf.append("\nお支払い合計額(F=D-G-H):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
          } else {
            lMailBuf.append("\nお支払い合計額(F=D-G):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
          }
          // EDBTG003-00 [不具合管理票-No37] 2013/03/25 nagayoshi mod end
          // EDBTG003-00 elecs-tani mod end
        } else {
          // EDBTG003-00 elecs-tani mod start
          // EDBTG003-00 [不具合管理票-No37] 2013/03/25 nagayoshi mod start
          if (SIUtil.isNotNull(sumOfH) && Long.parseLong(sumOfH) > 0) {
            lMailBuf.append("\nセット値引金額(H)：").append(NumberFormat.getNumberInstance().format(new Long(sumOfH))).append("円");
            //lMailBuf.append("\nお支払い合計額(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
            lMailBuf.append("\nお支払い合計額(D=A+B+C-H):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
          } else {
            lMailBuf.append("\nお支払い合計額(D=A+B+C):").append(NumberFormat.getNumberInstance().format(new Long(sumOfF))).append("円").append(SITax.getFullTaxFlgName2(taxFlgOfF, sumOfF));
          }
          // EDBTG003-00 [不具合管理票-No37] 2013/03/25 nagayoshi mod end
          // EDBTG003-00 elecs-tani mod end
        }
      }
      
      // 8メールの本文の作成(メールテンプレートの内容3)
      if (payList.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_ORDER_COMFIRM)) {
        String lPoint = "0";// ポイント付加
        Statement lStatement = null;
        ResultSet lResultSet = null;
        
        // 付加ポイント
        StringBuffer lSqlBuf = new StringBuffer();
        lSqlBuf.append("SELECT PointOfIssue FROM PointmanMTbl ");
        lSqlBuf.append("WHERE OrderCode = ").append(SIDBUtil.SQL2Str(lOrderCode, " "));
        lSqlBuf.append("AND EnableFlg<>0");
        
        try {
          lStatement = lConnection.createStatement();
          lResultSet = lStatement.executeQuery(lSqlBuf.toString());
          while (lResultSet.next()) {
            if (Integer.parseInt(lResultSet.getString("PointOfIssue")) > 0) {
              lPoint = SIUtil.add(lPoint, lResultSet.getString("PointOfIssue"));
            }
          }
        } catch (SQLException e) {
          e.printStackTrace();
        } finally {
          SIDBUtil.close(lStatement, lResultSet);
        }
        if (lRegOrder.getPointEnableFlg().equals("1")) {
          lMailBuf.append("\n");
          lMailBuf.append("\n獲得予定ポイント数：").append(lPoint).append("ポイント");
        }
        lMailBuf.append("\n\n=============");
        lSendMail.insertContent2(lMailBuf.toString());
      } else {
        lMailBuf.append("\n\n=============");
        lSendMail.appendContent2(lMailBuf.toString());// 未入金督促メール
      }
      
      // 9.入金メール送信フラグを更新
      if (payList.getMailType().equals(SIConfig.SIMAIL_TEMPLATE_RECEIPT_COMFIRM)) {
        SIModifyRec lRec = new SIModifyRec(SIConfig.SITABLE_ORDER_NAME);
        lRec.addCondition("orderCode", lOrderCode);
        lRec.add("receiptMailFlg", "1");
        lRec.execute(lConnection);
      }
      
      // 10.送信開始
      try {
        lSendMail.setToMailAddress(lRegOrder.getCurrentEmail());
        // 今回送信失敗かどうか？
        sendflg = lSendMail.execute();
        // 一部のメールで失敗かどうか？
        result = sendflg && result;
      } catch (SIFatalException e) {
        result = false;
        e.printStackTrace();
      }
      
      // メールはロールバックできないので１件コミット
      if (sendflg) {
        try {
          lConnection.commit();
        } catch (SQLException sqle) {}
      } else {
        try {
          lConnection.rollback();
        } catch (SQLException sqle) {}
      }
    } catch (SIDBAccessException e) {
      throw new SIDBAccessException(e);
    } catch (SIDuplicateKeyException e) {
      throw new SIDBAccessException(e);
    }
    return result;
  }
  
  // 請求書
  //EDBTG003-00 mod start
//  private void printBill(HttpServletResponse response, Connection lConnection, UIPayListCond payList, SILogin lLogin) {
  private void printBill(HttpServletResponse response, Connection lConnection, UIPayListCond payList, SILogin lLogin) throws SIDBAccessException {
  //EDBTG003-00 mod end
    String template = (String) this.getServletContext().getRealPath("/docs/bill.xls");
    SIExcelRWrite lWrite = new SIExcelRWrite(SIExcelConf.SIEXCEL_BILL_INX, template);
    lWrite.makeSheet(0, SIExcelConf.getTitleName(SIExcelConf.SIEXCEL_BILL_INX), 0, false);
    SIDateTime lDateTime = new SIDateTime();
    String date = lDateTime.getFullDate2();
    int pageLineNumber = 74;
    // int detailMaxCount = 25;
    int detailSumCount = 0;
    
    UIRegOrder lRegOrder = new UIRegOrder();
    UIRegOrderDelivery lOrderDelivery = new UIRegOrderDelivery();
    UIRegOrderDetail lRegOrderDetail = new UIRegOrderDetail();
    
    Collection lOrderDeliveryColl = new ArrayList();
    Collection lOrderDetailColl = new ArrayList();
    
    Iterator lOrderDeliveryIta;
    Iterator lOrderDetailIta;
    String lOrderCode = payList.getOrderCodeTxt();
    
    // 受注情報取得
    lRegOrder = new UIRegOrder();
    lRegOrder.setOrderCode(lOrderCode);
    lRegOrder.reset(lConnection);
    lOrderDeliveryColl = lRegOrder.getCollection(lConnection, lLogin);// 配送先リスト
    lOrderDeliveryIta = lOrderDeliveryColl.iterator();
    
    // データが存在しない場合：処理中断
    if (lOrderDeliveryColl == null || lOrderDeliveryColl.size() == 0) return;
    
    // 配送先明細
    String[][] delivery = new String[1][4];
    // 受注明細
    String[][] detail = null;
    if (lOrderDeliveryIta.hasNext()) {
      lOrderDelivery = (UIRegOrderDelivery) lOrderDeliveryIta.next();
      delivery[0][0] = "〒" + lOrderDelivery.getPostCode();
      delivery[0][1] = lOrderDelivery.getAddress1() + lOrderDelivery.getAddress2();
      delivery[0][2] = lOrderDelivery.getAddress3();
      delivery[0][3] = lOrderDelivery.getCompanyName();
      lOrderDetailColl = lOrderDelivery.getDetailCmdtyCollection(lConnection);
      lOrderDetailIta = lOrderDetailColl.iterator();
      // EDBTG003-00 elecs-tani add start
      Iterator lOrderDetailItaCount = lOrderDetailColl.iterator();
      int count = 0;
      // セット商品の名前分カウントを増やす
      while (lOrderDetailItaCount.hasNext()) {
        lRegOrderDetail = (UIRegOrderDetail) lOrderDetailItaCount.next();
        if (!lRegOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL)
            && lRegOrderDetail.getSetDetailCode().equals("1")) {
          count++;
        }
      }
      // セット値引きの分カウントを増やす
      StringBuffer getSetDiscountCnt = new StringBuffer();
      getSetDiscountCnt.append("SELECT count(*) ");
      getSetDiscountCnt.append("FROM ordertbl aa,ordersetcmdtytbl bb ");
      getSetDiscountCnt.append("WHERE aa.ordercode = bb.ordercode ");
      getSetDiscountCnt.append("AND aa.orderbranchcode = bb.orderbranchcode ");
      getSetDiscountCnt.append("AND aa.enabledflg = 1 ");
      getSetDiscountCnt.append("AND bb.setDiscount > 0 ");
      getSetDiscountCnt.append("AND aa.ordercode = ").append(SIDBUtil.SQL2Str(lOrderDelivery.getOrderCode()));
      String setDiscountCnt = SIDBUtil.getFirstData(lConnection, getSetDiscountCnt.toString());
      // EDBTG003-00 elecs-tani add end
      // EDBTG003-00 elecs-tani mod start
//      detailSumCount = lOrderDetailColl.size();
      detailSumCount = lOrderDetailColl.size() + count + Integer.parseInt(setDiscountCnt);
      // EDBTG003-00 elecs-tani mod end
      
      detail = new String[detailSumCount][7];
      int detailCount = 0;
      
      // EDBTG003-00 elecs-tani add start
      // セット値引き金額出力のための変数
      String code = lOrderDelivery.getOrderCode(); // 受注番号が入る
      String setIndividualCode = "";
      String setCode = "";
      // EDBTG003-00 elecs-tani add end
      while (lOrderDetailIta.hasNext()) {
        lRegOrderDetail = (UIRegOrderDetail) lOrderDetailIta.next();
        
        // EDBTG003-00 elecs-tani mod start
//        if (SIUtil.isNotNull(setIndividualCode) && !setIndividualCode.equals(lRegOrderDetail.getSetIndividualCode())) {
        if (SIUtil.isNotNull(setIndividualCode) && !setCode.equals(lRegOrderDetail.getSetCode())) {
          
          // 受注セット品テーブルからセット値引きと数量を取得
          StringBuffer setDiscountSql = new StringBuffer();
          setDiscountSql.append("SELECT bb.setdiscount, bb.setamount ");
          setDiscountSql.append("FROM ordertbl aa,ordersetcmdtytbl bb ");
          setDiscountSql.append("WHERE aa.ordercode = bb.ordercode ");
          setDiscountSql.append("AND aa.orderbranchcode = bb.orderbranchcode ");
          setDiscountSql.append("AND aa.ordercode = ").append(SIDBUtil.SQL2Str(code," "));
          setDiscountSql.append("AND aa.enabledflg = 1 ");
          setDiscountSql.append("AND bb.setindividualcode = ").append(SIDBUtil.SQL2Str(setIndividualCode," "));
          setDiscountSql.append("AND bb.setcode = ").append(SIDBUtil.SQL2Str(setCode));
          HashMap lResMap = new HashMap();
          lResMap = SIDBUtil.getOneRowData(lConnection, setDiscountSql.toString());
          
          int setdiscount = 0;
          if (SIUtil.isNotNull((String) lResMap.get("setdiscount"))) {
            setdiscount = Integer.parseInt((String) lResMap.get("setdiscount"));
            setdiscount = -setdiscount;
            
            if (setdiscount != 0) { // セット値引きが0でなければ出力
              detail[detailCount][0] = "";
              detail[detailCount][1] = SIConfig.SET_DISCOUNT_NAME_PDF;
              detail[detailCount][2] = Integer.toString(setdiscount);
              detail[detailCount][3] = (String) lResMap.get("setamount");
              detail[detailCount][4] = SIUtil.multi(Integer.toString(setdiscount), (String) lResMap.get("setamount"));
              detail[detailCount][5] = "";
              detail[detailCount][6] = "";
              
              detailCount++;
            }
          }
        }
        
//        detail[detailCount][0] = lRegOrderDetail.getIndividualCode();
//        detail[detailCount][1] = lRegOrderDetail.getCmdtyName();
        
        // 添付品の場合テキストを設定
        String appendTxt = "";
        if (lRegOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_APPENDED)) {
          appendTxt = SIConfig.SET_APPEND_NAME_PDF;
        }
        
        if (!lRegOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL)
            && lRegOrderDetail.getSetDetailCode().equals("1")) { // 通常品でないかつセット明細番号が1の場合
          // まずセット品(親)を出力
          StringBuffer setNameSql = new StringBuffer();
          setNameSql.append("SELECT bb.cmdtyname ");
          setNameSql.append("FROM ordertbl aa ,ordersetcmdtytbl bb ");
          setNameSql.append("WHERE aa.ordercode = bb.ordercode ");
          setNameSql.append("AND aa.orderbranchcode = bb.orderbranchcode ");
          setNameSql.append("AND aa.enabledflg = 1 ");
          setNameSql.append("AND bb.setcode = ").append(SIDBUtil.SQL2Str(code," "));
          setNameSql.append("AND aa.ordercode = ").append(SIDBUtil.SQL2Str(lRegOrderDetail.getSetCode()," "));
          setNameSql.append("AND bb.setindividualcode = ").append(SIDBUtil.SQL2Str(lRegOrderDetail.getSetIndividualCode()));
          
          String setCmdtyName = SIDBUtil.getFirstData(lConnection, setNameSql.toString());
          
          detail[detailCount][0] = lRegOrderDetail.getSetIndividualCode();
          detail[detailCount][1] = setCmdtyName;
          detail[detailCount][2] = "";
          detail[detailCount][3] = "";
          detail[detailCount][4] = "";
          detail[detailCount][5] = "";
          detail[detailCount][6] = "";
          
          detailCount++;
          
          detail[detailCount][0] = "";
          detail[detailCount][1] = "(" + lRegOrderDetail.getIndividualCode() + ")" + appendTxt + lRegOrderDetail.getCmdtyName();
        } else if (!lRegOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL) && !lRegOrderDetail.getSetDetailCode().equals("1")) { // 通常品でないかつセット明細番号が1でない場合
          detail[detailCount][0] = "";
          detail[detailCount][1] = "(" + lRegOrderDetail.getIndividualCode() + ")" + appendTxt + lRegOrderDetail.getCmdtyName();
        } else { // 通常品の場合
          detail[detailCount][0] = lRegOrderDetail.getIndividualCode();
          detail[detailCount][1] = lRegOrderDetail.getCmdtyName();
        }
        // EDBTG003-00 elecs-tani mod end
        
        detail[detailCount][2] = lRegOrderDetail.getPrice();
        detail[detailCount][3] = lRegOrderDetail.getAmount();
        detail[detailCount][4] = SIUtil.multi(lRegOrderDetail.getPrice(), lRegOrderDetail.getAmount());
        detail[detailCount][5] = lRegOrderDetail.getBranchCode();
        if (SIUtil.isNotNull(lRegOrderDetail.getGuaranteedTerm())) {
          detail[detailCount][6] = SIDateTime.getMonthToYear(Integer.parseInt(lRegOrderDetail.getGuaranteedTerm()));
        } else {
          detail[detailCount][6] = new String("");
        }
        // EDBTG003-00 elecs-tani add start
        setIndividualCode = lRegOrderDetail.getSetIndividualCode();
        setCode = lRegOrderDetail.getSetCode();
        // EDBTG003-00 elecs-tani add end
        detailCount = detailCount + 1;
      }
      // EDBTG003-00 elecs-tani add start
//      if (SIUtil.isNotNull(setIndividualCode)) {
//        detailCount++;
//      }
      // 最終行がセット商品だった場合用
      if (SIUtil.isNotNull(setIndividualCode)) {
        // キープセット品テーブルor受注セット品テーブルからセット値引きと数量を取得
        StringBuffer setDiscountSql = new StringBuffer();
        setDiscountSql.append("SELECT bb.setdiscount, bb.setamount ");
        setDiscountSql.append("FROM ordertbl aa,ordersetcmdtytbl bb ");
        setDiscountSql.append("WHERE aa.ordercode = bb.ordercode ");
        setDiscountSql.append("AND aa.orderbranchcode = bb.orderbranchcode ");
        setDiscountSql.append("AND aa.ordercode = ").append(SIDBUtil.SQL2Str(code," "));
        setDiscountSql.append("AND aa.enabledflg = 1 ");
        setDiscountSql.append("AND bb.setindividualcode = ").append(SIDBUtil.SQL2Str(setIndividualCode," "));
        setDiscountSql.append("AND bb.setcode = ").append(SIDBUtil.SQL2Str(setCode));
        HashMap lResMap = new HashMap();
        lResMap = SIDBUtil.getOneRowData(lConnection, setDiscountSql.toString());
        
        int setdiscount = 0;
        if (SIUtil.isNotNull((String) lResMap.get("setdiscount"))) {
          setdiscount = Integer.parseInt((String) lResMap.get("setdiscount"));
          setdiscount = -setdiscount;
          
          if (setdiscount != 0) { // セット値引きが0でなければ出力
            detail[detailCount][0] = "";
            detail[detailCount][1] = SIConfig.SET_DISCOUNT_NAME_PDF;
            detail[detailCount][2] = Integer.toString(setdiscount);
            detail[detailCount][3] = (String) lResMap.get("setamount");
            detail[detailCount][4] = SIUtil.multi(Integer.toString(setdiscount), (String) lResMap.get("setamount"));
            detail[detailCount][5] = "";
            detail[detailCount][6] = "";
          }
        }
      }
      // EDBTG003-00 elecs-tani add end
    }
    
    // 口座情報
    SIPayMethod lPayMethod = new SIPayMethod();
    lPayMethod.setEncode(SIConfig.SIENCODE_NONE);
    lPayMethod.setMallShopCode(lLogin.getMallShopCode());
    lPayMethod.setPayMethodName("銀行振込");//銀行振り込み用に固定
    Collection payeeInfoColl = lPayMethod.getCollection(lConnection);
    Iterator payeeInfoIte = payeeInfoColl.iterator();
    StringBuffer lMailBuf = new StringBuffer();
    if (payeeInfoIte.hasNext()) {
      lMailBuf.append("【お振込先】　");
      SIPayeeInfo payeeInfo = (SIPayeeInfo) payeeInfoIte.next();
      lMailBuf.append(payeeInfo.getBankName() + "　");
      lMailBuf.append(payeeInfo.getSubBankName() + "　");
      if (SIUtil.isNotNull(payeeInfo.getAccountType())) {
        lMailBuf.append(SIFlagConf.SIFLAG_ACCOUNT_TYPE_NAME[Integer.parseInt(payeeInfo.getAccountType())][0]);// 口座種類
      }
      lMailBuf.append(payeeInfo.getAccountNo() + "　");// 口座番号
      lMailBuf.append(payeeInfo.getAccountName());// 口座名義人カナ
    }
    String totalPaymentPrice = lRegOrder.getTotalPaymentPrice(lConnection);
    
    int lineNo = 0;
    int pageSumNo = 1;
    int pageCount = 1;
    for (int ii = 0; ii < detailSumCount; ii++) {
      if (lineNo == 25) {
        pageSumNo = pageSumNo + 1;
        pageCount = pageCount + 1;
        lineNo = 0;
        lWrite.makeBillPage(pageSumNo, pageLineNumber);
        this.printBillMain(lConnection, true, lWrite, lRegOrder, delivery, date, totalPaymentPrice, lMailBuf.toString(), payList.getRemarks(), pageSumNo, pageCount);
      } else if (ii == 0) {
        this.printBillMain(lConnection, true, lWrite, lRegOrder, delivery, date, totalPaymentPrice, lMailBuf.toString(), payList.getRemarks(), pageSumNo, pageCount);
      }
      this.printBillSub(lWrite, detail[ii], (pageSumNo - 1) * (pageLineNumber - 1) + lineNo);
      lineNo = lineNo + 1;
    }
    
    lineNo = 0;
    pageCount = 1;
    for (int ii = 0; ii < detailSumCount; ii++) {
      if (lineNo == 25) {
        pageSumNo = pageSumNo + 1;
        pageCount = pageCount + 1;
        lineNo = 0;
        lWrite.makeBillPage(pageSumNo, pageLineNumber);
        this.printBillMain(lConnection, false, lWrite, lRegOrder, delivery, date, totalPaymentPrice, lMailBuf.toString(), payList.getRemarks(), pageSumNo, pageCount);
      } else if (ii == 0) {
        pageSumNo = pageSumNo + 1;
        lWrite.makeBillPage(pageSumNo, pageLineNumber);
        this.printBillMain(lConnection, false, lWrite, lRegOrder, delivery, date, totalPaymentPrice, lMailBuf.toString(), payList.getRemarks(), pageSumNo, pageCount);
      }
      this.printBillSub(lWrite, detail[ii], (pageSumNo - 1) * (pageLineNumber - 1) + lineNo);
      lineNo = lineNo + 1;
    }
    lWrite.makePage(pageSumNo * (pageLineNumber - 1) - 1);
    try {
      lWrite.close(response);
    } catch (IOException e) {
      // e.printStackTrace();
    }
  }
  
  private void printBillMain(Connection lConnection, boolean kbnFlg, SIExcelRWrite lWrite, UIRegOrder lRegOrder, String delivery[][], String date, String totalPaymentPrice,
      String payInfo, String message, int pageSum, int pageCount) {
    int pageLineNumber = 74;
    int startLine = (pageSum - 1) * (pageLineNumber - 1);
    String orderDate = new String();
    
    try {
      orderDate = new SIDateTime(lRegOrder.getInitDateTime(), SIConfig.SIDATE_FORMAT0).getFullDate();
    } catch (ParseException e2) {
      e2.printStackTrace();
    }
    // ページ関連タイトル
    if (kbnFlg) {
      lWrite.writeDetailItem(0 + startLine, 1, "御請求書", SIExcelConf.FIELD_STRING_TYPE, false);
    } else {
      lWrite.writeDetailItem(0 + startLine, 1, "御請求書 （控）", SIExcelConf.FIELD_STRING_TYPE, false);
    }
    
    lWrite.writeDetailItem(2 + startLine, 19, "【納品先】", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(0 + startLine, 34, "PAGE", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(1 + startLine, 34, "発行日", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(3 + startLine, 34, "伝票No.", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(4 + startLine, 34, "受注日", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(5 + startLine, 34, "最終出荷日", SIExcelConf.FIELD_STRING_TYPE, false);
    
    lWrite.writeDetailItem(11 + startLine, 1, "御注文金額", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(11 + startLine, 6, "内消費税額", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(11 + startLine, 11, "送　　料", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(11 + startLine, 16, "手 数 料", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(11 + startLine, 21, "ﾎﾟｲﾝﾄ使用額", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(11 + startLine, 26, "御入金額", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(11 + startLine, 36, "未入金残高", SIExcelConf.FIELD_STRING_TYPE, false);
    
    lWrite.writeDetailItem(15 + startLine, 1, "商品コード", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(15 + startLine, 5, "商　品　名", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(15 + startLine, 17, "単価（税込）", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(15 + startLine, 22, "数量", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(15 + startLine, 24, "金額（税込）", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(15 + startLine, 29, "出荷地", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(15 + startLine, 33, "保証期間", SIExcelConf.FIELD_STRING_TYPE, false);
    lWrite.writeDetailItem(15 + startLine, 37, "備　　考", SIExcelConf.FIELD_STRING_TYPE, false);
    
    // ヘッダ情報
    lWrite.writeDetailItem(0 + startLine, 39, String.valueOf(pageCount), SIExcelConf.FIELD_STRING_TYPE, false);// PAGE
    lWrite.writeDetailItem(1 + startLine, 39, date, SIExcelConf.FIELD_STRING_TYPE, false);// 発行日
    
    lWrite.writeDetailItem(3 + startLine, 39, lRegOrder.getOrderCode(), SIExcelConf.FIELD_STRING_TYPE, false);// 伝票番号
    lWrite.writeDetailItem(4 + startLine, 39, orderDate, SIExcelConf.FIELD_STRING_TYPE, false);// 受注日
    lWrite.writeDetailItem(5 + startLine, 39, lRegOrder.getShippmentDate(lConnection), SIExcelConf.FIELD_STRING_TYPE, false);// 最終出荷日
    
    // 売上先
    lWrite.writeDetailItem(3 + startLine, 1, "〒" + lRegOrder.getPostCode(), SIExcelConf.FIELD_STRING_TYPE, false);// 郵便番号
    lWrite.writeDetailItem(4 + startLine, 1, lRegOrder.getAddress1() + lRegOrder.getAddress2(), SIExcelConf.FIELD_STRING_TYPE, false);// ご住所
    lWrite.writeDetailItem(5 + startLine, 1, lRegOrder.getAddress3(), SIExcelConf.FIELD_STRING_TYPE, false);// ご住所
    if (SIUtil.isNotNull(lRegOrder.getCompanyName())) {
      lWrite.writeDetailItem(7 + startLine, 1, lRegOrder.getCompanyName() + "　様", SIExcelConf.FIELD_STRING_TYPE, false);// 会社名
    }
    
    lWrite.writeDetailItem(8 + startLine, 1, lRegOrder.getCustName() + "　様", SIExcelConf.FIELD_STRING_TYPE, false);// お名前
    lWrite.writeDetailItem(9 + startLine, 1, "(" + lRegOrder.getCustCode() + ")", SIExcelConf.FIELD_STRING_TYPE, false);// 顧客番号
    
    // 配送先
    lWrite.writeDetailItem(3 + startLine, 19, delivery[0][0], SIExcelConf.FIELD_STRING_TYPE, false);// 郵便番号
    lWrite.writeDetailItem(4 + startLine, 19, delivery[0][1], SIExcelConf.FIELD_STRING_TYPE, false);// ご住所
    lWrite.writeDetailItem(5 + startLine, 19, delivery[0][2], SIExcelConf.FIELD_STRING_TYPE, false);// ご住所
    if (SIUtil.isNotNull(delivery[0][3])) {
      lWrite.writeDetailItem(7 + startLine, 19, delivery[0][3] + "　様", SIExcelConf.FIELD_STRING_TYPE, false);// 会社名
    }
    
    // 請求金額
    // EDBTG003-00 nagayoshi add start
    lWrite.writeDetailItem(12 + startLine, 1, lRegOrder.getTotalOfPrice(), SIExcelConf.FIELD_NUMERIC_TYPE, false);// 御注文金額
    // EDBTG003-00 nagayoshi add end
    lWrite.writeDetailItem(12 + startLine, 6, lRegOrder.getTaxOfPrice(), SIExcelConf.FIELD_NUMERIC_TYPE, false);// 内消費税額
    lWrite.writeDetailItem(12 + startLine, 11, SIUtil.add(lRegOrder.getTotalOfDeliveryFee(), lRegOrder.getDiscountDeliveryFee()), SIExcelConf.FIELD_NUMERIC_TYPE, false);// 送料
    lWrite.writeDetailItem(12 + startLine, 16, SIUtil.add(lRegOrder.getFee(), lRegOrder.getDiscountFee()), SIExcelConf.FIELD_NUMERIC_TYPE, false);// 手数料
    lWrite.writeDetailItem(12 + startLine, 21, lRegOrder.getSumByPoint(), SIExcelConf.FIELD_NUMERIC_TYPE, false);// ﾎﾟｲﾝﾄ使用額
    lWrite.writeDetailItem(12 + startLine, 26, totalPaymentPrice, SIExcelConf.FIELD_NUMERIC_TYPE, false);// 御入金額
    if (SIUtil.isNotNull(SIUtil.add(lRegOrder.getSumOfDiscount(), lRegOrder.getSumOfSetDiscount())) && !SIUtil.add(lRegOrder.getSumOfDiscount(), lRegOrder.getSumOfSetDiscount()).equals("0")) {
      lWrite.writeDetailItem(11 + startLine, 31, "御値引き", SIExcelConf.FIELD_STRING_TYPE, false);// 御値引き
      lWrite.writeDetailItem(12 + startLine, 31, SIUtil.add(lRegOrder.getSumOfDiscount(), lRegOrder.getSumOfSetDiscount()), SIExcelConf.FIELD_NUMERIC_TYPE, false);// 御値引き
    }
    // EDBTG003-00 elecs-tani mod start
//    lWrite.writeDetailItem(12 + startLine, 36, SIUtil.sub(SIUtil.sub(SIUtil.sub(SIUtil.add(lRegOrder.getTotalOfPrice(), SIUtil.add(lRegOrder.getTotalOfDeliveryFee(), lRegOrder
//        .getDiscountDeliveryFee()), SIUtil.add(lRegOrder.getFee(), lRegOrder.getDiscountFee())), lRegOrder.getSumByPoint()), lRegOrder.getSumOfDiscount()), totalPaymentPrice),
    lWrite.writeDetailItem(12 + startLine, 36, SIUtil.sub(SIUtil.sub(SIUtil.sub(SIUtil.sub(SIUtil.add(lRegOrder.getTotalOfPrice(), SIUtil.add(lRegOrder.getTotalOfDeliveryFee(), lRegOrder
            .getDiscountDeliveryFee()), SIUtil.add(lRegOrder.getFee(), lRegOrder.getDiscountFee())), lRegOrder.getSumByPoint()), lRegOrder.getSumOfDiscount()), lRegOrder.getSumOfSetDiscount()), totalPaymentPrice),
        SIExcelConf.FIELD_NUMERIC_TYPE, false);// 今回御請求額
    // EDBTG003-00 elecs-tani mod end
    
    // 金融機関
    lWrite.writeDetailItem(45 + startLine, 1, payInfo, SIExcelConf.FIELD_STRING_TYPE, false);
    
    // 適用欄
    if (SIUtil.isNotNull(message)) {
      lWrite.writeDetailItem(67 + startLine, 1, message, SIExcelConf.FIELD_STRING_TYPE, false);
    }
  }
  
  private void printBillSub(SIExcelRWrite lWrite, String detail[], int startLine) {
    lWrite.writeDetailItem(16 + startLine, 1, detail[0], SIExcelConf.FIELD_STRING_TYPE, false);// 在庫コード
    lWrite.writeDetailItem(16 + startLine, 5, detail[1], SIExcelConf.FIELD_STRING_TYPE, false);// 商品名
    // EDBTG003-00 nagayoshi mod start
//    lWrite.writeDetailItem(16 + startLine, 17, detail[2], SIExcelConf.FIELD_NUMERIC_TYPE, false);// 単価
//    lWrite.writeDetailItem(16 + startLine, 22, detail[3], SIExcelConf.FIELD_NUMERIC_TYPE, false);// 個数
//    lWrite.writeDetailItem(16 + startLine, 24, detail[4], SIExcelConf.FIELD_NUMERIC_TYPE, false);// 金額
    if (SIUtil.isNull(detail[2])) {
      lWrite.writeDetailItem(16 + startLine, 17, detail[2], SIExcelConf.FIELD_STRING_TYPE, false);// 単価
    } else {
      lWrite.writeDetailItem(16 + startLine, 17, detail[2], SIExcelConf.FIELD_NUMERIC_TYPE, false);// 単価
    }
    if (SIUtil.isNull(detail[3])) {
      lWrite.writeDetailItem(16 + startLine, 22, detail[3], SIExcelConf.FIELD_STRING_TYPE, false);// 個数
    } else {
      lWrite.writeDetailItem(16 + startLine, 22, detail[3], SIExcelConf.FIELD_NUMERIC_TYPE, false);// 個数
    }
    if (SIUtil.isNull(detail[4])) {
      lWrite.writeDetailItem(16 + startLine, 24, detail[4], SIExcelConf.FIELD_STRING_TYPE, false);// 金額
    } else {
      lWrite.writeDetailItem(16 + startLine, 24, detail[4], SIExcelConf.FIELD_NUMERIC_TYPE, false);// 金額
    }
    // EDBTG003-00 nagayoshi mod end
    lWrite.writeDetailItem(16 + startLine, 29, detail[5], SIExcelConf.FIELD_STRING_TYPE, false);// 出荷地
    if (SIUtil.isNotNull(detail[6])) {
      lWrite.writeDetailItem(16 + startLine, 33, detail[6], SIExcelConf.FIELD_STRING_TYPE, false);// 保証
    }
  }
  
  private void printBillList(HttpServletResponse response, Connection lConnection, UIPayListCond payList, SILogin lLogin) throws SIDBAccessException {
    String template = (String) this.getServletContext().getRealPath("/docs/bill.xls");
    SIExcelRWrite lWrite = new SIExcelRWrite(SIExcelConf.SIEXCEL_BILL_INX, template);
    lWrite.makeSheet(0, SIExcelConf.getTitleName(SIExcelConf.SIEXCEL_BILL_INX), 0, false);
    
    Iterator lOrderDeliveryIta;
    Iterator lOrderDetailIta;
    String lOrderCode = "";
    int currentPage = 0;
    
    for (int i=0;i<payList.getOrderCodeChk().length;i++) {
      SIDateTime lDateTime = new SIDateTime();
      String date = lDateTime.getFullDate2();
      
      UIRegOrder lRegOrder = new UIRegOrder();
      UIRegOrderDelivery lOrderDelivery = new UIRegOrderDelivery();
      UIRegOrderDetail lRegOrderDetail = new UIRegOrderDetail();
      
      Collection lOrderDeliveryColl = new ArrayList();
      Collection lOrderDetailColl = new ArrayList();
      
      int pageLineNumber = 74;
      int detailSumCount = 0;
      
      lOrderCode=payList.getOrderCodeHid()[Integer.parseInt(payList.getOrderCodeChk()[i])];
      lWrite.cloneSheet(currentPage);
      lWrite.setSheetNum(currentPage);
      lWrite.setSheetName(currentPage, lOrderCode);
      
      // 受注情報取得
      lRegOrder = new UIRegOrder();
      lRegOrder.setOrderCode(lOrderCode);
      lRegOrder.reset(lConnection);
      lOrderDeliveryColl = lRegOrder.getCollection(lConnection, lLogin);// 配送先リスト
      lOrderDeliveryIta = lOrderDeliveryColl.iterator();
      
      // データが存在しない場合：処理中断
      if (lOrderDeliveryColl == null || lOrderDeliveryColl.size() == 0) return;
      
      // 配送先明細
      String[][] delivery = new String[1][4];
      // 受注明細
      String[][] detail = null;
      if (lOrderDeliveryIta.hasNext()) {
        lOrderDelivery = (UIRegOrderDelivery) lOrderDeliveryIta.next();
        delivery[0][0] = "〒" + lOrderDelivery.getPostCode();
        delivery[0][1] = lOrderDelivery.getAddress1() + lOrderDelivery.getAddress2();
        delivery[0][2] = lOrderDelivery.getAddress3();
        delivery[0][3] = lOrderDelivery.getCompanyName();
        lOrderDetailColl = lOrderDelivery.getDetailCmdtyCollection(lConnection);
        lOrderDetailIta = lOrderDetailColl.iterator();
        Iterator lOrderDetailItaCount = lOrderDetailColl.iterator();
        int count = 0;
        // セット商品の名前分カウントを増やす
        while (lOrderDetailItaCount.hasNext()) {
          lRegOrderDetail = (UIRegOrderDetail) lOrderDetailItaCount.next();
          if (!lRegOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL)
              && lRegOrderDetail.getSetDetailCode().equals("1")) {
            count++;
          }
        }
        // セット値引きの分カウントを増やす
        StringBuffer getSetDiscountCnt = new StringBuffer();
        getSetDiscountCnt.append("SELECT count(*) ");
        getSetDiscountCnt.append("FROM ordertbl aa,ordersetcmdtytbl bb ");
        getSetDiscountCnt.append("WHERE aa.ordercode = bb.ordercode ");
        getSetDiscountCnt.append("AND aa.orderbranchcode = bb.orderbranchcode ");
        getSetDiscountCnt.append("AND aa.enabledflg = 1 ");
        getSetDiscountCnt.append("AND bb.setDiscount > 0 ");
        getSetDiscountCnt.append("AND aa.ordercode = ").append(SIDBUtil.SQL2Str(lOrderDelivery.getOrderCode()));
        String setDiscountCnt = SIDBUtil.getFirstData(lConnection, getSetDiscountCnt.toString());
        detailSumCount = lOrderDetailColl.size() + count + Integer.parseInt(setDiscountCnt);
        
        detail = new String[detailSumCount][7];
        int detailCount = 0;
        
        // セット値引き金額出力のための変数
        String code = lOrderDelivery.getOrderCode(); // 受注番号が入る
        String setIndividualCode = "";
        String setCode = "";
        while (lOrderDetailIta.hasNext()) {
          lRegOrderDetail = (UIRegOrderDetail) lOrderDetailIta.next();
          
          if (SIUtil.isNotNull(setIndividualCode) && !setCode.equals(lRegOrderDetail.getSetCode())) {
            
            // 受注セット品テーブルからセット値引きと数量を取得
            StringBuffer setDiscountSql = new StringBuffer();
            setDiscountSql.append("SELECT bb.setdiscount, bb.setamount ");
            setDiscountSql.append("FROM ordertbl aa,ordersetcmdtytbl bb ");
            setDiscountSql.append("WHERE aa.ordercode = bb.ordercode ");
            setDiscountSql.append("AND aa.orderbranchcode = bb.orderbranchcode ");
            setDiscountSql.append("AND aa.ordercode = ").append(SIDBUtil.SQL2Str(code," "));
            setDiscountSql.append("AND aa.enabledflg = 1 ");
            setDiscountSql.append("AND bb.setindividualcode = ").append(SIDBUtil.SQL2Str(setIndividualCode," "));
            setDiscountSql.append("AND bb.setcode = ").append(SIDBUtil.SQL2Str(setCode));
            HashMap lResMap = new HashMap();
            lResMap = SIDBUtil.getOneRowData(lConnection, setDiscountSql.toString());
            
            int setdiscount = 0;
            if (SIUtil.isNotNull((String) lResMap.get("setdiscount"))) {
              setdiscount = Integer.parseInt((String) lResMap.get("setdiscount"));
              setdiscount = -setdiscount;
              
              if (setdiscount != 0) { // セット値引きが0でなければ出力
                detail[detailCount][0] = "";
                detail[detailCount][1] = SIConfig.SET_DISCOUNT_NAME_PDF;
                detail[detailCount][2] = Integer.toString(setdiscount);
                detail[detailCount][3] = (String) lResMap.get("setamount");
                detail[detailCount][4] = SIUtil.multi(Integer.toString(setdiscount), (String) lResMap.get("setamount"));
                detail[detailCount][5] = "";
                detail[detailCount][6] = "";
                
                detailCount++;
              }
            }
          }
          
          // 添付品の場合テキストを設定
          String appendTxt = "";
          if (lRegOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_APPENDED)) {
            appendTxt = SIConfig.SET_APPEND_NAME_PDF;
          }
          
          if (!lRegOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL)
              && lRegOrderDetail.getSetDetailCode().equals("1")) { // 通常品でないかつセット明細番号が1の場合
            // まずセット品(親)を出力
            StringBuffer setNameSql = new StringBuffer();
            setNameSql.append("SELECT bb.cmdtyname ");
            setNameSql.append("FROM ordertbl aa ,ordersetcmdtytbl bb ");
            setNameSql.append("WHERE aa.ordercode = bb.ordercode ");
            setNameSql.append("AND aa.orderbranchcode = bb.orderbranchcode ");
            setNameSql.append("AND aa.enabledflg = 1 ");
            setNameSql.append("AND bb.setcode = ").append(SIDBUtil.SQL2Str(code," "));
            setNameSql.append("AND aa.ordercode = ").append(SIDBUtil.SQL2Str(lRegOrderDetail.getSetCode()," "));
            setNameSql.append("AND bb.setindividualcode = ").append(SIDBUtil.SQL2Str(lRegOrderDetail.getSetIndividualCode()));
            
            String setCmdtyName = SIDBUtil.getFirstData(lConnection, setNameSql.toString());
            
            detail[detailCount][0] = lRegOrderDetail.getSetIndividualCode();
            detail[detailCount][1] = setCmdtyName;
            detail[detailCount][2] = "";
            detail[detailCount][3] = "";
            detail[detailCount][4] = "";
            detail[detailCount][5] = "";
            detail[detailCount][6] = "";
            
            detailCount++;
            
            detail[detailCount][0] = "";
            detail[detailCount][1] = "(" + lRegOrderDetail.getIndividualCode() + ")" + appendTxt + lRegOrderDetail.getCmdtyName();
          } else if (!lRegOrderDetail.getSetDetailFlg().equals(SIConfig.SET_DETAIL_FLG_NORMAL) && !lRegOrderDetail.getSetDetailCode().equals("1")) { // 通常品でないかつセット明細番号が1でない場合
            detail[detailCount][0] = "";
            detail[detailCount][1] = "(" + lRegOrderDetail.getIndividualCode() + ")" + appendTxt + lRegOrderDetail.getCmdtyName();
          } else { // 通常品の場合
            detail[detailCount][0] = lRegOrderDetail.getIndividualCode();
            detail[detailCount][1] = lRegOrderDetail.getCmdtyName();
          }
          
          detail[detailCount][2] = lRegOrderDetail.getPrice();
          detail[detailCount][3] = lRegOrderDetail.getAmount();
          detail[detailCount][4] = SIUtil.multi(lRegOrderDetail.getPrice(), lRegOrderDetail.getAmount());
          detail[detailCount][5] = lRegOrderDetail.getBranchCode();
          if (SIUtil.isNotNull(lRegOrderDetail.getGuaranteedTerm())) {
            detail[detailCount][6] = SIDateTime.getMonthToYear(Integer.parseInt(lRegOrderDetail.getGuaranteedTerm()));
          } else {
            detail[detailCount][6] = new String("");
          }
          setIndividualCode = lRegOrderDetail.getSetIndividualCode();
          setCode = lRegOrderDetail.getSetCode();
          detailCount = detailCount + 1;
        }
        // 最終行がセット商品だった場合用
        if (SIUtil.isNotNull(setIndividualCode)) {
          // キープセット品テーブルor受注セット品テーブルからセット値引きと数量を取得
          StringBuffer setDiscountSql = new StringBuffer();
          setDiscountSql.append("SELECT bb.setdiscount, bb.setamount ");
          setDiscountSql.append("FROM ordertbl aa,ordersetcmdtytbl bb ");
          setDiscountSql.append("WHERE aa.ordercode = bb.ordercode ");
          setDiscountSql.append("AND aa.orderbranchcode = bb.orderbranchcode ");
          setDiscountSql.append("AND aa.ordercode = ").append(SIDBUtil.SQL2Str(code," "));
          setDiscountSql.append("AND aa.enabledflg = 1 ");
          setDiscountSql.append("AND bb.setindividualcode = ").append(SIDBUtil.SQL2Str(setIndividualCode," "));
          setDiscountSql.append("AND bb.setcode = ").append(SIDBUtil.SQL2Str(setCode));
          HashMap lResMap = new HashMap();
          lResMap = SIDBUtil.getOneRowData(lConnection, setDiscountSql.toString());
          
          int setdiscount = 0;
          if (SIUtil.isNotNull((String) lResMap.get("setdiscount"))) {
            setdiscount = Integer.parseInt((String) lResMap.get("setdiscount"));
            setdiscount = -setdiscount;
            
            if (setdiscount != 0) { // セット値引きが0でなければ出力
              detail[detailCount][0] = "";
              detail[detailCount][1] = SIConfig.SET_DISCOUNT_NAME_PDF;
              detail[detailCount][2] = Integer.toString(setdiscount);
              detail[detailCount][3] = (String) lResMap.get("setamount");
              detail[detailCount][4] = SIUtil.multi(Integer.toString(setdiscount), (String) lResMap.get("setamount"));
              detail[detailCount][5] = "";
              detail[detailCount][6] = "";
            }
          }
        }
      }
      
      // 口座情報
      SIPayMethod lPayMethod = new SIPayMethod();
      lPayMethod.setEncode(SIConfig.SIENCODE_NONE);
      lPayMethod.setMallShopCode(lLogin.getMallShopCode());
      lPayMethod.setPayMethodName("銀行振込");//銀行振り込み用に固定
      Collection payeeInfoColl = lPayMethod.getCollection(lConnection);
      Iterator payeeInfoIte = payeeInfoColl.iterator();
      StringBuffer lMailBuf = new StringBuffer();
      if (payeeInfoIte.hasNext()) {
        lMailBuf.append("【お振込先】　");
        SIPayeeInfo payeeInfo = (SIPayeeInfo) payeeInfoIte.next();
        lMailBuf.append(payeeInfo.getBankName() + "　");
        lMailBuf.append(payeeInfo.getSubBankName() + "　");
        if (SIUtil.isNotNull(payeeInfo.getAccountType())) {
          lMailBuf.append(SIFlagConf.SIFLAG_ACCOUNT_TYPE_NAME[Integer.parseInt(payeeInfo.getAccountType())][0]);// 口座種類
        }
        lMailBuf.append(payeeInfo.getAccountNo() + "　");// 口座番号
        lMailBuf.append(payeeInfo.getAccountName());// 口座名義人カナ
      }
      String totalPaymentPrice = lRegOrder.getTotalPaymentPrice(lConnection);
      
      int lineNo = 0;
      int pageSumNo = 1;
      int pageCount = 1;
      for (int ii = 0; ii < detailSumCount; ii++) {
        if (lineNo == 25) {
          pageSumNo = pageSumNo + 1;
          pageCount = pageCount + 1;
          lineNo = 0;
          lWrite.makeBillPage(pageSumNo, pageLineNumber);
          this.printBillMain(lConnection, true, lWrite, lRegOrder, delivery, date, totalPaymentPrice, lMailBuf.toString(), payList.getRemarks(), pageSumNo, pageCount);
        } else if (ii == 0) {
          this.printBillMain(lConnection, true, lWrite, lRegOrder, delivery, date, totalPaymentPrice, lMailBuf.toString(), payList.getRemarks(), pageSumNo, pageCount);
        }
        this.printBillSub(lWrite, detail[ii], (pageSumNo - 1) * (pageLineNumber - 1) + lineNo);
        lineNo = lineNo + 1;
      }
      
      lineNo = 0;
      pageCount = 1;
      for (int ii = 0; ii < detailSumCount; ii++) {
        if (lineNo == 25) {
          pageSumNo = pageSumNo + 1;
          pageCount = pageCount + 1;
          lineNo = 0;
          lWrite.makeBillPage(pageSumNo, pageLineNumber);
          this.printBillMain(lConnection, false, lWrite, lRegOrder, delivery, date, totalPaymentPrice, lMailBuf.toString(), payList.getRemarks(), pageSumNo, pageCount);
        } else if (ii == 0) {
          pageSumNo = pageSumNo + 1;
          lWrite.makeBillPage(pageSumNo, pageLineNumber);
          this.printBillMain(lConnection, false, lWrite, lRegOrder, delivery, date, totalPaymentPrice, lMailBuf.toString(), payList.getRemarks(), pageSumNo, pageCount);
        }
        this.printBillSub(lWrite, detail[ii], (pageSumNo - 1) * (pageLineNumber - 1) + lineNo);
        lineNo = lineNo + 1;
      }
      lWrite.makePage(pageSumNo * (pageLineNumber - 1) - 1);
      
      currentPage++;
    }
    lWrite.setSheetNum(currentPage-1);
    lWrite.removeSheetAt(currentPage);
    try {
      lWrite.close(response);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  
  private void printReceipt(HttpServletResponse response, Connection lConnection, UIPayListCond payList, SILogin lLogin) {
    String template = (String) this.getServletContext().getRealPath("/docs/receipt.xls");
    SIExcelRWrite lWrite = new SIExcelRWrite(SIExcelConf.SIEXCEL_RECEIPT_INX, template);
    lWrite.makeSheet(0, SIExcelConf.getTitleName(SIExcelConf.SIEXCEL_RECEIPT_INX), 0, false);
    SIDateTime lDateTime = new SIDateTime();
    String date = lDateTime.getFullDate2();
    UIRegOrder lRegOrder = new UIRegOrder();
    String lOrderCode = payList.getOrderCodeTxt();
    
    // 受注情報取得
    lRegOrder = new UIRegOrder();
    lRegOrder.setOrderCode(lOrderCode);
    lRegOrder.resetOrder(lConnection);

    // ヘッダ情報
    lWrite.writeDetailItem(0, 28, date, SIExcelConf.FIELD_STRING_TYPE, false);// 伝票番号
    lWrite.writeDetailItem(2, 28, lRegOrder.getInitDateTime(), SIExcelConf.FIELD_STRING_TYPE, false);// 受注日
    lWrite.writeDetailItem(5, 1, lRegOrder.getCustName(), SIExcelConf.FIELD_STRING_TYPE, false);// お名前
    
    // 入金明細情報Collection取得
    Collection payColl = payList.getCollection(lConnection, payList.getOrderCodeTxt());
    // Iterator it = payColl.iterator();
    SIPayment payment = null;
    
    String paymentNumber = payList.getPaymentNumberHid()[Integer.parseInt(payList.getPaymentNumberChk()[0])];
    payment = new SIPayment();
    payment = (SIPayment) ((ArrayList) payColl).get(Integer.parseInt(payList.getPaymentNumberChk()[0]));
    
    String tax = "0";
    float totalPayOfPrice = 0;
    float taxRate = Float.parseFloat(lRegOrder.getTaxRate()) / 100;
    if (!payment.getPaymentPrice().equals("0") && taxRate != 0) {
      totalPayOfPrice = Long.parseLong(payment.getPaymentPrice());
      tax = String.valueOf((Math.floor(totalPayOfPrice * taxRate / (1 + taxRate))));
    }
    lWrite.writeDetailItem(1, 28, lRegOrder.getOrderCode() + "-" + paymentNumber, SIExcelConf.FIELD_STRING_TYPE, false);// 伝票番号
    lWrite.writeDetailItem(9, 4, payment.getPaymentPrice(), SIExcelConf.FIELD_NUMERIC_TYPE, false);// 合計
    lWrite.writeDetailItem(9, 26, tax, SIExcelConf.FIELD_NUMERIC_TYPE, false);// 消費税
    
    // 控用
    int i = 42;
    lWrite.writeDetailItem(0 + i, 28, date, SIExcelConf.FIELD_STRING_TYPE, false);// 伝票番号
    lWrite.writeDetailItem(2 + i, 28, lRegOrder.getInitDateTime(), SIExcelConf.FIELD_STRING_TYPE, false);// 受注日
    lWrite.writeDetailItem(5 + i, 1, lRegOrder.getCustName(), SIExcelConf.FIELD_STRING_TYPE, false);// お名前
    lWrite.writeDetailItem(1 + i, 28, lRegOrder.getOrderCode() + "-" + paymentNumber, SIExcelConf.FIELD_STRING_TYPE, false);// 伝票番号
    lWrite.writeDetailItem(9 + i, 4, payment.getPaymentPrice(), SIExcelConf.FIELD_NUMERIC_TYPE, false);// 合計
    lWrite.writeDetailItem(9 + i, 26, tax, SIExcelConf.FIELD_NUMERIC_TYPE, false);// 消費税
    
    lWrite.makePage();
    try {
      lWrite.close(response);
    } catch (IOException e) {
      // e.printStackTrace();
    }
  }
}
