From a168a3d3674d45826ba5855b0ae7f01755d1204c Mon Sep 17 00:00:00 2001 From: fengyuan_yang <1976974459@qq.com> Date: Thu, 27 Aug 2026 13:49:45 +0800 Subject: [PATCH] =?UTF-8?q?2026-08-27=20=E7=89=A9=E6=96=99=E2=80=9C?= =?UTF-8?q?=E7=BC=96=E7=A0=81=E2=80=9D=E8=B0=83=E6=95=B4=EF=BC=9A=20?= =?UTF-8?q?=E9=A6=96=E5=AD=97=E6=AF=8D=E4=B8=8D=E6=98=BE=E7=A4=BAF?= =?UTF-8?q?=E5=92=8CR=EF=BC=9B=20=E4=BF=9D=E5=AD=98=E2=80=9C=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E2=80=9D=E6=97=B6=EF=BC=8C=E5=90=8C=E6=AD=A5=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=90=8C=E5=AE=B6=E6=97=8F=E2=80=9C=E6=9C=AA=E7=BB=B4?= =?UTF-8?q?=E6=8A=A4=E7=BC=96=E7=A0=81=E2=80=9D=E7=9A=84=E7=89=A9=E6=96=99?= =?UTF-8?q?=E7=9A=84=E2=80=9C=E7=BC=96=E7=A0=81=E2=80=9D=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PartInformationServiceImpl.java | 87 +++++++++++++++++-- 1 file changed, 79 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java b/src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java index 869b0ae7..76128e91 100644 --- a/src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java +++ b/src/main/java/com/spring/modules/part/service/impl/PartInformationServiceImpl.java @@ -106,6 +106,8 @@ import static com.spring.modules.part.task.PartRelatedTask.convertToSQLString; @Slf4j public class PartInformationServiceImpl extends ServiceImpl implements PartInformationService { + private static final int DRAWING_NO_SYNC_PART_PREFIX_LENGTH = 8; + @Autowired private ProcedureDao procedureDao; @@ -912,6 +914,7 @@ public class PartInformationServiceImpl extends ServiceImpl() - .eq("site", data.getSite()) - .eq("part_no", data.getPartNo()) + .eq("site", site) + .eq("part_no", partNo) ); if (partData == null) { throw new RuntimeException("未找到对应物料,无法自动保存编码!"); } PartInformationEntity updateData = new PartInformationEntity(); - updateData.setDrawingNo(data.getDrawingNo().trim()); + updateData.setDrawingNo(drawingNo); updateData.setUpdateBy(data.getUpdateBy()); UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("site", data.getSite()); - updateWrapper.eq("part_no", data.getPartNo()); + updateWrapper.eq("site", site); + updateWrapper.eq("part_no", partNo); partInformationMapper.update(updateData, updateWrapper); - recordChangeRemark(data.getSite(), data.getPartNo(), data.getUpdateBy(), "占有编码自动保存"); + data.setSite(site); + data.setPartNo(partNo); + data.setDrawingNo(drawingNo); + syncDrawingNoByPartPrefix(data); + recordChangeRemark(site, partNo, data.getUpdateBy(), "占有编码自动保存"); + } + + private void syncDrawingNoByPartPrefix(PartInformationVo data) { + if (data == null) { + return; + } + String site = normalizePartAndDrawingText(data.getSite()); + String partNo = normalizePartAndDrawingText(data.getPartNo()); + String drawingNo = normalizePartAndDrawingText(data.getDrawingNo()); + if (!StringUtils.hasText(site) || !StringUtils.hasText(partNo) || isUnmaintainedDrawingNo(drawingNo)) { + return; + } + if (partNo.length() < DRAWING_NO_SYNC_PART_PREFIX_LENGTH) { + return; + } + String partNoPrefix = partNo.substring(0, DRAWING_NO_SYNC_PART_PREFIX_LENGTH); + List samePrefixPartList = partInformationMapper.selectList( + new QueryWrapper() + .select("part_no", "drawing_no") + .eq("site", site) + .likeRight("part_no", partNoPrefix) + .ne("part_no", partNo) + ); + if (samePrefixPartList == null || samePrefixPartList.isEmpty()) { + return; + } + List pendingSyncPartNos = samePrefixPartList.stream() + .filter(Objects::nonNull) + .filter(item -> isUnmaintainedDrawingNo(item.getDrawingNo())) + .map(PartInformationEntity::getPartNo) + .map(this::normalizePartAndDrawingText) + .filter(StringUtils::hasText) + .distinct() + .collect(Collectors.toList()); + if (pendingSyncPartNos.isEmpty()) { + return; + } + PartInformationEntity syncData = new PartInformationEntity(); + syncData.setDrawingNo(drawingNo); + syncData.setUpdateBy(data.getUpdateBy()); + UpdateWrapper syncWrapper = new UpdateWrapper<>(); + syncWrapper.eq("site", site); + syncWrapper.in("part_no", pendingSyncPartNos); + int syncRows = partInformationMapper.update(syncData, syncWrapper); + if (syncRows > 0) { + log.info("同前8位编码联动成功,site={}, sourcePartNo={}, prefix={}, drawingNo={}, syncRows={}", + site, partNo, partNoPrefix, drawingNo, syncRows); + } + } + + private String normalizePartAndDrawingText(String text) { + if (text == null) { + return ""; + } + return text.trim(); + } + + private boolean isUnmaintainedDrawingNo(String drawingNo) { + String normalizedDrawingNo = normalizePartAndDrawingText(drawingNo); + return !StringUtils.hasText(normalizedDrawingNo) || "NA".equalsIgnoreCase(normalizedDrawingNo); } /**