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

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

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

import jp.co.sint.basic.SILogin;
import jp.co.sint.beans.front.UICmdtyInfo;
import jp.co.sint.beans.mallmgr.UICmdtyDeleteImgList;
import jp.co.sint.beans.mallmgr.UICmdtyListCond;
import jp.co.sint.beans.mallmgr.UICmdtyParent;
import jp.co.sint.beans.mallmgr.UICmdtyStock;
import jp.co.sint.beans.mallmgr.UIIOCsv;
import jp.co.sint.beans.mallmgr.UIIndividual;
import jp.co.sint.beans.mallmgr.UIProcessListCond;
import jp.co.sint.beans.mallmgr.UIRegCmdty;
import jp.co.sint.beans.mallmgr.UIRegCmdtyComposition;
import jp.co.sint.beans.mallmgr.UIRegCmdtyPreview;
import jp.co.sint.config.SICSVConf;
import jp.co.sint.config.SIConfig;
import jp.co.sint.config.SIDBMultiConf;
import jp.co.sint.database.SIDBAccessException;
import jp.co.sint.database.SIDBUtil;
import jp.co.sint.database.SIDatabaseConnection;
import jp.co.sint.database.SIDateType;
import jp.co.sint.database.SIDeleteRec;
import jp.co.sint.database.SIDuplicateKeyException;
import jp.co.sint.database.SIInsertRec;
import jp.co.sint.database.SIModifyRec;
import jp.co.sint.database.SISpcType;
import jp.co.sint.servlet.SIServlet;
import jp.co.sint.tools.SICSVRead;
import jp.co.sint.tools.SICSVWrite;
import jp.co.sint.tools.SICheckDataConf;
import jp.co.sint.tools.SICheckValid;
import jp.co.sint.tools.SICustomError;
import jp.co.sint.tools.SICustomErrors;
import jp.co.sint.tools.SIErrorException;
import jp.co.sint.tools.SIErrorFactory;
import jp.co.sint.tools.SIFileExistException;
import jp.co.sint.tools.SIHTMLUtil;
import jp.co.sint.tools.SIStringUtil;
import jp.co.sint.tools.SIUtil;
import jp.co.sint.upload.SIUploadSrv;

import org.apache.commons.fileupload.FileUploadException;
import org.apache.log4j.Category;
import jp.co.sint.tools.SIURLParameter;

// 7.1.1 ST0236 追加

/**
 * @version $Id: SIRegCmdtySrv.java,v 1.0 2003/07/25 Exp $
 * @author Jinwang Chen <br>
 * Description: ショップマスタのレコードを登録．修正することなどを行うServlet
 * <p>
 * History
 * </p>
 * <p>
 * Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reason
 * </p>
 * ============&nbsp;&nbsp;&nbsp;==========&nbsp;&nbsp;===========================<br>
 * xxxxx 2003/08/07 Original
 */

public class SIRegCmdtySrv extends SIUploadSrv {
  // ログ用のインスタンスの生成
  private static Category log = Category.getInstance(SIConfig.SILOG4J_WEBSHOP_CATEGORY_NAME);
  
  private final int MAX_CSV_SIZE = 10000;
  
  /**
   * <b>doUpdate</b> HTTP リクエストの処理
   * 
   * @param request リクエスト
   * @param response
   * @return なし
   * @throws ServletException
   * @throws IOException
   */
  public void doUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    SILogin manLogin = SIHTMLUtil.getLogin(request);
    if (!manLogin.isLogin()) {
      forwardKey(request, response, "webshop.jsp.manager.login");
      return;
    }
    
    HttpSession session = request.getSession(true);// セッションの取得
    SIDatabaseConnection databaseConnection = new SIDatabaseConnection();// DBへのコネクションの作成
    SIURLParameter urlParam = new SIURLParameter(request);// 7.1.1 ST0236 追加
    
