From 86452fec64e1293e617a92db79d8350beb2ebc41 Mon Sep 17 00:00:00 2001 From: liuxy Date: Wed, 17 Dec 2025 11:06:11 +0800 Subject: [PATCH] =?UTF-8?q?add:=E7=BB=84=E7=9B=98=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AF=BC=E5=85=A5=E7=BB=84=E7=9B=98=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nl/config/excel/group/GroupExcelDTO.java | 43 +++++++++ .../excel/group/GroupExcelListener.java | 90 ++++++++++++++++++ .../controller/GroupController.java | 3 +- .../service/IMdPbGroupplateService.java | 9 +- .../impl/MdPbGroupplateServiceImpl.java | 91 +++++-------------- .../views/wms/basedata/group/UploadDialog.vue | 2 +- .../src/views/wms/basedata/group/index.vue | 4 +- 7 files changed, 168 insertions(+), 74 deletions(-) create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/config/excel/group/GroupExcelDTO.java create mode 100644 wms/nladmin-system/nlsso-server/src/main/java/org/nl/config/excel/group/GroupExcelListener.java diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/config/excel/group/GroupExcelDTO.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/config/excel/group/GroupExcelDTO.java new file mode 100644 index 0000000..3e43d88 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/config/excel/group/GroupExcelDTO.java @@ -0,0 +1,43 @@ +package org.nl.config.excel.group; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class GroupExcelDTO { + + @ExcelProperty("载具编码") + private String storagevehicle_code; + + @ExcelProperty("物料编码") + private String material_code; + + @ExcelProperty("批次") + private String pcsn; + + @ExcelProperty("组盘数量") + private BigDecimal qty; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("供应商编码") + private String supp_code; + + @ExcelProperty("生产日期") + private String produce_time; + + @ExcelProperty("烘干次数") + private Integer bake_num; + + @ExcelProperty("品质类型") + private String quality_type; + + @ExcelProperty("料箱类型") + private String box_type; + + @ExcelProperty("机台编码") + private String device_code; +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/config/excel/group/GroupExcelListener.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/config/excel/group/GroupExcelListener.java new file mode 100644 index 0000000..4ecfe7c --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/config/excel/group/GroupExcelListener.java @@ -0,0 +1,90 @@ +package org.nl.config.excel.group; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.exception.BadRequestException; +import org.nl.config.SpringContextHolder; +import org.nl.wms.basedata_manage.service.dao.MdCsSupplierbase; +import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase; +import org.nl.wms.basedata_manage.service.impl.MdCsSupplierbaseServiceImpl; +import org.nl.wms.basedata_manage.service.impl.MdMeMaterialbaseServiceImpl; +import org.nl.wms.warehouse_management.service.dao.GroupPlate; +import org.nl.wms.warehouse_management.service.impl.MdPbGroupplateServiceImpl; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Slf4j +@Component +public class GroupExcelListener extends AnalysisEventListener { + + // 存储解析的数据 + private List dataList = new ArrayList<>(); + + @Override + public void invoke(GroupExcelDTO userDTO, AnalysisContext analysisContext) { + dataList.add(userDTO); + // 调用插入逻辑 + saveData(); + // 清空缓存 + dataList.clear(); + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + // 处理最后一批数据 + saveData(); + log.info("Excel解析完成,共处理{}条数据", dataList.size()); + } + + /** + * 实际逻辑(替换为mybatis/dao操作) + */ + private void saveData() { + if (!dataList.isEmpty()) { + for (GroupExcelDTO dto : dataList) { + // 基础校验 + checkData(dto); + GroupPlate groupPlate = JSONObject.parseObject(JSONObject.toJSONString(dto), GroupPlate.class); + + MdMeMaterialbaseServiceImpl iMdMeMaterialbaseService = SpringContextHolder.getBean(MdMeMaterialbaseServiceImpl.class); + MdMeMaterialbase materDao = iMdMeMaterialbaseService.getByCode(dto.getMaterial_code()); + groupPlate.setMaterial_id(materDao.getMaterial_id()); + MdCsSupplierbaseServiceImpl iMdCsSupplierbaseService = SpringContextHolder.getBean(MdCsSupplierbaseServiceImpl.class); + MdCsSupplierbase suppDao = iMdCsSupplierbaseService.getByCode(dto.getSupp_code()); + groupPlate.setSupp_code(suppDao.getSupp_code()); + + SpringContextHolder.getBean(MdPbGroupplateServiceImpl.class).create(groupPlate); + } + log.info("批量组盘{}条数据", dataList.size()); + } + } + + private void checkData(GroupExcelDTO dto) { + if (ObjectUtil.isEmpty(dto.getStoragevehicle_code())) { + throw new BadRequestException("载具编码不能为空!"); + } + if (ObjectUtil.isEmpty(dto.getPcsn())) { + throw new BadRequestException("批次不能为空!"); + } + if (ObjectUtil.isEmpty(dto.getQty())) { + throw new BadRequestException("组盘数量不能为空!"); + } + if (ObjectUtil.isEmpty(dto.getProduce_time())) { + throw new BadRequestException("生产日期不能为空!"); + } + if (ObjectUtil.isEmpty(dto.getBake_num())) { + throw new BadRequestException("烘干次数不能为空!"); + } + if (ObjectUtil.isEmpty(dto.getQuality_type())) { + throw new BadRequestException("品质类型不能为空!"); + } + if (ObjectUtil.isEmpty(dto.getBox_type())) { + throw new BadRequestException("料箱类型不能为空!"); + } + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/GroupController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/GroupController.java index 8c5cb1d..2359249 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/GroupController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/GroupController.java @@ -109,6 +109,7 @@ public class GroupController { @Log("导入数据") @SaIgnore public ResponseEntity importExcel(@RequestParam("file") MultipartFile file, HttpServletRequest request) { - return new ResponseEntity<>(iMdPbGroupplateService.importExcel(file, request),HttpStatus.OK); + iMdPbGroupplateService.importExcel(file, request); + return new ResponseEntity<>(HttpStatus.OK); } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IMdPbGroupplateService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IMdPbGroupplateService.java index b0928af..8c58a08 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IMdPbGroupplateService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/IMdPbGroupplateService.java @@ -10,7 +10,6 @@ import org.nl.wms.warehouse_management.service.dao.GroupPlate; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -60,6 +59,7 @@ public interface IMdPbGroupplateService extends IService { /** * 查询物料集合 + * * @return List */ List queryMaterList(); @@ -92,15 +92,16 @@ public interface IMdPbGroupplateService extends IService { /** * 打印物料标签后删除 + * * @param dto 实体类 */ void printDelete(GroupPlate dto); /** * 导入excel - * @param file : 文件 + * + * @param file : 文件 * @param request post请求 - * @return ArrayList */ - ArrayList importExcel(MultipartFile file, HttpServletRequest request); + void importExcel(MultipartFile file, HttpServletRequest request); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java index 0b2b3af..2ca3145 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/MdPbGroupplateServiceImpl.java @@ -3,8 +3,7 @@ package org.nl.wms.warehouse_management.service.impl; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.poi.excel.ExcelReader; -import cn.hutool.poi.excel.ExcelUtil; +import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; @@ -12,9 +11,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; -import org.nl.common.utils.CodeUtil; import org.nl.common.utils.SecurityUtils; import org.nl.config.IdUtil; +import org.nl.config.excel.group.GroupExcelDTO; +import org.nl.config.excel.group.GroupExcelListener; import org.nl.wms.basedata_manage.service.IMdCsSupplierbaseService; import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; import org.nl.wms.basedata_manage.service.IMdPbMeasureunitService; @@ -28,17 +28,17 @@ import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; import org.nl.wms.warehouse_management.service.dao.GroupPlate; import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper; -import org.nl.wms.warehouse_management.service.dto.GroupPlateDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; -import java.io.InputStream; -import java.math.BigDecimal; -import java.util.*; -import java.util.stream.Collectors; +import java.io.IOException; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; /** *

@@ -110,8 +110,8 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl queryMaterList() { return iMdMeMaterialbaseService.list( new QueryWrapper().lambda() - .eq(MdMeMaterialbase::getIs_delete, IOSConstant.ZERO) - .eq(MdMeMaterialbase::getIs_used, IOSConstant.ONE) + .eq(MdMeMaterialbase::getIs_delete, IOSConstant.ZERO) + .eq(MdMeMaterialbase::getIs_used, IOSConstant.ONE) ); } @@ -169,7 +169,7 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl set = new HashSet<>(); set.add(dto.getGroup_id()); @@ -180,59 +180,18 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl importExcel(MultipartFile file, HttpServletRequest request) { - // 1.获取上传文件输入流 - InputStream inputStream = null; - + public void importExcel(MultipartFile file, HttpServletRequest request) { try { - inputStream = file.getInputStream(); - } catch (Exception e) { + if (file.isEmpty()) { + throw new BadRequestException("文件不能为空!"); + } + // 读取Excel(逐行解析,自动触发监听器) + EasyExcel.read(file.getInputStream(), GroupExcelDTO.class, new GroupExcelListener()) + .sheet() + .doRead(); + } catch (IOException e) { e.printStackTrace(); + throw new BadRequestException("导入失败!" + e.getMessage()); } - ExcelReader excelReader = ExcelUtil.getReader(inputStream); - List> read = excelReader.read(0, excelReader.getRowCount()); - - for (int i = 0; i < read.size(); i++) { - List list = read.get(i); - // 载具编码 - String storagevehicle_code = list.get(0).toString(); - // 物料编码 - String material_code = list.get(1).toString(); - // 批次 - String pcsn = list.get(2).toString(); - // 组盘数量 - String qty = list.get(3).toString(); - // 备注 - String remark = list.get(4).toString(); - // 供应商编码 - String supp_code = list.get(5).toString(); - // 生产日期 - String produce_time = list.get(6).toString(); - // 烘干次数 - String bake_num = list.get(7).toString(); - // 品质类型 - String quality_type = list.get(8).toString(); - // 料箱类型 - String box_type = list.get(9).toString(); - // 机台编码 - String device_code = list.get(10).toString(); - - GroupPlate groupPlate = new GroupPlate(); - groupPlate.setStoragevehicle_code(storagevehicle_code); - MdMeMaterialbase materDao = iMdMeMaterialbaseService.getByCode(material_code); - groupPlate.setMaterial_id(materDao.getMaterial_id()); - groupPlate.setPcsn(pcsn); - groupPlate.setQty(BigDecimal.valueOf(Double.parseDouble(qty))); - groupPlate.setRemark(remark); - MdCsSupplierbase suppDao = iMdCsSupplierbaseService.getByCode(supp_code); - groupPlate.setSupp_code(suppDao.getSupp_code()); - groupPlate.setProduce_time(produce_time); - groupPlate.setBake_num(Integer.parseInt(bake_num)); - groupPlate.setQuality_type(quality_type); - groupPlate.setBox_type(box_type); - groupPlate.setDevice_code(device_code); - this.create(groupPlate); - } - return null; } } diff --git a/wms/nladmin-ui/src/views/wms/basedata/group/UploadDialog.vue b/wms/nladmin-ui/src/views/wms/basedata/group/UploadDialog.vue index bf98816..fdee1d5 100644 --- a/wms/nladmin-ui/src/views/wms/basedata/group/UploadDialog.vue +++ b/wms/nladmin-ui/src/views/wms/basedata/group/UploadDialog.vue @@ -99,8 +99,8 @@ export default { formdata.append('file', this.file1.raw) // excelImport:请求接口 formdata:传递参数 crudGroup.excelImport(formdata).then((res) => { + this.crud.toQuery() this.crud.notify('导入成功', CRUD.NOTIFICATION_TYPE.SUCCESS) - this.$emit('tableChanged', res) this.$emit('update:dialogShow', false) }) } else { diff --git a/wms/nladmin-ui/src/views/wms/basedata/group/index.vue b/wms/nladmin-ui/src/views/wms/basedata/group/index.vue index 02f54f4..bba8005 100644 --- a/wms/nladmin-ui/src/views/wms/basedata/group/index.vue +++ b/wms/nladmin-ui/src/views/wms/basedata/group/index.vue @@ -81,7 +81,7 @@ > 物料标签 - +