From c8655a7a8c14a417163f2f46bb9bacbeff1fbb47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 3 Jul 2025 11:43:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=92=A2=E6=9E=84?= =?UTF-8?q?=E5=8C=85=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nflg-wms-admin/pom.xml | 4 + .../wms/admin/controller/ModelController.java | 9 + .../StructuralPackageController.java | 114 ++++++++++ .../admin/service/ModelControllerService.java | 18 +- .../StructuralPackageControllerService.java | 206 ++++++++++++++++++ .../common/pojo/dto/PackageMaterialDTO.java | 64 ++++++ .../dto/PackageMaterialExcelExportDTO.java | 54 +++++ .../dto/PackageMaterialExcelImportDTO.java | 56 +++++ .../wms/common/pojo/qo/MaterialAddQO.java | 5 + .../nflg/wms/common/pojo/qo/PackageAddQO.java | 78 +++++++ .../pojo/qo/PackageMaterialSearchQO.java | 14 ++ .../wms/common/pojo/qo/PackageSearchQO.java | 19 ++ .../wms/common/pojo/qo/PackageUpdateQO.java | 11 + .../nflg/wms/common/pojo/vo/MaterialVO.java | 5 + .../nflg/wms/common/pojo/vo/PackageVO.java | 106 +++++++++ .../wms/common/pojo/vo/WmsModelSimpleVO.java | 14 ++ .../wms/repository/entity/WmsMaterial.java | 5 + .../entity/WmsStructuralPackage.java | 109 +++++++++ .../mapper/WmsStructuralPackageMapper.java | 27 +++ .../service/IWmsStructuralPackageService.java | 41 ++++ .../impl/WmsStructuralPackageServiceImpl.java | 104 +++++++++ .../resources/mapper/WmsMaterialMapper.xml | 5 +- .../mapper/WmsStructuralPackageMapper.xml | 34 +++ .../wms/repository/CodeGeneratorTest.java | 2 +- 24 files changed, 1096 insertions(+), 8 deletions(-) create mode 100644 nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageController.java create mode 100644 nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StructuralPackageControllerService.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PackageMaterialDTO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PackageMaterialExcelExportDTO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PackageMaterialExcelImportDTO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageAddQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageMaterialSearchQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageSearchQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageUpdateQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/PackageVO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WmsModelSimpleVO.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsStructuralPackage.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStructuralPackageMapper.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStructuralPackageService.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStructuralPackageServiceImpl.java create mode 100644 nflg-wms-repository/src/main/resources/mapper/WmsStructuralPackageMapper.xml diff --git a/nflg-wms-admin/pom.xml b/nflg-wms-admin/pom.xml index 46080351..63413daf 100644 --- a/nflg-wms-admin/pom.xml +++ b/nflg-wms-admin/pom.xml @@ -96,6 +96,10 @@ 2.17.0 compile + + org.apache.commons + commons-lang3 + diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ModelController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ModelController.java index d70118af..e5e58b98 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ModelController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/ModelController.java @@ -7,6 +7,7 @@ import com.nflg.wms.common.pojo.qo.EnableQO; import com.nflg.wms.common.pojo.qo.ModelAddQO; import com.nflg.wms.common.pojo.qo.ModelSearchQO; import com.nflg.wms.common.pojo.qo.ModelUpdateQO; +import com.nflg.wms.common.pojo.vo.WmsModelSimpleVO; import com.nflg.wms.repository.entity.WmsModel; import com.nflg.wms.starter.BaseController; import jakarta.annotation.Resource; @@ -76,6 +77,14 @@ public class ModelController extends BaseController { return ApiResult.success(modelControllerService.search(request)); } + /** + * 获取机型列表 + */ + @GetMapping("getSimpleList") + public ApiResult> getSimpleList(){ + return ApiResult.success(modelControllerService.getSimpleList()); + } + /** * 导入机型 * @param file 文件 diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageController.java new file mode 100644 index 00000000..3b26a5cc --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageController.java @@ -0,0 +1,114 @@ +package com.nflg.wms.admin.controller; + +import com.nflg.wms.admin.service.StructuralPackageControllerService; +import com.nflg.wms.common.pojo.ApiResult; +import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.dto.PackageMaterialDTO; +import com.nflg.wms.common.pojo.qo.*; +import com.nflg.wms.common.pojo.vo.PackageVO; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; + +/** + * 钢构包管理 + */ +@RestController +@RequestMapping("/package") +public class StructuralPackageController { + + @Resource + private StructuralPackageControllerService packageControllerService; + + /** + * 新增 + */ + @PostMapping("add") + public ApiResult add(@Valid @RequestBody PackageAddQO request){ + packageControllerService.add(request); + return ApiResult.success(); + } + + /** + * 更新 + */ + @PostMapping("update") + public ApiResult update(@Valid @RequestBody PackageUpdateQO request){ + packageControllerService.update(request); + return ApiResult.success(); + } + + /** + * 启用/禁用 + * @param request 请求参数 + */ + @PostMapping("/enable") + public ApiResult enable(@Valid @RequestBody EnableQO request){ + packageControllerService.enable(request); + return ApiResult.success(); + } + + /** + * 搜索 + * @param request 搜索参数 + */ + @PostMapping("search") + public ApiResult> search(@Valid @RequestBody PackageSearchQO request){ + return ApiResult.success(packageControllerService.search(request)); + } + + /** + * 获取图纸历史记录 + * @param no SAP料号 + */ + @GetMapping("/getHistory") + public ApiResult> getHistory(@Valid @RequestParam @NotBlank String no){ + return ApiResult.success(packageControllerService.getHistory(no)); + } + + /** + * 获取详细信息 + * @param id 包ID + */ + @GetMapping("/getInfo") + public ApiResult getInfo(@Valid @RequestParam @NotNull Long id){ + return ApiResult.success(packageControllerService.getInfo(id)); + } + + /** + * 获取老鼠图 + * @param request 搜索参数 + */ + @PostMapping("getMaterials") + public ApiResult> getMaterials(@Valid @RequestBody PackageMaterialSearchQO request){ + return ApiResult.success(packageControllerService.getMaterials(request)); + } + + /** + * 导出零件清单 + */ + @GetMapping("exportMaterials") + public void exportMaterials(HttpServletResponse response,@Valid @RequestParam @NotNull Long packageId) throws Exception { + packageControllerService.exportMaterials(response,packageId); + } + + /** + * 导入零件清单 + * @param file 文件 + */ + @Transactional + @PostMapping("importMaterials") + public ApiResult importMaterials(HttpServletResponse response,@Valid @RequestParam @NotNull Long packageId + , @RequestParam(value = "file") MultipartFile file) throws IOException { + return packageControllerService.importMaterials(response,packageId,file); + } + +} diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/ModelControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/ModelControllerService.java index ccf68a84..92979088 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/ModelControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/ModelControllerService.java @@ -13,6 +13,7 @@ import com.nflg.wms.common.pojo.qo.EnableQO; import com.nflg.wms.common.pojo.qo.ModelAddQO; import com.nflg.wms.common.pojo.qo.ModelSearchQO; import com.nflg.wms.common.pojo.qo.ModelUpdateQO; +import com.nflg.wms.common.pojo.vo.WmsModelSimpleVO; import com.nflg.wms.common.util.DateTimeUtil; import com.nflg.wms.common.util.EecExcelUtil; import com.nflg.wms.common.util.UserUtil; @@ -132,12 +133,7 @@ public class ModelControllerService { public void exportSelect(HttpServletResponse response,List ids) throws IOException { List users = CollectionUtil.isNotEmpty(ids)?modelService.listByIds(ids):new ArrayList<>(); - List datas = users.stream().map(model -> { - ModelExcelExportDTO dto = new ModelExcelExportDTO(); - dto.setNo(model.getNo()); - dto.setRemark(model.getRemark()); - return dto; - }).collect(Collectors.toList()); + List datas = users.stream().map(model -> Convert.convert(ModelExcelExportDTO.class, model)).collect(Collectors.toList()); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("机型导出.xlsx", StandardCharsets.UTF_8)); if (CollectionUtil.isEmpty(datas)){ @@ -149,4 +145,14 @@ public class ModelControllerService { .addSheet(new ListSheet<>(datas)) .writeTo(response.getOutputStream()); } + + public List getSimpleList() { + return modelService.lambdaQuery() + .select(WmsModel::getId, WmsModel::getNo) + .eq(WmsModel::getEnable, true) + .list() + .stream() + .map(model -> Convert.convert(WmsModelSimpleVO.class, model)) + .collect(Collectors.toList()); + } } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StructuralPackageControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StructuralPackageControllerService.java new file mode 100644 index 00000000..a9b25e07 --- /dev/null +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/StructuralPackageControllerService.java @@ -0,0 +1,206 @@ +package com.nflg.wms.admin.service; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.nflg.wms.common.constant.STATE; +import com.nflg.wms.common.pojo.ApiResult; +import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.dto.PackageMaterialDTO; +import com.nflg.wms.common.pojo.dto.PackageMaterialExcelExportDTO; +import com.nflg.wms.common.pojo.dto.PackageMaterialExcelImportDTO; +import com.nflg.wms.common.pojo.qo.*; +import com.nflg.wms.common.pojo.vo.PackageVO; +import com.nflg.wms.common.util.DateTimeUtil; +import com.nflg.wms.common.util.EecExcelUtil; +import com.nflg.wms.common.util.UserUtil; +import com.nflg.wms.common.util.VUtil; +import com.nflg.wms.repository.entity.WmsStructuralPackage; +import com.nflg.wms.repository.service.IWmsStructuralPackageService; +import com.nflg.wms.starter.service.FileUploadService; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import org.apache.commons.lang3.math.NumberUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import org.ttzero.excel.entity.ListSheet; +import org.ttzero.excel.entity.Workbook; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@Component +public class StructuralPackageControllerService { + + @Resource + private IWmsStructuralPackageService packageService; + + @Resource + private FileUploadService fileUploadService; + + + @Transactional + public void add(@Valid PackageAddQO request) { + WmsStructuralPackage structuralPackage = Convert.convert(WmsStructuralPackage.class, request); + structuralPackage.setCreateBy(UserUtil.getUserName()); + structuralPackage.setCreateTime(LocalDateTime.now()); + structuralPackage.setModelIds(StrUtil.join(",", request.getModelIds())); + structuralPackage.setMaterials(JSONUtil.toJsonStr(request.getMaterials())); + packageService.add(structuralPackage); + } + + public void update(@Valid PackageUpdateQO request) { + WmsStructuralPackage structuralPackage = Convert.convert(WmsStructuralPackage.class, request); + structuralPackage.setUpdateBy(UserUtil.getUserName()); + structuralPackage.setUpdateTime(LocalDateTime.now()); + structuralPackage.setModelIds(StrUtil.join(",", request.getModelIds())); + structuralPackage.setMaterials(JSONUtil.toJsonStr(request.getMaterials())); + packageService.update(structuralPackage); + } + + public void enable(@Valid EnableQO request) { + packageService.enable(request); + } + + public IPage search(@Valid PackageSearchQO request) { + return packageService.search(request); + } + + public List getHistory(@Valid @NotBlank String no) { + return packageService.getHistory(no); + } + + public PackageVO getInfo(@Valid @NotNull Long id) { + return packageService.getInfo(id); + } + + public PageData getMaterials(@Valid PackageMaterialSearchQO request) { + return packageService.getMaterials(request); + } + + public void exportMaterials(HttpServletResponse response,Long packageId) throws IOException { + PackageVO vo = packageService.getInfo(packageId); + List datas = vo.getMaterialList().stream().map(info -> Convert.convert(PackageMaterialExcelExportDTO.class, info)).collect(Collectors.toList()); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode(vo.getNo()+"零件清单导出.xlsx", StandardCharsets.UTF_8)); + if (CollectionUtil.isEmpty(datas)){ + datas.add(new PackageMaterialExcelExportDTO() + .setNo("(必填)零件编码") + .setName("(必填)零件名称") + .setStation("(必填)工位序号") + .setTray("(必填)托盘序号") + .setWeight(BigDecimal.ZERO) + .setNum(BigDecimal.ZERO) + .setVersion("(必填)图纸版本")); + } + new Workbook() + .addSheet(new ListSheet<>(datas)) + .writeTo(response.getOutputStream()); + } + + @Transactional + public ApiResult importMaterials(HttpServletResponse response, @Valid @NotNull Long packageId, MultipartFile file) throws IOException { + PackageVO vo = packageService.getInfo(packageId); + VUtil.trueThrowBusinessError(Objects.isNull(vo)).throwMessage("未找到该结构包"); + List data = EecExcelUtil.getExcelContext(file.getInputStream(), PackageMaterialExcelImportDTO.class); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(data)).throwMessage("导入文件内容为空"); + if (checkAndImport(vo, data)) { + return ApiResult.success(); + } else { + try (ByteArrayOutputStream osOut = new ByteArrayOutputStream()) { + new Workbook() + .addSheet(new ListSheet<>(data)) + .writeTo(osOut); + try (ByteArrayInputStream isIn = new ByteArrayInputStream(osOut.toByteArray())) { + return ApiResult.error(STATE.DataNoCheckPass, "导入文件失败", fileUploadService.upload("temp/" + DateTimeUtil.format(LocalDate.now(), "yyyyMMdd") + "/" + IdUtil.fastUUID() + ".xlsx", isIn)); + } + } catch (Exception e) { + return ApiResult.error(STATE.BusinessError, "保存文件出错"); + } + } + } + + @Transactional + public boolean checkAndImport(PackageVO vo,List data) { + List materialDTOS = new ArrayList<>(); + for (PackageMaterialExcelImportDTO dto : data) { + PackageMaterialDTO materialDTO = new PackageMaterialDTO(); + StringBuilder sb = new StringBuilder(); + if (StrUtil.isBlank(dto.getNo())) { + sb.append("零件编码不能为空;"); + } else { + materialDTO.setNo(dto.getNo()); + } + if (StrUtil.isBlank(dto.getName())) { + sb.append("零件名称不能为空;"); + } else { + materialDTO.setName(dto.getName()); + } + if (StrUtil.isBlank(dto.getStation())) { + sb.append("工位序号不能为空;"); + } else { + materialDTO.setStation(dto.getStation()); + } + if (StrUtil.isBlank(dto.getTray())) { + sb.append("托盘序号不能为空;"); + } else { + materialDTO.setTray(dto.getTray()); + } + if (StrUtil.isBlank(dto.getNum())) { + sb.append("数量不能为空;"); + }else if(!NumberUtils.isCreatable(dto.getNum())){ + sb.append("数量无效;"); + } + else { + materialDTO.setNum(new BigDecimal(dto.getNum())); + } + if (StrUtil.isBlank(dto.getWeight())) { + sb.append("重量不能为空;"); + }else if(!NumberUtils.isCreatable(dto.getWeight())){ + sb.append("重量无效;"); + } + else { + materialDTO.setWeight(new BigDecimal(dto.getWeight())); + } + if (StrUtil.isBlank(dto.getVersion())) { + sb.append("图纸版本不能为空;"); + } else { + materialDTO.setVersion(dto.getVersion()); + } + dto.setError(sb.toString()); + materialDTOS.add(materialDTO); + } + if (data.stream().noneMatch(it -> StrUtil.isNotBlank(it.getError()))) { + List materials = new ArrayList<>(vo.getMaterialList()); + materials.removeIf(info -> materialDTOS.stream().anyMatch(it -> it.getNo().equals(info.getNo()))); + materials.addAll(materialDTOS); + packageService.lambdaUpdate() + .set(WmsStructuralPackage::getMaterials, JSONUtil.toJsonStr(materials)) + .set(WmsStructuralPackage::getUpdateBy, UserUtil.getUserName()) + .set(WmsStructuralPackage::getUpdateTime, LocalDateTime.now()) + .eq(WmsStructuralPackage::getId, vo.getId()) + .update(); + return true; + } + return false; + } +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PackageMaterialDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PackageMaterialDTO.java new file mode 100644 index 00000000..4d49e798 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PackageMaterialDTO.java @@ -0,0 +1,64 @@ +package com.nflg.wms.common.pojo.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class PackageMaterialDTO { + + /** + * 编号 + */ + private String no; + + /** + * 名称 + */ + private String name; + + /** + * 工位 + */ + private String station; + + /** + * 托盘 + */ + private String tray; + + /** + * 数量 + */ + private BigDecimal num; + + /** + * 重量 + */ + private BigDecimal weight; + + /** + * 版本 + */ + private String version; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private String createTime; + + /** + * 修改人 + */ + private String updateBy; + + /** + * 修改时间 + */ + private String updateTime; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PackageMaterialExcelExportDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PackageMaterialExcelExportDTO.java new file mode 100644 index 00000000..cdef3960 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PackageMaterialExcelExportDTO.java @@ -0,0 +1,54 @@ +package com.nflg.wms.common.pojo.dto; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.ttzero.excel.annotation.ExcelColumn; + +import java.math.BigDecimal; + +@Data +@Accessors(chain = true) +public class PackageMaterialExcelExportDTO { + + /** + * 零件编码 + */ + @ExcelColumn("零件编码") + private String no; + + /** + * 零件名称 + */ + @ExcelColumn("零件名称") + private String name; + + /** + * 工位序号 + */ + @ExcelColumn("工位序号") + private String station; + + /** + * 托盘序号 + */ + @ExcelColumn("托盘序号") + private String tray; + + /** + * 数量 + */ + @ExcelColumn("数量") + private BigDecimal num; + + /** + * 单个重量 + */ + @ExcelColumn("单个重量") + private BigDecimal weight; + + /** + * 图纸版本 + */ + @ExcelColumn("图纸版本") + private String version; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PackageMaterialExcelImportDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PackageMaterialExcelImportDTO.java new file mode 100644 index 00000000..5fa26973 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PackageMaterialExcelImportDTO.java @@ -0,0 +1,56 @@ +package com.nflg.wms.common.pojo.dto; + +import lombok.Data; +import org.ttzero.excel.annotation.ExcelColumn; + +@Data +public class PackageMaterialExcelImportDTO { + + /** + * 零件编码 + */ + @ExcelColumn("零件编码") + private String no; + + /** + * 零件名称 + */ + @ExcelColumn("零件名称") + private String name; + + /** + * 工位序号 + */ + @ExcelColumn("工位序号") + private String station; + + /** + * 托盘序号 + */ + @ExcelColumn("托盘序号") + private String tray; + + /** + * 数量 + */ + @ExcelColumn("数量") + private String num; + + /** + * 单个重量 + */ + @ExcelColumn("单个重量") + private String weight; + + /** + * 图纸版本 + */ + @ExcelColumn("图纸版本") + private String version; + + /** + * 错误信息 + */ + @ExcelColumn("错误信息") + private String error; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialAddQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialAddQO.java index cc2c04a3..0427e004 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialAddQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialAddQO.java @@ -20,6 +20,11 @@ public class MaterialAddQO { @NotBlank private String describe; + /** + * 图号 + */ + private String drawingNo; + /** * 图片 */ diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageAddQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageAddQO.java new file mode 100644 index 00000000..7791f9a8 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageAddQO.java @@ -0,0 +1,78 @@ +package com.nflg.wms.common.pojo.qo; + +import com.nflg.wms.common.pojo.dto.PackageMaterialDTO; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class PackageAddQO { + + /** + * 编码 + */ + @NotBlank + private String no; + + /** + * 名称 + */ + @NotBlank + private String name; + + /** + * 图号 + */ + @NotBlank + private String drawingNo; + + /** + * 总重 + */ + @NotNull + private BigDecimal weight; + + /** + * 机型编号 + */ + @NotEmpty + private List modelIds; + + /** + * 种类 + */ + @NotBlank + private String cate; + + /** + * ECO + */ + private String eco; + + /** + * 版本号 + */ + @NotNull + private Integer version; + + /** + * 修改日志 + */ + private String remark; + + /** + * 是否启用 + */ + @NotNull + private Boolean enable; + + /** + * 零件清单 + */ + @NotEmpty + private List materials; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageMaterialSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageMaterialSearchQO.java new file mode 100644 index 00000000..2f7aaf9c --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageMaterialSearchQO.java @@ -0,0 +1,14 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class PackageMaterialSearchQO extends PageQO { + + /** + * 钢构包id + */ + @NotNull + private Long packageId; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageSearchQO.java new file mode 100644 index 00000000..5cc56397 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageSearchQO.java @@ -0,0 +1,19 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; + +@Data +public class PackageSearchQO extends PageQO { + + /** + * 钢构包料号/名称 + */ + private String no; + + private String eco; + + /** + * 机型id + */ + private Long modelId; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageUpdateQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageUpdateQO.java new file mode 100644 index 00000000..8136b453 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PackageUpdateQO.java @@ -0,0 +1,11 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class PackageUpdateQO extends PackageAddQO{ + + @NotNull + private Long id; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/MaterialVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/MaterialVO.java index 1caf070e..f5450aae 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/MaterialVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/MaterialVO.java @@ -21,6 +21,11 @@ public class MaterialVO { */ private String describe; + /** + * 图号 + */ + private String drawingNo; + /** * 图片 */ diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/PackageVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/PackageVO.java new file mode 100644 index 00000000..204225fc --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/PackageVO.java @@ -0,0 +1,106 @@ +package com.nflg.wms.common.pojo.vo; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.json.JSONUtil; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.nflg.wms.common.pojo.dto.PackageMaterialDTO; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; + +@Data +public class PackageVO { + + private Long id; + + /** + * 编码 + */ + private String no; + + /** + * 名称 + */ + private String name; + + /** + * 图号 + */ + private String drawingNo; + + /** + * 总重 + */ + private BigDecimal weight; + + /** + * 种类 + */ + private String cate; + + /** + * ECO + */ + private String eco; + + /** + * 版本号 + */ + private Integer version; + + /** + * 修改日志 + */ + private String remark; + + /** + * 是否启用 + */ + private Boolean enable; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新人 + */ + private String updateBy; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * 机型编号 + */ + private String modelNos; + + /** + * 零件清单 + */ + @JsonIgnore + private String materials; + + /** + * 零件清单 + */ + private List materialList; + + public List getMaterialList() { + if (StrUtil.isBlank( materials)){ + return Collections.emptyList(); + } + return JSONUtil.toList(materials, PackageMaterialDTO.class); + } +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WmsModelSimpleVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WmsModelSimpleVO.java new file mode 100644 index 00000000..4670bfa9 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/WmsModelSimpleVO.java @@ -0,0 +1,14 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; + +@Data +public class WmsModelSimpleVO { + + private Long id; + + /** + * 机型编号 + */ + private String no; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsMaterial.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsMaterial.java index 03d5303b..82a15a1f 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsMaterial.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsMaterial.java @@ -40,6 +40,11 @@ public class WmsMaterial implements Serializable { */ private String describe; + /** + * 图号 + */ + private String drawingNo; + /** * 图片 */ diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsStructuralPackage.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsStructuralPackage.java new file mode 100644 index 00000000..d71a3a6d --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsStructuralPackage.java @@ -0,0 +1,109 @@ +package com.nflg.wms.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + *

+ * + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("wms_structural_package") +public class WmsStructuralPackage implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 编码 + */ + private String no; + + /** + * 名称 + */ + private String name; + + /** + * 图号 + */ + private String drawingNo; + + /** + * 总重 + */ + private BigDecimal weight; + + /** + * 机型编号 + */ + private String modelIds; + + /** + * 种类 + */ + private String cate; + + /** + * ECO + */ + private String eco; + + /** + * 版本号 + */ + private Integer version; + + /** + * 修改日志 + */ + private String remark; + + /** + * 是否启用 + */ + private Boolean enable; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 最后更新人 + */ + private String updateBy; + + /** + * 最后更新时间 + */ + private LocalDateTime updateTime; + + /** + * 零件清单 + */ + private String materials; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStructuralPackageMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStructuralPackageMapper.java new file mode 100644 index 00000000..8c47ecc7 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/WmsStructuralPackageMapper.java @@ -0,0 +1,27 @@ +package com.nflg.wms.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nflg.wms.common.pojo.qo.PackageSearchQO; +import com.nflg.wms.common.pojo.vo.PackageVO; +import com.nflg.wms.repository.entity.WmsStructuralPackage; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface WmsStructuralPackageMapper extends BaseMapper { + + IPage search(PackageSearchQO request, Page objectPage); + + List getHistory(String no); + + PackageVO getInfo(Long id); +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStructuralPackageService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStructuralPackageService.java new file mode 100644 index 00000000..da83d868 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsStructuralPackageService.java @@ -0,0 +1,41 @@ +package com.nflg.wms.repository.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.dto.PackageMaterialDTO; +import com.nflg.wms.common.pojo.qo.EnableQO; +import com.nflg.wms.common.pojo.qo.PackageMaterialSearchQO; +import com.nflg.wms.common.pojo.qo.PackageSearchQO; +import com.nflg.wms.common.pojo.vo.PackageVO; +import com.nflg.wms.repository.entity.WmsStructuralPackage; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +public interface IWmsStructuralPackageService extends IService { + + void add(WmsStructuralPackage structuralPackage); + + void update(WmsStructuralPackage structuralPackage); + + void enable(@Valid EnableQO request); + + IPage search(@Valid PackageSearchQO request); + + List getHistory(@Valid @NotBlank String no); + + PackageVO getInfo(@Valid @NotNull Long id); + + PageData getMaterials(@Valid PackageMaterialSearchQO request); +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStructuralPackageServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStructuralPackageServiceImpl.java new file mode 100644 index 00000000..1aa60bdb --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsStructuralPackageServiceImpl.java @@ -0,0 +1,104 @@ +package com.nflg.wms.repository.service.impl; + +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.dto.PackageMaterialDTO; +import com.nflg.wms.common.pojo.qo.EnableQO; +import com.nflg.wms.common.pojo.qo.PackageMaterialSearchQO; +import com.nflg.wms.common.pojo.qo.PackageSearchQO; +import com.nflg.wms.common.pojo.vo.PackageVO; +import com.nflg.wms.common.util.UserUtil; +import com.nflg.wms.common.util.VUtil; +import com.nflg.wms.repository.entity.WmsStructuralPackage; +import com.nflg.wms.repository.mapper.WmsStructuralPackageMapper; +import com.nflg.wms.repository.service.IAuditLogService; +import com.nflg.wms.repository.service.IWmsStructuralPackageService; +import jakarta.annotation.Resource; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +/** + *

+ * 服务实现类 + *

+ * + * @author 代码生成器生成 + * @since 2025 + */ +@Service +public class WmsStructuralPackageServiceImpl extends ServiceImpl implements IWmsStructuralPackageService { + + @Resource + private IAuditLogService auditLogService; + + @Transactional + @Override + public void add(WmsStructuralPackage structuralPackage) { + VUtil.trueThrowBusinessError(lambdaQuery().eq(WmsStructuralPackage::getNo, structuralPackage.getNo()) + .eq(WmsStructuralPackage::getVersion, structuralPackage.getVersion()) + .ne(Objects.nonNull(structuralPackage.getId()),WmsStructuralPackage::getId, structuralPackage.getId()) + .exists()).throwMessage("该版本的钢构包编码已存在"); + save(structuralPackage); + auditLogService.addInsert(WmsStructuralPackage.class, structuralPackage,structuralPackage.getCreateBy()); + } + + @Transactional + @Override + public void update(WmsStructuralPackage structuralPackage) { + WmsStructuralPackage old=getById(structuralPackage.getId()); + VUtil.trueThrowBusinessError(Objects.isNull(old)).throwMessage("该钢构包不存在"); + VUtil.trueThrowBusinessError(Objects.equals(structuralPackage.getVersion(),old.getVersion())) + .throwMessage("更新数据必须修改版本号"); + structuralPackage.setId(null); + add(structuralPackage); + } + + @Transactional + @Override + public void enable(EnableQO request) { + WmsStructuralPackage old = getById(request.getId()); + VUtil.trueThrowBusinessError(Objects.isNull(old)).throwMessage("钢构包不存在"); + lambdaUpdate() + .set(WmsStructuralPackage::getEnable, request.getEnable()) + .set(WmsStructuralPackage::getUpdateBy, UserUtil.getUserName()) + .set(WmsStructuralPackage::getUpdateTime, LocalDateTime.now()) + .eq(WmsStructuralPackage::getId, request.getId()) + .update(); + WmsStructuralPackage newInfo = getById(request.getId()); + auditLogService.addUpdate(WmsStructuralPackage.class, old, newInfo, UserUtil.getUserName()); + } + + @Override + public IPage search(PackageSearchQO request) { + return baseMapper.search(request,new Page<>(request.getPage(),request.getPageSize())); + } + + @Override + public List getHistory(String no) { + return baseMapper.getHistory(no); + } + + @Override + public PackageVO getInfo(Long id) { + return baseMapper.getInfo(id); + } + + @Override + public PageData getMaterials(PackageMaterialSearchQO request) { + WmsStructuralPackage info = getById(request.getPackageId()); + List materials = JSONUtil.toList(info.getMaterials(), PackageMaterialDTO.class); + materials = materials.stream().skip(request.getPage() - 1).limit(request.getPageSize()).toList(); + return new PageData() + .setPage(request.getPage()) + .setPageSize(request.getPageSize()) + .setTotal(materials.size()) + .setItems(materials); + } +} diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsMaterialMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsMaterialMapper.xml index 029b5e74..430b2ae8 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsMaterialMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsMaterialMapper.xml @@ -4,11 +4,14 @@ diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsStructuralPackageMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsStructuralPackageMapper.xml new file mode 100644 index 00000000..75b30995 --- /dev/null +++ b/nflg-wms-repository/src/main/resources/mapper/WmsStructuralPackageMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + diff --git a/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java b/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java index 356b0280..5588d791 100644 --- a/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java +++ b/nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java @@ -33,7 +33,7 @@ public class CodeGeneratorTest { ) .strategyConfig(builder -> { builder - .addInclude("wms_storage_bin") //只生成指定表 + .addInclude("wms_structural_package") //只生成指定表 .entityBuilder().idType(IdType.ASSIGN_ID) .enableLombok() .enableChainModel()