    try {
      String actionName = this.getActionName(urlParam);// 画面からのアクション //7.1.1 ST0236 修正
      String editMode = this.getEditMode(urlParam);// DBへの編集モード //7.1.1 ST0236 修正
      
      UIRegCmdty regCmdty = new UIRegCmdty();
      UICmdtyListCond cmdtyList = new UICmdtyListCond();
      UICmdtyParent cmdtyParent = new UICmdtyParent();
      
      if (this.getServletPath(request).equals("/mallmgr/RegCmdtySrv")){
        if (SIConfig.SIACTION_CSV.equalsIgnoreCase(actionName)) {// CSVファイルへの出力
          cmdtyList = (UICmdtyListCond) session.getAttribute(SIConfig.SISESSION_MAN_CMDTY_LIST_NAME);
          if (cmdtyList == null) cmdtyList = new UICmdtyListCond();
          if (!produceCmdtyCSVFile(request, response, databaseConnection.getConnection(), cmdtyList)){
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.error.csvoverflow","１万"));
            forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
          } else if (!response.isCommitted()) {
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("database.query.notexist", "CSVデータ"));
            forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
          }
        } else if (SIConfig.SIACTION_CSV2.equalsIgnoreCase(actionName)) {// CSVファイルへの出力
          cmdtyList = (UICmdtyListCond) session.getAttribute(SIConfig.SISESSION_MAN_CMDTY_LIST_NAME);
          if (cmdtyList == null) cmdtyList = new UICmdtyListCond();
          if (!produceIndividualCSVFile(request, response, databaseConnection.getConnection(), cmdtyList)){
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.error.csvoverflow","１万"));
            forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
          } else if (!response.isCommitted()) {
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("database.query.notexist", "CSVデータ"));
            forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
          }
        } else if (SIConfig.SIACTION_CSV3.equalsIgnoreCase(actionName)) {// CSVファイルへの出力
          cmdtyList = (UICmdtyListCond) session.getAttribute(SIConfig.SISESSION_MAN_CMDTY_LIST_NAME);
          if (cmdtyList == null) cmdtyList = new UICmdtyListCond();
          if (!produceStockCSVFile(request, response, databaseConnection.getConnection(), cmdtyList)){
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.error.csvoverflow","１万"));
            forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
          } else if (!response.isCommitted()) {
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("database.query.notexist", "CSVデータ"));
            forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
          }
        } else if (SIConfig.SIACTION_DOWNLOAD.equalsIgnoreCase(actionName)) {// 棚番CSV出力
          produceStockNumberCSVFile(request, response, databaseConnection.getConnection());
          if (!response.isCommitted()) {
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("database.query.notexist", "CSVデータ"));
            forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
          }
        } else if (SIConfig.SIACTION_LIST.equalsIgnoreCase(actionName)) {// 一覧と検索などの画面
          // データの取得とデータのチェック
          cmdtyList = new UICmdtyListCond();// 7.1.1 ST0236 修正
          cmdtyList.initSearch(request, urlParam);
          cmdtyList.validate(request);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_LIST_NAME, cmdtyList);
          forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
        } else if (SIConfig.SIACTION_PREVIEW.equalsIgnoreCase(actionName)) {// プレビュー画面
          // インスタンスの作成
          UICmdtyInfo cmdtyInfoID = new UICmdtyInfo();
          cmdtyInfoID.init(request, urlParam);// 7.1.1 ST0236 修正
          UIRegCmdtyPreview regCmdtyPreview = new UIRegCmdtyPreview(cmdtyInfoID.getShopCodeTxt(), cmdtyInfoID.getCmdtyCodeTxt());
          // データの取得
          regCmdtyPreview.reset(databaseConnection.getConnection());
          regCmdtyPreview.init(request, urlParam);// 7.1.1 ST0236 修正
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_PREVIEW_NAME, regCmdtyPreview);
          forwardKey(request, response, "webshop.jsp.manager.cmdty.preview");
          // 7.3.0 PI-NES0501 追加 ここから
        } else if (SIConfig.SIACTION_NEXT.equalsIgnoreCase(actionName)) {
          cmdtyList = new UICmdtyListCond();// 7.1.1 ST0236 修正
          cmdtyList.initSearch(request, urlParam);
          cmdtyList.validate(request);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_LIST_NAME, cmdtyList);
          cmdtyParent = new UICmdtyParent();
          regCmdty.init(request, urlParam);// 7.1.1 ST0236 修正
          cmdtyParent.init(request, urlParam, databaseConnection.getConnection());
          cmdtyParent.setEditModeTxt(regCmdty.getEditModeTxt());
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_PARENT, cmdtyParent);
          forwardKey(request, response, "webshop.jsp.manager.cmdty.edit");
          // 7.3.0 PI-NES0501 追加 ここまで
        } else if (SIConfig.SIACTION_REFRESH.equalsIgnoreCase(actionName)) {// ショップコードを選択したときの処理
          // インスタンスの作成
          regCmdty = new UIRegCmdty();
          // データの取得
          regCmdty.init(request, urlParam);// 7.1.1 ST0236 修正
          regCmdty.setShopCodeChangedFlg("1");// 7.2.0 ST1051 追加
          regCmdty.setShopInfo(databaseConnection.getConnection());// 7.2.0 ST1051 追加
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_NAME, regCmdty);
          forwardKey(request, response, "webshop.jsp.manager.cmdty.edit");
        } else if (SIConfig.SIACTION_BACK.equalsIgnoreCase(actionName)) {// 検索に戻る
          cmdtyList = new UICmdtyListCond();// 7.1.1 ST0236 修正
          cmdtyList.initSearch(request, urlParam);
          cmdtyList.setPageSizeSel(cmdtyList.getPrevSize());
          cmdtyList.validate(request);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_LIST_NAME, cmdtyList);
          forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
        } else if (SIConfig.SIACTION_MODIFY.equalsIgnoreCase(actionName)) {// レコードの修正
          regCmdty.init(request, urlParam);// 7.1.1 ST0236 修正
          cmdtyList.initSearch(request, urlParam);
          cmdtyList.validate(request);
          regCmdty.setShopInfo(databaseConnection.getConnection());// 7.2.0 ST1051 追加
          regCmdty.reset(databaseConnection.getConnection());
          cmdtyParent.clear();
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_NAME, regCmdty);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_PARENT, cmdtyParent);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_LIST_NAME, cmdtyList);
          forwardKey(request, response, "webshop.jsp.manager.cmdty.edit");
        } else if (SIConfig.SIACTION_NEW.equalsIgnoreCase(actionName)) {// 新規のレコード
          regCmdty.init(request, urlParam);// 7.1.1 ST0236 修正
          cmdtyParent.clear();
          regCmdty.setShopCodeChangedFlg("1");// 7.2.0 ST1051 追加
          regCmdty.setShopInfo(databaseConnection.getConnection());// 7.2.0 ST1051 追加
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_NAME, regCmdty);
         session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_PARENT, cmdtyParent);
         forwardKey(request, response, "webshop.jsp.manager.cmdty.edit");
         
        // EDBTG003-00 elecs-tani add start
        } else if (SIConfig.SIACTION_SET_NEW.equalsIgnoreCase(actionName)) {// 新規セット商品のレコード
          // インスタンスの作成
          regCmdty = new UIRegCmdty();
          UIRegCmdtyComposition regCmdtyComposition = new UIRegCmdtyComposition();
          regCmdtyComposition.defaultSet();
          regCmdty.init(request, urlParam);
          regCmdty.setShopCodeChangedFlg("1");
          regCmdty.setEditModeTxt(SIConfig.SIEDIT_MODE_INSERT);
          regCmdty.setLoginFlgForEdit(databaseConnection.getConnection());
          regCmdty.setShopInfo(databaseConnection.getConnection());
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_NAME, regCmdty);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_COMPOSITION, regCmdtyComposition);
          forwardKey(request, response, "webshop.jsp.manager.cmdty.set.edit");
          
        } else if (SIConfig.SIACTION_SET_DETAIL.equalsIgnoreCase(actionName)) {// セット商品のレコード更新
          String janCode = (String) urlParam.getParam("janCodeIndividual");
          String cmdtyCode = (String) urlParam.getParam("setCmdtyCode");
          String individualCode = (String) urlParam.getParam("setIndividualCode");
          if (SIUtil.isNotNull(janCode)){
            cmdtyList = new UICmdtyListCond();
            cmdtyList.initSearch(request, urlParam);
            try{
              cmdtyCode = SIDBUtil.getFirstData(databaseConnection.getConnection(), "SELECT cmdtyCode FROM individualTbl WHERE janCodeIndividual = "+SIDBUtil.SQL2Str(janCode));
              individualCode = SIDBUtil.getFirstData(databaseConnection.getConnection(), "SELECT individualCode FROM individualTbl WHERE janCodeIndividual = "+SIDBUtil.SQL2Str(janCode));
            }catch(Exception e){
              e.printStackTrace();
              cmdtyCode = "";
               individualCode = "";
            }
            session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_LIST_NAME, cmdtyList);
          }
          if (SIUtil.isNotNull(cmdtyCode)&&SIUtil.isNotNull(individualCode)){
            // インスタンスの作成
            regCmdty = new UIRegCmdty();
            UIRegCmdtyComposition regCmdtyComposition = new UIRegCmdtyComposition();
            
            regCmdty.setShopCode("0");
            regCmdty.setCmdtyCode(cmdtyCode);
            regCmdty.setEditModeTxt(SIConfig.SIEDIT_MODE_UPDATE);
            regCmdty.reset(databaseConnection.getConnection());
            regCmdty.setListFlg("1");
            regCmdty.setShopInfo(databaseConnection.getConnection());
            regCmdtyComposition.defaultSet();
            regCmdtyComposition.setShopCode("0");
            regCmdtyComposition.setCmdtyCode(cmdtyCode);
            regCmdtyComposition.setIndividualCode(individualCode);
            
            session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_NAME, regCmdty);
            session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_COMPOSITION, regCmdtyComposition);
            forwardKey(request, response, "webshop.jsp.manager.cmdty.set.edit");
          } else {
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("database.query.notexist","商品"));
            forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
          }
          // EDBTG003-00 elecs-tani add end
        } else if (SIConfig.SIACTION_COPY.equalsIgnoreCase(actionName)) {// 商品のコピー
          try {
            regCmdty.init(request, urlParam);// 7.1.1 ST0236 修正
            cmdtyParent.clear();
            cmdtyParent.getCmdtyParent(databaseConnection.getConnection(), regCmdty.getShopCode(), regCmdty.getCmdtyCode());
            regCmdty.setShopInfo(databaseConnection.getConnection());// 7.2.0 ST1051 追加
            regCmdty.reset(databaseConnection.getConnection());
            regCmdty.setEditModeTxt(SIConfig.SIEDIT_MODE_INSERT);
            regCmdty.setCmdtyCode(null);
            session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_NAME, regCmdty);
            session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_PARENT, cmdtyParent);
            forwardKey(request, response, "webshop.jsp.manager.cmdty.edit");
          } catch (SIDBAccessException sqle) {
            sqle.printStackTrace();
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.execute.error"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
          }
        } else if (SIConfig.SIACTION_REMODIFY.equalsIgnoreCase(actionName)) {// 再修正へ
          forwardKey(request, response, "webshop.jsp.manager.cmdty.edit");
        } else if (SIConfig.SIACTION_DELETE.equalsIgnoreCase(actionName)) {// レコードの削除
          cmdtyList = (UICmdtyListCond) session.getAttribute(SIConfig.SISESSION_MAN_CMDTY_LIST_NAME);
          if (cmdtyList == null) cmdtyList = new UICmdtyListCond();
          cmdtyList.initDelete(request);
          // データのチェック
          if (SIUtil.isNull(editMode)) {
            if (cmdtyList.validateDelete(request, databaseConnection.getConnection())) {// 問題がなければ
              session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_LIST_NAME, cmdtyList);
              forwardKey(request, response, "webshop.jsp.manager.cmdty.delete");
            } else {
              forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
            }
          } else if (SIConfig.SIEDIT_MODE_DELETE.equalsIgnoreCase(editMode)) {
            try {
              deleteTableData(databaseConnection.getConnection(), cmdtyList);
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.delete"));
              try {databaseConnection.getConnection().commit();} catch (SQLException sqle) {}
            } catch (SIDBAccessException sqle) {
              try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
              sqle.printStackTrace();
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            }
            forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
          }
        } else if (SIConfig.SIACTION_CONFIRM.equalsIgnoreCase(actionName)) {// データの確認画面へ
          // インスタンスの作成
          regCmdty = new UIRegCmdty();
          cmdtyParent = new UICmdtyParent();
          // データの取得
          regCmdty.init(request, urlParam);// 7.1.1 ST0236 修正
          cmdtyParent.init(request, urlParam, databaseConnection.getConnection());
          cmdtyParent.setEditModeTxt(regCmdty.getEditModeTxt());
          regCmdty.setShopInfo(databaseConnection.getConnection());// 7.2.0 ST1051 追加
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_NAME, regCmdty);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_PARENT, cmdtyParent);
          // データのチェック
          if (cmdtyParent.validate(request, databaseConnection.getConnection()) == false) {
            forwardKey(request, response, "webshop.jsp.manager.cmdty.edit");
          } else {
            forwardKey(request, response, "webshop.jsp.manager.cmdty.confirm");
          }
        } else if (SIConfig.SIACTION_NEW_INDIVIDUAL.equalsIgnoreCase(actionName)) {// 商品在庫に遷移（新規）
          // インスタンスの作成
          regCmdty = new UIRegCmdty();
          cmdtyParent = new UICmdtyParent();
          UICmdtyStock stock = new UICmdtyStock();
          // データの取得
          regCmdty.init(request, urlParam);
          regCmdty.setEditModeTxt(SIConfig.SIEDIT_MODE_INSERT);
          regCmdty.setLoginFlgForEdit(databaseConnection.getConnection());
          cmdtyParent.init(request, urlParam, databaseConnection.getConnection());
          cmdtyParent.setEditModeTxt(regCmdty.getEditModeTxt());
          regCmdty.setShopInfo(databaseConnection.getConnection());
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_NAME, regCmdty);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_PARENT, cmdtyParent);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_STORE_STOCK, stock);
          session.removeAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_INDIVIDUAL);
          forwardKey(request, response, "webshop.jsp.manager.cmdty.indivdual");
        } else if (SIConfig.SIACTION_DETAIL.equalsIgnoreCase(actionName)) {// 商品在庫に遷移（編集）
          // インスタンスの作成
          regCmdty = new UIRegCmdty();
          cmdtyParent = new UICmdtyParent();
          UICmdtyStock stock = new UICmdtyStock();
          // データの取得
          regCmdty.init(request, urlParam);
          regCmdty.setEditModeTxt(SIConfig.SIEDIT_MODE_UPDATE);
          cmdtyParent.init(request, urlParam, databaseConnection.getConnection());
          UIIndividual individual = new UIIndividual();
          individual.setShopCode("0");
          individual.setCmdtyCode((String) urlParam.getParam("cmdtyCodeTxt"));
          individual.setIndividualCode((String) urlParam.getParam("individualCodeTxt"));
          cmdtyParent.setEditModeTxt(regCmdty.getEditModeTxt());
          regCmdty.setShopInfo(databaseConnection.getConnection());
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_NAME, regCmdty);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_PARENT, cmdtyParent);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_INDIVIDUAL, individual);
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_STORE_STOCK, stock);
          forwardKey(request, response, "webshop.jsp.manager.cmdty.indivdual");
        } else if ("detail2".equalsIgnoreCase(actionName)) {// 商品在庫に遷移（編集）
          String janCode = (String) urlParam.getParam("janCodeIndividual");
          String cmdtyCode = (String) urlParam.getParam("cmdtyCodeTxt");
          String individualCode = (String) urlParam.getParam("individualCodeTxt");
          if (SIUtil.isNotNull(janCode)){
            cmdtyList = new UICmdtyListCond();
            cmdtyList.initSearch(request, urlParam);
            try{
              cmdtyCode = SIDBUtil.getFirstData(databaseConnection.getConnection(), "SELECT cmdtyCode FROM individualTbl WHERE janCodeIndividual = "+SIDBUtil.SQL2Str(janCode));
              individualCode = SIDBUtil.getFirstData(databaseConnection.getConnection(), "SELECT individualCode FROM individualTbl WHERE janCodeIndividual = "+SIDBUtil.SQL2Str(janCode));
            }catch(Exception e){
              e.printStackTrace();
              cmdtyCode = "";
              individualCode = "";
            }
            session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_LIST_NAME, cmdtyList);
          }
          if (SIUtil.isNotNull(cmdtyCode)&&SIUtil.isNotNull(individualCode)){
            // インスタンスの作成
            regCmdty = new UIRegCmdty();
            cmdtyParent = new UICmdtyParent();
            UICmdtyStock stock = new UICmdtyStock();
            // データの取得
            regCmdty.setShopCode("0");
            regCmdty.setCmdtyCode(cmdtyCode);
            regCmdty.setEditModeTxt(SIConfig.SIEDIT_MODE_UPDATE);
            regCmdty.reset(databaseConnection.getConnection());
            regCmdty.setListFlg("1");
            UIIndividual individual = new UIIndividual();
            individual.setShopCode("0");
            individual.setCmdtyCode(cmdtyCode);
            individual.setIndividualCode(individualCode);
            try{
              cmdtyParent.getCmdtyParent(databaseConnection.getConnection(),"0",cmdtyCode);
            }catch(SIDBAccessException e){
              e.printStackTrace();
            }
            cmdtyParent.setEditModeTxt(regCmdty.getEditModeTxt());
            regCmdty.setShopInfo(databaseConnection.getConnection());
            session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_NAME, regCmdty);
            session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_PARENT, cmdtyParent);
            session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_INDIVIDUAL, individual);
            session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_STORE_STOCK, stock);
            forwardKey(request, response, "webshop.jsp.manager.cmdty.indivdual");
          } else {
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("database.query.notexist","商品"));
            forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
          }
        } else if (SIConfig.SIACTION_CANCEL.equalsIgnoreCase(actionName)) {// 在庫コード削除(誤入力用)
          String lCmdtyCode = this.getParameter(urlParam, "cmdtyCode");
          String lIndividualCode = this.getParameter(urlParam, "individualCode");
          if (validateDelete(request, databaseConnection.getConnection(), lCmdtyCode, lIndividualCode)) {
            try {
              deleteTableDataIndividual(databaseConnection.getConnection(), lCmdtyCode, lIndividualCode);
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.delete"));
              try {databaseConnection.getConnection().commit();} catch (SQLException sqle) {}
            } catch (SIDBAccessException sqle) {
              try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
              sqle.printStackTrace();
              SICustomErrors errors = new SICustomErrors();
              errors.addError(new SICustomError("database.execute.error"));
              request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            }
          }
          forwardKey(request, response, "webshop.jsp.manager.cmdty.edit");
        } else if (SIConfig.SIACTION_PROCESS.equalsIgnoreCase(actionName)) {// 商品別加工画面
          UIProcessListCond processList = new UIProcessListCond();
          processList.initCmdty(request, urlParam, databaseConnection.getConnection());
          session.setAttribute(SIConfig.SISESSION_MAN_CMDTY_PROCESS_NAME, processList);
          forwardKey(request, response, "webshop.jsp.manager.cmdty.process");
        } else {// DBへのデータ登録
          regCmdty = new UIRegCmdty();
          cmdtyParent = new UICmdtyParent();
          regCmdty = (UIRegCmdty) session.getAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_NAME);
          cmdtyParent = (UICmdtyParent) session.getAttribute(SIConfig.SISESSION_MAN_CMDTY_EDIT_PARENT);
          try {
            if (editMode.equalsIgnoreCase(SIConfig.SIEDIT_MODE_INSERT)) {
              // insertTableData(databaseConnection.getConnection(),regCmdty);//新規レコードの作成
              insertTableDataBG(databaseConnection.getConnection(), cmdtyParent);
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.insert"));
              try {databaseConnection.getConnection().commit();} catch (SQLException sqle) {}
            } else if (editMode.equalsIgnoreCase(SIConfig.SIEDIT_MODE_UPDATE)) {
              updateTableDataBG(databaseConnection.getConnection(), cmdtyParent);// 既存レコードの修正 7.3.0 PI-NES0501 修正
              request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.modify"));
              try {databaseConnection.getConnection().commit();} catch (SQLException sqle) {}
            } else log.error("Found a not defined edit mode.editMode=" + editMode);
            // 結果画面への遷移
            forwardKey(request, response, "webshop.jsp.manager.cmdty.result");
          } catch (SIDuplicateKeyException sqle) {
            try {databaseConnection.getConnection().rollback();} catch (SQLException ee) {}
            SICustomErrors errors = new SICustomErrors();
            errors.addError(new SICustomError("database.insert.duplicate"));
            request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY, errors);
            forwardKey(request, response, "webshop.jsp.manager.cmdty.edit");
          } catch (SIDBAccessException sqle) {
            try {databaseConnection.getConnection().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.cmdty.edit");
          }
        }
      } else if(this.getServletPath(request).equals("/mallmgr/RegCmdtySrv2")){// 棚番CSV取込
        File lCsvTempDir = (File) this.getServletContext().getAttribute("javax.servlet.context.tempdir");
        File lCsvTempFile = new File("");
        try {
          lCsvTempFile = File.createTempFile("read_csv_", ".csv", lCsvTempDir);
        } catch (IOException ioe) {
          ioe.printStackTrace();
        }
        HashMap lCsvMap = new HashMap();
        lCsvMap.put("destFile", lCsvTempFile.getAbsolutePath());
        
        SICSVRead lRead = new SICSVRead();
        UIIOCsv lIOCsv = new UIIOCsv();
        try {
          this.doUpload(request, response, lCsvMap);
          
          lRead = new SICSVRead(lCsvTempFile.getAbsolutePath());
          lIOCsv.setCsvTblNameSel(this.getMultiParameter(request, "csvTblNameSel"));
          lIOCsv.setEditModeTxt(this.getMultiParameter(request, "editModeTxt"));
          
          // ファイルをアップロードする時に、設定されるエラーメッセージを取得します。
          String lRes = (String) request.getAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME);
          if (SIUtil.isNotNull(lRes)) {// エラーメッセージがあれば、CSVファイルのアップロード不成功
          } else {
            lRes = this.writeStockNumber(request, response, databaseConnection.getConnection(), lRead);
          }
          
          // メッセージの出力
          if (SIUtil.isNotNull(lRes)) {
            try {databaseConnection.getConnection().rollback();} catch (SQLException e1) {}
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, lRes);
          } else {
            try {databaseConnection.getConnection().commit();} catch (SQLException e1) {}
            request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.success.insert"));
          }
        } catch (FileNotFoundException e) {
          request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.failure.exist", "ファイル"));
          log.warn(e);
        } catch (FileUploadException e) {
          request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, SIErrorFactory.getErrorMsg("manager.message.failure.upload"));
          log.warn(e);
        } catch (SIFileExistException e) {
          request.setAttribute(SIConfig.SIMESSAGE_ATTRIBUTE_RESULT_NAME, e.toString());
          log.warn(e);
        } finally {
          lRead.close();
          lCsvTempFile.delete();
          session.setAttribute(SIConfig.SISESSION_MAN_IO_CSV_NAME, lIOCsv);
          
          lIOCsv = new UIIOCsv();// データソースを選択しないまま、取込ボタンを押すと、ほかの項目を保持する
          lIOCsv.setCsvTblNameSel(this.getMultiParameter(request, "csvTblNameSel"));
          lIOCsv.setEditModeTxt(this.getMultiParameter(request, "editModeTxt"));
          session.setAttribute(SIConfig.SISESSION_MAN_IO_CSV_NAME, lIOCsv);
        }
        forwardKey(request, response, "webshop.jsp.manager.cmdty.list");
      }
    } catch (SQLException e) {
      e.printStackTrace();
      throw new ServletException();
    } catch (NamingException e) {
      e.printStackTrace();
      throw new ServletException();
    } finally {
      databaseConnection.close();
    }
  }
  
  /**
   * <b>validateDelete</b> 削除の対象のデータをチェックします。
   * 
   * @param lRequest クライアントからのリクエスト
   * @param lConnection コネクション
   * @param lCmdtyCode 親コード
   * @param lIndividualCode 在庫コード
   */
  public boolean validateDelete(HttpServletRequest lRequest, Connection lConnection, String lCmdtyCode, String lIndividualCode) {
    SICustomErrors errors = new SICustomErrors();
    StringBuffer lSqlBuf = new StringBuffer();
    
    // 紐付く受注が存在する商品を削除することはできない
    lSqlBuf = new StringBuffer();
    lSqlBuf.append("SELECT OrderCode FROM ").append(SIConfig.SIVIEW_ORDER_DETAIL_LATEST_NAME);
    lSqlBuf.append(" WHERE IndividualCode=").append(SIDBUtil.SQL2Str(lIndividualCode));
    lSqlBuf.append("   AND CmdtyCode=").append(SIDBUtil.SQL2Str(lCmdtyCode));
    try {
      if (SIDBUtil.hasData(lConnection, lSqlBuf.toString())) {
        errors.addError(new SICustomError("database.delete.lock3", lIndividualCode));
      }
    } catch (SIDBAccessException e) {
      e.printStackTrace();
      errors.addError(new SICustomError("database.delete.error"));
    }
    if (!errors.isEmpty()) lRequest.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK, errors);
    else lRequest.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY_BAK);
    return errors.isEmpty();
  }
  
  /**
   * <b>insertTableData</b> データベースにレコードを作成します。
   * 
   * @param lConnection DBへのコネクション
   * @param regCmdty 入力したデータ
   * @return なし
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   */
  public static void insertTableData(Connection lConnection, UIRegCmdty regCmdty) throws SIDuplicateKeyException, SIDBAccessException {
    SISpcType lSpcType = new SISpcType();
    
    SIInsertRec lRec = new SIInsertRec("CmdtyMTbl");
    lRec.add("ShopCode", regCmdty.getShopCode());// ショップコード
    lRec.add("CmdtyCode", regCmdty.getCmdtyCode());// 商品コード
    lRec.add("JanCode", regCmdty.getJanCode());// janコード
    lRec.add("CmdtyName", regCmdty.getCmdtyName());// 商品名
    lRec.add("Description", regCmdty.getDescription());// 商品詳細
    lRec.add("StockCode", regCmdty.getStockCode());// 仕入れコード
    lRec.add("StockUnitPrice", regCmdty.getStockUnitPrice());// 仕入れ価格
    lRec.add("UnitPrice", regCmdty.getUnitPrice());// 価格
    lRec.add("SalesUnitPrice", regCmdty.getSalesUnitPrice());// 特別価格
    lRec.add("TaxFlg", regCmdty.getTaxFlg());// 税区分
    lRec.add("AdviceFlg", regCmdty.getAdviceFlg());// おすすめ
    // 7.2.0 ST0286 追加 ここから
    // おすすめ表示順
    if (regCmdty.getAdviceFlg().equalsIgnoreCase("1")) {
      lRec.add("AdviceDispOrder", regCmdty.getAdviceDispOrder());
    } else {
      lRec.add("AdviceDispOrder", "1000");
    }
    // 7.2.0 ST0286 追加 ここまで
    lRec.add("BannerFile", regCmdty.getBannerFile());// バナーファイル
    lRec.add("BannerURL", regCmdty.getBannerURL());// バナー先
    // 7.2.0 ST1051 修正（追加含む） ここから
    if (regCmdty.getDiscountFlg().equals("0")) {
      lRec.add("DiscountFlg", "0");// 一括値引フラグ
    } else {
      lRec.add("DiscountFlg", regCmdty.getShopDiscountType());// 一括値引フラグ
    }
    if (regCmdty.getMemberDiscountFlg().equals("0")) {
      lRec.add("MemberDiscountFlg", "0");// 会員値引フラグ
    } else {
      lRec.add("MemberDiscountFlg", regCmdty.getShopMemberDiscountType());// 会員値引フラグ
    }
    if (regCmdty.getSalesDiscountFlg().equals("0")) {
      lRec.add("SalesDiscountFlg", "0");// 特価値引フラグ
    } else {
      lRec.add("SalesDiscountFlg", regCmdty.getShopSalesDiscountType());// 特価値引フラグ
    }
    // 7.2.0 ST1051 修正（追加含む） ここまで
    lRec.add("SrchKeyName1", regCmdty.getSrchKeyName1());// 検索項目1
    lRec.add("SrchKeyName2", regCmdty.getSrchKeyName2());// 検索項目2
    lRec.add("SrchKeyName3", regCmdty.getSrchKeyName3());// 検索項目3
    lRec.add("CmdtySize", regCmdty.getCmdtySize());// 商品サイズ
    if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {
      lRec.add("SellFromDate", regCmdty.getSellFromDate());// 販売開始日
      lRec.add("SellToDate", regCmdty.getSellToDate());// 販売終了日
      lRec.add("SalesFromDate", regCmdty.getSalesFromDate());// 特別開始日
      lRec.add("SalesToDate", regCmdty.getSalesToDate());// 特別終了日
    } else {
      lRec.add("SellFromDate", new SIDateType(regCmdty.getSellFromDate()));// 販売開始日
      lRec.add("SellToDate", new SIDateType(regCmdty.getSellToDate()));// 販売終了日
      lRec.add("SalesFromDate", new SIDateType(regCmdty.getSalesFromDate()));// 特別開始日
      lRec.add("SalesToDate", new SIDateType(regCmdty.getSalesToDate()));// 特別終了日
    }
    lRec.add("EndSellFlg", regCmdty.getEndSellFlg());// 販売終了フラグ
    lRec.add("RsrvEnableFlg", regCmdty.getRsrvEnableFlg());// 予約販売
    lRec.add("WrappingFlg", "0");// ギフト包装フラグ
    lRec.add("NoStockFlg", "0");// 在庫無販売
    lRec.add("Amount", regCmdty.getAmount());// 在庫無販売
    lRec.add("RsrvAmount", regCmdty.getRsrvAmount());// 予約可能数
    lRec.add("AmountFlg", regCmdty.getAmountFlg());// 在庫管理フラグ
    lRec.add("StockStatusCode", regCmdty.getStockStatusCode());// 在庫状況番号
    // String fileName = regCmdty.getShopCode()+SIConfig.SIWEBSHOPPING_TOKEN+regCmdty.getCmdtyCode()+SIConfig.SIWEBSHOPPING_TOKEN;
    lRec.add("DeliveryTypeCode", regCmdty.getDeliveryTypeCode());// 配送先コード
    lSpcType = new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp");
    lRec.add("InitDateTime", lSpcType);// 登録日時
    lRec.add("DisableFlg", "0");
    // 商品マスタテーブルの更新
    lRec.execute(lConnection);
  }
  
  /**
   * <b>updateTableDataBG</b> データベースにレコードを修正します。
   * 
   * @param lConnection DBへのコネクション
   * @param regCmdty 入力したデータ
   * @return なし
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   */
  public static void updateTableDataBG(Connection lConnection, UICmdtyParent cmdtyParent) throws SIDBAccessException {
    SIModifyRec lRec = new SIModifyRec("CmdtyMTbl");
    try {
      lRec.addCondition("CmdtyCode", cmdtyParent.getCmdtyCode());// 商品コード
      lRec.addCondition("ShopCode", cmdtyParent.getShopCode());// ショップコード
      lRec.add("JanCode", cmdtyParent.getJanCode());// janコード
      lRec.add("CmdtyName", cmdtyParent.getCmdtyName());// 商品名
      lRec.add("MakerCode", cmdtyParent.getMakerCode());// ブランドコード
      lRec.add("ColorCode", cmdtyParent.getColorCode());// 色コード
      lRec.add("NewFixedPrice", cmdtyParent.getNewFixedPrice());// M価
      lRec.add("TaxFlg", cmdtyParent.getTaxFlg());// 税区分
      lRec.add("BannerURL", cmdtyParent.getBannerURL());// バナー先
      // 7.2.0 ST1051 修正（追加含む） ここから
      lRec.add("SrchKeyName1", cmdtyParent.getSrchKeyName1());// 検索項目1
      lRec.add("SrchKeyName2", cmdtyParent.getSrchKeyName2());// 検索項目2
      lRec.add("SrchKeyName3", cmdtyParent.getSrchKeyName3());// 検索項目3
      lRec.add("CmdtySize", cmdtyParent.getCmdtySize());// 商品サイズ
      lRec.add("DeliveryTypeCode", cmdtyParent.getDeliveryTypeCode());// 配送先コード
      SISpcType lSpcType = new SISpcType();
      lSpcType = new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp");
      lRec.add("DisableFlg", cmdtyParent.getDisableFlg());
      lRec.add("OtherName", cmdtyParent.getOtherName());
      lRec.add("InitDateTime", lSpcType);// 登録日時
      // EDBTG003-00 elecs-matsushima add start
      lRec.add("cmdtycompositionflg", cmdtyParent.getCmdtyCompositionFlg());
      // EDBTG003-00 elecs-matsushima add end
      lRec.add("StorageCode", cmdtyParent.getStorageCode());
      lRec.add("SalonPrice", cmdtyParent.getSalonPrice());
      // 商品マスタの更新
      lRec.execute(lConnection);
      if (cmdtyParent.getDisableFlg().equals("9")){//廃盤のとき
        lRec = new SIModifyRec("IndividualTbl");
        lRec.addCondition("CmdtyCode", cmdtyParent.getCmdtyCode());// 商品コード
        lRec.add("RsrvEnableFlg", "0");//予約しない
        lRec.execute(lConnection);
      }
    } catch (SIDuplicateKeyException sqle) {
      throw new SIDBAccessException(sqle);
    }
  }
  
  /**
   * <b>insertTableData</b> データベースにレコードを作成します。
   * 
   * @param lConnection DBへのコネクション
   * @param regCmdty 入力したデータ
   * @return なし
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   */
  public static void insertTableDataBG(Connection lConnection, UICmdtyParent cmdtyParent) throws SIDuplicateKeyException, SIDBAccessException {
    SISpcType lSpcType = new SISpcType();
    
    SIInsertRec lRec = new SIInsertRec("CmdtyMTbl");
    lRec.add("ShopCode", cmdtyParent.getShopCode());// ショップコード
    lRec.add("CmdtyCode", cmdtyParent.getCmdtyCode());// 親コード
    lRec.add("JanCode", cmdtyParent.getJanCode());// janコード
    lRec.add("CmdtyName", cmdtyParent.getCmdtyName());// 商品名
    lRec.add("TaxFlg", cmdtyParent.getTaxFlg());// 税区分
    lRec.add("MakerCode", cmdtyParent.getMakerCode());// ブランド
    lRec.add("ColorCode", cmdtyParent.getColorCode());// 色コード
    lRec.add("NewFixedPrice", cmdtyParent.getNewFixedPrice());// M価
    lRec.add("BannerURL", cmdtyParent.getBannerURL());// バナー先
    
    lRec.add("SrchKeyName1", cmdtyParent.getSrchKeyName1());// 検索項目1
    lRec.add("SrchKeyName2", cmdtyParent.getSrchKeyName2());// 検索項目2
    lRec.add("SrchKeyName3", cmdtyParent.getSrchKeyName3());// 検索項目3
    lRec.add("CmdtySize", cmdtyParent.getCmdtySize());// 商品サイズ
    
    lRec.add("DeliveryTypeCode", cmdtyParent.getDeliveryTypeCode());// 配送先コード
    lSpcType = new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp");
    lRec.add("InitDateTime", lSpcType);// 登録日時
    lRec.add("OtherName", cmdtyParent.getOtherName());
    // EDBTG003-00 elecs-matsushima add start
    lRec.add("cmdtycompositionflg", cmdtyParent.getCmdtyCompositionFlg());
    // EDBTG003-00 elecs-matsushima add end
    lRec.add("DisableFlg", cmdtyParent.getDisableFlg());
    lRec.add("StorageCode", cmdtyParent.getStorageCode());
    lRec.add("SalonPrice", cmdtyParent.getSalonPrice());
    // 商品マスタテーブルの更新
    lRec.execute(lConnection);
  }
  
  /**
   * <b>updateTableData</b> データベースにレコードを修正します。
   * 
   * @param lConnection DBへのコネクション
   * @param regCmdty 入力したデータ
   * @return なし
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   */
  public static void updateTableData(Connection lConnection, UIRegCmdty regCmdty) throws SIDBAccessException {
    SIModifyRec lRec = new SIModifyRec("CmdtyMTbl");
    
    try {
      lRec.addCondition("CmdtyCode", regCmdty.getCmdtyCode());// 商品コード
      lRec.addCondition("ShopCode", regCmdty.getShopCode());// ショップコード
      log.debug("getAmountFlg>>>" + regCmdty.getAmountFlg());
      
      lRec.add("JanCode", regCmdty.getJanCode());// janコード
      lRec.add("CmdtyName", regCmdty.getCmdtyName());// 商品名
      lRec.add("Description", regCmdty.getDescription());// 商品詳細
      lRec.add("StockCode", "1");// 仕入れコード
      lRec.add("StockUnitPrice", regCmdty.getStockUnitPrice());// 仕入れ価格
      lRec.add("UnitPrice", regCmdty.getUnitPrice());// 価格
      lRec.add("SalesUnitPrice", regCmdty.getSalesUnitPrice());// 特別価格
      lRec.add("TaxFlg", regCmdty.getTaxFlg());// 税区分
      lRec.add("AdviceFlg", regCmdty.getAdviceFlg());// おすすめ
      // 7.2.0 ST0286 追加 ここから
      // おすすめ表示順
      if (regCmdty.getAdviceFlg().equalsIgnoreCase("1")) {
        lRec.add("AdviceDispOrder", regCmdty.getAdviceDispOrder());
      } else {
        lRec.add("AdviceDispOrder", "1000");
      }
      // 7.2.0 ST0286 追加 ここまで
      lRec.add("BannerFile", regCmdty.getBannerFile());// バナーファイル
      lRec.add("BannerURL", regCmdty.getBannerURL());// バナー先
      // 7.2.0 ST1051 修正（追加含む） ここから
      if (regCmdty.getDiscountFlg().equals("0")) {
        lRec.add("DiscountFlg", "0");// 一括値引フラグ
      } else {
        lRec.add("DiscountFlg", regCmdty.getShopDiscountType());// 一括値引フラグ
      }
      if (regCmdty.getMemberDiscountFlg().equals("0")) {
        lRec.add("MemberDiscountFlg", "0");// 会員値引フラグ
      } else {
        lRec.add("MemberDiscountFlg", regCmdty.getShopMemberDiscountType());// 会員値引フラグ
      }
      if (regCmdty.getSalesDiscountFlg().equals("0")) {
        lRec.add("SalesDiscountFlg", "0");// 特価値引フラグ
      } else {
        lRec.add("SalesDiscountFlg", regCmdty.getShopSalesDiscountType());// 特価値引フラグ
      }
      // 7.2.0 ST1051 修正（追加含む） ここまで
      lRec.add("SrchKeyName1", regCmdty.getSrchKeyName1());// 検索項目1
      lRec.add("SrchKeyName2", regCmdty.getSrchKeyName2());// 検索項目2
      lRec.add("SrchKeyName3", regCmdty.getSrchKeyName3());// 検索項目3
      lRec.add("CmdtySize", regCmdty.getCmdtySize());// 商品サイズ
      lRec.add("SellFromDate", regCmdty.getSellFromDate());// 販売開始日
      lRec.add("EndSellFlg", regCmdty.getEndSellFlg());// 販売終了フラグ
      lRec.add("SellToDate", regCmdty.getSellToDate());// 販売終了日
      lRec.add("SalesFromDate", regCmdty.getSalesFromDate());// 特別開始日
      lRec.add("SalesToDate", regCmdty.getSalesToDate());// 特別終了日
      lRec.add("RsrvEnableFlg", regCmdty.getRsrvEnableFlg());// 予約販売
      lRec.add("WrappingFlg", regCmdty.getWrappingFlg());// ギフト配送フラグ
      lRec.add("NoStockFlg", regCmdty.getNoStockFlg());// 在庫無販売
      lRec.add("Amount", regCmdty.getAmount());// 在庫無販売
      lRec.add("RsrvAmount", regCmdty.getRsrvAmount());// 予約可能数
      lRec.add("AmountFlg", regCmdty.getAmountFlg());// 在庫管理フラグ
      lRec.add("StockStatusCode", regCmdty.getStockStatusCode());// 在庫状況番号
      lRec.add("DeliveryTypeCode", regCmdty.getDeliveryTypeCode());// 配送先コード
      SISpcType lSpcType = new SISpcType();
      lSpcType = new SISpcType("TO_CHAR(now(),'YYYY/MM/DD HH24:MI:SS')::timestamp");
      lRec.add("InitDateTime", lSpcType);// 登録日時
      // 商品マスタの更新
      lRec.execute(lConnection);
    } catch (SIDuplicateKeyException sqle) {
      throw new SIDBAccessException(sqle);
    }
  }
  
  /**
   * <b>deleteTableData</b> データベースにレコードを削除します。
   * 
   * @param lConnection DBへのコネクション
   * @param lErrors エラーメッセージ
   * @param cmdtyList 削除するデータ
   * @return なし
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   */
  private void deleteTableData(Connection lConnection, UICmdtyListCond cmdtyList) throws SIDBAccessException {
    if (cmdtyList.getCmdtyStndrdCodeChk() == null) return;
    SIDeleteRec lRec = new SIDeleteRec();
    
    // EDBTG003-00 elecs-matsushima add start
    // Statement作成
    PreparedStatement statement = null;
    // ResultSet変数
    ResultSet lResult = null;
    // EDBTG003-00 elecs-matsushima add end
    String[] lShopCmdtyCode = new String[0];
    try {
      for (int ii = 0; ii < cmdtyList.getCmdtyStndrdCodeChk().length; ii++) {
        if (SIUtil.isNotNull(cmdtyList.getCmdtyStndrdCodeChk()[ii])) {
          lShopCmdtyCode = SIStringUtil.split(cmdtyList.getCmdtyStndrdCodeChk()[ii], SIConfig.SIWEBSHOPPING_TOKEN);
          
          // EDBTG003-00 elecs-matsushima add start
          String setFlg = "";
          
          // セットコードを取得
          StringBuffer sqlStm = new StringBuffer();
          sqlStm.append("SELECT cmdtycompositionflg FROM cmdtymtbl WHERE shopcode = ? AND cmdtycode = ?");
          
          try{
            // statement生成
            statement = lConnection.prepareStatement(sqlStm.toString());
            // パラメータ設定
            statement.setString(1, lShopCmdtyCode[0]);
            statement.setString(2, lShopCmdtyCode[1]);
            // SQL発行
            lResult = statement.executeQuery();
            
            while(lResult.next()) {
              setFlg = lResult.getString("cmdtycompositionflg");
            }
          } catch (SQLException e) {
            e.printStackTrace();
            throw new SIDBAccessException(e);
          } finally {
            SIDBUtil.close(lResult, statement);
          }
          
          if (SIUtil.isNull(setFlg)) setFlg = SIConfig.CMDTY_COMPOSITION_NORMAL;
          // EDBTG003-00 elecs-matsushima add end
          
          // 画像を削除
          // 7.3.0 PI-NES0501 修正 ここから
          /*
           * SIFileUtil fileUtil = new SIFileUtil(lConnection,this.context,lShopCmdtyCode[0]); fileUtil.delCmdtyAll(lShopCmdtyCode[1]);
           */
          // 削除ファイルのリスト取得
          UICmdtyDeleteImgList DeteleImgList = new UICmdtyDeleteImgList();
          ServletContext sc = getServletConfig().getServletContext();
          
          String deleteFileName = SIUtil.changeToJIS(lShopCmdtyCode[1]);
          String deleteFile = "/" + SIConfig.SIUPLOAD_FOLDER[0] + deleteFileName;
          File file = new File(sc.getRealPath(deleteFile));
          
          // ディレクトリ削除
          DeteleImgList.deleteDirecty(file);
          
          // 7.3.0 PI-NES0501 修正 ここまで
          
          // カテゴリーのレコードの削除
          lRec = new SIDeleteRec("CmdtyCtgryMtbl");
          lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          // 規格のレコードの削除
          lRec = new SIDeleteRec("CmdtyStndrdMtbl");
          lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          // 関連商品のレコードの削除
          lRec = new SIDeleteRec("ConnCmdtyMtbl");
          lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          lRec = new SIDeleteRec("ConnCmdtyMtbl");
          lRec.addCondition("ConnShopCode", lShopCmdtyCode[0]);// ショップコード
          lRec.addCondition("ConnCmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          // 商品テーブルのレコードの削除
          lRec = new SIDeleteRec("CmdtyMTbl");
          lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          // 予約レコードの削除
          lRec = new SIDeleteRec("ReserveOrderTbl");
          lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          // 商品レビューのレコードの削除
          lRec = new SIDeleteRec("ReviewTbl");
          lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          // 7.3.0 PI-NES0501 追加 ここから
          // 店舗在庫のレコードの削除
          lRec = new SIDeleteRec("StoreStockTbl");
          lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          // 在庫テーブルのレコードの削除
          lRec = new SIDeleteRec("IndividualTbl");
          lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          // 7.3.0 PI-NES0501 追加 ここまで
          
          // 商品UNITテーブルのレコードの削除
          lRec = new SIDeleteRec("CmdtyUnitTbl");
          lRec.addCondition("ShopCode", "0");// ショップコード
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          // 入庫履歴テーブルのレコードの削除
          lRec = new SIDeleteRec("StoreHistoryTbl");
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          // 出庫履歴テーブルのレコードの削除
          lRec = new SIDeleteRec("ShipHistoryTbl");
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          // 商品加工テーブルのレコードの削除
          lRec = new SIDeleteRec("ProcessTbl");
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          // 締処理在庫テーブルのレコードの削除
          lRec = new SIDeleteRec("stockrecordtbl");
          lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          lRec.execute(lConnection);
          
          // 棚卸在庫テーブルのレコードの削除
          //lRec = new SIDeleteRec("inventorystocktbl");
          //lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
          
          // EDBTG003-00 elecs-matsushima add start
          // 構成商品の場合は、構成情報を削除する。
          if (setFlg.equals(SIConfig.CMDTY_COMPOSITION_FIXED_SET)
              || setFlg.equals(SIConfig.CMDTY_COMPOSITION_SELECTION_SET)
              || setFlg.equals(SIConfig.CMDTY_COMPOSITION_SPECIFICATION)
              || setFlg.equals(SIConfig.CMDTY_COMPOSITION_VARIATION_SET)
           ){
            
            // 構成商品マスタ
            lRec = new SIDeleteRec("cmdtycompositionmtbl");
            lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
            lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
            lRec.execute(lConnection);
            
            // 構成商品グループマスタ
            lRec = new SIDeleteRec("compositiongroupmtbl");
            lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
            lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
            lRec.execute(lConnection);
            
            // 構成商品グループ明細
            lRec = new SIDeleteRec("compositiongroupdetailtbl");
            lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
            lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
            lRec.execute(lConnection);
            
            // 構成添付商品
            lRec = new SIDeleteRec("appendedcmdtytbl");
            lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
            lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
            lRec.execute(lConnection);
            
            // 構成オプション
            lRec = new SIDeleteRec("compositionoptiontbl");
            lRec.addCondition("ShopCode", lShopCmdtyCode[0]);// ショップコード
            lRec.addCondition("CmdtyCode", lShopCmdtyCode[1]);// 商品コード
            lRec.execute(lConnection);
          }
        }
      }
    } catch (SIDuplicateKeyException e) {
      throw new SIDBAccessException(e);
    }
    // 7.3.0 PI-NES0501 削除ここから
    // catch (SQLException e) {
    // throw new SIDBAccessException(e);
    // }
    // 7.3.0 PI-NES0501 削除ここまで
  }
  
  /**
   * <b>deleteTableDataIndividual</b> 在庫コードを削除します。
   * 
   * @param lConnection DBへのコネクション
   * @param lErrors エラーメッセージ
   * @param lCmdtyCode 親コード
   * @param lIndividualCode 在庫コード
   * @return なし
   * @throws SIDuplicateKeyException
   * @throws SIDBAccessException
   */
  private void deleteTableDataIndividual(Connection lConnection, String lCmdtyCode, String lIndividualCode) throws SIDBAccessException {
    SIDeleteRec lRec = new SIDeleteRec();
    try {
      // 予約レコードの削除
      lRec = new SIDeleteRec("ReserveOrderTbl");
      lRec.addCondition("ShopCode", "0");// ショップコード
      lRec.addCondition("CmdtyCode", lCmdtyCode);// 親コード
      lRec.addCondition("IndividualCode", lIndividualCode);// 在庫コード
      lRec.execute(lConnection);
      
      // 店舗在庫のレコードの削除
      lRec = new SIDeleteRec("StoreStockTbl");
      lRec.addCondition("ShopCode", "0");// ショップコード
      lRec.addCondition("CmdtyCode", lCmdtyCode);// 親コード
      lRec.addCondition("IndividualCode", lIndividualCode);// 在庫コード
      lRec.execute(lConnection);
      
      // 在庫テーブルのレコードの削除
      lRec = new SIDeleteRec("IndividualTbl");
      lRec.addCondition("ShopCode", "0");// ショップコード
      lRec.addCondition("CmdtyCode", lCmdtyCode);// 親コード
      lRec.addCondition("IndividualCode", lIndividualCode);// 在庫コード
      lRec.execute(lConnection);
      
      // 商品UNITテーブルのレコードの削除
      lRec = new SIDeleteRec("CmdtyUnitTbl");
      lRec.addCondition("ShopCode", "0");// ショップコード
      lRec.addCondition("CmdtyCode", lCmdtyCode);// 親コード
      lRec.addCondition("IndividualCode", lIndividualCode);// 在庫コード
      lRec.execute(lConnection);
      
      // 入庫履歴テーブルのレコードの削除
      lRec = new SIDeleteRec("StoreHistoryTbl");
      lRec.addCondition("CmdtyCode", lCmdtyCode);// 親コード
      lRec.addCondition("IndividualCode", lIndividualCode);// 在庫コード
      lRec.execute(lConnection);
      
      // 出庫履歴テーブルのレコードの削除
      lRec = new SIDeleteRec("ShipHistoryTbl");
      lRec.addCondition("CmdtyCode", lCmdtyCode);// 親コード
      lRec.addCondition("IndividualCode", lIndividualCode);// 在庫コード
      lRec.execute(lConnection);
      
      // 商品加工テーブルのレコードの削除
      lRec = new SIDeleteRec("ProcessTbl");
      lRec.addCondition("CmdtyCode", lCmdtyCode);// 親コード
      lRec.addCondition("IndividualCode", lIndividualCode);// 在庫コード
      lRec.execute(lConnection);
      
      // 締処理在庫テーブルのレコードの削除
      lRec = new SIDeleteRec("stockrecordtbl");
      lRec.addCondition("CmdtyCode", lCmdtyCode);// 親コード
      lRec.addCondition("IndividualCode", lIndividualCode);// 在庫コード
      lRec.execute(lConnection);
      
      // 棚卸在庫テーブルのレコードの削除
      //lRec = new SIDeleteRec("inventorystocktbl");
      //lRec.addCondition("CmdtyCode", lCmdtyCode);// 親コード
      //lRec.addCondition("IndividualCode", lIndividualCode);// 在庫コード
      //lRec.execute(lConnection);
    } catch (SIDuplicateKeyException e) {
      throw new SIDBAccessException(e);
    }
  }
  
  /**
   * <b>produceCSVFile</b> CSVファイルを作成します。
   * 
   * @param response クライアントまでのresponse
   * @param lConnection DBへのコネクション
   * @param cmdtyList CSVファイルに出力するデータセット
   * @return なし
   * @throws なし
   */
  private void produceCSVFile(HttpServletRequest request, HttpServletResponse response, Connection lConnection, UICmdtyListCond cmdtyList) {
    SILogin lLogin = SIHTMLUtil.getLogin(request);
    
    // CSVファイル名の作成
    String lCsvFileName = SICSVConf.getCsvFileName(SICSVConf.SICSV_CMDTY_INX);
    SICSVWrite lCsv = new SICSVWrite(lCsvFileName);
    
    // SQL文の作成
    StringBuffer lSqlBuf = new StringBuffer("SELECT * ");
    if (cmdtyList.getSearchFlg()) {
      lSqlBuf.append("FROM ManCmdtyVW WHERE 1=1 ");
    } else {
      lSqlBuf.append("FROM ManCmdtyVW WHERE 1=2 ");
    }
    if (lLogin.isShop()) {
      lSqlBuf.append("AND ShopCode=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode(), " "));
    }
    
    lSqlBuf.append(cmdtyList.getCondtionSQL());
    lSqlBuf.append(cmdtyList.getOrderBySQL());
    // SQL文の設定
    lCsv.setSqlStatement(lSqlBuf.toString());
    // タイトルとFieldの設定
    lCsv.setCsvTitleAndField(SICSVConf.getTitleAndFieldName(SICSVConf.SICSV_CMDTY_INX));
    if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {} else {
      lCsv.setFieldType(SICSVConf.getFieldType(SICSVConf.SICSV_CMDTY_INX));
    }
    // CSVファイルの出力
    lCsv.execute(lConnection, response);
  }
  
  /**
   * <b>produceCmdtyCSVFile</b> CSVファイルを作成します。
   * 
   * @param response クライアントまでのresponse
   * @param lConnection DBへのコネクション
   * @param cmdtyList CSVファイルに出力するデータセット
   * @return なし
   * @throws なし
   */
  private boolean produceCmdtyCSVFile(HttpServletRequest request, HttpServletResponse response, Connection lConnection, UICmdtyListCond cmdtyList) {
    SILogin lLogin = SIHTMLUtil.getLogin(request);
    
    // CSVファイル名の作成
    String lCsvFileName = SICSVConf.getCsvFileName(SICSVConf.SICSV_CMDTY_LIST_INX);
    SICSVWrite lCsv = new SICSVWrite(lCsvFileName);
    
    // SQL文の作成
    StringBuffer lSqlBuf0 = new StringBuffer();
    StringBuffer lSqlBuf1 = new StringBuffer("SELECT * ");
    StringBuffer lSqlBuf2 = new StringBuffer("SELECT count(*) ");
    if (cmdtyList.getSearchFlg()) {
      lSqlBuf0.append("FROM cmdtymtbl aa ");
      lSqlBuf0.append(",makertbl c1 ");
      lSqlBuf0.append("WHERE aa.makercode = c1.makercode ");
    } else {
      lSqlBuf0.append("FROM cmdtymtbl aa ");
      lSqlBuf0.append(",colortbl b1,makertbl c1 ");
      lSqlBuf0.append("WHERE 1=2 ");
    }
    
    if (lLogin.isShop()) {
      lSqlBuf0.append("AND ShopCode=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode(), " "));
    }
    
    lSqlBuf0.append(cmdtyList.getCondtionSQL());
    
    lSqlBuf1.append(lSqlBuf0);
    lSqlBuf2.append(lSqlBuf0);
    
    try{
      String count = SIDBUtil.getFirstData(lConnection, lSqlBuf2.toString());
      if (Integer.parseInt(count) > MAX_CSV_SIZE) return false;
    }catch(Exception e){}
    
    
    lSqlBuf1.append(cmdtyList.getOrderBySQL());
    // SQL文の設定
    lCsv.setSqlStatement(lSqlBuf1.toString());
    // タイトルとFieldの設定
    lCsv.setCsvTitleAndField(SICSVConf.getTitleAndFieldName(SICSVConf.SICSV_CMDTY_LIST_INX));
    if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {} else {
      lCsv.setFieldType(SICSVConf.getFieldType(SICSVConf.SICSV_CMDTY_LIST_INX));
    }
    // CSVファイルの出力
    lCsv.execute(lConnection, response);
    return true;
  }
  
  /**
   * <b>produceIndividualCSVFile</b> CSVファイルを作成します。
   * 
   * @param response クライアントまでのresponse
   * @param lConnection DBへのコネクション
   * @param cmdtyList CSVファイルに出力するデータセット
   * @return なし
   * @throws なし
   */
  private boolean produceIndividualCSVFile(HttpServletRequest request, HttpServletResponse response, Connection lConnection, UICmdtyListCond cmdtyList) {
    SILogin lLogin = SIHTMLUtil.getLogin(request);
    
    // CSVファイル名の作成
    String lCsvFileName = SICSVConf.getCsvFileName(SICSVConf.SICSV_INDIVIDUAL_LIST_INX);
    SICSVWrite lCsv = new SICSVWrite(lCsvFileName);
    
    // SQL文の作成
    StringBuffer lSqlBuf0 = new StringBuffer();
    StringBuffer lSqlBuf1 = new StringBuffer("SELECT * ");
    StringBuffer lSqlBuf2 = new StringBuffer("SELECT count(*) ");
    if (cmdtyList.getSearchFlg()) {
      lSqlBuf0.append("FROM individualtbl WHERE 1=1 ");
    } else {
      lSqlBuf0.append("FROM individualtbl WHERE 1=2 ");
    }
    
    if (lLogin.isShop()) {
      lSqlBuf0.append("AND ShopCode=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode(), " "));
    }
    
    lSqlBuf0.append(" AND cmdtycode IN (SELECT cmdtycode FROM cmdtymtbl aa ");
    lSqlBuf0.append(",makertbl c1 ");
    lSqlBuf0.append("WHERE aa.makercode = c1.makercode ");
    lSqlBuf0.append(cmdtyList.getCondtionSQL()).append(") ");
    
    lSqlBuf1.append(lSqlBuf0);
    lSqlBuf2.append(lSqlBuf0);
    
    try{
      String count = SIDBUtil.getFirstData(lConnection, lSqlBuf2.toString());
      if (Integer.parseInt(count) > MAX_CSV_SIZE) return false;
    }catch(Exception e){}
    
    lSqlBuf1.append(" ORDER BY to_number(cmdtycode,'9999999999999') DESC,individualcode ");
    // SQL文の設定
    lCsv.setSqlStatement(lSqlBuf1.toString());
    // タイトルとFieldの設定
    lCsv.setCsvTitleAndField(SICSVConf.getTitleAndFieldName(SICSVConf.SICSV_INDIVIDUAL_LIST_INX));
    if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {} else {
      lCsv.setFieldType(SICSVConf.getFieldType(SICSVConf.SICSV_INDIVIDUAL_LIST_INX));
    }
    // CSVファイルの出力
    lCsv.execute(lConnection, response);
    return true;
  }
  
  /**
   * <b>produceStockCSVFile</b> CSVファイルを作成します。
   * 
   * @param response クライアントまでのresponse
   * @param lConnection DBへのコネクション
   * @param cmdtyList CSVファイルに出力するデータセット
   * @return なし
   * @throws なし
   */
  private boolean produceStockCSVFile(HttpServletRequest request, HttpServletResponse response, Connection lConnection, UICmdtyListCond cmdtyList) {
    SILogin lLogin = SIHTMLUtil.getLogin(request);
    
    // CSVファイル名の作成
    String lCsvFileName = SICSVConf.getCsvFileName(SICSVConf.SICSV_STOCK_LIST_INX);
    SICSVWrite lCsv = new SICSVWrite(lCsvFileName);
    
    // SQL文の作成
    StringBuffer lSqlBuf0 = new StringBuffer();
    StringBuffer lSqlBuf1 = new StringBuffer("SELECT * ");
    StringBuffer lSqlBuf2 = new StringBuffer("SELECT count(*) ");
    if (cmdtyList.getSearchFlg()) {
      lSqlBuf0.append("FROM storestocktbl WHERE 1=1 ");
    } else {
      lSqlBuf0.append("FROM storestocktbl WHERE 1=2 ");
    }
    
    if (lLogin.isShop()) {
      lSqlBuf0.append("AND ShopCode=").append(SIDBUtil.SQL2Str(lLogin.getMallShopCode(), " "));
    }
    
    lSqlBuf0.append(" AND cmdtycode IN (SELECT cmdtycode FROM cmdtymtbl aa ");
    lSqlBuf0.append(",makertbl c1 ");
    lSqlBuf0.append("WHERE aa.makercode = c1.makercode ");
    lSqlBuf0.append(cmdtyList.getCondtionSQL()).append(") ");
    
    lSqlBuf1.append(lSqlBuf0);
    lSqlBuf2.append(lSqlBuf0);
    
    try{
      String count = SIDBUtil.getFirstData(lConnection, lSqlBuf2.toString());
      if (Integer.parseInt(count) > MAX_CSV_SIZE) return false;
    }catch(Exception e){}
    
    lSqlBuf1.append(" ORDER BY to_number(cmdtycode,'9999999999999') DESC,individualcode,branchcode");
    
    // SQL文の設定
    lCsv.setSqlStatement(lSqlBuf1.toString());
    // タイトルとFieldの設定
    lCsv.setCsvTitleAndField(SICSVConf.getTitleAndFieldName(SICSVConf.SICSV_STOCK_LIST_INX));
    if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {} else {
      lCsv.setFieldType(SICSVConf.getFieldType(SICSVConf.SICSV_STOCK_LIST_INX));
    }
    // CSVファイルの出力
    lCsv.execute(lConnection, response);
    return true;
  }
  
  private boolean produceStockNumberCSVFile(HttpServletRequest request, HttpServletResponse response, Connection lConnection) {
    // CSVファイル名の作成
    String lCsvFileName = SICSVConf.getCsvFileName(SICSVConf.SICSV_STOCKNUMBER_LIST_INX);
    SICSVWrite lCsv = new SICSVWrite(lCsvFileName);
    
    // SQL文の作成
    StringBuffer lSqlBuf = new StringBuffer();
    
    lSqlBuf.append("SELECT a.individualcode,b.cmdtyname,a.stocknumber ");
    lSqlBuf.append("FROM stocknumbertbl a,cmdtyunittbl b ");
    lSqlBuf.append("WHERE a.individualcode=b.individualcode ");
    lSqlBuf.append("ORDER BY a.individualcode,a.stocktype DESC,a.stocknumber");
    
    // SQL文の設定
    lCsv.setSqlStatement(lSqlBuf.toString());
    // タイトルとFieldの設定
    lCsv.setCsvTitleAndField(SICSVConf.getTitleAndFieldName(SICSVConf.SICSV_STOCKNUMBER_LIST_INX));
    if (SIDBMultiConf.SIDB_CURRENT_INX == SIDBMultiConf.SIDB_POSTGRESQL_INX) {} else {
      lCsv.setFieldType(SICSVConf.getFieldType(SICSVConf.SICSV_STOCKNUMBER_LIST_INX));
    }
    // CSVファイルの出力
    lCsv.execute(lConnection, response);
    return true;
  }
  
  public String writeStockNumber(HttpServletRequest request, HttpServletResponse response, Connection lConnection, SICSVRead lRead) {
    SICustomErrors errors = new SICustomErrors();
    StringBuffer lResBuf = new StringBuffer();
    try{
      SIDBUtil.execSQL(lConnection, "DELETE FROM stockNumberTbl");
    }catch(Exception e) {
      errors.addError(new SICustomError("database.execute.error"));
      e.printStackTrace();
    }
    
    while (lRead.hasNextLine()) {
      String[] lItemList;
      try {
        lItemList = lRead.itemList();
        
        if (lItemList == null || lItemList.length == 0) continue;
        
        if (lItemList.length != SICSVConf.getFieldName(SICSVConf.SICSV_STOCKNUMBER_LIST_INX).length) {
          lResBuf.append("<br>Line[").append(lRead.getLineNo()).append("]:エラー");
          lResBuf.append(SIErrorFactory.getErrorMsg("manager.app.enough.item"));
          continue;
        }
        errors = new SICustomErrors();
        
        // データの設定
        String[] lStockNumberData = new String[3];
        lStockNumberData[0] = lItemList[0];
        lStockNumberData[1] = lItemList[2];
        
        if (lRead.getLineNo()==1&&lItemList[0].equals("在庫コード")) continue;
        
        if (validate(errors,lConnection, lStockNumberData)) {
          try {
              insertStockNumber(lConnection, lStockNumberData);
          } catch (SIDuplicateKeyException e) {
            errors.addError(new SICustomError("database.insert.duplicate"));
            e.printStackTrace();
          } catch (SIDBAccessException e) {
            errors.addError(new SICustomError("database.execute.error"));
            e.printStackTrace();
          }
        } else {
          request.setAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY,errors);
        }
        
        if (SIUtil.isNotNull(errors.getErrorMsg())) {
          lResBuf.append("<br>Line[").append(lRead.getLineNo()).append("]:エラー");
          lResBuf.append(errors.getErrorMsg());
        }
      } catch (SIErrorException e) {
        lResBuf.append("<br>Line[").append(lRead.getLineNo()).append("]:エラー");
        lResBuf.append(SIErrorFactory.getErrorMsg("input.data.csv.format"));
      }
      request.removeAttribute(SIConfig.SIERROR_ATTRIBUTE_MESSAGE_KEY);
    }
    return lResBuf.toString();
  }
  
  private boolean validate(SICustomErrors errors,Connection lConnection,String[] data){
    StringBuffer lSqlBuf = new StringBuffer();
    
    //存在しない在庫コードチェック
    lSqlBuf.append("SELECT individualcode FROM individualtbl ");
    lSqlBuf.append("WHERE individualcode=").append(SIDBUtil.SQL2Str(data[0], " "));
    SICheckValid.checkExist(errors, lConnection, "在庫コード", lSqlBuf.toString());
    
    //棚番フォーマットチェック
    SICheckValid.checkValid(errors, "棚番", data[1], SICheckDataConf.SICHECK_DATA_ALPHA_DIGIT_TYPE);
    
    //主キー重複チェック
    if(errors.isEmpty()) {
      lSqlBuf = new StringBuffer();
      lSqlBuf.append("SELECT individualcode FROM stocknumbertbl ");
      lSqlBuf.append("WHERE individualcode=").append(SIDBUtil.SQL2Str(data[0], " "));
      lSqlBuf.append("AND stockNumber=").append(SIDBUtil.SQL2Str(data[1], " "));
      SICheckValid.checkDuplicate(errors, lConnection, "在庫コード："+data[0]+"の棚番："+data[1], lSqlBuf.toString());
    }
    return errors.isEmpty();
  }
  
  private void insertStockNumber(Connection lConnection,String[] data) throws SIDuplicateKeyException,SIDBAccessException{
    SIInsertRec lRec = new SIInsertRec("stockNumberTbl");
    lRec.add("IndividualCode", data[0]);
    lRec.add("stockNumber", data[1]);
    lRec.add("stockType", "1");
    lRec.execute(lConnection);
  }
  
  public void destroy() {}
}
