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); } /**