/** Created on 2003/08/06
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package jp.co.sint.servlet.mallmgr;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap; // 7.3.0 ST2026 追加
import java.util.Iterator; // 7.3.0 ST2026 追加

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

import jp.co.sint.basic.SICust;
import jp.co.sint.basic.SILogin;
import jp.co.sint.basic.SIMailTemp;
import jp.co.sint.basic.SIPDFUtil;
import jp.co.sint.beans.mallmgr.UICustListCond;
import jp.co.sint.beans.mallmgr.UIPurchaseHistory;
// import jp.co.sint.beans.mallmgr.UIPurchaseHistoryCond;
import jp.co.sint.beans.mallmgr.UIRegCust;
import jp.co.sint.config.SICSVConf;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIFlagConf;
import jp.co.sint.config.SIPDFConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SIDatabaseConnection;
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; // 7.3.0 ST2027 追加
import jp.co.sint.docs.EstimatePdf;
import jp.co.sint.mail.SIMail;
import jp.co.sint.mail.SISendMail;
import jp.co.sint.servlet.SIServlet;
import jp.co.sint.servlet.front.SICustomerSrv;
import jp.co.sint.tools.SICSVWrite;
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.SIURLMap;
import jp.co.sint.tools.SIUtil;

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

import com.lowagie.text.BadElementException;
// import com.lowagie.text.Cell;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.PageSize;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfWriter;

/**
 * @author arai To change the template for this generated type comment go to Window>Preferences>Java>Code Generation>Code and Comments
 */

public class SIRegCustSrv extends SIServlet {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  // 7.3.0 ST2026 追加 ここから
  // 顧客データ更新区分（1:追加 / 2:更新 / 3:削除)
  private static final String LC_ADD = "1";
  private static final String LC_UPD = "2";
  private static final String LC_DEL = "3";
  private static final String UPD_CONTRACT1 = "4";//承認
  private static final String UPD_CONTRACT2 = "5";//申請受付
  private static final String UPD_CONTRACT3 = "6";//審査後却下
  
  // メール送信メソッドに渡すHashMapのキー
  private static final String LC_MAPKEY_1 = "MAPKEY1";
  private static final String LC_MAPKEY_2 = "MAPKEY2";
  
  // 7.3.0 ST2026 追加 ここまで
  
  /**
   * doUpdate HTTP Get リクエストの処理
   * 
   * @param
   * @return
   * @throws
   */
  public void doUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    SILogin manLogin = SIHTMLUtil.getLogin(request);
    String strDBDateTime = null; // 7.3.0 ST2023 追加
    // 7.3.0 ST2026 追加 ここから
    HashMap hmMailData = new HashMap();
    Collection colCustDate = null;
    SIRegMngAccesslogSrv siRegMngAccesslogSrv = new SIRegMngAccesslogSrv();// 7.3.0 ST2023 追加
    // 7.3.0 ST2026 追加 ここまで
    if (!manLogin.isLogin()) {
      forwardKey(request, response, "webshop.jsp.manager.login");
      return;
    }
    
    HttpSession session = request.getSession(true); // セッションの取得
    SIDatabaseConnection databaseConnection = new SIDatabaseConnection();
    SIURLParameter urlParam = new SIURLParameter(request);// 7.1.1 ST0236 追加
    
