代码

     @Resourceprivate ExcelUtils excelUtils;@Async("doSomethingExecutor")Future doCreateStockOutExcel(Date endTime, Date beginTime, Object storeNo) {List<StockOutEo> stockOutEoList = stockOutMapper.findByStoreNo(storeNo.toString(), beginTime, endTime);//生成记录在缺货报表列表if (EmptyUtil.notEmpty(stockOutEoList)) {//在内存中创建一个Excel文件XSSFWorkbook workbook = new XSSFWorkbook();sheetStockOut(workbook, stockOutEoList);String excelName = DateUtil.dateStr6(beginTime) + ".xls";String dir = storeNo.toString() + "/" + StockOutEo.EXCEL_DIR;String downloadUrl = aliOssUtils.putExcel(workbook, dir, excelName);createStockOutExcel(downloadUrl, storeNo.toString(), dir + "/" + excelName, 1);} else {createStockOutExcel(null, storeNo.toString(), null, 0);}return new AsyncResult(null);}private void sheetStockOut(XSSFWorkbook workbook, List<StockOutEo> stockOutEoList) {XSSFSheet sheet = workbook.createSheet("缺货报表");//创建行,0表示第一行XSSFRow row = sheet.createRow(0);//创建单元格,0表示第一个单元格row.createCell(0).setCellValue("缺货报表");XSSFRow row1 = sheet.createRow(1);ExcelUtils.setTableForm(row1, ExcelUtils.stockOutLists);excelUtils.setStockOutTableData(sheet, stockOutEoList);}

创建EXCEL工具类

@Component
public class ExcelUtils {@Resourceprivate P360RequestUtils p360RequestUtils;@Resourceprivate OsLog osLog;@Resourceprivate RtisUtil rtisUtil;public static List<String> collectRowLists = Arrays.asList("移动收银", "自助收银", "扫码购", "实体销售(不含实体POS收银机)", "屈臣氏云店", "到店业务", "到家业务", "平台销售", "总计");public static List<String> collectLists = Arrays.asList("业务类型", "销售额", "会员销售额占比", "销售笔数", "客单价", "销售件数", "客单量", "OB销售额", "EB销售额", "OB销售额占比", "EB销售额占比", "会员卡销售量");public static List<String> totalLists = Arrays.asList("订单编号", "订单日期", "订单实付金额", "销售人员", "商品编码", "商品明细", "销售数量", "商品含税销售金额", "订单状态", "退货数量");public static List<String> detailLists = Arrays.asList("订单号", "订单日期", "订单渠道", "订单类型", "部门", "品牌", "货号", "商品名称", "数量", "销售金额", "实付金额", "销售人员");public static List<String> stockOutLists = Arrays.asList("日期", " 商品编码", "名称", "条形编码", "20点实时库存", "盘点数量", "备注");public static void setTableForm(XSSFRow row, List<String> tableFormList) {for (int index = 0; index < tableFormList.size(); index++) {row.createCell(index).setCellValue(tableFormList.get(index));}}public static void setCollectTableData(XSSFSheet sheet, int index, List<SaleCollectDTO> dataList) {}public void setDetailTableData(XSSFSheet sheet, List<SaleDetailDTO> dataList) {if (null != dataList && !dataList.isEmpty()) {for (int i = 0; i < dataList.size(); i++) {SaleDetailDTO saleDetailDTO = dataList.get(i);XSSFRow row = sheet.createRow(i + 2);row.createCell(0).setCellValue(saleDetailDTO.getItemNo());row.createCell(1).setCellValue(saleDetailDTO.getOrderTime());row.createCell(2).setCellValue(saleDetailDTO.getOrderChannel());row.createCell(3).setCellValue(saleDetailDTO.getOrderType());row.createCell(4).setCellValue(saleDetailDTO.getDepartment());row.createCell(5).setCellValue(saleDetailDTO.getBrand());row.createCell(6).setCellValue(saleDetailDTO.getItemNo());row.createCell(7).setCellValue(saleDetailDTO.getItemNameZht());row.createCell(8).setCellValue(saleDetailDTO.getOrderQty());row.createCell(9).setCellValue(saleDetailDTO.getOriginPrice().toString());row.createCell(10).setCellValue(saleDetailDTO.getActualPrice().toString());row.createCell(11).setCellValue(saleDetailDTO.getOptName());}}}/*** 设置缺货数据** @param sheet    sheet* @param dataList dataList*/public void setStockOutTableData(XSSFSheet sheet, List<StockOutEo> dataList) {if (null != dataList && !dataList.isEmpty()) {for (int i = 0; i < dataList.size(); i++) {StockOutEo stockOutDTO = dataList.get(i);XSSFRow row = sheet.createRow(i + 2);//日期row.createCell(0).setCellValue(DateUtil.dateStr2(stockOutDTO.getCreateTime()));//商品编码row.createCell(1).setCellValue(stockOutDTO.getItemNo());//名称row.createCell(2).setCellValue(stockOutDTO.getItemNameZht());//条形编码try {AppointProductByItemResp appointProductByItemResp = p360RequestUtils.requestItemDetail(Arrays.asList(stockOutDTO.getItemNo()), stockOutDTO.getStoreNo());if (EmptyUtil.notEmpty(appointProductByItemResp) && appointProductByItemResp.getSuccess()) {ProductList data = appointProductByItemResp.getData();if (EmptyUtil.notEmpty(data) && EmptyUtil.notEmpty(data.getProductList())) {List<Product> productList = data.getProductList();productList.forEach(a -> {String barcode = a.getProductBase().getBarcode();row.createCell(3).setCellValue(barcode);});}}} catch (Exception e) {osLog.error(ResultEnum.P360_GET_PRODUCT.getCode(), ResultEnum.P360_GET_PRODUCT.getMsg(), e);}//实时库存try {AvaliableStock availableStock = rtisUtil.getAvailableStock(Arrays.asList(stockOutDTO.getItemNo()), Arrays.asList(stockOutDTO.getStoreNo()));if (EmptyUtil.notEmpty(availableStock) && availableStock.getSuccess()) {StoreList data = availableStock.getData();if (EmptyUtil.notEmpty(data)) {List<Store> storeList = data.getStoreList();if (EmptyUtil.notEmpty(storeList)) {row.createCell(4).setCellValue(storeList.get(0).getQty());}}}} catch (Exception e) {osLog.error(ResultEnum.RTIS_GET_PRODUCT.getCode(), ResultEnum.RTIS_GET_PRODUCT.getMsg(), e);}//盘点数量row.createCell(5).setCellValue("");//备注row.createCell(6).setCellValue("");}}}}

OSS工具类

@Component
public class AliOssUtils {@Value("${oss.ali.endpoint:}")private String endpoint;@Value("${oss.ali.accessKeyId:}")private String accessKeyId;@Value("${oss.ali.accessKeySecret:}")private String accessKeySecret;@Value("${oss.ali.bucketName:}")private String bucketName;@Value("${oss.ali.domainUrl:}")private String domainUrl;@Resourceprivate OsLog osLog;public OSS getOssClient() {// 创建OSSClient实例。return new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);}public String getDomainUrl() {return domainUrl;}/*** 上传excel** @param workbook* @param dir       目录* @param excelName 文件名* @return*/public String putExcel(XSSFWorkbook workbook, String dir, String excelName) {ByteArrayOutputStream bos = new ByteArrayOutputStream();try {workbook.write(bos);} catch (IOException e) {} finally {try {bos.close();} catch (IOException e) {}}byte[] brray = bos.toByteArray();InputStream is = new ByteArrayInputStream(brray);OSS ossClient = getOssClient();try {// 创建PutObjectRequest对象。PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, dir + "/" + excelName, is);// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。// ObjectMetadata metadata = new ObjectMetadata();// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());// metadata.setObjectAcl(CannedAccessControlList.Private);// putObjectRequest.setMetadata(metadata);// 上传文件ossClient.putObject(putObjectRequest);//设置过期时间LocalDateTime time = LocalDateTime.now().plusDays(5);Date expiration = Date.from(time.atZone(ZoneId.systemDefault()).toInstant());return ossClient.generatePresignedUrl(bucketName, dir + "/" + excelName, expiration).toString();} catch (OSSException oe) {osLog.error(ResultEnum.SYS_ERROR.getCode(), ResultEnum.SYS_ERROR.getMsg(), oe.getErrorMessage());} catch (ClientException ce) {osLog.error(ResultEnum.SYS_ERROR.getCode(), ResultEnum.SYS_ERROR.getMsg(), ce.getErrorMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}return null;}public void deleteExcel(String excelUrl) {if (EmptyUtil.notEmpty(excelUrl)) {OSS ossClient = getOssClient();try {boolean b = ossClient.doesObjectExist(bucketName, excelUrl);if (b) {ossClient.deleteObject(bucketName, excelUrl);}} catch (OSSException oe) {osLog.error(ResultEnum.SYS_ERROR.getCode(), ResultEnum.SYS_ERROR.getMsg(), oe.getErrorMessage());} catch (ClientException ce) {osLog.error(ResultEnum.SYS_ERROR.getCode(), ResultEnum.SYS_ERROR.getMsg(), ce.getErrorMessage());} finally {if (EmptyUtil.notEmpty(ossClient)) {ossClient.shutdown();}}}}
}

生成Excel文件并上传到阿里云OSS相关推荐

  1. java通过URL获取网络文件并上传到阿里云OSS文件服务器

    首先,先从网络上读取到文件 /*** 从网络Url中读取文件* @param urlStr 文件URL地址* @throws IOException*/public String downLoadFr ...

  2. Linux环境Shell脚本上传下载阿里云OSS文件

    为什么80%的码农都做不了架构师?>>>    Linux环境Shell脚本上传下载阿里云OSS文件 背景 工作中由于我们项目生成的日志文件比较重要,而本地磁盘空间有限存储不了多久, ...

  3. 图片文件压缩并上传至阿里云OSS

    图片处理 Thumbnails 在进行Java开发时可以使用Thumbnails工具类对图片进行处理,旋转.裁剪.格式转换.加水印等. 使用步骤 导包 <dependency><gr ...

  4. linux centos8 将指定本地目录下的文件上传到阿里云OSS上

    使用场景:为了解决高并发问题,尤其带宽限制(阿里云最高200M,当前首页一个用户请求4M的资源,导致带宽跟不上),jenkins打包vue下的前端静态资源上传到阿里云OSS上 前提工作:因工具是jav ...

  5. 使用命令行将文件上传到阿里云OSS

    我司大概有20*4万个小文件需要上传到阿里云的OSS上面,我用阿里云的OSS client API上传,速度非常的慢,总共4年的数据,每年的数据大概是20万个小文件,上传效率非常慢,大概1年的数据要两 ...

  6. 微信头像下载并上传到阿里云OSS,PHP文件上传到阿里云OSS简单代码(OSS文件上传,微信头像下载,CURL下载文件,微信头像链接过期)

    (就这么个小事,有多少公司多少项目没做到!!) 微信公众号项目,后端获取到授权用户的微信头像后,要自行下载保存,不下载的话,微信返回的头像链接会在一段时间后过期,无法访问! 下面是我写的两个简单实用方 ...

  7. Springboot文件上传(本地上传、阿里云oss、腾讯云、华为云、Minio上传、七牛云)

    文件上传: 本地上传.阿里云oss.腾讯云.华为云.Minio上传.七牛云. <!-- 阿里云存储 --><dependency><groupId>com.aliy ...

  8. PHP如何下载微信语音到服务器,并将amr格式转换为MP3格式,最后上传到阿里云oss文件中

    第一步:下载微信语音到服务器中 废话不多说,直接上代码 1.总的流程方法(里面的方法在下面) 2.下载微信语音的方法 3.将微信语音的amr格式转换为MP3格式(需要使用FFmpeg,安装使用过程请看 ...

  9. mysql数据库备份到oss_备份MySQL数据库并上传到阿里云OSS存储

    1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 本文以Linux系统 ...

最新文章

  1. 适合新手的python书籍推荐_推荐一本适合初学者全面自学python的书(附赠电子书)...
  2. 联发科mtk和骁龙730哪个好_不惧高通挑战!联发科G90芯片发布,强势干翻骁龙730...
  3. WHENEVER SQLERROR EXIT SQL.SQLCODE
  4. ASP.NET Core 源码学习之Logging[1]:Introduction
  5. 如何进行需求矩阵管理
  6. Android,EditText,InuputType
  7. 如何设置mysql数据库连接池的大小
  8. USB VIDPID 表
  9. 阿里云RDS Serverless测评
  10. C 龟兔赛跑题目:T分钟后乌龟和兔子谁跑得快?
  11. Beer Mugs(思维)
  12. 网页调用客户机软件。BS调用CS端的软件。
  13. 昆仑ONLINE外挂脚本--基于Seraph
  14. ps人像磨皮皮肤处理教程
  15. Burp Spider 使用指南
  16. 从12306帐号泄漏谈用户密码安全
  17. ORA-01000-超出打开游标的最大数(解决及原因)
  18. java nio MappedByteBuffer 文件映射
  19. 运用highcharts绘制饼图
  20. python字母转换视频_python将视频转换为全字符视频

热门文章

  1. NFS服务器搭建指南
  2. 机器学习--特征选择(Python代码实现)
  3. html复选框代码隐藏勾勾,[译] 为什么 HTML 中复选框样式难写 — 本文给你答案
  4. CSU2020期中测试模拟题1 问题E:小帅的字符串
  5. ubuntu添加并查看 用户组和用户
  6. 反击爬虫,前端工程师的脑洞可以有多大?
  7. 人工智能开源项目推荐
  8. C语言之对char*与char[]的理解
  9. 【修复H5农场复利】黄金家园农场理财游戏源码Thinkphp开发 带商城仓库商店模块
  10. 小红书2020校招数据分析笔试题卷四 解析