package lingtao.net.service; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import lingtao.net.bean.Finance; import lingtao.net.bean.Msg; import lingtao.net.bean.SysUser; import lingtao.net.dao.Finance3Mapper; import lingtao.net.util.ExcelUtils; @Service public class Finance3Service { @Autowired private Finance3Mapper finance3Mapper; public List getFinance(Finance finance) { return finance3Mapper.getFinance(finance); } public List getAllFilename(String creator) { return finance3Mapper.getAllFilename(creator); } public Msg deleteDataByFilename(String filename, String realname) { try { finance3Mapper.deleteDataByFilename(filename, realname); return Msg.success(); } catch (Exception e) { return Msg.fail(); } } public Msg ajaxUploadExcel(MultipartFile file) throws Exception { if (file.isEmpty()) { throw new Exception("文件不存在!"); } SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); InputStream in = null; List> listob = null; List list = new ArrayList(1000); try { in = file.getInputStream(); listob = new ExcelUtils().getBankListByExcel(in, file.getOriginalFilename()); } catch (IOException e) { e.printStackTrace(); } String filename = file.getOriginalFilename(); System.out.println(filename); for (int i = 0; i < listob.size(); i++) { synchronized (this) { Finance vo = new Finance(); List lo = listob.get(i); if (lo.size() == 0 || lo.size() == 1 || lo.get(6) == "") { System.out.println("++++++++++++++"); continue; } String addTime = String.valueOf(lo.get(0)).trim(); if(addTime.equals("日期")) { continue; } String supplier = String.valueOf(lo.get(1)).trim(); String shopname = String.valueOf(lo.get(2)).trim(); String kind = String.valueOf(lo.get(3)).trim(); String kind2 = String.valueOf(lo.get(4)).trim(); String orderNumber = String.valueOf(lo.get(5)).trim(); String remark = String.valueOf(lo.get(6)).trim(); remark = remark.replace("MM", "mm").replace("CM", "cm"); if (remark.indexOf("mm") == -1 && remark.indexOf("cm") == -1) { System.out.println(remark); System.out.println("================="); } // 判断数据是否已经存在 /* * String checkAccountNumber = finance2Mapper.checkAccountNumber(orderNumber); * if (StringUtils.isNotEmpty(checkAccountNumber)) { continue; } */ // 数量 String count = "#"; // 拼版数 String number = "#"; // 所需张数 double zhang = 0; String total = ""; try { // 处理备注 remark = remark.replace(",", ","); number = cutSize(remark); count = cutCount(remark); if(remark.indexOf(",") > 0) { String[] countList = count.split(","); String[] numberList = number.split(","); for(int j = 0;j < countList.length; j++) { if (countList[j].equals("#") || numberList[j].equals("#")) { zhang = 0; }else { zhang = Math.ceil(Double.valueOf(countList[j]) / Double.valueOf(numberList[j])); } total += ","+zhang; } total = total.substring(0); }else { if (count != "#" && number != "#") { if (count.contains("*")) { String[] countSplit = count.split("\\*"); System.out.println(Double.valueOf(countSplit[0])); System.out.println(Double.valueOf(countSplit[1])); zhang = Math.ceil(Double.valueOf(countSplit[0]) * Double.valueOf(countSplit[1]) / Double.valueOf(number)); } else { zhang = Math.ceil(Double.valueOf(count) / Double.valueOf(number)); } } orderNumber = remark.substring(remark.indexOf("(") + 1, remark.indexOf(")")); } } catch (Exception e) { System.out.println(remark); // return Msg.fail(remark); } if (StringUtils.isNotEmpty(addTime)) { Date javaDate = HSSFDateUtil.getJavaDate(Double.parseDouble(addTime)); vo.setAddTime(javaDate); } // SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // Date add_date = formatter.parse(addTime);// 把字符串转为日期格式 vo.setSupplier(supplier); vo.setShopname(shopname); vo.setKind(kind); vo.setKind2(kind2); vo.setOrderNumber(orderNumber); vo.setFilename(filename); vo.setCount(count); vo.setNumber(number); if(total.length() > 0) { vo.setZhang(total); }else { vo.setZhang(String.valueOf(zhang)); } vo.setRemark(remark); vo.setCreator(user.getRealname()); list.add(vo); // finance2Mapper.insertSelective(vo); } } if (list.size() == 0) { return Msg.fail("上传失败,请检查文件表头是否正确"); } else if (list.size() > 0) { finance3Mapper.insertForeach(list); } in.close(); return Msg.success(); } private String cutCount(String remark) { int number = 0, count = 0, index = 0; String totalCount = ""; String counts = ""; String[] countList = {}; if( remark.indexOf(",") > 0) {//合包的拼版计算 String[] total = remark.split(","); for(int i = 0 ;i < total.length; i++) { String[] lists = total[i].split("-"); for(int j = 0; j < lists.length; j++) { index = lists[j].indexOf("mm"); if(index == -1) { index = lists[j].indexOf("cm"); } } if(counts.indexOf("各") > 0) { countList = counts.split("款"); number = Integer.valueOf(countList[0].replace("各", "")); count = Integer.valueOf(countList[1].substring(1, countList[1].length()-1)); totalCount += "," + count * number; }else { totalCount += "," + Integer.valueOf(counts.substring(0, counts.length()-1)) * 1; } } totalCount = totalCount.substring(1); return totalCount; }else {//单款尺寸 String[] list = remark.split("-"); for(int m = 0;m < list.length; m++) { index = list[m].indexOf("mm"); if(index == -1) { index = list[m].indexOf("cm"); } if(index > 0) { counts = list[m+1]; break; } } if(counts.indexOf("各") > 0) { countList = counts.split("款"); countList[1].substring(0, countList[1].length()-1); number = Integer.valueOf(countList[0].replace("各", "")); count = Integer.valueOf(countList[1].substring(1, countList[1].length()-1)); count = count * number; }else { count = Integer.valueOf(counts.substring(0, counts.length()-1)) * 1; } return String.valueOf(count); } } private String cutSize(String remark) { double length = 0,width = 0; int sizeIndex = 0; String totalSize = ""; String size = ""; String[] sizeList = {}; double l = 290,w = 195; if( remark.indexOf(",") > 0) {//合包的拼版计算 String[] total = remark.split(","); for(int i = 0 ;i < total.length; i++) { String[] lists = total[i].split("-"); for(int j = 0; j < lists.length; j++) { sizeIndex = lists[j].indexOf("mm"); if(sizeIndex == 0) { sizeIndex = lists[j].indexOf("cm"); } if(sizeIndex > 0) { size = lists[j].replace("mm", ""); size = size.replace("cm", ""); break; } } if(size.indexOf("×") > 0 ) { sizeList = size.split("×"); }else if(size.indexOf("x") > 0){ sizeList = size.split("x"); } length = Double.valueOf(sizeList[0]); width = Double.valueOf(sizeList[1]); //+3mm出血 length += 3; width += 3; if (length == l + 3 || width == l + 3) { totalSize = "1"; continue; }else if ((length > l || width > w) && (length > w || width > l)) { totalSize = "#"; continue; } // 一张纸 能做多少个此类尺寸的产品 double max = Math.max(Math.floor(l / length) * Math.floor(w / width), Math.floor(l / width) * Math.floor(w / length)); totalSize += "," + String.valueOf(max); } if(totalSize.indexOf("#") != 0) { totalSize = totalSize.substring(1); } return totalSize; }else { String[] list = remark.split("-"); for(int m = 0;m < list.length; m++) { sizeIndex = list[m].indexOf("mm"); if(sizeIndex == 0) { sizeIndex = list[m].indexOf("cm"); } if(sizeIndex > 0) { size = list[m].replace("mm", ""); size = size.replace("cm", ""); break; } } if(size.indexOf("×") > 0 ) { sizeList = size.split("×"); }else if(size.indexOf("x") > 0){ sizeList = size.split("x"); } length = Double.valueOf(sizeList[0]); width = Double.valueOf(sizeList[1]); //+3mm出血 length += 3; width += 3; if (length == l + 3 || width == l + 3) { return "1"; } if ((length > l || width > w) && (length > w || width > l)) return "#"; // 一张纸 能做多少个此类尺寸的产品 double max = Math.max(Math.floor(l / length) * Math.floor(w / width), Math.floor(l / width) * Math.floor(w / length)); return String.valueOf(max); } } @SuppressWarnings("resource") public void excel(HttpServletResponse response, Finance finance) throws Exception { response.setCharacterEncoding("UTF-8"); List financesList = new ArrayList(); SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal(); finance.setCreator(user.getRealname()); financesList = getFinance(finance); // 创建excel文件 HSSFWorkbook wb = new HSSFWorkbook(); // 创建sheet页 HSSFSheet sheet = wb.createSheet("总表"); String filename = ""; // 创建标题行 HSSFRow titleRow = sheet.createRow(0); titleRow.createCell(0).setCellValue("日期"); titleRow.createCell(1).setCellValue("供应商"); titleRow.createCell(2).setCellValue("店铺"); titleRow.createCell(3).setCellValue("大类别"); titleRow.createCell(4).setCellValue("小类别"); titleRow.createCell(5).setCellValue("订单号"); titleRow.createCell(6).setCellValue("文件名"); titleRow.createCell(7).setCellValue("数量"); titleRow.createCell(8).setCellValue("拼版数"); titleRow.createCell(9).setCellValue("张数"); titleRow.createCell(10).setCellValue("导入人"); titleRow.createCell(11).setCellValue("导入日期"); // 遍历将数据放到excel列中 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); for (Finance finances : financesList) { filename = finance.getFilename(); HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); dataRow.createCell(0).setCellValue(""); if (finances.getAddTime() != null) { dataRow.createCell(0).setCellValue(formatter.format(finances.getAddTime())); } dataRow.createCell(1).setCellValue(finances.getSupplier()); dataRow.createCell(2).setCellValue(finances.getShopname()); dataRow.createCell(3).setCellValue(finances.getKind()); dataRow.createCell(4).setCellValue(finances.getKind2()); dataRow.createCell(5).setCellValue(finances.getOrderNumber()); dataRow.createCell(6).setCellValue(finances.getRemark()); dataRow.createCell(7).setCellValue(finances.getCount()); dataRow.createCell(8).setCellValue(finances.getNumber()); dataRow.createCell(9).setCellValue(finances.getZhang()); dataRow.createCell(10).setCellValue(finances.getCreator()); dataRow.createCell(11).setCellValue(formatter.format(finances.getCreateDate())); } // 设置下载时客户端Excel的名称 response.setContentType("application/octet-stream;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes(), "iso-8859-1"));// + ".xls" OutputStream ouputStream = response.getOutputStream(); wb.write(ouputStream); ouputStream.flush(); ouputStream.close(); } }