1. 程式人生 > >jquery ajax 多檔案Excel解析上傳

jquery ajax 多檔案Excel解析上傳

------jsp 前臺--------------------

<form  id="importOrderFrom" name="importOrderFrom"  method="post" enctype="multipart/form-data">   

               <div class="dthwxxheada" style="position:relative;">
                     <span>客戶名稱</span>
    <input type="hidden" name="merchantName" id="merchantName">
    <input type="text" name="venderId">
                       <input type="hidden" name="vender">
                       <ul class="searchrelt"  name="searchrelt" style="width:150px;">
                          
                       </ul>
               </div>
               <div class="dthwxxheada">
                     <span>訂單來源</span>
                     <select  id="orderSource" name="orderSource">
                      <option value="">請選擇</option>
                           <option value="10001">1號店商家明細</option>
                           <option value="10003">京東商家</option>
                           <option value="10005">天貓商家</option>
                     </select>
                     <a href="http://www.fron.net/help/661.jhtml" target="_blank">採購單獲取說明</a>
               </div>
               
               <div class="dthwxxheada">
                     <span>解析模式</span>
                     <select id="fileType" onchange=" changeFileType()">
                     <option value="1">普通檔案</option>
                     <option value="2">多個檔案</option>
                     </select>
                     <span style="color: red;">普通檔案:一個excel裡有多個訂單;
                    多個檔案:每個excel裡只有一個訂單
                     </span>
               </div>
               <div class="dthwxxheada" id="singleFile">
                     <span>訂單檔案</span>
                     <input  type="file" id="orderImportFile"  name="orderImportFile[]"   />
               </div>
              <!--  <div id="upload" style="display: none;">
</div>
<a class="uploadbtn" style="text-align: right;display: none;margin-left: -1px;">解析預覽</a>
                -->
               <div class="dthwxxheada" >
                 <button class="btn btn-info" id="btm" type="button" onclick= "importOrder()" >解析預覽</button>
               </div>
               <label id="errorInfo" style="margin-left:20px;color: red;"></label>

                </form>



<script type="text/javascript" src="${pageContext.request.contextPath}/js/bootstrap.min.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/bootstrap-table.min.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/bootstrap-select.min.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-form.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/dateutil.js"></script>
    <script type="text/javascript" src="${pageContext.request.contextPath}/js/order/order_import.js?version=201610211604"></script>


   --------------------------js 檔案事件--------------------------


/**
 * 當選擇天貓時候,顯示多檔案模式還是單檔案模式。
 */
function changeFileType(){
var fileType=$("#fileType").val();
if(fileType=="2"){
$("#orderImportFile").attr("multiple","multiple");
}else{
$("#orderImportFile").removeAttr("multiple");
}

}





/**
 * 解析預覽按鈕事件
 */
