diff --git a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java index 9f7f9e51..5ffb8627 100644 --- a/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java +++ b/mes-module-heli/mes-module-heli-api/src/main/java/com/chanko/yunxi/mes/module/heli/enums/ErrorCodeConstants.java @@ -183,8 +183,8 @@ public interface ErrorCodeConstants { ErrorCode MAT_CAT_CODE_ERROR = new ErrorCode(1_014_004, "该物料大类编码不正确,请检查!"); ErrorCode WMS_STORAGE_NOT_EXISTS = new ErrorCode(1_015_001, "当前数据不存在"); - ErrorCode WMS_STORAGE_IS_EXPORT = new ErrorCode(1_015_002, "存在已导出的数据,请刷新界面。"); - ErrorCode WMS_STORAGE_NOT_EXPORT = new ErrorCode(1_015_003, "当前数据不能删除!"); + ErrorCode WMS_STORAGE_IS_EXPORT = new ErrorCode(1_015_002, "当前数据已导出,请刷新界面。"); + ErrorCode WMS_STORAGE_NOT_DELETE = new ErrorCode(1_015_003, "存在已导出的数据,请刷新界面。!"); } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstorage/WmsStorageController.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstorage/WmsStorageController.java index 1bdc7aa1..7546b137 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstorage/WmsStorageController.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstorage/WmsStorageController.java @@ -3,6 +3,7 @@ package com.chanko.yunxi.mes.module.heli.controller.admin.wmsstorage; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.converters.longconverter.LongStringConverter; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; +import com.chanko.yunxi.mes.framework.common.exception.ServiceException; import com.chanko.yunxi.mes.framework.common.pojo.CommonResult; import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils; @@ -16,18 +17,31 @@ import com.chanko.yunxi.mes.module.heli.service.wmsstorage.WmsStorageService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.springframework.core.io.ClassPathResource; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import reactor.util.function.Tuple2; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.net.URLEncoder; +import java.sql.Date; +import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import static com.chanko.yunxi.mes.framework.common.pojo.CommonResult.success; import static com.chanko.yunxi.mes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @@ -85,6 +99,118 @@ public class WmsStorageController { return success(BeanUtils.toBean(pageResult, WmsStorageRespVO.class)); } + @GetMapping("/export") + @Operation(summary = "导出新中大入/出库主 Excel(使用模板)") + @PreAuthorize("@ss.hasPermission('heli:wms-storage:export')") + @OperateLog(type = EXPORT) + @Transactional(rollbackFor = Exception.class) + public void export(@RequestParam("stockType") Integer stockType, + @RequestParam("ids") String ids, + HttpServletResponse response) throws IOException { + // 处理数据,更新导出状态 + Tuple2> objects = wmsStorageService.processWsmStorage(ids); + List list = objects.getT2(); + if (!objects.getT1()) { + // list 统计单据编号,用,分割 + String stockNoList = list.stream().map(WmsStorageDO::getStockNo).collect(Collectors.joining(",")); + throw new ServiceException(1010, "单据编号{" + stockNoList + "}存在已导出的数据,请刷新界面。"); + } + + // 判断入库还是出库 + boolean isInbound = stockType == 1; + String typeName = isInbound ? "入库" : "出库"; + + // 设置响应头 + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setCharacterEncoding("UTF-8"); + String fileName = URLEncoder.encode("新中大" + typeName + "单数据").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xls"); + + // 加载模板文件 + String templatePath = "template/wms-storage-" + (isInbound ? "in" : "out") + ".xls"; + ClassPathResource resource = new ClassPathResource(templatePath); + if (!resource.exists()) { + throw new RuntimeException("模板文件不存在: " + templatePath); + } + + InputStream inputStream = resource.getInputStream(); + Workbook workbook = new HSSFWorkbook(new POIFSFileSystem(inputStream)); + + // 处理第一个sheet - 主表数据 + Sheet sheet0 = workbook.getSheetAt(0); + int rowIndex = 1; // 从第二行开始写入 + for (WmsStorageDO wmsStorage : list) { + Row row = sheet0.createRow(rowIndex++); + if (isInbound) { + // 入库数据 + setCellValue(row.createCell(0), wmsStorage.getStockNo()); + setCellValue(row.createCell(1), wmsStorage.getBusiType()); + setCellValue(row.createCell(2), wmsStorage.getWhName()); + setCellValue(row.createCell(3), wmsStorage.getBusiDate().toString()); + setCellValue(row.createCell(4), wmsStorage.getSupplierName()); + setCellValue(row.createCell(5), wmsStorage.getPriceType()); + setCellValue(row.createCell(6), wmsStorage.getDeptName()); + } else { + // 出库数据 + setCellValue(row.createCell(0), wmsStorage.getStockNo()); + setCellValue(row.createCell(1), wmsStorage.getWhName()); + setCellValue(row.createCell(2), wmsStorage.getBusiDate().toString()); + setCellValue(row.createCell(3), wmsStorage.getDeptName()); + setCellValue(row.createCell(4), wmsStorage.getBusiType()); + setCellValue(row.createCell(5), wmsStorage.getAuItem()); + } + } + + // 处理第二个sheet - 明细数据 + Sheet sheet1 = workbook.getSheetAt(1); + rowIndex = 1; // 从第二行开始写入 + for (WmsStorageDO wmsStorage : list) { + if (wmsStorage.getDetailList() != null) { + for (WmsStorageDetailDO detail : wmsStorage.getDetailList()) { + Row row = sheet1.createRow(rowIndex++); + setCellValue(row.createCell(0), detail.getStockNo()); + setCellValue(row.createCell(1), detail.getMatCode()); + setCellValue(row.createCell(2), detail.getRgName()); + setCellValue(row.createCell(3), detail.getStockNum()); + if (isInbound) { + setCellValue(row.createCell(4), detail.getPrice()); + } + } + } + } + + // 写入输出流 + OutputStream outputStream = response.getOutputStream(); + workbook.write(outputStream); + workbook.close(); + outputStream.flush(); + outputStream.close(); + inputStream.close(); + } + + /** + * 设置单元格值 + */ + private void setCellValue(Cell cell, Object value) { + if (value == null) { + cell.setBlank(); + return; + } + if (value instanceof String) { + cell.setCellValue((String) value); + } else if (value instanceof Number) { + cell.setCellValue(((Number) value).doubleValue()); + } else if (value instanceof Boolean) { + cell.setCellValue((Boolean) value); + } else if (value instanceof LocalDate) { + cell.setCellValue(Date.valueOf((LocalDate) value)); + } else if (value instanceof Date) { + cell.setCellValue((Date) value); + } else { + cell.setCellValue(value.toString()); + } + } + @GetMapping("/export-excel") @Operation(summary = "导出新中大入/出库主 Excel") @PreAuthorize("@ss.hasPermission('heli:wms-storage:export')") @@ -93,72 +219,66 @@ public class WmsStorageController { public void exportWmsStorageExcel(@RequestParam("stockType") Integer stockType, @RequestParam("ids") String ids, HttpServletResponse response) throws IOException { - List list = wmsStorageService.processWsmStorage(ids); + Tuple2> objects = wmsStorageService.processWsmStorage(ids); + List list = objects.getT2(); // 导出 Excel - 两个sheet - try { - // 设置响应头 - response.setContentType("application/vnd.ms-excel;charset=UTF-8"); - response.setCharacterEncoding("UTF-8"); - // 判断入库还是出库,确定文件名和VO类型 - boolean isInbound = stockType == 1; - String typeName = isInbound ? "入库" : "出库"; - String fileName = URLEncoder.encode("新中大" + typeName + "单导出").replaceAll("\\+", "%20"); - response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + // 设置响应头 + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setCharacterEncoding("UTF-8"); - // 创建ExcelWriter - com.alibaba.excel.ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) - .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) - .registerConverter(new LongStringConverter()) - .build(); + // 判断入库还是出库,确定文件名和VO类型 + boolean isInbound = stockType == 1; + String typeName = isInbound ? "入库" : "出库"; + String fileName = URLEncoder.encode("新中大" + typeName + "单导出").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); - // 写入第一个sheet - 主表数据(根据stockType选择不同的VO) - com.alibaba.excel.write.metadata.WriteSheet writeSheet1; - if (isInbound) { - // 入库:使用InExcelVO - List mainData = BeanUtils.toBean(list, WmsStorageInExcelVO.class); - writeSheet1 = EasyExcel.writerSheet(0, typeName + "表头") - .head(WmsStorageInExcelVO.class).build(); - excelWriter.write(mainData, writeSheet1); - } else { - // 出库:使用OutExcelVO - List mainData = BeanUtils.toBean(list, WmsStorageOutExcelVO.class); - writeSheet1 = EasyExcel.writerSheet(0, typeName + "表头") - .head(WmsStorageOutExcelVO.class).build(); - excelWriter.write(mainData, writeSheet1); - } + // 创建ExcelWriter + com.alibaba.excel.ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + .registerConverter(new LongStringConverter()) + .build(); - // 写入第二个sheet - 明细数据(根据stockType选择不同的VO) - List detailList = new ArrayList<>(); - for (WmsStorageDO wmsStorage : list) { - if (wmsStorage.getDetailList() != null) { - detailList.addAll(wmsStorage.getDetailList()); - } - } - com.alibaba.excel.write.metadata.WriteSheet writeSheet2; - if (isInbound) { - // 入库明细:包含单价 - List detailData = BeanUtils.toBean(detailList, DetailInExcelVO.class); - writeSheet2 = EasyExcel.writerSheet(1, typeName + "表体") - .head(DetailInExcelVO.class).build(); - excelWriter.write(detailData, writeSheet2); - } else { - // 出库明细:不包含单价 - List detailData = BeanUtils.toBean(detailList, DetailOutExcelVO.class); - writeSheet2 = EasyExcel.writerSheet(1, typeName + "表体") - .head(DetailOutExcelVO.class).build(); - excelWriter.write(detailData, writeSheet2); - } - - - // 关闭writer - excelWriter.finish(); - } catch (Exception e) { - response.reset(); - response.setContentType("application/json;charset=UTF-8"); - response.getWriter().println("{\"code\":500,\"msg\":\"导出Excel失败: " + e.getMessage() + "\"}"); + // 写入第一个sheet - 主表数据(根据stockType选择不同的VO) + com.alibaba.excel.write.metadata.WriteSheet writeSheet1; + if (isInbound) { + // 入库:使用InExcelVO + List mainData = BeanUtils.toBean(list, WmsStorageInExcelVO.class); + writeSheet1 = EasyExcel.writerSheet(0, typeName + "表头") + .head(WmsStorageInExcelVO.class).build(); + excelWriter.write(mainData, writeSheet1); + } else { + // 出库:使用OutExcelVO + List mainData = BeanUtils.toBean(list, WmsStorageOutExcelVO.class); + writeSheet1 = EasyExcel.writerSheet(0, typeName + "表头") + .head(WmsStorageOutExcelVO.class).build(); + excelWriter.write(mainData, writeSheet1); } + + // 写入第二个sheet - 明细数据(根据stockType选择不同的VO) + List detailList = new ArrayList<>(); + for (WmsStorageDO wmsStorage : list) { + if (wmsStorage.getDetailList() != null) { + detailList.addAll(wmsStorage.getDetailList()); + } + } + com.alibaba.excel.write.metadata.WriteSheet writeSheet2; + if (isInbound) { + // 入库明细:包含单价 + List detailData = BeanUtils.toBean(detailList, DetailInExcelVO.class); + writeSheet2 = EasyExcel.writerSheet(1, typeName + "表体") + .head(DetailInExcelVO.class).build(); + excelWriter.write(detailData, writeSheet2); + } else { + // 出库明细:不包含单价 + List detailData = BeanUtils.toBean(detailList, DetailOutExcelVO.class); + writeSheet2 = EasyExcel.writerSheet(1, typeName + "表体") + .head(DetailOutExcelVO.class).build(); + excelWriter.write(detailData, writeSheet2); + } + // 关闭writer + excelWriter.finish(); } } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstorage/vo/WmsStorageInExcelVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstorage/vo/WmsStorageInExcelVO.java index 9626f064..7eb87fc8 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstorage/vo/WmsStorageInExcelVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstorage/vo/WmsStorageInExcelVO.java @@ -16,25 +16,25 @@ import java.time.LocalDate; @Data @ExcelIgnoreUnannotated public class WmsStorageInExcelVO { - @ExcelProperty("系统编号") - private Long id = 1L; + @ExcelProperty(value = "系统编号", index = 0) + private String stock_no; - @ExcelProperty("业务类型") + @ExcelProperty(value = "业务类型", index = 1) private String busiType; - @ExcelProperty("仓库") + @ExcelProperty(value = "仓库", index = 2) private String whName; - @ExcelProperty("业务日期") + @ExcelProperty(value = "业务日期", index = 3) private LocalDate busiDate; - @ExcelProperty("供应商名称") + @ExcelProperty(value = "供应商名称", index = 4) private String supplierName; - @ExcelProperty("价格类型") + @ExcelProperty(value = "价格类型", index = 5) private String priceType; - @ExcelProperty("部门") + @ExcelProperty(value = "部门", index = 6) private String deptName; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstorage/vo/WmsStorageOutExcelVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstorage/vo/WmsStorageOutExcelVO.java index 576f72ad..4bff1d6d 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstorage/vo/WmsStorageOutExcelVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstorage/vo/WmsStorageOutExcelVO.java @@ -16,22 +16,22 @@ import java.time.LocalDate; @Data @ExcelIgnoreUnannotated public class WmsStorageOutExcelVO { - @ExcelProperty("系统编号") - private Long id = 1L; + @ExcelProperty("系统编号(*)") + private String stock_no; - @ExcelProperty("仓库") + @ExcelProperty("仓库(*)") private String whName; - @ExcelProperty("业务日期") + @ExcelProperty("业务日期(*)") private LocalDate busiDate; - @ExcelProperty("部门") + @ExcelProperty("部门(*)") private String deptName; - @ExcelProperty("业务类型") + @ExcelProperty("业务类型(*)") private String busiType; - @ExcelProperty("辅助项") + @ExcelProperty("辅助项(*)") private String auItem; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstoragedetail/vo/DetailInExcelVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstoragedetail/vo/DetailInExcelVO.java index 63abe02d..25ac4d65 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstoragedetail/vo/DetailInExcelVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstoragedetail/vo/DetailInExcelVO.java @@ -11,19 +11,19 @@ import java.math.BigDecimal; @Data @ExcelIgnoreUnannotated public class DetailInExcelVO { - @ExcelProperty("系统编号") - private Long id = 1L; + @ExcelProperty(value = "系统编号(*)", index = 0) + private String stock_no; - @ExcelProperty("物料编码") + @ExcelProperty(value = "物料编码(*)", index = 1) private String matCode; - @ExcelProperty("库位") + @ExcelProperty(value = "库位(*)", index = 2) private String rgName; - @ExcelProperty("数量") + @ExcelProperty(value = "数量(*)", index = 3) private BigDecimal stockNum; - @ExcelProperty("单价") + @ExcelProperty(value = "单价(*)", index = 4) private BigDecimal price; } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstoragedetail/vo/DetailOutExcelVO.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstoragedetail/vo/DetailOutExcelVO.java index bd03ad28..5a3ba87b 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstoragedetail/vo/DetailOutExcelVO.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/controller/admin/wmsstoragedetail/vo/DetailOutExcelVO.java @@ -12,16 +12,16 @@ import java.math.BigDecimal; @ExcelIgnoreUnannotated public class DetailOutExcelVO { - @ExcelProperty("系统编号") - private Long id = 1L; + @ExcelProperty("系统编号(*)") + private String stock_no; - @ExcelProperty("物料编码") + @ExcelProperty("物料编码(*)") private String matCode; - @ExcelProperty("库位") + @ExcelProperty("库位(*)") private String rgName; - @ExcelProperty("数量") + @ExcelProperty("数量(*)") private BigDecimal stockNum; diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/wmsstorage/WmsStorageService.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/wmsstorage/WmsStorageService.java index 7be9a933..3e142c1a 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/wmsstorage/WmsStorageService.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/wmsstorage/WmsStorageService.java @@ -4,6 +4,7 @@ import com.chanko.yunxi.mes.framework.common.pojo.PageResult; import com.chanko.yunxi.mes.module.heli.controller.admin.wmsstorage.vo.WmsStoragePageReqVO; import com.chanko.yunxi.mes.module.heli.controller.admin.wmsstorage.vo.WmsStorageSaveReqVO; import com.chanko.yunxi.mes.module.heli.dal.dataobject.wmsstorage.WmsStorageDO; +import reactor.util.function.Tuple2; import javax.validation.Valid; import java.util.List; @@ -53,5 +54,7 @@ public interface WmsStorageService { */ PageResult getWmsStoragePage(WmsStoragePageReqVO pageReqVO); - List processWsmStorage(String ids); + // 返回两个结果 + Tuple2> processWsmStorage(String ids); + } diff --git a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/wmsstorage/WmsStorageServiceImpl.java b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/wmsstorage/WmsStorageServiceImpl.java index 903590e9..fa673b9b 100644 --- a/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/wmsstorage/WmsStorageServiceImpl.java +++ b/mes-module-heli/mes-module-heli-biz/src/main/java/com/chanko/yunxi/mes/module/heli/service/wmsstorage/WmsStorageServiceImpl.java @@ -11,21 +11,23 @@ import com.chanko.yunxi.mes.module.heli.dal.dataobject.wmsstoragedetail.WmsStora import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.wmsstorage.WmsStorageMapper; import com.chanko.yunxi.mes.module.heli.dal.mysql.wmsstoragedetail.WmsStorageDetailMapper; -import com.chanko.yunxi.mes.module.system.dal.dataobject.user.AdminUserDO; -import com.chanko.yunxi.mes.module.system.service.user.AdminUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import reactor.util.function.Tuple2; +import reactor.util.function.Tuples; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*; +import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.WMS_STORAGE_IS_EXPORT; +import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.WMS_STORAGE_NOT_EXISTS; /** * 新中大入/出库主 Service 实现类 @@ -41,11 +43,8 @@ public class WmsStorageServiceImpl implements WmsStorageService { private final WmsStorageDetailMapper wmsStorageDetailMapper; - private final AdminUserService userService; - private final StorageLogMapper storageLogMapper; - @Override public Long createWmsStorage(WmsStorageSaveReqVO createReqVO) { // 插入 @@ -65,14 +64,13 @@ public class WmsStorageServiceImpl implements WmsStorageService { } @Override - @Transactional(rollbackFor = Exception.class) public void deleteWmsStorage(Long id) { // 校验存在 validateWmsStorageExists(id); // 校验状态 WmsStorageDO wmsStorage = wmsStorageMapper.selectById(id); - if (wmsStorage.getStatus() == 1) { - throw exception(WMS_STORAGE_NOT_EXPORT); + if (wmsStorage.getStatus() == 2) { + throw exception(WMS_STORAGE_IS_EXPORT); } // 删除 wmsStorageMapper.deleteById(id); @@ -80,7 +78,7 @@ public class WmsStorageServiceImpl implements WmsStorageService { // storageLogService StorageLogDO storageLogDO = storageLogMapper.selectOne(StorageLogDO::getXzdStockId, wmsStorage.getId()); - if (storageLogDO != null){ + if (storageLogDO != null) { storageLogDO.setIsExport(0); storageLogDO.setUpdater(""); storageLogDO.setUpdateTime(LocalDateTime.now()); @@ -99,18 +97,13 @@ public class WmsStorageServiceImpl implements WmsStorageService { @Override public WmsStorageDO getWmsStorage(Long id) { - WmsStorageDO wmsStorage = wmsStorageMapper.selectById(id); - if (wmsStorage != null) { + WmsStorageDO wmsStorageDO = wmsStorageMapper.selectById(id); + if (wmsStorageDO != null) { List detailList = wmsStorageDetailMapper.selectList( - WmsStorageDetailDO::getXzdWmsId, wmsStorage.getId()); - wmsStorage.setDetailList(detailList); - // 查询用户信息 - AdminUserDO user = userService.getUser(wmsStorage.getExportEmp()); - if (user != null){ - wmsStorage.setExportEmpName(user.getNickname()); - } + WmsStorageDetailDO::getXzdWmsId, wmsStorageDO.getId()); + wmsStorageDO.setDetailList(detailList); } - return wmsStorage; + return wmsStorageDO; } @Override @@ -120,17 +113,23 @@ public class WmsStorageServiceImpl implements WmsStorageService { @Transactional @Override - public List processWsmStorage(String ids) { + public Tuple2> processWsmStorage(String ids) { // 分割并转换为 Long 类型 List idList = Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList()); if (!idList.isEmpty()) { // 根据ID查询出所有数据,批量更新导出人,导出状态 List wmsStorageDOS = wmsStorageMapper.selectList(WmsStorageDO::getId, idList); - // 如果状态为已导出,则remove + List errWmsStorageDOS = new ArrayList<>(); for (WmsStorageDO wmsStorageDO : wmsStorageDOS) { if (wmsStorageDO.getStatus() == 2) { - throw exception(WMS_STORAGE_IS_EXPORT); + errWmsStorageDOS.add(wmsStorageDO); } + } + if (!errWmsStorageDOS.isEmpty()) { + return Tuples.of(false, errWmsStorageDOS); + } + // 如果状态为已导出,则remove + for (WmsStorageDO wmsStorageDO : wmsStorageDOS) { // 获取当前用户信息 Long loginUserId = SecurityFrameworkUtils.getLoginUserId(); wmsStorageDO.setExportEmp(loginUserId); @@ -140,8 +139,8 @@ public class WmsStorageServiceImpl implements WmsStorageService { List wmsStorageDetailDOS = wmsStorageDetailMapper.selectList(WmsStorageDetailDO::getXzdWmsId, wmsStorageDO.getId()); wmsStorageDO.setDetailList(wmsStorageDetailDOS); } - return wmsStorageDOS; + return Tuples.of(true, wmsStorageDOS); } - return Collections.emptyList(); + return Tuples.of(false, Collections.emptyList()); } } diff --git a/mes-server/src/main/resources/template/wms-storage-in.xls b/mes-server/src/main/resources/template/wms-storage-in.xls new file mode 100644 index 00000000..871afc33 Binary files /dev/null and b/mes-server/src/main/resources/template/wms-storage-in.xls differ diff --git a/mes-server/src/main/resources/template/wms-storage-out.xls b/mes-server/src/main/resources/template/wms-storage-out.xls new file mode 100644 index 00000000..d5ac77aa Binary files /dev/null and b/mes-server/src/main/resources/template/wms-storage-out.xls differ diff --git a/mes-ui/mes-ui-admin-vue3/src/api/heli/wmsstorage/index.ts b/mes-ui/mes-ui-admin-vue3/src/api/heli/wmsstorage/index.ts index a69720d3..e09e44e6 100644 --- a/mes-ui/mes-ui-admin-vue3/src/api/heli/wmsstorage/index.ts +++ b/mes-ui/mes-ui-admin-vue3/src/api/heli/wmsstorage/index.ts @@ -62,7 +62,7 @@ export const deleteWmsStorage = async (id: number) => { // 导出新中大入/出库主 Excel export const exportWmsStorage = async (stockType: Number, ids: String) => { return await request.download({ - url: `/heli/wms-storage/export-excel`, + url: `/heli/wms-storage/export`, params: { stockType, ids } }) } diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/wmsstorage/index.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/wmsstorage/index.vue index 4b52efeb..9959572a 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/wmsstorage/index.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/wmsstorage/index.vue @@ -18,16 +18,6 @@ class="!w-260px" /> - - - - - + + + + + + 搜索 重置 @@ -61,13 +62,9 @@ + v-loading="loading" :data="list" class="hl-table" + ref="multipleTableRef" + @selection-change="handleSelectionChange" :row-class-name="tableRowClassName"> - - + + - + - - + + - - - + + + - +