@Override protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { FileUploadForm form = (FileUploadForm) command; String progressId = "adminId_" + CookieUtil.get(CookieKeyEnum.ADMIN_ID) + "_" + request.getParameter("progressId"); SimpleResult result = execute(form.getFile(), progressId); return new ModelAndView(new JsonView(result)); } private SimpleResult execute(MultipartFile file, final String progressId) { ImptUpsBillsService imptUpsBillsService = ContextFactory.getBean(ImptUpsBillsService.class); SimpleResult result = SimpleResult.create(false); try { InputStream inputStream = file.getInputStream(); if (inputStream.available() == 0) { result.setMessage("文件内无有效数据"); return result; } List<List<String>> rows = importCsv(file); //根据订单号排序 小到大排序 List<List<String>> finalRows = rows.stream().sorted(Comparator.comparing(s -> s.get(15))).collect(Collectors.toList()); new Thread(() -> { try { imptUpsBillsService.importUpsBills(finalRows, progressId); //境内结算 imptUpsBillsService.orderUsUpsUpdateStatus(finalRows); } catch (Exception e) { logger.error("failed to orderUpdateStatus", e); } }).start(); result.setMessage("后台数据导入进行中...").setSuccess(true); return result; } catch (Exception e) { logger.error("failed to importUpsBills", e); result.setMessage("入账操作失败!").setSuccess(false); return result; } } /** * 解析csv文件 到一个list中 * 每个单元个为一个String类型记录,每一行为一个list。 * 再将所有的行放到一个总list中 * * @return * @throws IOException */ public static List<List<String>> importCsv(MultipartFile file) { List<List<String>> dataList = new ArrayList<>(); BufferedReader brReader = null; InputStreamReader inReader = null; try { inReader = new InputStreamReader(file.getInputStream()); brReader = new BufferedReader(inReader); String rec = null;//一行 String str;//一个单元格 while ((rec = brReader.readLine()) != null) { Pattern pCells = Pattern.compile("(\"[^\"]*(\"{2})*[^\"]*\")*[^,]*,"); Matcher mCells = pCells.matcher(rec); List<String> cells = new ArrayList<>(); //每行记录一个list //读取每个单元格 while (mCells.find()) { str = mCells.group(); str = str.replaceAll("(?sm)\"?([^\"]*(\"{2})*[^\"]*)\"?.*,", "$1"); str = str.replaceAll("(?sm)(\"(\"))", "$2"); cells.add(str); } dataList.add(cells); } } catch (Exception e) { } finally { if (brReader != null) { try { brReader.close(); } catch (IOException e) { e.printStackTrace(); } } if (inReader != null) { try { inReader.close(); } catch (IOException e) { e.printStackTrace(); } } } return dataList; }