diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/MaterialControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/MaterialControllerService.java index 5823d638..c7ae307d 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/MaterialControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/MaterialControllerService.java @@ -50,7 +50,6 @@ import tech.powerjob.common.request.query.JobInfoQuery; import tech.powerjob.common.response.JobInfoDTO; import tech.powerjob.common.response.ResultDTO; -import javax.print.attribute.standard.PrinterURI; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -95,19 +94,16 @@ public class MaterialControllerService { private String mpmDownloadUrl; public void add(@Valid MaterialAddQO request) { - WmsMaterial old = materialService.getCurrent(request.getNo()); - VUtil.trueThrowBusinessError(Objects.nonNull(old) && !old.getComplete()) + WmsMaterial old = materialService.getLatest(request.getNo()); + VUtil.trueThrowBusinessError(Objects.nonNull(old) && StrUtil.isBlank(old.getImage())) .throwMessage("该物料存在草稿版本"); WmsMaterial wmsMaterial = Convert.convert(WmsMaterial.class, request); - // 根据fromMpm字段决定版本号设置逻辑 - if (Boolean.TRUE.equals(wmsMaterial.getFromMpm())) { - // 来自MPM,使用传入的版本号,如果未传则默认为"1" - if (StrUtil.isBlank(wmsMaterial.getVersion())) { + if (StrUtil.isBlank(wmsMaterial.getVersion())) { + if (Objects.isNull(old)) { wmsMaterial.setVersion("1"); + } else { + wmsMaterial.setVersion(incrementVersion(old.getVersion())); } - } else { - // 非MPM来源,版本号初始化为"1" - wmsMaterial.setVersion("1"); } wmsMaterial.setCreateBy(UserUtil.getUserName()); wmsMaterial.setCreateTime(LocalDateTime.now()); @@ -118,26 +114,10 @@ public class MaterialControllerService { WmsMaterial old = materialService.getById(request.getId()); VUtil.trueThrowBusinessError(Objects.isNull(old)).throwMessage("数据不存在!"); WmsMaterial wmsMaterial = Convert.convert(WmsMaterial.class, request); - if (old.getComplete()) { - // 根据fromMpm字段决定版本号设置逻辑 - if (Boolean.TRUE.equals(wmsMaterial.getFromMpm())) { - // 来自MPM,使用传入的版本号,如果未传则递增 - if (StrUtil.isBlank(wmsMaterial.getVersion())) { - wmsMaterial.setVersion(incrementVersion(old.getVersion())); - } - } else { - // 非MPM来源,版本号递增 - wmsMaterial.setVersion(incrementVersion(old.getVersion())); - } - wmsMaterial.setCreateBy(UserUtil.getUserName()); - wmsMaterial.setCreateTime(LocalDateTime.now()); - wmsMaterial.setId(null); - materialService.add(wmsMaterial); - } else { - wmsMaterial.setUpdateBy(UserUtil.getUserName()); - wmsMaterial.setUpdateTime(LocalDateTime.now()); - materialService.update(wmsMaterial); - } + wmsMaterial.setVersion(old.getVersion()); + wmsMaterial.setUpdateBy(UserUtil.getUserName()); + wmsMaterial.setUpdateTime(LocalDateTime.now()); + materialService.add(wmsMaterial); } public IPage search(@Valid MaterialSearchQO request) { @@ -205,7 +185,7 @@ public class MaterialControllerService { pics.add(name); } else { String url = fileUploadService.upload(buildFilePath(name), file); - WmsMaterial old = materialService.getCurrent(materialNo); + WmsMaterial old = materialService.getLatest(materialNo); if (Objects.equals(UserUtil.getType(), UserType.Supplier) && Objects.nonNull(old) && !Objects.equals(old.getSupplierId(), UserUtil.getUserId())) { pics.add(name); } else { @@ -291,7 +271,6 @@ public class MaterialControllerService { @Transactional public boolean checkAndImport(List data) { List forAdd = new ArrayList<>(); - List forupdate = new ArrayList<>(); MaterialSearchQO qo = new MaterialSearchQO(); qo.setPageSize(Integer.MAX_VALUE); List dbMaterials = materialService.search(qo).getRecords(); @@ -327,30 +306,22 @@ public class MaterialControllerService { sb.append("SAP料号无效;"); } else { MaterialVO currentMaterial = dbMaterials.stream().filter(m -> StrUtil.equals(m.getNo(), dto.getNo())).findFirst().orElse(null); - if (Objects.isNull(currentMaterial) || currentMaterial.getComplete()) { + if (Objects.isNull(currentMaterial)) { material.setCreateBy(UserUtil.getUserName()); material.setCreateTime(LocalDateTime.now()); - if (Objects.isNull(currentMaterial)) { - material.setVersion("1"); - forAdd.add(material); - } else { - if (Objects.equals(UserUtil.getType(), UserType.Supplier) - && !Objects.equals(currentMaterial.getSupplierId(), UserUtil.getUserId())) { - sb.append("无权限修改此物料;"); - } else { - material.setVersion(incrementVersion(String.valueOf(currentMaterial.getVersion()))); - forAdd.add(material); - } - } + material.setVersion("1"); + forAdd.add(material); } else { if (Objects.equals(UserUtil.getType(), UserType.Supplier) && !Objects.equals(currentMaterial.getSupplierId(), UserUtil.getUserId())) { sb.append("无权限修改此物料;"); } else { - material.setId(currentMaterial.getId()); + material.setVersion(currentMaterial.getVersion()); + material.setCreateBy(currentMaterial.getCreateBy()); + material.setCreateTime(currentMaterial.getCreateTime()); material.setUpdateBy(UserUtil.getUserName()); material.setUpdateTime(LocalDateTime.now()); - forupdate.add(material); + forAdd.add(material); } } material.setNo(dto.getNo()); @@ -391,10 +362,7 @@ public class MaterialControllerService { } if (data.stream().noneMatch(it -> StrUtil.isNotBlank(it.getError()))) { if (CollectionUtil.isNotEmpty(forAdd)) { - materialService.saveBatch(forAdd, 1000); - } - if (CollectionUtil.isNotEmpty(forupdate)) { - materialService.updateBatchById(forupdate, 1000); + materialService.saveBatch(forAdd); } return true; } 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 index 533a6d47..8bcdead9 100644 --- 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 @@ -173,7 +173,17 @@ public class StructuralPackageControllerService { } public PackageVO getInfo(@Valid @NotNull Long id) { - return packageService.getInfo(id); + PackageVO vo = packageService.getInfo(id); + vo.setMaterialList(JSONUtil.toList(vo.getMaterials(), PackageMaterialDTO.class)); + vo.getMaterialList().forEach(it -> { + WmsMaterial material = materialService.getCurrent(it.getNo()); + it.setVersion(material.getVersion()); + it.setName(material.getDescribe()); + it.setDrawingNo(material.getDrawingNo()); + it.setImage(material.getImage()); + it.setWeight(material.getWeight()); + }); + return vo; } public PageData getMaterials(@Valid PackageMaterialSearchQO request) { @@ -255,12 +265,12 @@ public class StructuralPackageControllerService { /*if (StrUtil.isBlank(dto.getStation())) { sb.append("工位序号不能为空;"); } else {*/ - materialDTO.setStation(dto.getStation()); + materialDTO.setStation(dto.getStation()); /*} if (StrUtil.isBlank(dto.getTray())) { sb.append("托盘序号不能为空;"); } else {*/ - materialDTO.setTray(dto.getTray()); + materialDTO.setTray(dto.getTray()); // } if (StrUtil.isBlank(dto.getNum())) { sb.append("数量不能为空;"); @@ -465,7 +475,8 @@ public class StructuralPackageControllerService { // @Transactional // public void materialStorage(List list, List items) { -//// items.forEach(this::syncStorage); + + /// / items.forEach(this::syncStorage); // inventoryService.in(list.stream().map(it -> new InventoryDTO() // .setMaterialNo(it.getItemCode()) // .setBatchNo(it.getBatchNumber()) @@ -484,7 +495,6 @@ public class StructuralPackageControllerService { // }); // inTaskItemService.updateBatchById(list); // } - @Transactional(propagation = Propagation.REQUIRES_NEW) public void saveSapError(List list, String msg) { list.forEach(it -> { @@ -571,12 +581,12 @@ public class StructuralPackageControllerService { @Transactional public void syncFromMpm(@Valid PackageAddQO request) { log.info("开始从MPM系统同步钢构包数据: {}, 版本: {}", request.getNo(), request.getVersion()); - + WmsStructuralPackage structuralPackage = Convert.convert(WmsStructuralPackage.class, request); structuralPackage.setOrderNo(getOrderNo()); structuralPackage.setCreateBy("MPM_SYNC"); structuralPackage.setCreateTime(LocalDateTime.now()); - + String modelNo = request.getModelNos(); if (StrUtil.isNotBlank(modelNo)) { List modelNos = StrUtil.split(modelNo, ","); @@ -587,51 +597,51 @@ public class StructuralPackageControllerService { structuralPackage.setModelIds(StrUtil.join(",", models.stream().map(WmsModel::getId).toList())); } } - + structuralPackage.setFromMpm(true); // 标记为来自MPM structuralPackage.setLatest(true); // 设置为最新版本 - + // 将同编号的其他版本设置为非最新 packageService.lambdaUpdate() .set(WmsStructuralPackage::getLatest, false) .eq(WmsStructuralPackage::getNo, request.getNo()) .update(); - + // 处理零件清单,补充完整的物料信息 List materials = new ArrayList<>(); for (PackageMaterialDTO dto : request.getMaterials()) { // 从物料服务获取当前最新的物料信息 - WmsMaterial material = materialService.getCurrent(dto.getNo()); + WmsMaterial material = materialService.getLatest(dto.getNo()); if (Objects.isNull(material)) { log.warn("零件编码{}不存在,跳过", dto.getNo()); continue; } - + // 补充完整的物料信息 dto.setName(material.getDescribe()); dto.setDrawingNo(material.getDrawingNo()); dto.setImage(material.getImage()); - + // 如果MPM推送的版本号为空,使用物料当前版本 if (Objects.isNull(dto.getVersion())) { dto.setVersion(material.getVersion()); } - + dto.setCreateBy("MPM_SYNC"); dto.setCreateTime(DateTimeUtil.format(LocalDateTime.now())); materials.add(dto); } - + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(materials)).throwMessage("有效的零件不能为空"); - + // 计算总重 structuralPackage.setWeight(materials.stream() .map(m -> m.getWeight().multiply(m.getNum())) .reduce(BigDecimal.ZERO, BigDecimal::add)); - + structuralPackage.setMaterials(JSONUtil.toJsonStr(materials)); packageService.add(structuralPackage); - + log.info("成功从MPM系统同步钢构包数据: {}, 版本: {}, 零件数: {}", request.getNo(), request.getVersion(), materials.size()); } @@ -641,7 +651,7 @@ public class StructuralPackageControllerService { @Transactional public void syncFromMpmBatch(@Valid @NotEmpty List requests) { log.info("开始批量从MPM系统同步钢构包数据,共{}条", requests.size()); - + for (PackageAddQO request : requests) { try { syncFromMpm(request); @@ -650,7 +660,7 @@ public class StructuralPackageControllerService { // 继续处理下一条,不中断整个批量同步 } } - + log.info("批量从MPM系统同步钢构包数据完成"); } } 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 30215c77..88f5677c 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 @@ -88,15 +88,6 @@ public class MaterialVO { return image.substring(image.lastIndexOf(".")); } - /** - * 是否完成 - */ - private Boolean complete; - - public Boolean getComplete() { - return StrUtil.isNotBlank(getImage()) && Objects.nonNull(getWeight()); - } - /** * 供应商id */ 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 index df2365c3..671ff58d 100644 --- 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 @@ -124,12 +124,12 @@ public class PackageVO { */ private List materialList; - public List getMaterialList() { - if (StrUtil.isBlank( materials)){ - return Collections.emptyList(); - } - return JSONUtil.toList(materials, PackageMaterialDTO.class); - } +// public List getMaterialList() { +// if (StrUtil.isBlank(materials)) { +// return Collections.emptyList(); +// } +// return JSONUtil.toList(materials, PackageMaterialDTO.class); +// } /** * 供应商名称 @@ -158,6 +158,6 @@ public class PackageVO { private List modelIdList; public List getModelIdList() { - return StrUtil.split(modelIds, ","); + return StrUtil.split(modelIds, ","); } } 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 f4195206..d909f904 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 @@ -113,16 +113,6 @@ public class WmsMaterial implements Serializable { */ private Long supplierId; - /** - * 是否完成 - */ - @TableField(exist = false) - private Boolean complete; - - public Boolean getComplete() { - return StrUtil.isNotBlank(getImage()) && Objects.nonNull(getWeight()); - } - /** * 是否来自MPM */ diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsMaterialService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsMaterialService.java index daec4aaf..1af10224 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsMaterialService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsMaterialService.java @@ -7,7 +7,6 @@ import com.nflg.wms.common.pojo.vo.MaterialVO; import com.nflg.wms.repository.entity.WmsMaterial; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotEmpty; import java.util.List; import java.util.Set; @@ -24,7 +23,7 @@ public interface IWmsMaterialService extends IService { void add(WmsMaterial wmsMaterial); - void update(WmsMaterial wmsMaterial); +// void update(WmsMaterial wmsMaterial); IPage search(@Valid MaterialSearchQO request); @@ -32,11 +31,13 @@ public interface IWmsMaterialService extends IService { List getNotSet(); - WmsMaterial getCurrent(String no); + WmsMaterial getLatest(String no); List searchNonPage(@Valid MaterialSearchQO request); List getMaterials(Set nos); List getMaterials(List ids); + + WmsMaterial getCurrent(String no); } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsMaterialServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsMaterialServiceImpl.java index 2b357fef..280bb757 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsMaterialServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsMaterialServiceImpl.java @@ -1,5 +1,7 @@ package com.nflg.wms.repository.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -18,9 +20,8 @@ import java.util.Set; /** *

- * 服务实现类 + * 服务实现类 *

- * * @author 代码生成器生成 * @since 2025 */ @@ -32,25 +33,22 @@ public class WmsMaterialServiceImpl extends ServiceImpl search(MaterialSearchQO request) { - return baseMapper.search(request,new Page<>(request.getPage(),request.getPageSize())); + return baseMapper.search(request, new Page<>(request.getPage(), request.getPageSize())); } @Override @@ -64,7 +62,7 @@ public class WmsMaterialServiceImpl extends ServiceImpl getMaterials(List ids) { return baseMapper.getMaterialsByIds(ids); } + + @Override + public WmsMaterial getCurrent(String no) { + List datas = lambdaQuery() + .eq(WmsMaterial::getNo, no) + .orderByDesc(WmsMaterial::getId) + .last("limit 2") + .list(); + if (CollectionUtil.isEmpty(datas)) { + return null; + } + if (datas.size() == 1) { + return datas.get(0); + } + if (StrUtil.isNotBlank(datas.get(0).getImage())) { + return datas.get(0); + } + if (StrUtil.isNotBlank(datas.get(1).getImage())) { + return datas.get(1); + } + return datas.get(0); + } } diff --git a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/MaterialZipImportProcessor.java b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/MaterialZipImportProcessor.java index bf2df47d..d8e43c74 100644 --- a/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/MaterialZipImportProcessor.java +++ b/nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/MaterialZipImportProcessor.java @@ -27,7 +27,6 @@ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Objects; -import java.util.Optional; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -80,7 +79,7 @@ public class MaterialZipImportProcessor implements BasicProcessor { } catch (Exception ex) { omsLogger.error("上传图片失败:{}", ex.getMessage()); } - WmsMaterial old = materialService.getCurrent(materialNo); + WmsMaterial old = materialService.getLatest(materialNo); if (Objects.isNull(old) || StrUtil.isNotBlank(old.getImage())) { omsLogger.info("添加图纸"); // 计算新版本号