    try {
      Connection connection;
      
      String actionName = this.getActionName(urlParam);// 画面からのアクション //7.1.1 ST0236 修正
      String editMode = this.getEditMode(urlParam); // DBへの編集モード //7.1.1 ST0236 修正
      
      UIRegCust regCust = new UIRegCust();
      UICustListCond custList = new UICustListCond();
      
      UIPurchaseHistory purchaseHistory = new UIPurchaseHistory();
      // UIPurchaseHistoryCond purchaseCond = new UIPurchaseHistoryCond();
      
      // データベースへのコネクションの作成
      connection = databaseConnection.getConnection();
      log.debug("doUpdate:actionName=" + actionName + ",editMode=" + editMode);
      
      if (SIConfig.SIACTION_CSV.equalsIgnoreCase(actionName)) {// CSVファイルへの出力
        custList = (UICustListCond) session.getAttribute(SIConfig.SISESSION_MAN_CUST_LIST_NAME);
        if (custList == null) custList = new UICustListCond();
        SILogin lLogin = SIHTMLUtil.getLogin(request);
        this.produceCSVFile(response, databaseConnection.getConnection(), custList, lLogin);
        if (!response.isCommitted()) {
          request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("database.query.notexist", "CSVデータ"));
          forwardKey(request, response, "webshop.jsp.manager.cust.list");
          // 7.3.0 ST2023 追加 ここから 管理ログ出力
        } else {
          try {
            siRegMngAccesslogSrv.insertTableData(databaseConnection.getConnection(), request, "8", null);
          } catch (SIDBAccessException e) {
            e.printStackTrace();
          }
          // 7.3.0 ST2023 追加 ここまで
        }
      } else if (SIConfig.SIACTION_MAIL.equalsIgnoreCase(actionName)) {// 新着メール
        custList = (UICustListCond) session.getAttribute(SIConfig.SISESSION_MAN_CUST_LIST_NAME);
        if (custList == null) custList = new UICustListCond();
        if (sendNewMail(request, connection, custList)) {
          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"));
        }
        forwardKey(request, response, "webshop.jsp.manager.cust.list");
      } else if (SIConfig.SIACTION_PDF.equalsIgnoreCase(actionName)) {// PDFファイルへの出力
        // 削除するPKデータの取得
        custList = new UICustListCond();
        custList.initDelete(request);
        if (custList.validatePDF(request)) {
          // PDFデータの対象するレコード関連のチェック
          if (custList.getPdfType().equals(SIPDFConf.SIPDF_TYPE_DIRECTMAIL)) {
            try {
              this.producePDFFileForDirectMail_Address(response, databaseConnection.getConnection(), custList);
              try {
                databaseConnection.getConnection().commit();
              } catch (SQLException sqle) {}
              if (!response.isCommitted()) forwardKey(request, response, "webshop.jsp.manager.cusl.list");
            } catch (Exception e) {
              try {
                databaseConnection.getConnection().rollback();
              } catch (SQLException ee) {}
              e.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.cust.list");
            }
          }
        } else {
          forwardKey(request, response, "webshop.jsp.manager.cust.list");
        }
      } else if (SIConfig.SIACTION_PDF2.equalsIgnoreCase(actionName)) {
        custList = new UICustListCond();
        custList.initDelete(request);
        if (custList.validatePDF2(request)) {
          try {
            String lDateTime = new SIDateTime().getFullDateTime();
            producePDFFile2(response, databaseConnection.getConnection(), custList, lDateTime);
            siRegMngAccesslogSrv.insertTableData(databaseConnection.getConnection(), request, "13", lDateTime);
          } catch (SIDBAccessException e1) {
            e1.printStackTrace();
          } catch (DocumentException e2) {
            e2.printStackTrace();
          } catch (SIDuplicateKeyException e3) {
            e3.printStackTrace();
          }
          if (!response.isCommitted()) forwardKey(request, response, "webshop.jsp.manager.cust.list");
        } else {
          forwardKey(request, response, "webshop.jsp.manager.cust.list");
        }
      } else if (SIConfig.SIACTION_PDF3.equalsIgnoreCase(actionName)) {
        custList = new UICustListCond();
        custList.initDelete(request);
        if (custList.validatePDF3(request,databaseConnection.getConnection())) {
          try {
            String lDateTime = new SIDateTime().getFullDateTime();
            producePDFFile3(response, databaseConnection.getConnection(), custList, lDateTime);
            siRegMngAccesslogSrv.insertTableData(databaseConnection.getConnection(), request, "14", lDateTime);
          } catch (SIDBAccessException e1) {
            e1.printStackTrace();
          } catch (DocumentException e2) {
            e2.printStackTrace();
          } catch (SIDuplicateKeyException e3) {
            e3.printStackTrace();
          }
          if (!response.isCommitted()) forwardKey(request, response, "webshop.jsp.manager.cust.list");
        } else {
          forwardKey(request, response, "webshop.jsp.manager.cust.list");
        }
      } else if ("pdfEx".equalsIgnoreCase(actionName)) {
        try {
          producePDFFileEx(response, databaseConnection.getConnection());
        } catch (SIDBAccessException e1) {
          e1.printStackTrace();
        } catch (DocumentException e2) {
          e2.printStackTrace();
        } catch (SIDuplicateKeyException e3) {
          e3.printStackTrace();
        }
        if (!response.isCommitted()) forwardKey(request, response, "webshop.jsp.manager.cust.list");
      } else if (SIConfig.SIACTION_LIST.equalsIgnoreCase(actionName)) {
        // データの取得とデータのチェック
        custList.init(request, urlParam);// 7.1.1 ST0236 修正
        custList.validate(request, connection);
        session.setAttribute(SIConfig.SISESSION_MAN_CUST_LIST_NAME, custList);
        forwardKey(request, response, "webshop.jsp.manager.cust.list");
      } else if ("purchaseModify".equalsIgnoreCase(actionName)) {// 購買履歴メモ更新モード
        regCust = (UIRegCust) session.getAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME);
        regCust.getMemo().reset(connection, regCust.getCustCode(), (String)urlParam.getParam("commentNumber"));
        session.setAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME,regCust);
        forwardKey(request, response, "webshop.jsp.manager.cust.edit");
      } else if ("purchaseReset".equalsIgnoreCase(actionName)) {// 購買履歴メモリセット
        regCust = (UIRegCust) session.getAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME);
        regCust.resetMemo();
        session.setAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME,regCust);
        forwardKey(request, response, "webshop.jsp.manager.cust.edit");
      } else if ("purchaseRegist".equalsIgnoreCase(actionName)) {// 購買履歴メモ登録
        regCust = (UIRegCust) session.getAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME);
        regCust.initMemo(urlParam);
        regCust.createMemo(connection, manLogin.getUserName());
        regCust.resetMemo();
        session.setAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME,regCust);
        request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.insert"));
        forwardKey(request, response, "webshop.jsp.manager.cust.edit");
      } else if ("purchaseDelete".equalsIgnoreCase(actionName)) {// 購買履歴メモ削除
        regCust = (UIRegCust) session.getAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME);
        regCust.initMemo(urlParam);
        regCust.deleteMemo(connection);
        regCust.resetMemo();
        session.setAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME,regCust);
        request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.delete"));
        forwardKey(request, response, "webshop.jsp.manager.cust.edit");
      } else if (SIConfig.SIACTION_CSV2.equals(actionName)) {
        regCust = (UIRegCust) session.getAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME);
        this.produceCSVFile2(response, databaseConnection.getConnection(), regCust.getCustCode());
        if (!response.isCommitted()) {
          request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("database.query.notexist", "CSVデータ"));
          forwardKey(request, response, "webshop.jsp.manager.cust.edit");
        } else {
          try {
            siRegMngAccesslogSrv.insertTableData(databaseConnection.getConnection(), request, "8", null);
          } catch (SIDBAccessException e) {
            e.printStackTrace();
          }
        }
      } else if (actionName.equalsIgnoreCase(SIConfig.SIACTION_ZIPDIC)) {// 郵便番号辞書ソフトから県名などを検索
        // データの取得
        regCust.init(request, urlParam);// 7.1.1 ST0236 修正
        regCust.initUrl(urlParam);// 7.1.1 ST0236 修正
        session.setAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME, regCust);
        if (SIUtil.match(SIConfig.SIADMIN_MM_SM, manLogin.getAdminType())) {// モール管理者
          forwardKey(request, response, "webshop.jsp.manager.cust.edit");
          // 7.0.1 削除 forwardKey(request, response, "webshop.jsp.manager.cust.edit");
        } else {// ショップ管理者
          forwardKey(request, response, "webshop.jsp.manager.cust.edit.shop");
        }
      } else if (actionName.equalsIgnoreCase(SIConfig.SIACTION_UPDATE)) {
        regCust.init(request, urlParam);
        regCust.validateCleansing(request, connection);
        session.setAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME, regCust);
        forwardKey(request, response, "webshop.jsp.manager.cust.edit");
      } else if (actionName.equalsIgnoreCase(SIConfig.SIACTION_UPDATE2)) {
        regCust = (UIRegCust) session.getAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME);
        try {
          int res = custCleansing(connection, request, regCust);
          if (res==0) {
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.freeword","名寄せ処理に失敗しました"));
          } else {
            strDBDateTime = SIDBUtil.getDBDateTime(databaseConnection.getConnection());
            siRegMngAccesslogSrv.insertTableData(databaseConnection.getConnection(), request, "16", strDBDateTime);
            try{connection.commit();}catch (Exception e){}
            regCust.setCustCodeBefore("");
            regCust.setCustNameBefore("");
            if (res==2) {
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.freeword","名寄せ処理を行ないました。処理の結果ゴールド会員に昇格しました。"));
            } else if (res==3) {
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.freeword","名寄せ処理を行ないました。処理の結果プラチナ会員に昇格しました。"));
            } else {
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.freeword","名寄せ処理を行ないました"));
            }
          }
          session.setAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME, regCust);
        } catch (SIDuplicateKeyException e1) {
          e1.printStackTrace();
          try{connection.rollback();}catch (Exception e){}
          request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.freeword","名寄せ処理に失敗しました"));
        } catch (SIDBAccessException e2) {
          e2.printStackTrace();
          try{connection.rollback();}catch (Exception e){}
          request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.freeword","名寄せ処理に失敗しました"));
        }
        forwardKey(request, response, "webshop.jsp.manager.cust.edit");
      } else if (SIConfig.SIACTION_BACK.equalsIgnoreCase(actionName)) {// 戻る処理
        if (SIUtil.isNull(this.getParameter(urlParam, "backURL"))) {
          forwardKey(request, response, "webshop.jsp.manager.cust.list");
        } else {
          forwardKey(request, response, this.getParameter(urlParam, "backURL"));
        }
      } else if (SIConfig.SIACTION_MODIFY.equalsIgnoreCase(actionName)) {// レコードの修正
        if (SIUtil.match(SIConfig.SIADMIN_MM_SM, manLogin.getAdminType())) {// モール管理者
          forwardKey(request, response, "webshop.jsp.manager.cust.edit");
        } else {// ショップ管理者
          forwardKey(request, response, "webshop.jsp.manager.cust.edit.shop");
        }
      } else if (SIConfig.SIACTION_NEW.equalsIgnoreCase(actionName)) {// 新規のレコード
        forwardKey(request, response, "webshop.jsp.manager.cust.edit");
      } else if (SIConfig.SIACTION_REMODIFY.equalsIgnoreCase(actionName)) {// 再修正へ
        forwardKey(request, response, "webshop.jsp.manager.cust.edit");
      } else if (SIConfig.SIACTION_CONFIRM.equalsIgnoreCase(actionName)) {// データの確認画面へ
        // データの取得
        regCust.init(request, urlParam);// 7.1.1 ST0236 修正
        regCust.initUrl(urlParam);// 7.1.1 ST0236 修正
        session.setAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME, regCust);
        // データのチェック
        if (regCust.validate(request, connection, false, false) == false) {// 7.1.1 ST0162 修正
          forwardKey(request, response, "webshop.jsp.manager.cust.edit");
        } else {
          forwardKey(request, response, "webshop.jsp.manager.cust.confirm");
        }
      } else if (SIConfig.SIACTION_DELETE.equalsIgnoreCase(actionName)) {
        colCustDate = (Collection) session.getAttribute(SIConfig.SISESSION_MAN_CUST_LIST_NAME_RTN); // 7.3.0 ST2026 追加
        try {
          custList.initDelete(request);
          // 削除するレコードのチェック
          if (custList.validateDelete(request, databaseConnection.getConnection())) {// 問題がなければ
            custHobbyTableData(connection, regCust, SIConfig.SIACTION_DELETE);
            custMakerTableData(connection, regCust, SIConfig.SIACTION_DELETE);
            custMenuTableData(connection, regCust, SIConfig.SIACTION_DELETE);
            strDBDateTime = SIDBUtil.getDBDateTime(databaseConnection.getConnection()); // 7.3.0 ST2023 追加
            deleteTableData(connection, custList, colCustDate, request, strDBDateTime); // 7.3.0 ST2026 更新 //7.3.0 ST2023 修正
            siRegMngAccesslogSrv.insertTableData(databaseConnection.getConnection(), request, "4", strDBDateTime);// 7.3.0 ST2023 追加 管理ログ出力
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.delete"));
          }
          forwardKey(request, response, "webshop.jsp.manager.cust.list");
        } catch (SIDuplicateKeyException e) {
          SICustomErrors errors = new SICustomErrors();
          errors.addError(new SICustomError("database.delete.duplicate"));
          request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
          forwardKey(request, response, "webshop.jsp.manager.cust.list");
        } catch (SIDBAccessException e) {
          SICustomErrors errors = new SICustomErrors();
          errors.addError(new SICustomError("database.execute.error"));
          request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
          forwardKey(request, response, "webshop.jsp.manager.cust.list");
        }
      } else if (SIConfig.SIACTION_PURCHASE.equalsIgnoreCase(actionName)) {
        colCustDate = (Collection) session.getAttribute(SIConfig.SISESSION_MAN_CUST_LIST_NAME_RTN);
        custList.initDelete(request);
        custList.setCustCodeTo((String)urlParam.getParam("custCode"));
        purchaseHistory = new UIPurchaseHistory(request, urlParam);
        purchaseHistory.initUrl(urlParam);
        purchaseHistory.setPageNumberTxt("1");
        purchaseHistory.setPageSizeSel(String.valueOf(SIConfig.SIPAGE_SIZE_DEFAULT));
        if (custList.getCustCodeChk().length == 1) {
          if (purchaseHistory.custReset(databaseConnection.getConnection(), custList.getCustCodeChk()[0])) {
            session.setAttribute(SIConfig.SISESSION_MAN_PURCHASE_HISATORY_NAME, purchaseHistory);
            forwardKey(request, response, "webshop.jsp.manager.cust.purchase");
          } else {
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            forwardKey(request, response, "webshop.jsp.manager.cust.list");
          }
        } else if (SIUtil.isNotNull(custList.getCustCodeTo())) {
            if (purchaseHistory.custReset(databaseConnection.getConnection(), custList.getCustCodeTo())) {
              session.setAttribute(SIConfig.SISESSION_MAN_PURCHASE_HISATORY_NAME, purchaseHistory);
              forwardKey(request, response, "webshop.jsp.manager.cust.purchase");
            } else {
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
              forwardKey(request, response, "webshop.jsp.manager.cust.list");
            }
        } else {
          SICustomErrors errors = new SICustomErrors();
          errors.addError(new SICustomError("manager.cust.list.purchase"));
          request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
          forwardKey(request, response, "webshop.jsp.manager.cust.list");
        }
      } else if ("purchaseDetail".equalsIgnoreCase(actionName)) {// 購買履歴
        purchaseHistory = new UIPurchaseHistory();
        purchaseHistory.setBackURL(this.getParameter(urlParam, "backUrl"));
        purchaseHistory.setPageNumberTxt("1");
        purchaseHistory.setPageSizeSel(String.valueOf(SIConfig.SIPAGE_SIZE_DEFAULT));
        purchaseHistory.initDetail(urlParam,databaseConnection.getConnection());
        if (purchaseHistory.custReset(databaseConnection.getConnection(), (String) urlParam.getParam("custCode"))) {
          session.setAttribute(SIConfig.SISESSION_MAN_PURCHASE_HISATORY_NAME, purchaseHistory);
          forwardKey(request, response, "webshop.jsp.manager.cust.purchase");
        } else {
          SICustomErrors errors = new SICustomErrors();
          errors.addError(new SICustomError("database.execute.error"));
          request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
          forwardKey(request, response, "webshop.jsp.manager.cust.edit");
        }
      } else if (SIConfig.SIACTION_PSEARCH.equalsIgnoreCase(actionName)) {
        purchaseHistory = (UIPurchaseHistory) session.getAttribute(SIConfig.SISESSION_MAN_PURCHASE_HISATORY_NAME);
        purchaseHistory.init(request, urlParam);// 7.1.1 ST0236 修正
        purchaseHistory.initUrl(urlParam);// 7.1.1 ST0236 修正
        purchaseHistory.setPageNumberTxt("1");// ページ番号の初期化 7.3.0 PI-NES0501 追加
        session.setAttribute(SIConfig.SISESSION_MAN_PURCHASE_HISATORY_NAME, purchaseHistory);
        purchaseHistory.validate(request);
        forwardKey(request, response, "webshop.jsp.manager.cust.purchase");
      } else if (SIConfig.SIACTION_NEXT.equalsIgnoreCase(actionName)) {
        // データの取得とデータのチェック
        purchaseHistory = (UIPurchaseHistory) session.getAttribute(SIConfig.SISESSION_MAN_PURCHASE_HISATORY_NAME);
        purchaseHistory.init(request, urlParam);// 7.1.1 ST0236 修正
        purchaseHistory.validate(request);
        session.setAttribute(SIConfig.SISESSION_MAN_PURCHASE_HISATORY_NAME, purchaseHistory);
        forwardKey(request, response, "webshop.jsp.manager.cust.purchase");
        // 7.3.0 PI-NES0501追加 ここまで
      } else if (SIConfig.SIACTION_SPECIAL.equalsIgnoreCase(actionName)) {
        regCust.init(request, urlParam);
        regCust.reset(databaseConnection.getConnection());
        if (sendPasswordMail(databaseConnection.getConnection(),regCust)) {
          try {connection.commit();} catch (SQLException ee) {}
          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.setAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME, regCust);
        forwardKey(request, response, "webshop.jsp.manager.cust.edit");
      } else {
        regCust = (UIRegCust) session.getAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME);
        
        // データのチェック
        if (regCust.validate(request, connection, false, false) == false) {// 7.1.1 ST0162 修正
          regCust.setActionNameTxt(SIConfig.SIACTION_REMODIFY);
          session.setAttribute(SIConfig.SISESSION_MAN_CUST_EDIT_NAME, regCust);
          forwardKey(request, response, "webshop.jsp.manager.cust.edit");
        } else {
          try {
            strDBDateTime = SIDBUtil.getDBDateTime(databaseConnection.getConnection()); // 7.3.0 ST2023 追加
            if (editMode.equalsIgnoreCase(SIConfig.SIEDIT_MODE_INSERT)) {
              regCust.setCustCode(SIDBUtil.getFirstData(connection, SIDBUtil.getNextVal("CUSTTBL_CUSTCD_SEQ")));
              custHobbyTableData(connection, regCust, SIConfig.SIEDIT_MODE_INSERT);
              custMakerTableData(connection, regCust, SIConfig.SIEDIT_MODE_INSERT);
              custMenuTableData(connection, regCust, SIConfig.SIEDIT_MODE_INSERT);
              insertTableData(connection, regCust, request, strDBDateTime); // 新規レコードの作成 //7.3.0 ST2029 修正 パラメータ追加
              siRegMngAccesslogSrv.insertTableData(databaseConnection.getConnection(), request, "2", strDBDateTime);// 7.3.0 ST2023 追加 管理ログ出力
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.insert"));
              // 7.3.0 ST2026 追加 ここから メール送信
              hmMailData.put(LC_MAPKEY_1, regCust);
              sendUserRegistMail(request, connection, hmMailData, LC_ADD);
              // 7.3.0 ST2026 追加 ここまで
            } else if (editMode.equalsIgnoreCase(SIConfig.SIEDIT_MODE_UPDATE)) {
              String temp = LC_UPD;
              int check = checkContractChange(connection,regCust);
              if (check == 1) temp = UPD_CONTRACT1;
              else if (check == 2) temp = UPD_CONTRACT2;
              else if (check == 3) temp = UPD_CONTRACT3;
              
              custHobbyTableData(connection, regCust, SIConfig.SIEDIT_MODE_UPDATE);// 7.3.0 ST2023 修正 引数追加
              custMakerTableData(connection, regCust, SIConfig.SIEDIT_MODE_UPDATE);
              custMenuTableData(connection, regCust, SIConfig.SIEDIT_MODE_UPDATE);
              updateTableData(connection, regCust, request, strDBDateTime); // 既存のレコードの修正
              siRegMngAccesslogSrv.insertTableData(databaseConnection.getConnection(), request, "3", strDBDateTime);// 7.3.0 ST2023 追加 管理ログ出力
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.modify"));
              // 7.3.0 ST2026 追加 ここから メール送信
              hmMailData.put(LC_MAPKEY_1, regCust);
              sendUserRegistMail(request, connection, hmMailData, temp);
              // 7.3.0 ST2026 追加 ここまで
            } else {
              log.error("no know edit mode.editMode=" + editMode);
            }
            try {
              connection.commit();
            } catch (SQLException ee) {}
            forwardKey(request, response, "webshop.jsp.manager.cust.result");
          } catch (SIDuplicateKeyException sqle) {
            try {
              connection.rollback();
            } catch (SQLException ee) {}
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.delete.duplicate"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            forwardKey(request, response, "webshop.jsp.manager.cust.edit");
          } catch (SIDBAccessException sqle) {
            try {
              connection.rollback();
            } catch (SQLException ee) {}
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            forwardKey(request, response, "webshop.jsp.manager.cust.edit");
          }
        }
      }
    } catch (SQLException e) {
      e.printStackTrace();
      throw new ServletException();
    } catch (NamingException e) {
      e.printStackTrace();
      throw new ServletException();
    } finally {
      databaseConnection.close();
    }
  }
  
  /**
   * insertTableData データベースにレコードを作成します。 DBから値を取得した値をセットする場合や、CSVから取得した値をセットする場合はこの関数を使います。
   * 
   * @param Connection
   * @param UIRegCust
   * @param HttpServletRequest //7.3.0 ST2029 修正 パラメータ追加
   * @param String 日時 //7.3.0 ST2023 修正 パラメータ追加
   * @return
   * @throws
   */
  public static void insertTableData(Connection connection, UIRegCust regCust, HttpServletRequest request, String strDBDateTime) throws SIDuplicateKeyException,
      SIDBAccessException {// 7.3.0 ST2029 修正 パラメータ追加 //7.3.0 ST2023 修正 パラメータ追加
    SIInsertRec lRec = new SIInsertRec("custTbl");
    
    lRec.add("CustCode", regCust.getCustCode());
    lRec.add("MemberLevelCode", regCust.getMemberLevelCode());
    lRec.add("CustCompanyFlg", regCust.getCustCompanyFlg());
    lRec.add("CustName", regCust.getCustName());
    lRec.add("CustPronName", regCust.getCustPronName());
    lRec.add("Email", regCust.getEmail());
    lRec.add("Password", regCust.getPassword());
    lRec.add("PWQuestion", regCust.getPWQuestion());
    lRec.add("PWAnswer", regCust.getPWAnswer());
    lRec.add("PostCode1", regCust.getPostCode1());
    lRec.add("PostCode2", regCust.getPostCode2());
    lRec.add("Address1", regCust.getAddress1());
    lRec.add("Address2", regCust.getAddress2());
    lRec.add("Address3", regCust.getAddress3());
    lRec.add("CompanyName", regCust.getCompanyName());
    // 7.3.0 PI-NES5051 追加
    lRec.add("CorporationName", regCust.getCorporationName());
    lRec.add("StoreTel", regCust.getStoreTel());
    lRec.add("Tel", regCust.getTel());
    lRec.add("Fax", regCust.getFax());
    lRec.add("PayMethodCode", regCust.getPayMethodCode());
    lRec.add("BirthDate", regCust.getBirthDate());
    lRec.add("Sex", regCust.getSex());
    lRec.add("Job", regCust.getJob());
    lRec.add("HowToKnow", regCust.getHowToKnow());
    lRec.add("NewMailFlg", regCust.getNewMailFlg());
    lRec.add("OtherMenu", regCust.getOtherMenu());
    if (SIUtil.isNull(regCust.getRegistRoute())&&SIURLMap.isApps(request)) {
      regCust.setRegistRoute("C");
    }else if (SIUtil.isNull(regCust.getRegistRoute())&&SIURLMap.isSmartPhone(request)) {
      regCust.setRegistRoute("8");
    } else if (SIUtil.isNull(regCust.getRegistRoute())){
      regCust.setRegistRoute("0");
    }
    lRec.add("RegistRoute", regCust.getRegistRoute());// 7.3.0 PI-NES0501 追加
    lRec.add("ChargeCode", regCust.getCharge());
    lRec.add("ReceivableFlg", regCust.getReceivableFlg());
    lRec.add("IntroductionMailFlg", regCust.getIntroductionMailFlg());
    lRec.add("memberLevelFixedFlg", regCust.getMemberLevelFixedFlg());
    lRec.add("noPointFlg", regCust.getNoPointFlg());
    lRec.add("noDeliveryFlg", regCust.getNoDeliveryFlg());
    lRec.add("hairCosmeFlg", regCust.getHairCosmeFlg());
    if (SIUtil.isNull(regCust.getMailStatus())) regCust.setMailStatus("0");
    lRec.add("mailStatus", regCust.getMailStatus());
    lRec.add("otherReason", regCust.getOtherReason());
    if ("http://".equals(regCust.getSalonUrl())) regCust.setSalonUrl("");
    lRec.add("SalonUrl", regCust.getSalonUrl());
    
    lRec.add("noRequestFlg", regCust.getNoRequestFlg());
    lRec.add("companyPronName", regCust.getCompanyPronName());
    lRec.add("corporationPronName", regCust.getCorporationPronName());
    lRec.add("openingFlg", regCust.getOpeningFlg());
    if ("1".equals(regCust.getOpeningFlg())){
      lRec.add("openingPlanDate", regCust.getOpeningPlanDate());
      lRec.add("openingArea", regCust.getOpeningArea());
    }else{
      lRec.add("openingPlanDate", "");
      lRec.add("openingArea", "");
    }
    
    // 7.3.0 ST2029 追加 ここから
    SILogin manLogin = SIHTMLUtil.getLogin(request);
    if (!manLogin.isLogin()) {
      lRec.add("LoginDateTime", new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp"));
    }
    // 7.3.0 ST2029 追加 ここまで
    lRec.add("DelFlg", Integer.parseInt(SIConfig.SIDEL_FLG_NORMAL)); // 7.3.0 ST2025 追加
    // 7.3.0 ST2028 追加 ここから
    if (regCust.getLoginErrCount() != null) {
      lRec.add("LoginErrorCount", Integer.parseInt(regCust.getLoginErrCount()));
    } else {
      lRec.add("LoginErrorCount", 0);
    }
    lRec.add("LoginErrorDateTime", new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp"));
    // 7.3.0 ST2028 追加 ここまで
    // 7.3.0 ST2023 追加 ここから
    if (manLogin.getMallShopCode() != null) { // 更新ショップ（モール）コード
      lRec.add("UpdateMallShopCode", manLogin.getMallShopCode());
    } else {
      lRec.add("UpdateMallShopCode", "");
    }
    if (manLogin.getUserCode() != null) { // 更新ユーザーコード
      lRec.add("UpdateUserCode", manLogin.getUserCode());
    } else {
      lRec.add("UpdateUserCode", "");
    }
    if (strDBDateTime != null) { // 更新日時
      lRec.add("UpdateDateTime", new SISpcType(SIDBUtil.SQL2Str(strDBDateTime,"::timestamp")));
    } else {
      lRec.add("UpdateDateTime", new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp"));
    }
    // 7.3.0 ST2023 追加 ここまで
    // データの更新
    lRec.execute(connection);
    
    SIModifyRec mRec = new SIModifyRec("custtbl");
    mRec.addCondition("CustCode", regCust.getCustCode());
    mRec.addCondition("ContractDateTime","");
    mRec.addCondition("hairCosmeFlg", "1");
    if (strDBDateTime != null) { // 更新日時
      mRec.add("ContractDateTime", new SISpcType(SIDBUtil.SQL2Str(strDBDateTime,"::timestamp(0)")));
    } else {
      mRec.add("ContractDateTime", new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp(0)"));
    }
    mRec.execute(connection);
    
    // アドレス帳の修正
    SICustomerSrv.updateCustAddressTableData(connection, regCust, manLogin);// 7.3.0 ST2023 修正
    // add by mikami
    // SSOユーザーの本登録
    movePreCustData(connection, regCust);
    // add end
  }
  
  /**
   * updateTableData データベースにレコードを修正します。
   * 
   * @param
   * @return
   * @throws
   */
  public static void updateTableData(Connection connection, UIRegCust regCust, HttpServletRequest request, String strDBDateTime) throws SIDuplicateKeyException,
      SIDBAccessException { // 7.3.0 ST2023 修正 引数追加
    // 7.2.0 ST0330 追加 ここから
    updateTableData(connection, regCust, false, request, strDBDateTime);// 7.3.0 ST2023 修正 引数追加
  }
  
  /**
   * <b>updateTableData</b> データベースのレコードを修正します。
   * 
   * @param connection データベースコネクション
   * @param regCust UIRegCustオブジェクト
   * @param frontFlg フロントから呼び出すときはtrue、管理側から呼び出すときはfalse
   * @param HttpServletRequest リクエスト(ST2023 追加)
   * @param String DB日時 (ST2023 追加)
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   */
  public static void updateTableData(Connection connection, UIRegCust regCust, boolean frontFlg, HttpServletRequest request, String strDBDateTime) throws SIDuplicateKeyException,
      SIDBAccessException { // 7.3.0 ST2023 修正 引数追加
    // 7.2.0 ST0330 追加 ここまで
    
    boolean manualChangeFlg = false;
    if (regCust.isModifyMode()&&SIDBUtil.hasData(connection,"SELECT custcode FROM custtbl WHERE custcode="+SIDBUtil.SQL2Str(regCust.getCustCode())+" AND memberlevelcode!="+SIDBUtil.SQL2Str(regCust.getMemberLevelCode()))) {
      manualChangeFlg = true;
    }
    
    SIModifyRec lRec = new SIModifyRec("custTbl");
    lRec.addCondition("CustCode", regCust.getCustCode());
    lRec.add("CustCompanyFlg", regCust.getCustCompanyFlg());
    lRec.add("CustName", regCust.getCustName());
    lRec.add("CustPronName", regCust.getCustPronName());
    lRec.add("Email", regCust.getEmail());
    // 7.2.0 ST0330 修正 ここから
    if (!frontFlg) {
      lRec.add("Password", regCust.getPassword());
      lRec.add("PWQuestion", regCust.getPWQuestion());
      lRec.add("PWAnswer", regCust.getPWAnswer());
    }
    // 7.2.0 ST0330 修正 ここまで
    lRec.add("PostCode1", regCust.getPostCode1());
    lRec.add("PostCode2", regCust.getPostCode2());
    lRec.add("Address1", regCust.getAddress1());
    lRec.add("Address2", regCust.getAddress2());
    lRec.add("Address3", regCust.getAddress3());
    lRec.add("CompanyName", regCust.getCompanyName());
    // 7.3.0 PI-NES5051 追加
    lRec.add("CorporationName", regCust.getCorporationName());
    lRec.add("StoreTel", regCust.getStoreTel());
    lRec.add("Tel", regCust.getTel());
    lRec.add("Fax", regCust.getFax());
    lRec.add("PayMethodCode", regCust.getPayMethodCode());
    lRec.add("BirthDate", regCust.getBirthDate());
    lRec.add("Sex", regCust.getSex());
    lRec.add("Job", regCust.getJob());
    lRec.add("HowToKnow", regCust.getHowToKnow());
    lRec.add("NewMailFlg", regCust.getNewMailFlg());
    lRec.add("OtherMenu", regCust.getOtherMenu());
    lRec.add("SalonUrl", regCust.getSalonUrl());
    if (!frontFlg) {
      lRec.add("MemberLevelCode", regCust.getMemberLevelCode());
      lRec.add("RegistRoute", regCust.getRegistRoute());
      lRec.add("ChargeCode", regCust.getCharge());
      lRec.add("ReceivableFlg", regCust.getReceivableFlg());
      lRec.add("IntroductionMailFlg", regCust.getIntroductionMailFlg());
      lRec.add("memberLevelFixedFlg", regCust.getMemberLevelFixedFlg());
      lRec.add("noDeliveryFlg", regCust.getNoDeliveryFlg());
      lRec.add("noPointFlg", regCust.getNoPointFlg());
      lRec.add("hairCosmeFlg", regCust.getHairCosmeFlg());
      lRec.add("mailStatus", regCust.getMailStatus());
      lRec.add("otherReason", regCust.getOtherReason());
      lRec.add("noRequestFlg", regCust.getNoRequestFlg());
    }else{
      lRec.add("otherReason", "");
      lRec.add("noDeliveryFlg", "0");
    }
    if (manualChangeFlg&&"1".equals(regCust.getMemberLevelCode())) {
      lRec.add("rankChangeDate1", new SISpcType("current_date"));
    }else if (manualChangeFlg&&"2".equals(regCust.getMemberLevelCode())) {
      lRec.add("rankChangeDate2", new SISpcType("current_date"));
    }else if (manualChangeFlg&&"3".equals(regCust.getMemberLevelCode())) {
      lRec.add("rankChangeDate3", new SISpcType("current_date"));
    }
    // 7.3.0 ST2027 追加 ここから
    if (frontFlg == false) {
      lRec.add("DelFlg", regCust.getDelFlg());
      lRec.add("LoginErrorCount", regCust.getLoginErrCount()); // 7.3.0 ST2028 追加
      if (strDBDateTime != null) { // 更新日時
        lRec.add("LoginErrorDateTime", new SISpcType(SIDBUtil.SQL2Str(strDBDateTime,"::timestamp")));
      } else {
        lRec.add("LoginErrorDateTime", new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp"));
      }
    }
    // 7.3.0 ST2027 追加 ここまで
    // 7.3.0 ST2023 追加 ここから
    SILogin manLogin = SIHTMLUtil.getLogin(request);
    if (manLogin.getMallShopCode() != null) { // 更新ショップ（モール）コード
      lRec.add("UpdateMallShopCode", manLogin.getMallShopCode());
    } else {
      lRec.add("UpdateMallShopCode", "");
    }
    if (manLogin.getUserCode() != null) { // 更新ユーザーコード
      lRec.add("UpdateUserCode", manLogin.getUserCode());
    } else {
      lRec.add("UpdateUserCode", "");
    }
    if (strDBDateTime != null) { // 更新日時
      lRec.add("UpdateDateTime", new SISpcType(SIDBUtil.SQL2Str(strDBDateTime,"::timestamp")));
    } else {
      lRec.add("UpdateDateTime", new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp"));
    }
    // 7.3.0 ST2023 追加 ここまで
    
    lRec.add("companyPronName", regCust.getCompanyPronName());
    lRec.add("corporationPronName", regCust.getCorporationPronName());
    lRec.add("openingFlg", regCust.getOpeningFlg());
    if ("1".equals(regCust.getOpeningFlg())){
      lRec.add("openingPlanDate", regCust.getOpeningPlanDate());
      lRec.add("openingArea", regCust.getOpeningArea());
    }else{
      lRec.add("openingPlanDate", "");
      lRec.add("openingArea", "");
    }
    // データの更新
    lRec.execute(connection);
    
    SIModifyRec mRec = new SIModifyRec("custtbl");
    mRec.addCondition("CustCode", regCust.getCustCode());
    mRec.addCondition("ContractDateTime","");
    mRec.addCondition("hairCosmeFlg", "1");
    if (strDBDateTime != null) { // 更新日時
      mRec.add("ContractDateTime", new SISpcType(SIDBUtil.SQL2Str(strDBDateTime,"::timestamp(0)")));
    } else {
      mRec.add("ContractDateTime", new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp(0)"));
    }
    mRec.execute(connection);
    // アドレス帳の修正
    SICustomerSrv.updateCustAddressTableData(connection, regCust, manLogin); // 7.3.0 ST2023 修正
  }
  
  // 7.2.0 ST0330 追加 ここから
  /**
   * <b>updatePassData</b> データベースのレコードを修正します。
   * 
   * @param connection データベースコネクション
   * @param regCust UIRegCustオブジェクト
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   */
  public static void updatePassData(Connection connection, UIRegCust regCust) throws SIDuplicateKeyException, SIDBAccessException {
    SIModifyRec lRec = new SIModifyRec("custTbl");
    lRec.addCondition("CustCode", regCust.getCustCode());
    if (SIUtil.isNotNull(regCust.getPassword())) {
      lRec.add("Password", regCust.getPassword());
    }
    lRec.add("PWQuestion", regCust.getPWQuestion());
    lRec.add("PWAnswer", regCust.getPWAnswer());
    // データの更新
    lRec.execute(connection);
  }
  
  // 7.2.0 ST0330 追加 ここまで
  
  /**
   * deleteTableData データベースのレコードを削除します。
   * 
   * @param
   * @param HttpServletRequest リクエスト (ST2023 追加)
   * @param String DB日時 (ST2023 追加)
   * @return
   * @throws
   */
  public void deleteTableData(Connection connection, UICustListCond listCond, Collection colCustDate, HttpServletRequest request, String strDBDateTime)
      throws SIDuplicateKeyException, SIDBAccessException { // 7.3.0 ST2026 更新 //7.3.0 ST2023 修正
    // 7.3.0 ST2027 追加 ここから
    String strDelChar = "*****";
    // int intDelChar = 0;
    SISpcType lSpcType = null;
    SILogin manLogin = null; // 7.3.0 ST2023 追加
    // 7.3.0 ST2027 追加 ここまで
    // 7.3.0 ST2026 追加 ここから
    HashMap hmMailData = new HashMap(); // メール送信クラスに渡すHashMap
    SICust objSICust = null; // SICustクラスのインスタンス
    Iterator iteSICustList = null;
    // 7.3.0 ST2026 追加 ここまで
    String testData[] = listCond.getCustCodeChk();
    if (testData == null) {
      testData = new String[0];
    }
    
    // SIDeleteRec lDeleteRec = new SIDeleteRec();//7.3.0 ST2027 削除
    SIModifyRec lRec = null; // 7.3.0 ST2027 追加
    manLogin = SIHTMLUtil.getLogin(request); // 7.3.0 ST2023 追加
    if (testData != null) {
      for (int ii = 0; ii < testData.length; ii++) {
        if (SIUtil.isNotNull(testData[ii])) {
          // pointmanmtblを削除
          // 7.3.0 ST2027 削除 ここから
          // lDeleteRec = new SIDeleteRec();
          // lDeleteRec.setTableName("pointmanmtbl");
          // lDeleteRec.addCondition("custCode", testData[ii]);
          // lDeleteRec.execute(connection);
          
          // custqatblを削除
          // lDeleteRec = new SIDeleteRec();
          // lDeleteRec.setTableName("custqatbl");
          // lDeleteRec.addCondition("custCode", testData[ii]);
          // lDeleteRec.execute(connection);
          
          // reviewtblを削除
          // lDeleteRec = new SIDeleteRec();
          // lDeleteRec.setTableName("reviewtbl");
          // lDeleteRec.addCondition("custCode", testData[ii]);
          // lDeleteRec.execute(connection);
          
          // custaddresstblを削除
          // lDeleteRec = new SIDeleteRec();
          // lDeleteRec.setTableName("custaddresstbl");
          // lDeleteRec.addCondition("custCode", testData[ii]);
          // lDeleteRec.execute(connection);
          
          // custhobbyを削除
          // lDeleteRec = new SIDeleteRec();
          // lDeleteRec.setTableName("custhobbytbl");
          // lDeleteRec.addCondition("custCode", testData[ii]);
          // lDeleteRec.execute(connection);
          
          // reserveordertblを削除
          // lDeleteRec = new SIDeleteRec();
          // lDeleteRec.setTableName("reserveordertbl");
          // lDeleteRec.addCondition("custCode", testData[ii]);
          // lDeleteRec.execute(connection);
          
          // custtblを削除
          // lDeleteRec = new SIDeleteRec();
          // lDeleteRec.setTableName("custtbl");
          // lDeleteRec.addCondition("custCode", testData[ii]);
          // lDeleteRec.execute(connection);
          // 7.3.0 ST2027 削除 ここまで
          
          // 7.3.0 ST2027 追加 ここから
          lRec = new SIModifyRec("reviewtbl"); // レビューマスタ
          lRec.addCondition("custCode", testData[ii]);
          lRec.add("EMAIL", strDelChar); // EMAIL
          lRec.execute(connection);
          log.debug("delete sql=" + lRec.getSQL());
          lRec = null;
          
          lRec = new SIModifyRec("SRCHLOGTBL"); // 検索条件ログ
          lRec.addCondition("custCode", testData[ii]);
          lRec.add("CUSTNAME", strDelChar); // 顧客名
          lRec.execute(connection);
          log.debug("delete sql=" + lRec.getSQL());
          lRec = null;
          
          lRec = new SIModifyRec("CMDTYDETAILLOGTBL"); // 商品詳細ログ
          lRec.addCondition("custCode", testData[ii]);
          lRec.add("CUSTNAME", strDelChar); // 顧客名
          lRec.execute(connection);
          log.debug("delete sql=" + lRec.getSQL());
          lRec = null;
          
          lRec = new SIModifyRec("custaddresstbl"); // アドレス帳
          lRec.addCondition("custCode", testData[ii]);
          lRec.add("DELIVERYNAME", strDelChar); // 配送先名称
          lRec.add("DELIVERYADDRESSEE", strDelChar); // 配送先正式名
          lRec.add("EMAIL", strDelChar); // EMAIL
          lRec.add("POSTCODE1", strDelChar.substring(0, 3)); // 郵便番号1
          lRec.add("POSTCODE2", strDelChar.substring(0, 4)); // 郵便番号2
          lRec.add("ADDRESS1", strDelChar); // 住所１
          lRec.add("ADDRESS2", strDelChar); // 住所２
          lRec.add("ADDRESS3", strDelChar); // 住所３
          lRec.add("COMPANYNAME", strDelChar); // サロン名
          lRec.add("CORPORATIONNAME", strDelChar); // 会社名
          lRec.add("TEL", strDelChar); // 連絡先電話番号
          lRec.add("FAX", strDelChar); // 連絡先ＦＡＸ番号
          // 7.3.0 ST2023 追加 ここから
          if (manLogin.getMallShopCode() != null) { // 更新ショップ（モール）コード
            lRec.add("UpdateMallShopCode", manLogin.getMallShopCode());
          } else {
            lRec.add("UpdateMallShopCode", "");
          }
          if (manLogin.getUserCode() != null) { // 更新ユーザーコード
            lRec.add("UpdateUserCode", manLogin.getUserCode());
          } else {
            lRec.add("UpdateUserCode", "");
          }
          if (strDBDateTime != null) { // 更新日時
            lRec.add("UpdateDateTime", new SISpcType(SIDBUtil.SQL2Str(strDBDateTime,"::timestamp")));
          } else {
            lRec.add("UpdateDateTime", new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp"));
          }
          // 7.3.0 ST2023 追加 ここまで
          lRec.execute(connection);
          log.debug("delete sql=" + lRec.getSQL());
          lRec = null;
          
          lRec = new SIModifyRec("reserveordertbl"); // 予約商品
          lRec.addCondition("custCode", testData[ii]);
          lRec.add("CUSTNAME", strDelChar); // 顧客名
          lRec.add("CUSTPRONNAME", strDelChar); // 顧客名カナ
          lRec.add("EMAIL", strDelChar); // EMAIL
          lRec.execute(connection);
          log.debug("delete sql=" + lRec.getSQL());
          lRec = null;
          
          lRec = new SIModifyRec("ORDERDELIVERYTBL"); // 受注配送先
          lRec.addCondition("custCode", testData[ii]);
          lRec.add("DELIVERYNAME", strDelChar); // 配送先呼称
          lRec.add("DELIVERYADDRESSEE", strDelChar); // 配送先宛名
          lRec.add("EMAIL", strDelChar); // EMAIL
          lRec.add("POSTCODE1", strDelChar.substring(0, 3)); // 郵便番号1
          lRec.add("POSTCODE2", strDelChar.substring(0, 4)); // 郵便番号2
          lRec.add("ADDRESS1", strDelChar); // 住所1
          lRec.add("ADDRESS2", strDelChar); // 住所2
          lRec.add("ADDRESS3", strDelChar); // 住所3
          lRec.add("COMPANYNAME", strDelChar); // 会社名
          lRec.add("TEL", strDelChar); // 連絡先電話番号
          lRec.add("FAX", strDelChar); // 連絡先FAX番号
          lRec.execute(connection);
          log.debug("delete sql=" + lRec.getSQL());
          lRec = null;
          
          lRec = new SIModifyRec("ORDERTBL"); // 受注ヘッダ
          lRec.addCondition("custCode", testData[ii]);
          lRec.add("CUSTNAME", strDelChar); // 顧客名
          lRec.add("CUSTPRONNAME", strDelChar); // 顧客名カナ
          lRec.add("EMAIL", strDelChar); // EMAIL
          lRec.add("ORDERADDRESSEE", strDelChar); // 請求書宛名
          lRec.add("POSTCODE1", strDelChar.substring(0, 3)); // 郵便番号1
          lRec.add("POSTCODE2", strDelChar.substring(0, 4)); // 郵便番号2
          lRec.add("ADDRESS1", strDelChar); // 請求書住所1
          lRec.add("ADDRESS2", strDelChar); // 請求書住所2
          lRec.add("ADDRESS3", strDelChar); // 請求書住所3
          lRec.add("COMPANYNAME", strDelChar); // 会社名
          lRec.add("STORETEL", strDelChar); // 店舗TEL
          lRec.add("TEL", strDelChar); // 自宅TEL
          lRec.add("FAX", strDelChar); // FAX番号
          // 7.3.0 ST2023 追加 ここから
          if (manLogin.getMallShopCode() != null) { // 更新ショップ（モール）コード
            lRec.add("UpdateMallShopCode", manLogin.getMallShopCode());
          } else {
            lRec.add("UpdateMallShopCode", "");
          }
          if (manLogin.getUserCode() != null) { // 更新ユーザーコード
            lRec.add("UpdateUserCode", manLogin.getUserCode());
          } else {
            lRec.add("UpdateUserCode", "");
          }
          /* PI-BTG0701 削除 受注更新日は書き換えない
          if (strDBDateTime != null) { // 更新日時
            lRec.add("UpdateDateTime", new SISpcType(strDBDateTime + "::timestamp"));
          } else {
            lRec.add("UpdateDateTime", new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp"));
          }*/
          // 7.3.0 ST2023 追加 ここまで
          lRec.execute(connection);
          log.debug("delete sql=" + lRec.getSQL());
          lRec = null;
          
          lRec = new SIModifyRec("custtbl"); // 顧客マスタ
          lRec.addCondition("custCode", testData[ii]);
          lRec.add("CUSTNAME", strDelChar); // 顧客名
          lRec.add("CUSTPRONNAME", strDelChar); // 顧客名カナ
          lRec.add("EMAIL", testData[ii] + strDelChar); // EMAIL
          lRec.add("PASSWORD", strDelChar); // パスワード
          lRec.add("PWQUESTION", strDelChar); // パスワードリマインダ質問
          lRec.add("PWANSWER", strDelChar); // パスワードリマインダ回答
          lRec.add("POSTCODE1", strDelChar.substring(0, 3)); // 郵便番号1
          lRec.add("POSTCODE2", strDelChar.substring(0, 4)); // 郵便番号2
          lRec.add("ADDRESS1", strDelChar); // 住所1
          lRec.add("ADDRESS2", strDelChar); // 住所2
          lRec.add("ADDRESS3", strDelChar); // 住所3
          lRec.add("COMPANYNAME", strDelChar); // サロン名
          lRec.add("CORPORATIONNAME", strDelChar); // 会社名
          lRec.add("STORETEL", strDelChar); // 連絡先電話番号1
          lRec.add("TEL", strDelChar); // 連絡先電話番号2
          lRec.add("FAX", strDelChar); // 連絡先FAX番号
          lRec.add("REGISTROUTE", ""); // 登録経路 7.3.0 PI-NES0501 追加
          lRec.add("DELFLG", Integer.parseInt(SIConfig.SIDEL_FLG_DELETE)); // 削除フラグ（1:削除）
          // DBサーバ日付の取得文作成
          // DBタイプの判別
          lSpcType = new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp");
          lRec.add("DELDATETIME", lSpcType); // 削除日時
          // 7.3.0 ST2023 追加 ここから
          if (manLogin.getMallShopCode() != null) { // 更新ショップ（モール）コード
            lRec.add("UpdateMallShopCode", manLogin.getMallShopCode());
          } else {
            lRec.add("UpdateMallShopCode", "");
          }
          if (manLogin.getUserCode() != null) { // 更新ユーザーコード
            lRec.add("UpdateUserCode", manLogin.getUserCode());
          } else {
            lRec.add("UpdateUserCode", "");
          }
          if (strDBDateTime != null) { // 更新日時
            lRec.add("UpdateDateTime", new SISpcType(SIDBUtil.SQL2Str(strDBDateTime,"::timestamp")));
          } else {
            lRec.add("UpdateDateTime", new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp"));
          }
          // 7.3.0 ST2023 追加 ここまで
          lRec.execute(connection);
          log.debug("delete sql=" + lRec.getSQL());
          lRec = null;
          
          // 7.3.0 ST2027 追加 ここまで
          // log.debug("delete sql=" + lRec.getSQL());//7.3.0 ST2027 削除
          // 7.3.0 ST2026 追加 ここから 削除通知メール送信
          iteSICustList = colCustDate.iterator();
          while (iteSICustList.hasNext()) {
            objSICust = (SICust) iteSICustList.next();
            if (testData[ii].equals(objSICust.getCustCode()) == true) {
              hmMailData.put(LC_MAPKEY_1, objSICust.getEmail());
              hmMailData.put(LC_MAPKEY_2, objSICust.getCustName());
              sendUserRegistMail(request, connection, hmMailData, LC_DEL);
              break;
            }
          }
          // 7.3.0 ST2026 追加 ここまで
        }
      }
    }
    try {
      connection.commit();
    } catch (SQLException sqle) {
      throw new SIDBAccessException("delete data error.");
    }
  }
  
  /**
   * custHobbyTableData データベースにレコードを作成します。
   * 
   * @param
   * @return
   * @throws
   */
  public static void custHobbyTableData(Connection connection, UIRegCust regCust, String action) throws SIDuplicateKeyException, SIDBAccessException {
    if (SIUtil.isNull(regCust.getCustCode())) { return; }
    
    SIDeleteRec lDeleteRec = new SIDeleteRec();
    lDeleteRec.setTableName("CustHobbyTbl");
    lDeleteRec.addCondition("CustCode", regCust.getCustCode());
    lDeleteRec.execute(connection);
    log.debug("custHobbyTableData delete sql=" + lDeleteRec.getSQL());
    
    if (!action.equalsIgnoreCase(SIConfig.SIACTION_DELETE)) {
      SIInsertRec lRec = new SIInsertRec("CustHobbyTbl");
      for (int i = 0; i < regCust.getHobby().length; i++) {
        if (SIUtil.isNotNull(regCust.getHobby()[i])) {
          lRec = new SIInsertRec("CustHobbyTbl");
          lRec.add("CustCode", regCust.getCustCode());
          lRec.add("HobbyName", regCust.getHobby()[i]);
          log.debug("custHobbyTableData delete sql=" + lRec.getSQL());
          lRec.execute(connection);
        }
      }
    }
    
    try {
      connection.commit();
    } catch (SQLException sqle) {
      throw new SIDBAccessException("delete data error.");
    }
  }
  
  /**
   * custMakerTableData データベースにレコードを作成します。
   * 
   * @param
   * @return
   * @throws
   */
  public static void custMakerTableData(Connection connection, UIRegCust regCust, String action) throws SIDuplicateKeyException, SIDBAccessException {
    if (SIUtil.isNull(regCust.getCustCode())) { return; }
    
    SIDeleteRec lDeleteRec = new SIDeleteRec();
    lDeleteRec.setTableName("CustMakerTbl");
    lDeleteRec.addCondition("CustCode", regCust.getCustCode());
    lDeleteRec.execute(connection);
    log.debug("custMakerTableData delete sql=" + lDeleteRec.getSQL());
    
    if (!action.equalsIgnoreCase(SIConfig.SIACTION_DELETE)) {
      SIInsertRec lRec = new SIInsertRec("CustMakerTbl");
      for (int i = 0; i < regCust.getMaker().length; i++) {
        if (SIUtil.isNotNull(regCust.getMaker()[i])) {
          lRec = new SIInsertRec("CustMakerTbl");
          lRec.add("CustCode", regCust.getCustCode());
          lRec.add("MakerCode", regCust.getMaker()[i]);
          log.debug("custMakerTableData insert sql=" + lRec.getSQL());
          lRec.execute(connection);
        }
      }
    }
    
    try {
      connection.commit();
    } catch (SQLException sqle) {
      throw new SIDBAccessException("delete data error.");
    }
  }
  
  /**
   * custMenuTableData データベースにレコードを作成します。
   * 
   * @param
   * @return
   * @throws
   */
  public static void custMenuTableData(Connection connection, UIRegCust regCust, String action) throws SIDuplicateKeyException, SIDBAccessException {
    if (SIUtil.isNull(regCust.getCustCode())) { return; }
    
    SIDeleteRec lDeleteRec = new SIDeleteRec();
    lDeleteRec.setTableName("CustMenuTbl");
    lDeleteRec.addCondition("CustCode", regCust.getCustCode());
    lDeleteRec.execute(connection);
    log.debug("custMenuTableData delete sql=" + lDeleteRec.getSQL());
    
    if (!action.equalsIgnoreCase(SIConfig.SIACTION_DELETE)&&"1".equals(regCust.getOpeningFlg())) {
      SIInsertRec lRec = new SIInsertRec("CustMenuTbl");
      for (int i = 0; i < regCust.getSupportMenu().length; i++) {
        if (SIUtil.isNotNull(regCust.getSupportMenu()[i])) {
          lRec = new SIInsertRec("CustMenuTbl");
          lRec.add("CustCode", regCust.getCustCode());
          lRec.add("MenuName", regCust.getSupportMenu()[i]);
          log.debug("custMenuTableData insert sql=" + lRec.getSQL());
          lRec.execute(connection);
        }
      }
    }
    
    try {
      connection.commit();
    } catch (SQLException sqle) {
      throw new SIDBAccessException("delete data error.");
    }
  }
  
  /**
   * <b>produceCSVFile</b> CSVファイルを作成します。
   * 
   * @param response クライアントまでのresponse
   * @param lConnection DBへのコネクション
   * @param cmdtyList CSVファイルに出力するデータセット
   * @return なし
   * @throws なし
   */
  private void produceCSVFile(HttpServletResponse response, Connection lConnection, UICustListCond custList, SILogin lLogin) {
    // CSVファイル名の作成
    String lCsvFileName = SICSVConf.getCsvFileName(SICSVConf.SICSV_CUST_INX);
    SICSVWrite lCsv = new SICSVWrite(lCsvFileName);
    
    // SQL文の作成
    StringBuffer lCustBuf = new StringBuffer();
    lCustBuf.append("SELECT DISTINCT c.*,con.*,ch.chargename AS charge,CASE c.receivableflg WHEN 1 THEN '売掛' ELSE '前金' END AS receivableflgvalue ");
    lCustBuf.append(" ,ml.memberlevelname ");
    lCustBuf.append(" ,CASE WHEN memberlevelfixedflg=1 THEN '固定する' ELSE '固定しない' END AS memberlevelfixedtype ");
    lCustBuf.append(" ,CASE WHEN nopointflg=1 THEN '付与しない' ELSE '付与する' END AS nopointtype ");
    lCustBuf.append(" ,CASE WHEN nodeliveryflg=1 THEN '郵送不可' ELSE '郵送可' END AS nodeliverytype ");
    lCustBuf.append(" ,CASE WHEN c.openingflg=1 THEN '独立、開業、新規出店の予定がある' ELSE '開業予定なし' END AS openingtype ");
    lCustBuf.append(" ,TO_CHAR(c.openingplandate,'YYYY年MM月頃') AS openingplandatetxt ");
    lCustBuf.append(" ,me.supportmenu ");
    lCustBuf.append(" FROM MemberLevelMTbl ml,CustTbl c LEFT OUTER JOIN ");
    lCustBuf.append(" (SELECT CASE WHEN SUM(CASE makercode WHEN '1230' THEN 1 ELSE 0 END) = 1 THEN '契約済み' ELSE '' END AS contract1 ");
    lCustBuf.append(" ,CASE WHEN SUM(CASE makercode WHEN '1231' THEN 1 ELSE 0 END) = 1 THEN '契約済み' ELSE '' END AS contract2 ");
    lCustBuf.append(" ,CASE WHEN SUM(CASE makercode WHEN '1232' THEN 1 ELSE 0 END) = 1 THEN '契約済み' ELSE '' END AS contract3 ");
    lCustBuf.append(" ,CASE WHEN SUM(CASE makercode WHEN '1250' THEN 1 ELSE 0 END) = 1 THEN '契約済み' ELSE '' END AS contract4 ");
    lCustBuf.append(" ,custcode AS custcode2 FROM custmakertbl GROUP BY custcode) con ");
    lCustBuf.append(" ON c.custcode = con.custcode2 ");
    lCustBuf.append(" LEFT OUTER JOIN (SELECT custcode,string_agg(menuname,'、') AS supportmenu FROM custmenutbl GROUP BY custcode) me ON c.custcode=me.custcode ");
    lCustBuf.append(" LEFT OUTER JOIN chargetbl ch ON c.chargecode=ch.chargecode ");
    
    if (SIUtil.isNotNull(custList.getMakerCode())) {
      lCustBuf.append(" LEFT OUTER JOIN custmakertbl f ON c.custcode = f.custcode ");
    }
    if (custList.getHobby() != null && custList.getHobby().length > 0 && !"0".equals(custList.getHobbySelect())) {
      lCustBuf.append(" LEFT OUTER JOIN ");
      lCustBuf.append(" (SELECT hobbyname,custcode FROM custhobbytbl) g ");
      lCustBuf.append(" ON c.custcode = g.custcode ");
    }
    if (custList.getSearchFlg()) {
      if (lLogin.isShop()) {
        lCustBuf.append(" ,ShopCustConnVW a ");
        lCustBuf.append(" WHERE a.custcode=c.custCode ");
        lCustBuf.append(" AND a.shopcode=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode(), " "));
      } else {
        lCustBuf.append(" WHERE 1=1");
      }
      lCustBuf.append(custList.getCondtionSQL());
      lCustBuf.append(" AND c.memberLevelCode=ml.memberLevelCode ");
    } else {
      lCustBuf.append(" WHERE 1=2 ");
    }
    
    lCustBuf.append(" ORDER BY c.custcode ASC ");
    
    try{
      // SQL文の設定
      lCsv.setSqlStatement(lCustBuf.toString());
      // タイトルとField名の設定
      lCsv.setCsvTitleAndField(SICSVConf.getTitleAndFieldName(SICSVConf.SICSV_CUST_INX));
      // CSVファイルの出力
      lCsv.execute(lConnection, response);
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  
  private void produceCSVFile2(HttpServletResponse response, Connection lConnection, String custCode) {
    // CSVファイル名の作成
    String lCsvFileName = SICSVConf.getCsvFileName(SICSVConf.SICSV_PURCHASECOMMENT_LIST_INX);
    SICSVWrite lCsv = new SICSVWrite(lCsvFileName);
    
    // SQL文の作成
    StringBuffer lCustBuf = new StringBuffer();
    lCustBuf.append("SELECT p.initdatetime,p.updatedatetime,p.custcode,c.custname,CASE p.memostatus::text ");
    for (int i=0;i<SIFlagConf.SIFLAG_PURCHASECOMMENT_STATUS_FLG_NAME.length; i++){
      lCustBuf.append("WHEN ").append(SIDBUtil.SQL2Str(SIFlagConf.SIFLAG_PURCHASECOMMENT_STATUS_FLG_NAME[i][1]," "));
      lCustBuf.append("THEN ").append(SIDBUtil.SQL2Str(SIFlagConf.SIFLAG_PURCHASECOMMENT_STATUS_FLG_NAME[i][0]," "));
    }
    lCustBuf.append("ELSE '未分類' END AS memostatus,p.username,p.lastupdateusername,p.comment ");
    lCustBuf.append("FROM purchasecommenttbl p,custtbl c ");
    lCustBuf.append("WHERE p.custcode=c.custcode AND p.custcode = ").append(SIDBUtil.SQL2Str(custCode));
    lCustBuf.append(" ORDER BY p.initdatetime DESC ");
    
    try{
      // SQL文の設定
      lCsv.setSqlStatement(lCustBuf.toString());
      // タイトルとField名の設定
      lCsv.setCsvTitleAndField(SICSVConf.getTitleAndFieldName(SICSVConf.SICSV_PURCHASECOMMENT_LIST_INX));
      // CSVファイルの出力
      lCsv.execute(lConnection, response);
    }catch(Exception e){
      e.printStackTrace();
    }
  }
  
  /**
   * <b>sendNewMail</b> 検索結果の顧客に新着メールを送信します
   * 
   * @param lRequest
   * @param lConnection
   * @param lCustList UICustListCond
   * @return boolean
   */
  public boolean sendNewMail(HttpServletRequest lRequest, Connection lConnection, UICustListCond lCustList) {
    SILogin lLogin = SIHTMLUtil.getLogin(lRequest);
    Statement statement = null;
    ResultSet resultSet = null;
    boolean lResult = true;
    // SICust lCust=new SICust();
    Collection lMailList = new ArrayList();
    
    SISendMail lSendMail = new SISendMail();
    SIMailTemp lMailTemp = new SIMailTemp(lLogin.getMallShopCode(), SIConfig.SIMAIL_TEMPLATE_NEW_ARRIVE);
    
    try {
      lMailTemp.reset(lConnection);
    } catch (SIDBAccessException e1) {
      lResult = false;
      e1.printStackTrace();
    }
    
    // 7.2.1 ST2017 修正 ここから
    // SQL文の作成
    if (lCustList.getSearchFlg()) {
      StringBuffer lSqlBuf = new StringBuffer("SELECT c.EMAIL FROM CustTbl c ");
      if (SIUtil.isNotNull(lCustList.getMakerCode())) {
        lSqlBuf.append(" LEFT OUTER JOIN custmakertbl f ON c.custcode = f.custcode ");
      }
      if (lLogin.isShop()) {
        lSqlBuf.append(",ShopCustConnVW a ");
        lSqlBuf.append("WHERE a.custcode=c.custCode ");
        lSqlBuf.append("AND a.shopcode=" + SIDBUtil.SQL2Str(lLogin.getMallShopCode(), " "));
      } else {
        lSqlBuf.append("WHERE 1=1 ");
      }
      lSqlBuf.append("AND c.DelFlg < 9 "); // 7.3.0 ST2027 追加 削除ユーザーを対象外とする
      lSqlBuf.append(lCustList.getCondtionSQL());
      lSqlBuf.append(" ORDER BY c.custcode ASC");
      
      // 実行
      try {
        statement = lConnection.createStatement();
        resultSet = statement.executeQuery(lSqlBuf.toString());
        // メールアドレスのセット
        while (resultSet.next()) {
          lMailList.add(resultSet.getString("EMAIL"));
        }
      } catch (Exception ex) {
        log.debug("exception sql = " + lSqlBuf.toString());
      } finally {
        SIDBUtil.close(resultSet, statement);
      }
      
      lSendMail = new SISendMail((String[]) lMailList.toArray(new String[0]), lMailTemp);
      try {
        lResult = lSendMail.execute() && lResult;
      } catch (SIFatalException e) {
        lResult = false;
        e.printStackTrace();
      }
    }
    /*
     * StringBuffer lSqlBuf = new StringBuffer("SELECT c.* FROM CustTbl c"); if(lCustList.getSearchFlg()){ if(lLogin.isShop()){ lSqlBuf.append(" ,ShopCustConnVW a ");
     * lSqlBuf.append(" WHERE a.custcode=c.custCode "); lSqlBuf.append(" AND a.shopcode="+SIDBUtil.SQL2Str(lLogin.getMallShopCode()," ")); }else{ lSqlBuf.append(" WHERE 1=1"); }
     * lSqlBuf.append(lCustList.getCondtionSQL()); }else{ lSqlBuf.append(" WHERE 1=2 "); } lSqlBuf.append(" ORDER BY c.custcode ASC "); //実行 try{ statement =
     * lConnection.createStatement(); resultSet = statement.executeQuery(lSqlBuf.toString()); int i=0; //顧客コードのセット while (resultSet.next()){ lCust=new
     * SICust(resultSet.getString("custCode")); try{ lCust.reset(lConnection); lMailList.add(lCust.getEmail()); }catch (SIDBAccessException e){ lResult=false; e.printStackTrace(); } }
     * }catch(Exception ex){ log.debug("exception sql = " + lSqlBuf.toString()); }finally{ SIDBUtil.close(resultSet, statement); } lSendMail=new
     * SISendMail((String[])lMailList.toArray(new String[0]),lMailTemp); try{ lResult=lSendMail.execute()&&lResult; }catch(SIFatalException e){ lResult=false; e.printStackTrace(); }
     */
    // 7.2.1 ST2017 修正 ここまで
    return lResult;
  }
  
  /**
   * <b>producePDFFileForDirectMail_Address</b> ダイレクトメールのあて先を出力します
   * 
   * @param response
   * @param lConnection
   * @param lCustList UICustListCond
   * @throws SIDBAccessException
   */
  private void producePDFFileForDirectMail_Address(HttpServletResponse response, Connection lConnection, UICustListCond lCustList) throws SIDBAccessException {
    // String lCustCode="";
    
    File lCustTempDir = (File) this.getServletContext().getAttribute("javax.servlet.context.tempdir");
    File lCustTempFile = new File("");
    try {
      lCustTempFile = File.createTempFile("cust_", ".pdf", lCustTempDir);
    } catch (IOException e1) {
      e1.printStackTrace();
    }
    String lFileName = lCustTempFile.getAbsolutePath();
    Document document = null;
    document = new Document(new Rectangle(PageSize.A4));// A4
    
    try {
      PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(lFileName));
      document.open();
      
      if (lCustList.getCustCodeChk() == null) {
        log.warn("not init ");
        return;
      }
      
      producePDFFileForDirectMail_Address(lConnection, document, writer, lCustList);
      
      if (lCustList.getCustCodeChk().length > 0) {
        document.close();
        String lOutputFileName = SIPDFConf.SIPDF_PREFIX_DIRECTMAIL_FILE_NAME + (new SIDateTime().getDateTimeString()) + "." + SIPDFConf.SIPDF_EXTENSION_NAME;
        SIPDFUtil lPdfUtil = new SIPDFUtil();
        lPdfUtil.execute(response, lFileName, lOutputFileName);
      }
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (DocumentException e) {
      e.printStackTrace();
    } finally {
      // 臨時ファイルの削除
      lCustTempFile.delete();
    }
  }
  
  private void producePDFFileForDirectMail_Address(Connection lConnection, Document document, PdfWriter writer, UICustListCond lCustList) throws SIDBAccessException {
    // Cell lCell;
    String custCode = "";
    String custCode2 = "";
    SICust lCust2 = new SICust();
    int cnt = 0;
    
    try {
      document.newPage();
      
      for (int i = 0; i < lCustList.getCustCodeChk().length; i = i + 2) {
        custCode = lCustList.getCustCodeChk()[i];
        SICust lCust = new SICust(custCode);
        lCust.reset(lConnection);
        
        if (i + 1 < lCustList.getCustCodeChk().length) {
          custCode2 = lCustList.getCustCodeChk()[i + 1];
          lCust2 = new SICust(custCode2);
          lCust2.reset(lConnection);
        } else {
          lCust2 = null;
        }
        
        PdfContentByte cb = writer.getDirectContent();
        cb.beginText();
        
        // ----1列目-----//
        // 郵便番号１
        cb.setFontAndSize(SIPDFConf.SIFONT_GOTHIC8B.getBaseFont(), SIPDFConf.SIFONT_GOTHIC8B.size());
        cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "〒 " + lCust.getPostCode(), SIPDFConf.SIDIRECTMAIL_ADDRESS_LEFT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt],
            0);
        // 住所１
        cb.setFontAndSize(SIPDFConf.SIFONT_GOTHIC10B.getBaseFont(), SIPDFConf.SIFONT_GOTHIC10B.size());
        cb.showTextAligned(PdfContentByte.ALIGN_LEFT, lCust.getAddress1(), SIPDFConf.SIDIRECTMAIL_ADDRESS_LEFT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 1
            * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT, 0);
        cb.setFontAndSize(SIPDFConf.SIFONT_GOTHIC10B.getBaseFont(), SIPDFConf.SIFONT_GOTHIC10B.size());
        if (lCust.getAddress2().length() < 25) {
          cb.showTextAligned(
              PdfContentByte.ALIGN_LEFT // 住所2(２６文字未満）
              , lCust.getAddress2(), SIPDFConf.SIDIRECTMAIL_ADDRESS_LEFT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 2 * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT,
              0);
        } else {
          cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 住所2(２６文字以上）１行目
              , lCust.getAddress2().substring(0, 25), SIPDFConf.SIDIRECTMAIL_ADDRESS_LEFT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 2
                  * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT, 0);
          cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 住所2(２６文字以上）２行目
              , lCust.getAddress2().substring(25), SIPDFConf.SIDIRECTMAIL_ADDRESS_LEFT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 2
                  * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT - 8, 0);
        }
        
        if (lCust.getAddress3().length() < 25) {
          cb.showTextAligned(
              PdfContentByte.ALIGN_LEFT // 住所3(２６字未満）
              , lCust.getAddress3(), SIPDFConf.SIDIRECTMAIL_ADDRESS_LEFT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 3 * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT,
              0);
        } else {
          cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 住所3(２６字以上）１行目
              , lCust.getAddress3().substring(0, 25), SIPDFConf.SIDIRECTMAIL_ADDRESS_LEFT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 3
                  * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT, 0);
          cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 住所3(２６字以上）２行目
              , lCust.getAddress3().substring(25), SIPDFConf.SIDIRECTMAIL_ADDRESS_LEFT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 3
                  * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT - 8, 0);
        }
        
        if (SIUtil.isNotNull(lCust.getCompanyName())) {
          cb.setFontAndSize(SIPDFConf.SIFONT_GOTHIC11B.getBaseFont(), SIPDFConf.SIFONT_GOTHIC11B.size());
          cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 会社名
              , lCust.getCompanyName(), SIPDFConf.SIDIRECTMAIL_ADDRESS_LEFT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 4
                  * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT - 8, 0);
          cb.setFontAndSize(SIPDFConf.SIFONT_GOTHIC13B.getBaseFont(), SIPDFConf.SIFONT_GOTHIC13B.size());
          cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 顧客名
              , lCust.getCustName() + " 様", SIPDFConf.SIDIRECTMAIL_ADDRESS_LEFT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 5
                  * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT - 15, 0);
        } else {
          cb.setFontAndSize(SIPDFConf.SIFONT_GOTHIC13B.getBaseFont(), SIPDFConf.SIFONT_GOTHIC13B.size());
          cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 顧客名
              , lCust.getCustName() + " 様", SIPDFConf.SIDIRECTMAIL_ADDRESS_LEFT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 4
                  * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT - 8, 0);
        }
        
        // ----2列目-----//
        if (lCust2 != null) {
          // 郵便番号2
          cb.setFontAndSize(SIPDFConf.SIFONT_GOTHIC8B.getBaseFont(), SIPDFConf.SIFONT_GOTHIC8B.size());
          cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "〒 " + lCust2.getPostCode(), SIPDFConf.SIDIRECTMAIL_ADDRESS_RIGHT_START_POS,
              SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt], 0);
          // 住所2
          cb.setFontAndSize(SIPDFConf.SIFONT_GOTHIC10B.getBaseFont(), SIPDFConf.SIFONT_GOTHIC10B.size());
          cb.showTextAligned(PdfContentByte.ALIGN_LEFT, lCust2.getAddress1(), SIPDFConf.SIDIRECTMAIL_ADDRESS_RIGHT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 1
              * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT, 0);
          cb.setFontAndSize(SIPDFConf.SIFONT_GOTHIC10B.getBaseFont(), SIPDFConf.SIFONT_GOTHIC10B.size());
          if (lCust2.getAddress2().length() < 25) {
            cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 住所2(２６文字未満）
                , lCust2.getAddress2(), SIPDFConf.SIDIRECTMAIL_ADDRESS_RIGHT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 2
                    * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT, 0);
          } else {
            cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 住所2(２６文字以上）１行目
                , lCust2.getAddress2().substring(0, 25), SIPDFConf.SIDIRECTMAIL_ADDRESS_RIGHT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 2
                    * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT, 0);
            cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 住所2(２６文字以上）２行目
                , lCust2.getAddress2().substring(25), SIPDFConf.SIDIRECTMAIL_ADDRESS_RIGHT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 2
                    * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT - 8, 0);
          }
          
          if (lCust2.getAddress3().length() < 25) {
            cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 住所3(２６字未満）
                , lCust2.getAddress3(), SIPDFConf.SIDIRECTMAIL_ADDRESS_RIGHT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 3
                    * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT, 0);
          } else {
            cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 住所3(２６字以上）１行目
                , lCust2.getAddress3().substring(0, 25), SIPDFConf.SIDIRECTMAIL_ADDRESS_LEFT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 3
                    * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT, 0);
            cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 住所3(２６字以上）２行目
                , lCust2.getAddress3().substring(25), SIPDFConf.SIDIRECTMAIL_ADDRESS_RIGHT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 3
                    * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT - 8, 0);
          }
          if (SIUtil.isNotNull(lCust.getCompanyName())) {
            cb.setFontAndSize(SIPDFConf.SIFONT_GOTHIC11B.getBaseFont(), SIPDFConf.SIFONT_GOTHIC11B.size());
            cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 会社名
                , lCust2.getCompanyName(), SIPDFConf.SIDIRECTMAIL_ADDRESS_RIGHT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 4
                    * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT - 8, 0);
            cb.setFontAndSize(SIPDFConf.SIFONT_GOTHIC13B.getBaseFont(), SIPDFConf.SIFONT_GOTHIC13B.size());
            cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 顧客名
                , lCust2.getCustName() + " 様", SIPDFConf.SIDIRECTMAIL_ADDRESS_RIGHT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 5
                    * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT - 15, 0);
          } else {
            cb.setFontAndSize(SIPDFConf.SIFONT_GOTHIC13B.getBaseFont(), SIPDFConf.SIFONT_GOTHIC13B.size());
            cb.showTextAligned(PdfContentByte.ALIGN_LEFT // 顧客名
                , lCust2.getCustName() + " 様", SIPDFConf.SIDIRECTMAIL_ADDRESS_RIGHT_START_POS, SIPDFConf.SIDIRECTMAIL_ADDRESS_TOP_START_POS[cnt] - 4
                    * SIPDFConf.SIDIRECTMAIL_ADDRESS_HEIGHT - 8, 0);
          }
        }
        cb.endText();
        
        if (cnt == 4) {
          document.newPage();
          cnt = 0;
        } else {
          cnt++;
        }
      }
    } catch (BadElementException e1) {
      e1.printStackTrace();
    } catch (DocumentException e1) {
      e1.printStackTrace();
    }
  }
  
  /**
   * destroy リソースの後処理
   * 
   * @param
   * @return
   * @throws
   */
  public void destroy() {}
  
  // 7.3.0 ST2026 追加 ここから
  /**
   * sendUserRegistMail メールを送信する 顧客データが登録・修正・削除された場合に使用する(バックサイド)
   * 
   * @param Connection DBコネクション
   * @param HashMap 送信先に関するデータを納めるHashMap
   * @param String 更新区分（1:新規 / 2:修正 / 3:削除)
   */
  private void sendUserRegistMail(HttpServletRequest lRequest, Connection connection, HashMap hmCustData, String strMode) {
    
    StringBuffer lMailBuf = null; // メール本文用StringBuffer
    SISendMail lSendMail = null; // メール送信クラス
    String lReserveChangeDateTime = null; // 現在日付
    String[] strMailAdr = new String[2]; // メール１通に対するメール送信先
    UIRegCust regCust = null; // 顧客データ（オブジェクト）
    String strDelMailAdr = null; // 削除時の削除対象メールアドレス
    String strDelCustName = null; // 削除時の削除対象顧客氏名
    String strMailTemp = null; // メールテンプレートの定数保存
    
    // メールを作成・送信
    lMailBuf = new StringBuffer();
    lSendMail = new SISendMail();
    SIMail lMail = null;
    SIURLParameter urlParam = new SIURLParameter(lRequest);
    
    // 更新区分ごとの処理（テンプレートのセットとHashMapからのデータ取り出し）
    if (LC_ADD.equals(strMode) == true || LC_UPD.equals(strMode) == true || UPD_CONTRACT1.equals(strMode) == true || UPD_CONTRACT2.equals(strMode) == true || UPD_CONTRACT3.equals(strMode) == true) {
      strMailTemp = SIConfig.SIMAIL_TEMPLATE_USER_REGIST;
      regCust = (UIRegCust) hmCustData.get(LC_MAPKEY_1);
    } else if (LC_DEL.equals(strMode) == true) {
      strMailTemp = SIConfig.SIMAIL_TEMPLATE_USER_DELETE;
      strDelMailAdr = (String) hmCustData.get(LC_MAPKEY_1);
      strDelCustName = (String) hmCustData.get(LC_MAPKEY_2);
    }
    // テンプレートの取得
    try {
      lSendMail.setMailTemp(connection, "0", strMailTemp);
    } catch (SIFatalException e) {
      e.printStackTrace();
    }
    // 処理日付の取得
    lReserveChangeDateTime = (new SIDateTime()).getFullDateTime();
    
    // メールの本文の作成
    if (LC_ADD.equals(strMode) == true) {
      /*
      lMailBuf.append("\n登録日時:" + lReserveChangeDateTime);
      lMailBuf.append("\n\nお客様情報 (登録通知) ");
      lMailBuf.append("\n=============");
      lMailBuf.append("\nお客様氏名:").append(regCust.getCustName()).append(" 様");
      lMailBuf.append("\nお客様のメールアドレス:").append(regCust.getEmail());
      lMailBuf.append("\n=============");
      */
      lMailBuf.append("\n--------------------------------------------------------------");
      lMailBuf.append("\n■お客様情報（登録通知）");
      lMailBuf.append("\n______________________________________________________________");
      lMailBuf.append("\n\nお客様氏名：").append(regCust.getCustName()).append(" 様");
      lMailBuf.append("\nログインID（メールアドレス）：").append(regCust.getEmail());
      lMailBuf.append("\n\n　★ログインはこちら　⇒　http://www.beautygarage.jp/");
      lMailBuf.append("\n\n　※パスワードをお忘れの場合は、下記よりご確認下さい。");
      lMailBuf.append("\n　　→https://www.beautygarage.jp/ws/remainder");
    } else if (LC_UPD.equals(strMode) == true) {
      /*
      lMailBuf.append("\n修正日時:" + lReserveChangeDateTime);
      lMailBuf.append("\n\nお客様情報 (更新通知) ");
      lMailBuf.append("\n=============");
      lMailBuf.append("\nお客様氏名:").append(regCust.getCustName()).append(" 様");
      lMailBuf.append("\nお客様のメールアドレス:").append(regCust.getEmail());
      lMailBuf.append("\n=============");
      */
      lMailBuf.append("\n--------------------------------------------------------------");
      lMailBuf.append("\n■お客様情報（更新通知）");
      lMailBuf.append("\n______________________________________________________________");
      lMailBuf.append("\n\nお客様氏名：").append(regCust.getCustName()).append(" 様");
      lMailBuf.append("\nログインID（メールアドレス）：").append(regCust.getEmail());
      lMailBuf.append("\n\n　★ログインはこちら　⇒　http://www.beautygarage.jp/");
      lMailBuf.append("\n\n　※パスワードをお忘れの場合は、下記よりご確認下さい。");
      lMailBuf.append("\n　　→https://www.beautygarage.jp/ws/remainder");
    } else if (LC_DEL.equals(strMode) == true) {
      lMailBuf.append("\n削除日時:" + lReserveChangeDateTime);
      lMailBuf.append("\n\nお客様情報 (削除通知) ");
      lMailBuf.append("\n=============");
      lMailBuf.append("\nお客様氏名:").append(strDelCustName).append(" 様");
      lMailBuf.append("\nお客様のメールアドレス:").append(strDelMailAdr);
      lMailBuf.append("\n=============");
    } else if (UPD_CONTRACT1.equals(strMode) == true) {
      if (SIUtil.isNotNull(regCust.getCorporationName())) lMailBuf.append(regCust.getCorporationName() + "\n");
      if (SIUtil.isNotNull(regCust.getCompanyName())) lMailBuf.append(regCust.getCompanyName() + "\n");
      lMailBuf.append(regCust.getCustName() + " 様\n\n");
      lMailBuf.append("いつもお世話になっております。株式会社ビューティガレージです。\n");
      lMailBuf.append("この度は、「化粧品購買/販売特約サロン」お取引申込みをいただきまして誠にありがとうございました。\n\n");
      lMailBuf.append("化粧品および頭髪用化粧品の、お申込みについて承認致しました。\n");
      lMailBuf.append("弊社オンラインショップよりログイン後、ご購入のお手続きが可能です。\n");
      lMailBuf.append("↓↓↓ \n");
      lMailBuf.append("http://www.beautygarage.jp/ws/main\n\n");
      lMailBuf.append("尚、同意頂いた規約内容につきましてはこちらからご確認頂けます。\n");
      lMailBuf.append("http://www.beautygarage.jp/agreement/cosmetics.php\n\n");
      lMailBuf.append("今後もご愛顧を賜りますようお願い申し上げます。\n");
      lMailBuf.append("何卒、よろしくお願い申し上げます。\n\n");
      lMailBuf.append("--------------------------------------------------\n");
      lMailBuf.append("株式会社ビューティガレージ\n");
      lMailBuf.append("〒154-0015\n");
      lMailBuf.append("東京都世田谷区桜新町1-34-25\n");
      lMailBuf.append("エステティック化粧品審査専用ダイヤル：03-5752-3884\n");
      lMailBuf.append("頭髪用化粧品審査専用ダイヤル：03-5752-3885\n");
      lMailBuf.append("E-mail：contract@beautygarage.jp\n");
      lMailBuf.append("--------------------------------------------------\n");
    } else if (UPD_CONTRACT2.equals(strMode) == true) {
      if (SIUtil.isNotNull(regCust.getCorporationName())) lMailBuf.append(regCust.getCorporationName() + "\n");
      if (SIUtil.isNotNull(regCust.getCompanyName())) lMailBuf.append(regCust.getCompanyName() + "\n");
      lMailBuf.append(regCust.getCustName() + " 様\n\n");
      lMailBuf.append("この度は、ビューティガレージの「化粧品購買/販売特約サロン」に\n");
      lMailBuf.append("お取引申込みを頂きまして誠にありがとうございました。\n\n");
      lMailBuf.append("現在、お客様のお申込内容について確認中ですので、\n");
      lMailBuf.append("いましばらくお待ち下さいませ。\n\n");
      lMailBuf.append("また確認の際、お客様がサロン経営者またはスクール、その従業員、\n");
      lMailBuf.append("美容学生（以下、「サロン様等」とする）であることを確認させていただきます。\n\n");
      lMailBuf.append("確認後、審査結果につきましては、メールにてご連絡させて頂きます。\n\n");
      lMailBuf.append("ご確認には多少お時間を頂戴する場合がございますので\n");
      lMailBuf.append("予めご了承ください。（土日祝日を除く2〜3営業日程度）\n\n");
      lMailBuf.append("ご不明な点等ございましたら、\n");
      lMailBuf.append("お気軽に下記連絡先までお問い合わせください。\n\n");
      lMailBuf.append("--------------------------------------------------\n");
      lMailBuf.append("株式会社ビューティガレージ\n");
      lMailBuf.append("〒154-0015\n");
      lMailBuf.append("東京都世田谷区桜新町1-34-25\n");
      lMailBuf.append("エステティック化粧品審査専用ダイヤル：03-5752-3884\n");
      lMailBuf.append("頭髪用化粧品審査専用ダイヤル：03-5752-3885\n");
      lMailBuf.append("E-mail：contract@beautygarage.jp\n");
      lMailBuf.append("--------------------------------------------------\n");
    } else if (UPD_CONTRACT3.equals(strMode) == true) {
      if (SIUtil.isNotNull(regCust.getCorporationName())) lMailBuf.append(regCust.getCorporationName() + "\n");
      if (SIUtil.isNotNull(regCust.getCompanyName())) lMailBuf.append(regCust.getCompanyName() + "\n");
      lMailBuf.append(regCust.getCustName() + " 様\n\n");
      lMailBuf.append("いつもお世話になっております。株式会社ビューティガレージです。\n");
      lMailBuf.append("この度は、「化粧品購買/販売特約サロン」お取引申込みをいただきまして誠にありがとうございました。\n\n");
      lMailBuf.append("お申込み頂いたサロンホームページURL又はプロフェッショナル証明書類を確認させて頂きましたが、\n");
      lMailBuf.append("以下のいずれかに該当する為、この度は残念ながら「エステティック化粧品及び頭髪用化粧品」\n");
      lMailBuf.append("に関しましては、お取引出来かねると判断させて頂きました。\n\n");
      lMailBuf.append("@ 登録の個人情報が、サロンホームページURLやプロフェッショナル証明書類内のものと異なる場合\n");
      lMailBuf.append("A プロフェッショナル証明書類の内容が不明な場合\n");
      lMailBuf.append("B サロン経営者又はサロン従事者であると認められなかった場合\n");
      lMailBuf.append("C サロン運営をされているが、インターネット販売をしている場合\n\n");
      lMailBuf.append("@・Aの場合は、再度審査させて頂く事も可能ですので、お手数ですが下記までお問い合わせください。\n");
      lMailBuf.append("その他の審査内容については開示致しておりませんので、ご了承ください。\n\n");
      lMailBuf.append("何卒、よろしくお願い申し上げます。\n\n");
      lMailBuf.append("--------------------------------------------------\n");
      lMailBuf.append("株式会社ビューティガレージ\n");
      lMailBuf.append("〒154-0015\n");
      lMailBuf.append("東京都世田谷区桜新町1-34-25\n");
      lMailBuf.append("エステティック化粧品審査専用ダイヤル：03-5752-3884\n");
      lMailBuf.append("頭髪用化粧品審査専用ダイヤル：03-5752-3885\n");
      lMailBuf.append("E-mail：contract@beautygarage.jp\n");
      lMailBuf.append("--------------------------------------------------\n");
    }
    
    // メールの本文の作成(メールテンプレートの内容2)
    lMailBuf.append("\n");
    lSendMail.appendContent1(lMailBuf.toString());
    
    // メールの本文の作成(メールテンプレートの内容3)
    //lMailBuf = new StringBuffer();
    lSendMail.appendContent2("");
    
    // 送信開始
    try {
      // メールアドレスが修正されているときには修正前のアドレスも対象とする
      if (LC_UPD.equals(strMode) == true && regCust.getEmail().equals(regCust.getEMailOld()) == false) {
        strMailAdr[0] = regCust.getEMailOld();
        strMailAdr[1] = regCust.getEmail();
        lSendMail.setToMailAddress(strMailAdr);
        // 削除のとき
      } else if (LC_DEL.equals(strMode) == true) {
        lSendMail.setToMailAddress(strDelMailAdr);
        // その他
      } else {
        lSendMail.setToMailAddress(regCust.getEmail());
      }
      String mailSendFlg = (String) urlParam.getParam("mailSendFlg");
      lRequest.setAttribute("mailSendFlg", mailSendFlg);
      if (SIUtil.isNotNull(mailSendFlg) && mailSendFlg.equals("1")) {
        if (UPD_CONTRACT1.equals(strMode)||UPD_CONTRACT2.equals(strMode)||UPD_CONTRACT3.equals(strMode)) {
          lMail = new SIMail();
          lMail.setFrom("contract@beautygarage.jp");
          lMail.addTo(regCust.getEmail());
          lMail.setSubject("【ビューティガレージ】化粧品購買/販売特約サロンのお申込");
          lMail.setContent(lMailBuf.toString());
          if (lMail.sendMail()){
            log.debug("<" + regCust.getEmail() + "> 宛先に送信OK! メール種類=化粧品購買/販売特約サロン更新メール："+regCust.getHairCosmeFlg());
          }else{
            log.debug("<" + regCust.getEmail() + "> 宛先に送信NG! メール種類=化粧品購買/販売特約サロン更新メール："+regCust.getHairCosmeFlg());
          }
        } else {
          lSendMail.execute();
        }
      }
    } catch (SIFatalException e) {
      e.printStackTrace();
    }
    // 変数のクリア
    lMailBuf = null;
    lSendMail = null;
    lReserveChangeDateTime = null;
    strMailAdr = null;
    regCust = null;
    strDelMailAdr = null;
    strDelCustName = null;
    strMailTemp = null;
  }
  // 7.3.0 ST2026 追加 ここまで
  
  public void producePDFFile2(HttpServletResponse response, Connection lConnection, UICustListCond lCustList, String lDateTime) throws IOException, DocumentException, SIDBAccessException, SIDuplicateKeyException {
    File lOrderTempFile = new File("");
    File lOrderTempDir = (File) this.getServletContext().getAttribute("javax.servlet.context.tempdir");
    String template = (String) this.getServletContext().getRealPath("/docs/bg_registed_ol.pdf");
    try {
      lOrderTempFile = File.createTempFile("bg_registed_ol_", ".pdf", lOrderTempDir);
    } catch (IOException e1) {
      e1.printStackTrace();
    }
    SIDateTime lDate = new SIDateTime();
    String lFileName = lOrderTempFile.getAbsolutePath();
    EstimatePdf estimatePdf = new EstimatePdf();
    estimatePdf.initialize(template, lOrderTempFile.getPath());
    estimatePdf.fontSelect("Goth");
    
    for (int i = 0; i < lCustList.getCustCodeChk().length;i++) {
      String custCode = lCustList.getCustCodeChk()[i];
      SICust lCust = new SICust(custCode);
      lCust.reset(lConnection);
      
      if (i>0) estimatePdf.addPage();
      
      estimatePdf.setFontSize(12);
      estimatePdf.writeRtoL(lDate.getYear() + "年 "+lDate.getMonth() + "月 "+lDate.getDay() + "日",540,790);
      
      estimatePdf.setFontSize(14);
      estimatePdf.write(lCust.getCustName() + "　様",40,700);
      estimatePdf.write(lCust.getEmail(),210,425);
      estimatePdf.write(lCust.getPassword(),210,395);
      
      SIModifyRec lRec = new SIModifyRec("custtbl");
      lRec.addCondition("custcode",lCust.getCustCode());
      lRec.add("pdfoutputdatetime",lDateTime);
      lRec.execute(lConnection);
    }
    estimatePdf.close();
    SIPDFUtil lPdfUtil = new SIPDFUtil();
    String lOutputFileName = "bg_registed_ol_" + (new SIDateTime().getDateTimeString()) + "." + SIPDFConf.SIPDF_EXTENSION_NAME;
    lPdfUtil.execute(response, lFileName, lOutputFileName);
    
    // 臨時ファイルの削除
    lOrderTempFile.delete();
  }
  
  public void producePDFFile3(HttpServletResponse response, Connection lConnection, UICustListCond lCustList, String lDateTime) throws IOException, DocumentException, SIDBAccessException, SIDuplicateKeyException {
    File lOrderTempFile = new File("");
    File lOrderTempDir = (File) this.getServletContext().getAttribute("javax.servlet.context.tempdir");
    String template = (String) this.getServletContext().getRealPath("/docs/vipclub_rankup.pdf");
    try {
      lOrderTempFile = File.createTempFile("vip_", ".pdf", lOrderTempDir);
    } catch (IOException e1) {
      e1.printStackTrace();
    }
    SIDateTime lDate = new SIDateTime();
    String lFileName = lOrderTempFile.getAbsolutePath();
    EstimatePdf estimatePdf = new EstimatePdf();
    estimatePdf.initialize(template, lOrderTempFile.getPath());
    estimatePdf.fontSelect("Min");
    
    for (int i = 0; i < lCustList.getCustCodeChk().length;i++) {
      String custCode = lCustList.getCustCodeChk()[i];
      SICust lCust = new SICust(custCode);
      lCust.reset(lConnection);
      
      if (i>0) estimatePdf.addPage();
      
      estimatePdf.setFontSize(10);
      estimatePdf.writeRtoL(lDate.getYear() + "年 "+lDate.getMonth() + "月 "+lDate.getDay() + "日",504,760);
      
      estimatePdf.setFontSize(12);
      estimatePdf.write(lCust.getCustName() + "　様",70,740);
      estimatePdf.write(lCust.getMemberLevelName(),220,303);
      estimatePdf.write(lCust.getEmail(),220,278);
      
      SIModifyRec lRec = new SIModifyRec("custtbl");
      lRec.addCondition("custcode",lCust.getCustCode());
      lRec.addCondition("memberlevelcode","1");
      lRec.add("pdfoutputdatetime2",lDateTime);
      lRec.execute(lConnection);//ゴールドの場合
      
      lRec = new SIModifyRec("custtbl");
      lRec.addCondition("custcode",lCust.getCustCode());
      lRec.addCondition("memberlevelcode","2");
      lRec.add("pdfoutputdatetime3",lDateTime);
      lRec.execute(lConnection);//プラチナの場合
      
      lRec = new SIModifyRec("custtbl");
      lRec.addCondition("custcode",lCust.getCustCode());
      lRec.addCondition("memberlevelcode","3");
      lRec.add("pdfoutputdatetime4",lDateTime);
      lRec.execute(lConnection);//ダイヤモンドの場合
    }
    estimatePdf.close();
    SIPDFUtil lPdfUtil = new SIPDFUtil();
    String lOutputFileName = "vipclub_rankup_" + (new SIDateTime().getDateTimeString()) + "." + SIPDFConf.SIPDF_EXTENSION_NAME;
    lPdfUtil.execute(response, lFileName, lOutputFileName);
    
    // 臨時ファイルの削除
    lOrderTempFile.delete();
  }
  
  private boolean sendPasswordMail(Connection lConnection,UIRegCust regCust) {
    boolean res = true;
    SIMail lMail = null;
    try {
      StringBuffer lMailBuf = new StringBuffer();
      lMail = new SIMail();
      lMail.setFrom("center@beautygarage.jp");
      lMail.addTo(regCust.getEmail());
      lMail.addBcc("center@beautygarage.jp");
      lMail.setSubject("【ビューティガレージ】お問い合わせありがとうございます");
      lMailBuf = new StringBuffer();
      lMailBuf.append("いつもビューティガレージをご利用頂きありがとうございます。\n\n");
      lMailBuf.append("お問い合せいただきましたログイン時のパスワードにつきまして、\n");
      lMailBuf.append("以下の通りお知らせいたします。\n\n");
      lMailBuf.append("=================================================\n");
      lMailBuf.append("お客様氏名: ").append(regCust.getCustName()).append("　さま\n");
      lMailBuf.append("お客様のメールアドレス: ").append(regCust.getEmail()).append("\n");
      lMailBuf.append("お客様のパスワード: ").append(regCust.getPassword()).append("\n");
      lMailBuf.append("=================================================\n\n");
      lMailBuf.append("ご質問、ご不明点等ございましたら何なりとお問い合わせ下さい。\n");
      lMailBuf.append("今後ともビューティガレージをよろしくお願いいたします。\n");
      lMailBuf.append("-------------------------------\n");
      lMailBuf.append("株式会社ビューティガレージ\n");
      lMailBuf.append("TEL：0120-974-554\n");
      lMailBuf.append("E-mail:center@beautygarage.jp\n");
      lMailBuf.append("http://www.beautygarage.jp\n");
      lMailBuf.append("-------------------------------\n");
      lMail.setContent(lMailBuf.toString());
      if (lMail.sendMail()){
        log.debug("<" + SIConfig.SIMALL.getEmail() + "> 宛先に送信OK! メール種類=パスワード配信メール");
        try {
          SIDateTime lDate = new SIDateTime();
          regCust.setPasswordMailDateTime(lDate.getFullDateTime());
          SIModifyRec lRec = new SIModifyRec("custtbl");
          lRec.addCondition("custcode",regCust.getCustCode());
          lRec.add("passwordmaildatetime", regCust.getPasswordMailDateTime());
          lRec.execute(lConnection);
        }catch (Exception e){
          e.printStackTrace();
        }
        res=true;
      }else{
        log.debug("<" + SIConfig.SIMALL.getEmail() + "> 宛先に送信NG! メール種類=パスワード配信メール");
        res=false;
      }
    } catch (SIFatalException e) {
      e.printStackTrace();
      res=false;
    }
    return res;
  }
  
  public void producePDFFileEx(HttpServletResponse response, Connection lConnection) throws SQLException, IOException, DocumentException, SIDBAccessException, SIDuplicateKeyException {
    File lOrderTempFile = new File("");
    File lOrderTempDir = (File) this.getServletContext().getAttribute("javax.servlet.context.tempdir");
    String template = (String) this.getServletContext().getRealPath("/docs/nayose.pdf");
    try {
      lOrderTempFile = File.createTempFile("vip_", ".pdf", lOrderTempDir);
    } catch (IOException e1) {
      e1.printStackTrace();
    }
    
    String lFileName = lOrderTempFile.getAbsolutePath();
    EstimatePdf estimatePdf = new EstimatePdf();
    estimatePdf.initialize(template, lOrderTempFile.getPath());
    estimatePdf.fontSelect("Min");
    
    StringBuffer lSql = new StringBuffer();
    lSql.append("SELECT c.custname,c.email,c.password,n.enabledflg ");
    lSql.append("FROM custtbl c,nayosetemptbl n ");
    lSql.append("WHERE c.custcode=n.custcode AND n.enabledflg!='2' ");
    lSql.append("ORDER BY n.nayosecode,n.enabledflg DESC,n.custcode");
    
    Statement lStatement = lConnection.createStatement();
    ResultSet lResultSet = lStatement.executeQuery(lSql.toString());
    
    int count=0;
    while (lResultSet.next()) {
      if ("1".equals(lResultSet.getString("enabledflg"))){
        if (!lResultSet.isFirst()) estimatePdf.addPage();
        estimatePdf.setFontSize(10);
        estimatePdf.write("平成21年 10月 30日",430,750);
        estimatePdf.write("2009年 11月 2日",175,329);
        estimatePdf.write(lResultSet.getString("custname") + "　様",70,680);
        count=0;
      }
      
      estimatePdf.setFontSize(8);
      estimatePdf.write(lResultSet.getString("custname"),149,233-(count*17));
      estimatePdf.write(lResultSet.getString("email"),273,233-(count*17));
      estimatePdf.write(lResultSet.getString("password"),409,233-(count*17));
      count++;
    }
    estimatePdf.close();
    SIPDFUtil lPdfUtil = new SIPDFUtil();
    String lOutputFileName = "nayose_" + (new SIDateTime().getDateTimeString()) + "." + SIPDFConf.SIPDF_EXTENSION_NAME;
    lPdfUtil.execute(response, lFileName, lOutputFileName);
    
    // 臨時ファイルの削除
    lOrderTempFile.delete();
  }
  
  private int custCleansing(Connection lConnection,HttpServletRequest lRequest,UIRegCust regCust) throws SIDuplicateKeyException,SIDBAccessException {
    int res = 1;
    if (SIUtil.isNull(regCust.getCustCode()) || SIUtil.isNull(regCust.getCustCodeBefore())) return 0;
    
    SIModifyRec lRec = new SIModifyRec("estimatetbl");
    lRec.addCondition("custCode",regCust.getCustCodeBefore());
    lRec.add("custCode",regCust.getCustCode());
    lRec.execute(lConnection);
    lRec = new SIModifyRec("estimatedeliverytbl");
    lRec.addCondition("custCode",regCust.getCustCodeBefore());
    lRec.add("custCode",regCust.getCustCode());
    lRec.execute(lConnection);
    lRec = new SIModifyRec("ordertbl");
    lRec.addCondition("custCode",regCust.getCustCodeBefore());
    lRec.add("custCode",regCust.getCustCode());
    lRec.execute(lConnection);
    lRec = new SIModifyRec("orderdeliverytbl");
    lRec.addCondition("custCode",regCust.getCustCodeBefore());
    lRec.add("custCode",regCust.getCustCode());
    lRec.execute(lConnection);
    lRec = new SIModifyRec("pointmanmtbl");
    lRec.addCondition("custCode",regCust.getCustCodeBefore());
    lRec.add("custCode",regCust.getCustCode());
    lRec.execute(lConnection);
    lRec = new SIModifyRec("rfmanalysetbl");
    lRec.addCondition("custCode",regCust.getCustCodeBefore());
    lRec.add("custCode",regCust.getCustCode());
    lRec.execute(lConnection);
    lRec = new SIModifyRec("reserveordertbl");
    lRec.addCondition("custCode",regCust.getCustCodeBefore());
    lRec.add("custCode",regCust.getCustCode());
    lRec.execute(lConnection);
    lRec = new SIModifyRec("custtbl");
    lRec.addCondition("custCode",regCust.getCustCodeBefore());
    lRec.add("delflg","1");
    lRec.execute(lConnection);
    
    StringBuffer pcStr = new StringBuffer();
    pcStr.append("INSERT INTO purchasecommenttbl ");
    pcStr.append("SELECT a.custcode,coalesce(MAX(b.commentnumber),0)+c.commentnumber AS commentnumber,c.initdatetime,c.updatedatetime,c.username,c.comment,c.memostatus,c.lastupdateusername ");
    pcStr.append("FROM custtbl a LEFT OUTER JOIN purchasecommenttbl b ON a.custcode=b.custcode,purchasecommenttbl c ");
    pcStr.append("WHERE a.custcode=").append(SIDBUtil.SQL2Str(regCust.getCustCode()," "));
    pcStr.append("AND c.custcode=").append(SIDBUtil.SQL2Str(regCust.getCustCodeBefore()," "));
    pcStr.append("GROUP BY a.custcode,c.commentnumber,c.initdatetime,c.updatedatetime,c.username,c.comment,c.memostatus,c.lastupdateusername");
    SIDBUtil.execSQL(lConnection, pcStr.toString());
    
    StringBuffer gStr = new StringBuffer();
    gStr.append("SELECT o.custcode FROM ordersumvw o,custtbl c ");
    gStr.append("WHERE o.status=1 AND o.deliveryedflg=1 AND o.nodeliveryflg=0 AND o.custcode=").append(SIDBUtil.SQL2Str(regCust.getCustCode()," "));
    gStr.append("AND o.initdatetime<to_char(current_date,'yyyy-mm-01')::date ");
    gStr.append("AND o.custcode=c.custcode AND c.memberlevelcode='0' AND c.memberlevelfixedflg='0' ");
    gStr.append("GROUP BY o.custcode ");
    gStr.append("HAVING sum(o.totalofprice+o.totalofdeliveryfee+o.totaloffee+coalesce(o.discountdeliveryfee,0)+coalesce(o.discountfee,0)-o.sumofdiscount-o.sumbypoint)>=300000");
    gStr.append("AND count(o.ordercode)>=5 ");
    gStr.append("AND max(o.initdatetime)>to_char((current_date + '-1 years'::interval),'yyyy-mm-01')::date ");
    
    if (SIDBUtil.hasData(lConnection, gStr.toString())) {//ゴールド昇格
      lRec = new SIModifyRec("custtbl");
      lRec.addCondition("custCode",regCust.getCustCode());
      lRec.add("memberlevelcode","1");
      lRec.add("rankchangedate1",new SIDateTime().getFullDateTime());
      lRec.execute(lConnection);
      res=2;
    }
    
    StringBuffer pStr = new StringBuffer();
    pStr.append("SELECT o.custcode FROM ordersumvw o,custtbl c ");
    pStr.append("WHERE o.status=1 AND o.deliveryedflg=1 AND o.nodeliveryflg=0 AND o.custcode=").append(SIDBUtil.SQL2Str(regCust.getCustCode()," "));
    pStr.append("AND o.initdatetime<to_char(current_date,'yyyy-mm-01')::date ");
    pStr.append("AND o.custcode=c.custcode AND c.memberlevelcode='1' AND c.memberlevelfixedflg='0' ");
    pStr.append("GROUP BY o.custcode ");
    pStr.append("HAVING sum(o.totalofprice+o.totalofdeliveryfee+o.totaloffee+coalesce(o.discountdeliveryfee,0)+coalesce(o.discountfee,0)-o.sumofdiscount-o.sumbypoint)>=1500000");
    pStr.append("AND count(o.ordercode)>=10 ");
    pStr.append("AND sum(CASE WHEN o.initdatetime>to_char((current_date + '-1 years'::interval),'yyyy-mm-01')::date THEN 1 ELSE 0 END) >=3 ");
    
    if (SIDBUtil.hasData(lConnection, pStr.toString())) {//プラチナ昇格
      lRec = new SIModifyRec("custtbl");
      lRec.addCondition("custCode",regCust.getCustCode());
      lRec.add("memberlevelcode","2");
      lRec.add("rankchangedate2",new SIDateTime().getFullDateTime());
      lRec.execute(lConnection);
      res=3;
    }
    
    StringBuffer dStr = new StringBuffer();
    dStr.append("SELECT o.custcode FROM ordersumvw o,custtbl c ");
    dStr.append("WHERE o.status=1 AND o.deliveryedflg=1 AND o.nodeliveryflg=0 AND o.custcode=").append(SIDBUtil.SQL2Str(regCust.getCustCode()," "));
    dStr.append("AND o.initdatetime<to_char(current_date,'yyyy-mm-01')::date ");
    dStr.append("AND o.custcode=c.custcode AND c.memberlevelcode='2' AND c.memberlevelfixedflg='0' ");
    dStr.append("GROUP BY o.custcode ");
    dStr.append("HAVING sum(o.totalofprice+o.totalofdeliveryfee+o.totaloffee+coalesce(o.discountdeliveryfee,0)+coalesce(o.discountfee,0)-o.sumofdiscount-o.sumbypoint)>=15000000");
    dStr.append("AND count(o.ordercode)>=30 ");
    dStr.append("AND sum(CASE WHEN o.initdatetime>to_char((current_date + '-1 years'::interval),'yyyy-mm-01')::date THEN 1 ELSE 0 END) >=10 ");
    
    if (SIDBUtil.hasData(lConnection, dStr.toString())) {//ダイヤモンド昇格
      lRec = new SIModifyRec("custtbl");
      lRec.addCondition("custCode",regCust.getCustCode());
      lRec.add("memberlevelcode","3");
      lRec.add("rankchangedate3",new SIDateTime().getFullDateTime());
      lRec.execute(lConnection);
      res=3;
    }
    
    String cleansingCode = SIDBUtil.getFirstData(lConnection, "SELECT coalesce(max(cleansingcode),0)+1 FROM custcleansingtbl");
    SIInsertRec lInsertRec = new SIInsertRec("custcleansingtbl");
    lInsertRec.add("cleansingcode", cleansingCode);
    lInsertRec.add("custcodebefore", regCust.getCustCodeBefore());
    lInsertRec.add("custcodeafter", regCust.getCustCode());
    lInsertRec.add("updateusercode", SIHTMLUtil.getLogin(lRequest).getUserCode());
    lInsertRec.add("initdatetime",new SIDateTime().getFullDateTime());
    lInsertRec.execute(lConnection);
    
    return res;
  }

  // add by mikami 追加 ここから
  public static void movePreCustData(Connection connection, UIRegCust regCust) throws SIDuplicateKeyException, SIDBAccessException {
    String ssouser_id = "";
    SIModifyRec lRec = null;
    StringBuffer pStr = new StringBuffer();
    pStr.append("SELECT ssouser_id FROM custbasicinfotbl ");
    pStr.append("WHERE custregistflg=0 AND delflg=0 AND email=").append(SIDBUtil.SQL2Str(regCust.getEmail()));
    // 移行前データの有無
    if (SIDBUtil.hasData(connection, pStr.toString())) {
      ssouser_id = SIDBUtil.getFirstData(connection, pStr.toString());
      lRec = new SIModifyRec("custbasicinfoTbl");
      lRec.addCondition("email", regCust.getEmail());
      lRec.addCondition("delflg", "0");
      // 移行完了フラグ
      lRec.add("custregistflg", "1");
      // データの更新
      lRec.execute(connection);
      lRec = null;
      
      // ssousertbl更新
      lRec = new SIModifyRec("ssousertbl");
      lRec.addCondition("id", ssouser_id);
      // ECサイト会員ID
      lRec.add("custcode", regCust.getCustCode());
      // データの更新
      lRec.execute(connection);
    }else{
      // ssousertbl登録
      SIInsertRec lInsertRec = new SIInsertRec("ssousertbl");
      lInsertRec.add("custcode", regCust.getCustCode());
      lInsertRec.add("name01", regCust.getCustName());
      lInsertRec.add("kana01", regCust.getCustPronName());
      lInsertRec.execute(connection);
    }
  }
  // add by mikami 追加 ここまで
  
  private int checkContractChange(Connection lConnection,UIRegCust regCust) {
    int res = 0;
    try {
      String originalValue = SIDBUtil.getFirstData(lConnection,"SELECT haircosmeFlg FROM custtbl WHERE custCode="+regCust.getCustCode());
      String changeValue = regCust.getHairCosmeFlg();
      if (!changeValue.equals(originalValue)) res = Integer.parseInt(changeValue);
    }catch (Exception e) {
      e.printStackTrace();
      res = 0;
    }
    return res;
  }

}