function importOrder(){

$("#btm").attr("disabled","true"); //設定變灰按鈕  
setTimeout("$('#btm').removeAttr('disabled')",4000); 

var fileType = $("#fileType").val();
var urlStr="";
if(fileType=="2"){
urlStr = ctx+'/orderImport/parseDuoFileExcel';
}else{
urlStr = ctx+'/orderImport/parseExcel';
}

var file=$("#orderImportFile").val();
   if(file==""){
    alert("請選擇訂單檔案!"); 
       return; 
   } 
   var extStart=file.lastIndexOf("."); 
   var ext=file.substring(extStart,file.length).toUpperCase(); 
   if(ext!=".XLS" && ext!=".XLSX"){ 
       alert("檔案格式僅限於.xls或.xlsx"); 
       return; 
   } 
  
   var displayV  = $("ul.searchrelt").css("display");
   var merchantName = "";
   if(displayV=="none"){
    merchantName = $("ul.searchrelt").children().children().val();
    $("#merchantName").val(merchantName);
   }
var orderSource=$("#orderSource").val();
if(merchantName==null || merchantName==""){
alert("請選擇客戶名稱!");
return;
}else if(orderSource==null || orderSource==""){
alert("請選擇訂單來源!");
return;
}else if(file!=""){
$('#table').bootstrapTable('destroy');
$("#errorInfo").html("");
       var options = {
           url:urlStr,
        data:{},
        type:'post',
        beforeSubmit:function() { 
        MaskUtil.mask("正在解析...");  
        },
           success:function(data){  

            MaskUtil.unmask();  
            if(data.result=="1"){//--1--則解析成功,正常顯示預覽頁面
            $("#errorInfo").html(data.msg);
            orderVersion = data.orderVersion;
            $('#table').bootstrapTable({
            url:ctx+"/orderImport/loadParseExcel",
            queryParams:"queryParamsForOrderImport"
            });
            }else if(data.result=="2"){//--2--則顯示維護對映頁面
            //1生成目的地下拉框
            var areaSelect=new Array();
            $.ajax({  
               url:ctx+'/orderImport/loadFronarea',
              data:{platId:orderSource},
               dataType:'json',
               async: false,
               success:function(dataArea) {
               areaSelect = dataArea.area;
               },
                   error:function(result) { 
                       } 
            });
           
           
            //2生成頁面資料
            var table11 = $(".table111 tbody").empty();
            var orderTempMapList = data.orderTempMapList;
            for(var i=0;i<orderTempMapList.length;i++){
            var elactPlatId=orderTempMapList[i].elactPlatId;
            var elactPlatName=orderTempMapList[i].elactPlatName;
            var descBranchId="";
            var descBranchIdHidden="";
            var branchName="";
            var descId="";
            var descIdHidden="";
            if(elactPlatId=='10001'){//1號店
            descId = orderTempMapList[i].descBranchId.substr(0,2);
            branchName = orderTempMapList[i].descBranchId.substr(0,2);
            descBranchId = orderTempMapList[i].descBranchId;
            descBranchIdHidden = orderTempMapList[i].descBranchId;
            }else if(elactPlatId=='10003'){//京東
            var addressDel=orderTempMapList[i].addressDel;
            descId=orderTempMapList[i].descId;
            for(var j=0;j<areaSelect.length;j++){
                var areaName = areaSelect[j].areaName;
                var indexDesc = addressDel.indexOf(areaName);
                if(indexDesc!=-1){
                branchName=areaName;
                break;
                }
            }
            descBranchId = orderTempMapList[i].descBranchId;
            descBranchIdHidden = orderTempMapList[i].descBranchId;
            descIdHidden = orderTempMapList[i].descId;
            }else if(elactPlatId=='10005'){//天貓
            descId = "";
            branchName = orderTempMapList[i].descBranchId;
            descBranchId = orderTempMapList[i].descBranchId;
            descBranchIdHidden = orderTempMapList[i].descBranchId;
            }
            var table11Str=" <tr> "+
            "  <td><input type='hidden' name='elactPlatIds' value='"+elactPlatId+"'/>"+elactPlatName+"</td> "+
            "  <td><input type='hidden' name='descAreaIds' value='"+descIdHidden+"'/>"+descId+"</td> "+
            "  <td><input type='hidden' name='dcNames' value='"+descBranchIdHidden+"'/> "+descBranchId+"</td> ";
            table11Str+= "  <td>"+elactPlatName+"</td>";
            //3生成目的地下拉框
            var selectedAreaId="";
            var selectArea="<select id='area_"+i+"' name='areaIds' onchange='appendBranch("+elactPlatId+","+i+")'><option value=''>請選擇</option>";
                for(var j=0;j<areaSelect.length;j++){
                var areaName = areaSelect[j].areaName;
                var areaId = areaSelect[j].areaId;
                if(branchName.indexOf(areaName)!=-1){
                selectedAreaId=areaId;
                selectArea+="<option selected='selected' value="+areaId+">"+areaName+"</option>";
                }else{
                selectArea+="<option value="+areaId+">"+areaName+"</option>";
                }
                }
            selectArea+="</select>";
            table11Str+= "  <td>"+selectArea+"</td>";
             
               //4生成目的地第三級分倉下拉框
            var dataAreaDcBranch=new Array();
            $.ajax({  
               url:ctx+'/orderImport/selectBranchsByPlatIdAndAreaId',
               data:{areaId:selectedAreaId,platId:elactPlatId},
               dataType:'json',
               async: false,
               success:function(dataAreaBranch) {
               dataAreaDcBranch = dataAreaBranch.dcBranch;
               },
                   error:function(result) { 
                       } 
            });
            var selectAreaBranch="<select id='areaBranch_"+i+"' name='areaBranchs' ><option value=''>請選擇</option>";
                for(var j=0;j<dataAreaDcBranch.length;j++){
                var branchName = dataAreaDcBranch[j].branchName;
                var branchId = dataAreaDcBranch[j].branchId;           
                selectAreaBranch+="<option value="+branchId+">"+branchName+"</option>";
                }
                selectAreaBranch+="</select>";
             
            table11Str+= "  <td id='td_branch_"+i+"'>"+selectAreaBranch+"</td>"+
              "  </tr>";
            table11.append(table11Str);
            }
            $('.daoru').show();
            }else{
            alert("解析失敗!");
            }
           },
           error:function(result) { 
            MaskUtil.unmask();  
               alert("解析失敗!");
           } 
       };    
       $("#importOrderFrom").ajaxSubmit(options);
}else{
alert("請選擇訂單檔案!");
return;
}

  }



