<div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title title">導入</h4> </div> <div class="modal-body"> <div class="row"> <div class="col-lg-12"> <form id="defaultForm" method="" class="form-horizontal recoveryNodeForm" action=""> <div class="col-lg-12"> <div class="form-group"> <label class="col-lg-3 control-label">導入文件</label> <div class="col-lg-6"> <input type="file" class="form-control" style="height:36px;" name="uploadFile" id="uploadFile"/> </div> <button type="button" class="btn btn-primary" id="uploadExcel">上傳</button> </div> </div> <input type="hidden" name="pkId" value="" /> </form> </div> </div> <div> <span><b>導入結果反饋</b></span> <ul id="exportResult"> </ul> </div> </div>
uploadExcel : function () { $("#uploadExcel").on("click","",function () { $(".recoveryNodeForm").data("bootstrapValidator").validate(); var flag = $(".recoveryNodeForm").data("bootstrapValidator").isValid(); if(!flag){ //未通過驗證 return false; } var fileObj = document.getElementById("uploadFile").files[0]; var formFile = new FormData(); formFile.append("file", fileObj); var data = formFile; $.ajax({ url: ctx +'/recovery/netStorage/uploadFile.mvc', data: data, type: "Post", dataType: "json", cache: false,//上傳文件無需緩存 processData: false,//用於對data參數進行序列化處理 這里必須false contentType: false, //必須 success: function (result) { var htmlstr = ''; if(result.result==false){ for(var i=0;i<result.data.length;i++){ htmlstr += '<li>'+result.data[i]+'</li>'; } } else { htmlstr = '<li>上傳成功</li>'; } $('#exportResult').html(htmlstr); }, error: function(XMLHttpRequest, textStatus, errorThrown){ DialogUtil.error("系統錯誤"); } }); }); }
validatorForm :function () {
$(".recoveryNodeForm").bootstrapValidator({
message: 'This value is not valid',
live: 'submitted',
fields: {/*驗證*/
uploadFile: {
message: '導入文件無效',
validators: {
notEmpty: {/*非空提示*/
message: '導入文件不能為空'
},
regexp: {
regexp: /.xlsx$/,
message: '導入文件類型必須是excel'
}
}
}
}
});
}
@RequestMapping("/uploadFile") @ResponseBody public StandardResult uploadFile(@RequestParam("file") MultipartFile file) throws IOException{ SysUser sysUser = BaseUtil.getCurrentUser(); XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); StandardResult result = customerBatteryService.insertDataByExcel(workbook,sysUser); return result; }
public StandardResult insertDataByExcel(XSSFWorkbook workbook, SysUser sysUser){ StandardResult result = checkExcel(workbook); if(result.getResult() == false){ return result; } //A-1訂單信息sheet 5列 XSSFSheet sheet0 = workbook.getSheetAt(0); CustomerBattery customerBattery; String excelId = BaseUtil.getUUID(); String departmentId = sysUser.getDepartmentId(); for(int i=3;i<=sheet0.getLastRowNum();i++){//從第4行讀起,讀到最后一行 customerBattery = new CustomerBattery(); //讀取指定索引行的值 XSSFRow row = sheet0.getRow(i); if(row == null) continue; if(checkAllCellEmpty(row,0,4)) continue; customerBattery.setPkId(BaseUtil.getUUID()); customerBattery.setExcelId(excelId); customerBattery.setDepartmentId(departmentId); customerBattery.setOrderNumber(row.getCell(0).toString());//訂單號 customerBattery.setKsName(row.getCell(1).toString());//客戶名稱 customerBattery.setSupplyName(row.getCell(2).toString());//供貨電池廠名稱 customerBattery.setPackNumber((int)row.getCell(3).getNumericCellValue());//所含電池包數 customerBattery.setModelNumber((int)row.getCell(4).getNumericCellValue());//所含電池模塊數 customerBattery.setDelFlag("0"); customerBattery.setStatus("0"); customerBattery.setCreateUser(sysUser.getTruename()); customerBattery.setCreateDate(new Date()); if("上汽通用五菱".equals(row.getCell(1).toString().toString())){ customerBattery.setInterfaceName("五菱"); }else if("江鈴汽車".equals(row.getCell(1).toString().toString())){ customerBattery.setInterfaceName("江鈴"); } customerBatteryDao.insert(customerBattery); } //A-2售后電池信息sheet 3列 XSSFSheet sheet1 = workbook.getSheetAt(1); CustomerBatteryDetail customerBatteryDetail; for(int i=3;i<=sheet1.getLastRowNum();i++){//從第4行讀起,讀到最后一行 customerBatteryDetail = new CustomerBatteryDetail(); //讀取指定索引行的值 XSSFRow row = sheet1.getRow(i); if(row == null) continue; if(checkAllCellEmpty(row,0,2)) continue; customerBatteryDetail.setPkId(BaseUtil.getUUID()); customerBatteryDetail.setExcelId(excelId); customerBatteryDetail.setCustomerType(row.getCell(0).toString());//售后產品類型(電池包/電池模塊) customerBatteryDetail.setBatteryModel(row.getCell(1).toString());//電池型號 customerBatteryDetail.setBatteryCode(row.getCell(2).toString());//電池編碼 customerBatteryDetail.setDelFlag("0"); customerBatteryDetail.setCreateUser(sysUser.getTruename()); customerBatteryDetail.setCreateDate(new Date()); customerBatteryDetailDao.insert(customerBatteryDetail); } //A-3 電池模塊編碼信息sheet 3列 XSSFSheet sheet2 = workbook.getSheetAt(2); ModulePackRelation modulePackRelation; for(int i=3;i<sheet2.getLastRowNum();i++){//從第4行讀起,讀到最后一行 XSSFRow row = sheet2.getRow(i); if(row == null) continue; if(checkAllCellEmpty(row,0,2)) continue; modulePackRelation = new ModulePackRelation(); modulePackRelation.setPkId(BaseUtil.getUUID()); modulePackRelation.setExcelId(excelId); modulePackRelation.setModuleCode(row.getCell(0).toString());//電池模塊編碼 modulePackRelation.setModuleModel(row.getCell(1).toString());//電池模塊型號 modulePackRelation.setPackCode(row.getCell(2).toString());//所屬電池包編碼 modulePackRelation.setDelFlag("0"); modulePackRelation.setCreateDate(new Date()); modulePackRelation.setCreateUser(sysUser.getTruename()); modulePackRelation.setType("2"); modulePackRelationDao.insert(modulePackRelation); } //A-4 單體電池編碼信息 XSSFSheet sheet3 = workbook.getSheetAt(3); MonomerModuleRelation monomerModuleRelation; for(int i=3;i<=sheet3.getLastRowNum();i++) {//從第4行讀起,讀到最后一行 XSSFRow row = sheet3.getRow(i); if (row == null) continue; if (checkAllCellEmpty(row, 0, 2)) continue; monomerModuleRelation = new MonomerModuleRelation(); monomerModuleRelation.setPkId(BaseUtil.getUUID()); monomerModuleRelation.setExcelId(excelId); monomerModuleRelation.setMonomerCode(row.getCell(0).toString());//單體電池編碼 monomerModuleRelation.setModuleCode(row.getCell(1).toString());//所屬電池模塊編碼 monomerModuleRelation.setDelFlag("0"); monomerModuleRelation.setCreateDate(new Date()); monomerModuleRelation.setCreateUser(sysUser.getTruename()); monomerModuleRelation.setType("2"); monomerModuleRelationDao.insert(monomerModuleRelation); } return result; }
private StandardResult checkExcel(XSSFWorkbook workbook) { StandardResult result = new StandardResult(); //錯誤信息匯總 LinkedHashSet hs1 = new LinkedHashSet(); //找不到型號匯總 LinkedHashSet hs2 = new LinkedHashSet(); //客戶名稱輸入錯誤 LinkedHashSet hsProductor = new LinkedHashSet(); //模塊對應包不存在 LinkedHashSet hs3 = new LinkedHashSet(); //所含電池包數 int packCountAll = 0; //所含模塊數 int moduleCountAll= 0; boolean errorFlag = true; //電池包編碼對應的電池包型號 Map<String, String> packMap = new HashMap<>(); List<Map<String, String>> listPack = new ArrayList<Map<String, String>>(); //電池編碼錯誤 LinkedHashSet hasPack = new LinkedHashSet(); //電池模塊編碼錯誤 LinkedHashSet hasModule = new LinkedHashSet(); //單體電池編碼錯誤 LinkedHashSet hasMonomer = new LinkedHashSet(); //A-1訂單信息sheet 5列 EntityWrapper<PackRecord> ewpr; List<PackRecord> packRecords; EntityWrapper<CustomerBattery> ewppi; List<CustomerBattery> customerBatteryInfos ; if(workbook.getNumberOfSheets() < 4) { result.setResult(false); LinkedHashSet sheetHs = new LinkedHashSet(); sheetHs.add("數據sheet缺失,請檢查"); result.setData(sheetHs); return result; } XSSFSheet sheet0 = workbook.getSheetAt(0); for(int i=3;i<=sheet0.getLastRowNum();i++){//從第4行讀起,讀到最后一行 //讀取指定索引行的值 XSSFRow row = sheet0.getRow(i); if(row == null) continue; if(checkAllCellEmpty(row,0,4)) continue; if(i == 4){ if(checkAllCellEmpty(row,0,4) == false){ result.setResult(false); LinkedHashSet sheetHs = new LinkedHashSet(); sheetHs.add("只能填寫一個訂單,請檢查"); result.setData(sheetHs); return result; } } if(checkCellEmpty(row.getCell(0))) hs1.add("訂單號不能為空"); if(checkCellEmpty(row.getCell(1))) { hs1.add("客戶名稱不能為空"); }else if(!"上汽通用五菱".equals(row.getCell(1).toString()) && !"江鈴汽車".equals(row.getCell(1).toString())){ hs1.add("客戶名稱錯誤"); }else{ hsProductor.add(row.getCell(1).toString()); if(!hsProductor.contains(row.getCell(1).toString())){ hs1.add("客戶名稱必須相同"); }else{ //如果同一訂單號,客戶名稱必須相同 EntityWrapper<CustomerBattery> ewprcb; ewprcb = new EntityWrapper<>(); List<CustomerBattery> customerBatteryList =customerBatteryDao.selectPage(new Page<CustomerBattery>(1,1),ewprcb.eq("ORDER_NUMBER",row.getCell(0).toString()).eq("del_flag", CommonConstants.DEL_FLAG)); if(customerBatteryList.size() >0 && ! customerBatteryList.isEmpty()){ String kaName = customerBatteryList.get(0).getKsName(); if(! kaName.equals(row.getCell(1).toString())){ hs1.add("同一訂單號客戶名稱必須相同"); } } } }; if(checkCellEmpty(row.getCell(2))){ hs1.add("供貨電池廠名稱不能為空"); }else{ EntityWrapper<BatteryProductor> ewprbp; ewprbp = new EntityWrapper<>(); List<BatteryProductor> batteryProductorList =batteryProductorDao.selectPage(new Page<BatteryProductor>(1, 1),ewprbp.eq("del_flag", CommonConstants.DEL_FLAG)); boolean flag = false; for(BatteryProductor batteryProductor :batteryProductorList){ if(row.getCell(2).toString().equals(batteryProductor.getProductorName())){ flag = true; break; } } if(flag == false){ hs1.add("供貨電池廠名稱在電池廠商備案中不存在"); }else{ //如果同一訂單號,客戶名稱必須相同 EntityWrapper<CustomerBattery> ewprcb; ewprcb = new EntityWrapper<>(); List<CustomerBattery> customerBatteryList =customerBatteryDao.selectPage(new Page<CustomerBattery>(1,1),ewprcb.eq("ORDER_NUMBER",row.getCell(0).toString()).eq("del_flag", CommonConstants.DEL_FLAG)); if(customerBatteryList.size() >0 && ! customerBatteryList.isEmpty()){ String supplyName = customerBatteryList.get(0).getSupplyName(); if(! supplyName.equals(row.getCell(2).toString())){ hs1.add("同一訂單號供貨電池廠名稱必須相同"); } } } } if(checkCellEmpty(row.getCell(3))){ hs1.add("所含電池包數不能為空"); }else if(row.getCell(3).getCellType() != 0){ errorFlag = false; hs1.add("所含電池包數必須為數字"); }else{ packCountAll = (int)row.getCell(3).getNumericCellValue(); } System.out.print(row.getCell(4).getCellType()); if(checkCellEmpty(row.getCell(4))) { hs1.add("所含電池模塊數不能為空"); }else if(row.getCell(4).getCellType() != 0){ errorFlag = false; hs1.add("所含電池模塊數必須為數字"); }else{ moduleCountAll = (int)row.getCell(4).getNumericCellValue(); } } hs2 = new LinkedHashSet(); //A-2售后電池信息3列 XSSFSheet sheet1 = workbook.getSheetAt(1); //電池包計數 int packCounts = 0; //模塊計數 int moduleCounts = 0; for(int i=3;i<=sheet1.getLastRowNum();i++){//從第4行讀起,讀到最后一行 //讀取指定索引行的值 XSSFRow row = sheet1.getRow(i); if(row == null) continue; if(checkAllCellEmpty(row,0,2)) continue; if(checkCellEmpty(row.getCell(0))){ hs1.add("售后產品類型(電池包/電池模塊)不能為空"); }else if(! "電池包".equals(row.getCell(0).toString()) && ! "電池模塊".equals(row.getCell(0).toString())){ hs1.add("售后產品類型(電池包/電池模塊)填寫錯誤"); }else{ if("電池包".equals(row.getCell(0).toString())){ if(packCountAll == 0 && errorFlag != false){ hs1.add("訂單中不存在電池包"); }else{ packCounts++; } }else{ if(moduleCountAll == 0 && errorFlag != false){ hs1.add("訂單中不存在電池模塊"); }else{ moduleCounts++; } } } if(checkCellEmpty(row.getCell(1))) { hs1.add("電池型號不能為空"); }else { if("電池包".equals(row.getCell(0).toString())){ EntityWrapper<PackRecord> prewmpi = new EntityWrapper<PackRecord>(); List<PackRecord> packRecordList= packDao.selectPage(new Page<PackRecord>(1,1),prewmpi.eq("PACK_MODEL",row.getCell(1).toString()).eq("del_flag", CommonConstants.DEL_FLAG)); if(packRecordList.isEmpty()){ hs2.add(row.getCell(1).toString()); } }else { EntityWrapper<ModuleRecord> mrewmpi = new EntityWrapper<ModuleRecord>(); List<ModuleRecord> moduleRecordList= moduleDao.selectPage(new Page<ModuleRecord>(1,1),mrewmpi.eq("MODULE_MODEL",row.getCell(1).toString()).eq("del_flag", CommonConstants.DEL_FLAG)); if(moduleRecordList.isEmpty()){ hs2.add(row.getCell(1).toString()); } } }; if(checkCellEmpty(row.getCell(2))) { hs1.add("電池編碼不能為空"); }else { EntityWrapper<CustomerBatteryDetail> ewmpcb; ewmpcb = new EntityWrapper<>(); List<CustomerBatteryDetail> customerBatteryDetailList = customerBatteryDetailDao.selectPage(new Page<CustomerBatteryDetail>(1,1),ewmpcb.eq("BATTERY_CODE",row.getCell(2).toString()).eq("del_flag", CommonConstants.DEL_FLAG)); if(hasPack.contains(row.getCell(2).toString())){ hs1.add("電池編碼重復"); }else if(! customerBatteryDetailList.isEmpty()){ hs1.add("電池編碼已存在"); } hasPack.add(row.getCell(2).toString()); if(!checkCellEmpty(row.getCell(0)) && "電池模塊".equals(row.getCell(0).toString())){ hasModule.add(row.getCell(2).toString()); } } //電池型號和對應電池編碼 if(! checkCellEmpty(row.getCell(1)) && ! checkCellEmpty(row.getCell(2)) && !checkCellEmpty(row.getCell(0))){ if("電池包".equals(row.getCell(0).toString())){ packMap.put(row.getCell(2).toString(),row.getCell(1).toString()); } listPack.add(packMap); } } if(packCounts != packCountAll){ hs1.add("電池包個數與訂單信息中所含電池包數不對應"); } if(moduleCounts != moduleCountAll){ hs1.add("電池模塊數與訂單信息中所含電池模塊數不對應"); } if(hs2.size() > 0){ hs1.add("電池型號"+hs2.toString()+"在備案中不存在"); } hs2 = new LinkedHashSet(); //A-3電池模塊編碼信息 3列 XSSFSheet sheet2 = workbook.getSheetAt(2); for(int i=3;i<=sheet2.getLastRowNum();i++) {//從第4行讀起,讀到最后一行 XSSFRow row = sheet2.getRow(i); if(row == null) continue; if(checkAllCellEmpty(row,0,2)) continue; if(packCountAll==0 && i > 2 && errorFlag != false){ if(checkAllCellEmpty(row,0,4) == false){ result.setResult(false); LinkedHashSet sheetHs = new LinkedHashSet(); sheetHs.add("電池模塊編碼信息不該有數據,請檢查"); result.setData(sheetHs); return result; } } if(checkCellEmpty(row.getCell(0))) { hs1.add("電池模塊編碼不能為空"); }else{ EntityWrapper<ModulePackRelation> ewmpmp; ewmpmp = new EntityWrapper<>(); List<ModulePackRelation> modulePackRelationList = modulePackRelationDao.selectPage(new Page<ModulePackRelation>(1,1),ewmpmp.eq("MODULE_CODE",row.getCell(0).toString()).eq("del_flag", CommonConstants.DEL_FLAG)); if(hasModule.contains(row.getCell(0).toString())){ hs1.add("電池模塊編碼重復"); }else if(! modulePackRelationList.isEmpty()){ hs1.add("電池模塊編碼已存在"); } hasModule.add(row.getCell(0).toString()); } if(checkCellEmpty(row.getCell(1))) { hs1.add("電池模塊型號不能為空"); }else{ EntityWrapper<ModuleRecord> mrewmpi = new EntityWrapper<ModuleRecord>(); List<ModuleRecord> moduleRecordList= moduleDao.selectPage(new Page<ModuleRecord>(1,1),mrewmpi.eq("MODULE_MODEL",row.getCell(1).toString()).eq("del_flag", CommonConstants.DEL_FLAG)); if(moduleRecordList.isEmpty()){ hs2.add(row.getCell(1).toString()); } } if(checkCellEmpty(row.getCell(2))) { hs1.add("所屬電池包編碼不能為空"); }else{ //是否找到對應的電池包編碼 if(! hasPack.contains(row.getCell(2).toString())){ hs1.add("模塊所屬電池包編碼不存在"); }else{ //判斷該模塊型號對應的excel包是否在備案信息里 String packCode = null; if(!checkCellEmpty(row.getCell(1))){ String moduleExcel = row.getCell(1).toString(); for(int m=0;m<listPack.size();m++){ packCode = listPack.get(m).get(row.getCell(2).toString()); } //查詢該包下的所有模塊 List<String> moduleRecordList = moduleDao.selectModuleByPackCode(packCode); boolean flag = false; for(String moduleCode: moduleRecordList){ if(moduleCode.equals(moduleExcel)){ flag = true; break; } } if(flag == false){ hs3.add(row.getCell(1).toString()); hs1.add("模塊"+hs3.toString()+"與包型號不對應"); } } } } } if(hs2.size() > 0){ hs1.add("電池模塊型號"+hs2.toString()+"在備案中不存在"); } //A-4單體電池編碼信息 2列 XSSFSheet sheet3 = workbook.getSheetAt(3); for(int i=3;i<=sheet3.getLastRowNum();i++) {//從第4行讀起,讀到最后一行 XSSFRow row = sheet3.getRow(i); if (row == null) continue; if (checkAllCellEmpty(row, 0, 1)) continue; if (checkCellEmpty(row.getCell(0))) { hs1.add("單體電池編碼不能為空"); }else{ EntityWrapper<MonomerModuleRelation> ewmpmp; ewmpmp = new EntityWrapper<>(); List<MonomerModuleRelation> monomerModuleRelationList = monomerModuleRelationDao.selectPage(new Page<MonomerModuleRelation>(1,1),ewmpmp.eq("MONOMER_CODE",row.getCell(0).toString()).eq("del_flag", CommonConstants.DEL_FLAG)); if(hasMonomer.contains(row.getCell(0).toString())){ hs1.add("單體電池編碼重復"); }else if(! monomerModuleRelationList.isEmpty()){ hs1.add("單體電池編碼已存在"); } hasMonomer.add(row.getCell(0).toString()); } if (checkCellEmpty(row.getCell(1))) { hs1.add("所屬電池模塊編碼不能為空"); }else{ if(! hasModule.contains(row.getCell(1).toString())){ hs1.add("單體所屬電池模塊編碼不存在"); } } } result.setData(hs1); if(hs1.size() > 0) result.setResult(false); else result.setResult(true); return result; }
/** * @param row 一行數據 * @param begin 開始位置 * @param end 結束位置 * @return 全為空返回true */ public boolean checkAllCellEmpty(XSSFRow row,int begin,int end){ boolean flag = true; for (int i = begin; i < end; i++) { if(row.getCell(i)==null||"".equals(row.getCell(i))||row.getCell(i).getCellType() == XSSFCell.CELL_TYPE_BLANK){ }else{ flag = false; break; } } return flag; }
/** * @param cell 單個cell校驗 * @return 為空返回true */ public boolean checkCellEmpty(XSSFCell cell){ if(cell==null||"".equals(cell)||cell.getCellType() == XSSFCell.CELL_TYPE_BLANK){ return true; } return false; }