|
|
|
@ -106,6 +106,8 @@ import static com.spring.modules.part.task.PartRelatedTask.convertToSQLString; |
|
|
|
@Slf4j |
|
|
|
public class PartInformationServiceImpl extends ServiceImpl<PartInformationMapper, PartInformationEntity> 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<PartInformationMappe |
|
|
|
updateInformationWrapper.eq("site", data.getSite()); |
|
|
|
updateInformationWrapper.eq("part_no", data.getPartNo()); |
|
|
|
partInformationMapper.update(data, updateInformationWrapper); |
|
|
|
syncDrawingNoByPartPrefix(data); |
|
|
|
recordChangeRemark(data.getSite(), data.getPartNo(), data.getUpdateBy(), "用户编辑物料"); |
|
|
|
|
|
|
|
if (dataUrl) { |
|
|
|
@ -1237,6 +1240,7 @@ public class PartInformationServiceImpl extends ServiceImpl<PartInformationMappe |
|
|
|
updateInformationWrapper.eq("site", data.getSite()); |
|
|
|
updateInformationWrapper.eq("part_no", data.getPartNo()); |
|
|
|
partInformationMapper.update(data, updateInformationWrapper); |
|
|
|
syncDrawingNoByPartPrefix(data); |
|
|
|
recordChangeRemark(data.getSite(), data.getPartNo(), data.getUpdateBy(), "用户编辑物料(项目页面)"); |
|
|
|
// 判断是否需要修改项目物料的BU |
|
|
|
if (StringUtils.hasText(data.getBuNo())) { |
|
|
|
@ -1262,28 +1266,95 @@ public class PartInformationServiceImpl extends ServiceImpl<PartInformationMappe |
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public void updatePartDrawingNo(PartInformationVo data) { |
|
|
|
if (!StringUtils.hasText(data.getSite()) || !StringUtils.hasText(data.getPartNo())) { |
|
|
|
String site = normalizePartAndDrawingText(data.getSite()); |
|
|
|
String partNo = normalizePartAndDrawingText(data.getPartNo()); |
|
|
|
String drawingNo = normalizePartAndDrawingText(data.getDrawingNo()); |
|
|
|
if (!StringUtils.hasText(site) || !StringUtils.hasText(partNo)) { |
|
|
|
throw new RuntimeException("缺少site或物料编码,无法自动保存编码!"); |
|
|
|
} |
|
|
|
if (!StringUtils.hasText(data.getDrawingNo()) || "NA".equalsIgnoreCase(data.getDrawingNo().trim())) { |
|
|
|
if (!StringUtils.hasText(drawingNo) || "NA".equalsIgnoreCase(drawingNo)) { |
|
|
|
throw new RuntimeException("编码为空,无法自动保存!"); |
|
|
|
} |
|
|
|
PartInformationEntity partData = partInformationMapper.selectOne( |
|
|
|
new QueryWrapper<PartInformationEntity>() |
|
|
|
.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<PartInformationEntity> 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<PartInformationEntity> samePrefixPartList = partInformationMapper.selectList( |
|
|
|
new QueryWrapper<PartInformationEntity>() |
|
|
|
.select("part_no", "drawing_no") |
|
|
|
.eq("site", site) |
|
|
|
.likeRight("part_no", partNoPrefix) |
|
|
|
.ne("part_no", partNo) |
|
|
|
); |
|
|
|
if (samePrefixPartList == null || samePrefixPartList.isEmpty()) { |
|
|
|
return; |
|
|
|
} |
|
|
|
List<String> 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<PartInformationEntity> 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); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
|