diff --git a/src/main/java/com/wms/controller/ExcelController.java b/src/main/java/com/wms/controller/ExcelController.java index aa976d8..dd97414 100644 --- a/src/main/java/com/wms/controller/ExcelController.java +++ b/src/main/java/com/wms/controller/ExcelController.java @@ -67,6 +67,7 @@ public class ExcelController { private final KanbanService kanbanService;// 看板服务 private final WorkFlowService workFlowService;// 工作流服务 private final WorkDateService workDateService;// 工作日历服务 + private final IStockUpdateRecordService stockUpdateRecordService; // 库存更新记录服务 private final List uploadFileHashStringList = new ArrayList<>(); @@ -795,6 +796,43 @@ public class ExcelController { .doWrite(goodsList.stream().map(WorkSummaryExcelVo::of).toList()); } + /** + * 导出库存更新记录 + * + * @param response 请求 + */ + @PostMapping("/downloadStockUpdateRecordExcel") + @ResponseBody + public void downloadStockUpdateRecordExcel(@RequestBody StockUpdateRecordQuery stockUpdateRecordQuery, HttpServletResponse response) throws IOException { + logger.info("导出库存更新记录,筛选参数:{},请求ip:{}", convertJsonString(stockUpdateRecordQuery), getIpAddr(servletRequest)); + //设置响应格式 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 + String fileName = URLEncoder.encode("库存更新记录报表", StandardCharsets.UTF_8).replaceAll("\\+", "%20"); + response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + // 内容样式 + HorizontalCellStyleStrategy horizontalCellStyleStrategy = ExcelContentStyle.getContentStyle(); + // 查询参数 + LambdaQueryWrapper stockLambdaQueryWrapper = new LambdaQueryWrapper() + .like(StringUtils.isNotEmpty(stockUpdateRecordQuery.getReason()), StockUpdateRecord::getReason, stockUpdateRecordQuery.getReason()) + .like(StringUtils.isNotEmpty(stockUpdateRecordQuery.getVehicleId()), StockUpdateRecord::getVehicleId, stockUpdateRecordQuery.getVehicleId()) + .like(StringUtils.isNotEmpty(stockUpdateRecordQuery.getGoodsId()), StockUpdateRecord::getGoodsId, stockUpdateRecordQuery.getGoodsId()) + .orderByDesc(StockUpdateRecord::getUpdateTime); + if (stockUpdateRecordQuery.getUpdateTime() != null && stockUpdateRecordQuery.getUpdateEndTime() != null) { + stockLambdaQueryWrapper.between(StockUpdateRecord::getUpdateTime, stockUpdateRecordQuery.getUpdateTime().toLocalDate().atStartOfDay(), stockUpdateRecordQuery.getUpdateEndTime().toLocalDate().plusDays(1).atStartOfDay().minusSeconds(1)); + } + if (stockUpdateRecordQuery.getUpdateTime() != null && stockUpdateRecordQuery.getUpdateEndTime() == null) { + stockLambdaQueryWrapper.between(StockUpdateRecord::getUpdateTime, stockUpdateRecordQuery.getUpdateTime().toLocalDate().atStartOfDay(), stockUpdateRecordQuery.getUpdateTime().toLocalDate().plusDays(1).atStartOfDay().minusSeconds(1)); + } + List stockUpdateRecordList = stockUpdateRecordService.list(stockLambdaQueryWrapper); + EasyExcel.write(response.getOutputStream(), StockUpdateRecordVo.class) + .excelType(ExcelTypeEnum.XLSX) + .registerWriteHandler(horizontalCellStyleStrategy) + .sheet("库存更新记录报表") + .doWrite(stockUpdateRecordList.stream().map(StockUpdateRecordVo::of).toList()); + } + /** * 导出库位详情 * diff --git a/src/main/java/com/wms/utils/excel/vo/StockUpdateRecordVo.java b/src/main/java/com/wms/utils/excel/vo/StockUpdateRecordVo.java new file mode 100644 index 0000000..9d2d45f --- /dev/null +++ b/src/main/java/com/wms/utils/excel/vo/StockUpdateRecordVo.java @@ -0,0 +1,86 @@ +package com.wms.utils.excel.vo; + + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.excel.annotation.ExcelProperty; +import com.alibaba.excel.annotation.format.DateTimeFormat; +import com.wms.entity.table.StockUpdateRecord; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +public class StockUpdateRecordVo { + + /** + * 记录id + */ + @ExcelProperty("记录号") + private String recordId; + /** + * 库存id + */ + @ExcelProperty("库存id") + private String stockId; + /** + * 料箱号 + */ + @ExcelProperty("料箱号") + private String vehicleId; + /** + * 料号 + */ + @ExcelProperty("料号") + private String goodsId; + /** + * 物料名称 + */ + @ExcelProperty("物料名称") + private String goodsName; + /** + * 更新前库位 + */ + @ExcelProperty("更新前库位") + private String locationBefore; + /** + * 更新后库位 + */ + @ExcelProperty("更新后库位") + private String locationAfter; + /** + * 更新前数量 + */ + @ExcelProperty("更新前数量") + private BigDecimal quantityBefore; + /** + * 更新后数量 + */ + @ExcelProperty("更新后数量") + private BigDecimal quantityAfter; + /** + * 更新原因 + */ + @ExcelProperty("更新原因") + private String reason; + /** + * 更新时间 + */ + @ExcelProperty("更新时间") + @DateTimeFormat("yyyy-MM-dd HH:mm:ss") + private LocalDateTime updateTime; + /** + * 更新用户 + */ + @ExcelProperty("更新用户") + private String updateUser; + + /** + * 将数据库Po转化为ExcelVo + * @param stockUpdateRecord 数据库Po + * @return ExcelVo + */ + public static StockUpdateRecordVo of(StockUpdateRecord stockUpdateRecord) { + return BeanUtil.copyProperties(stockUpdateRecord, StockUpdateRecordVo.class); + } +}