---------java springMvc後臺接受--------


/**
     * 解析多檔案excel
     * @param merchantName
     * @param orderSource
     * @param orderImportFileList
     * @param fileIndexList
     * @return
     */
    @RequestMapping(value = "/parseDuoFileExcel",method=RequestMethod.POST)
    @ResponseBody
    public Object parseDuoFileExcel(
    @RequestParam("merchantName") String merchantName,
    @RequestParam("orderSource") String orderSource,
    @RequestParam("orderImportFile[]") List<CommonsMultipartFile> orderImportFileList) {
    Date opTime = new Date();
    String orderVersion = DateUtils.formatDate(opTime, DateUtils.COMPACTDATETIME_FORMAT);
    Map<String,Object> map=new HashMap<String, Object>();
   
//CommonsMultipartFile orderImportFile = orderImportFileList.get(j);
    //String suffix = orderImportFile.getFileItem().getName();
       try {
        if(orderSource.equals(Constant.ORDER_SOURCE_TM)){//天貓
        map = orderImportTmServiceImpl.parseDuoExcel_2007(merchantName,orderVersion,orderSource,
        orderImportFileList,null);
        }else{
        return "{result:0,msg:'解析出現異常!'}";
        }
    }catch (Exception e) {
    e.printStackTrace();
    return "{result:0,msg:'解析出現異常!'}";
    }
   return map;
    }
    



/**
     * 解析普通excel
     * @param merchantName
     * @param orderSource
     * @param orderImportFile
     * @return
     */
    @RequestMapping(value = "/parseExcel",method=RequestMethod.POST)
    @ResponseBody
    public Object parseExcel(@RequestParam("merchantName") String merchantName,
    @RequestParam("orderSource") String orderSource,
    @RequestParam("orderImportFile[]") List<CommonsMultipartFile> orderImportFileList) {
    Map<String,Object> map = null;
    for (int i = 0; i < orderImportFileList.size(); i++) {
    CommonsMultipartFile orderImportFile = orderImportFileList.get(i);
    String suffix = orderImportFile.getFileItem().getName();
       try {
        //1-2003excel
        if(suffix.endsWith(Constant.EXCEL_SUFFIX_2003)){
        if(orderSource.equals(Constant.ORDER_SOURCE_YHD)){//1號店
        map = orderImportYhdServiceImpl.parseExcel_2003(merchantName,orderSource,orderImportFile);
        }else if(orderSource.equals(Constant.ORDER_SOURCE_JD)){//京東
        map = orderImportJdServiceImpl.parseExcel_2003(merchantName,orderSource,orderImportFile);
        }else if(orderSource.equals(Constant.ORDER_SOURCE_TM)){//天貓
        map = orderImportTmServiceImpl.parseExcel_2003(merchantName,orderSource,orderImportFile);
        }
        }
        //2-2007以上excel
        else if(suffix.endsWith(Constant.EXCEL_SUFFIX_2007)){
        if(orderSource.equals(Constant.ORDER_SOURCE_YHD)){//1號店
        map = orderImportYhdServiceImpl.parseExcel_2007(merchantName,orderSource,orderImportFile);
        }else if(orderSource.equals(Constant.ORDER_SOURCE_JD)){//京東
        map = orderImportJdServiceImpl.parseExcel_2007(merchantName,orderSource,orderImportFile);
        }else if(orderSource.equals(Constant.ORDER_SOURCE_TM)){//天貓
        map = orderImportTmServiceImpl.parseExcel_2007(merchantName,orderSource,orderImportFile);
        }
        }else{
        return "{result:0,msg:'解析出現異常!'}";
        }
    }catch (Exception e) {
    e.printStackTrace();
    return "{result:0,msg:'解析出現異常!'}";
    }
}
   
   return map;
    }