Browse Source

同步NPI校验

master
han\hanst 6 days ago
parent
commit
c35509093c
  1. 199
      src/main/java/com/xujie/sys/modules/sampletracking/service/impl/SampleTrackingServiceImpl.java

199
src/main/java/com/xujie/sys/modules/sampletracking/service/impl/SampleTrackingServiceImpl.java

@ -18,7 +18,9 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Objects; import java.util.Objects;
@Slf4j @Slf4j
@ -202,17 +204,10 @@ public class SampleTrackingServiceImpl implements SampleTrackingService {
if (trackingProject == null) { if (trackingProject == null) {
throw new RuntimeException("项目追踪记录不存在: " + trackingProjectId); throw new RuntimeException("项目追踪记录不存在: " + trackingProjectId);
} }
if (isBlank(trackingProject.getSite())) {
throw new RuntimeException("项目追踪记录缺少工厂信息,无法同步");
}
if (isBlank(trackingProject.getProjectNo())) {
throw new RuntimeException("项目追踪记录缺少项目编码,无法同步");
}
if (isBlank(trackingProject.getProjectName()) && !isBlank(trackingProject.getProjectDesc())) {
trackingProject.setProjectName(trackingProject.getProjectDesc().trim());
}
if (isBlank(trackingProject.getProjectDesc()) && !isBlank(trackingProject.getProjectName())) {
trackingProject.setProjectDesc(trackingProject.getProjectName().trim());
normalizeSyncProjectDefaults(trackingProject);
List<String> missingFields = collectSyncProjectMissingFields(trackingProject);
if (!missingFields.isEmpty()) {
throw new RuntimeException("项目追踪记录缺少以下必填项,无法同步: " + String.join("、", missingFields));
} }
Project existedNpiProject = projectMapper.selectById(trackingProjectId); Project existedNpiProject = projectMapper.selectById(trackingProjectId);
Integer npiProjectId = existedNpiProject == null ? null : existedNpiProject.getProjectId(); Integer npiProjectId = existedNpiProject == null ? null : existedNpiProject.getProjectId();
@ -240,20 +235,21 @@ public class SampleTrackingServiceImpl implements SampleTrackingService {
if (trackingPart == null) { if (trackingPart == null) {
throw new RuntimeException("项目物料追踪记录不存在: " + trackingProjectPartId); throw new RuntimeException("项目物料追踪记录不存在: " + trackingProjectPartId);
} }
if (trackingPart.getProjectId() == null) {
throw new RuntimeException("项目物料追踪记录缺少项目ID,无法同步");
}
if (isBlank(trackingPart.getSite())) {
throw new RuntimeException("项目物料追踪记录缺少工厂信息,无法同步");
}
if (isBlank(trackingPart.getTestPartNo())) {
throw new RuntimeException("项目物料追踪记录缺少项目料号,无法同步");
normalizeSyncPartDefaults(trackingPart);
List<String> missingPartFields = collectSyncPartMissingFields(trackingPart);
if (!missingPartFields.isEmpty()) {
throw new RuntimeException("项目物料追踪记录缺少以下必填项,无法同步: " + String.join("、", missingPartFields));
} }
Integer npiProjectId = syncProjectInfoInternal(trackingPart.getProjectId(), operator); Integer npiProjectId = syncProjectInfoInternal(trackingPart.getProjectId(), operator);
ProjectPartTrackingData latestPart = sampleTrackingMapper.selectProjectPartTrackingById(trackingProjectPartId); ProjectPartTrackingData latestPart = sampleTrackingMapper.selectProjectPartTrackingById(trackingProjectPartId);
if (latestPart == null) { if (latestPart == null) {
throw new RuntimeException("项目物料追踪记录不存在: " + trackingProjectPartId); throw new RuntimeException("项目物料追踪记录不存在: " + trackingProjectPartId);
} }
normalizeSyncPartDefaults(latestPart);
List<String> latestPartMissingFields = collectSyncPartMissingFields(latestPart);
if (!latestPartMissingFields.isEmpty()) {
throw new RuntimeException("项目物料追踪记录缺少以下必填项,无法同步: " + String.join("、", latestPartMissingFields));
}
latestPart.setProjectId(npiProjectId); latestPart.setProjectId(npiProjectId);
ProjectPart existedNpiPart = projectPartMapper.selectById(trackingProjectPartId); ProjectPart existedNpiPart = projectPartMapper.selectById(trackingProjectPartId);
Integer npiProjectPartId = existedNpiPart == null ? null : existedNpiPart.getId(); Integer npiProjectPartId = existedNpiPart == null ? null : existedNpiPart.getId();
@ -330,6 +326,171 @@ public class SampleTrackingServiceImpl implements SampleTrackingService {
return value == null || value.trim().isEmpty(); return value == null || value.trim().isEmpty();
} }
private void normalizeSyncProjectDefaults(ProjectInfoTrackingData data) {
if (data == null) {
return;
}
if (isBlank(data.getProjectName()) && !isBlank(data.getProjectDesc())) {
data.setProjectName(data.getProjectDesc().trim());
}
if (isBlank(data.getProjectDesc()) && !isBlank(data.getProjectName())) {
data.setProjectDesc(data.getProjectName().trim());
}
if (isBlank(data.getCustomerNo())) {
data.setCustomerNo("C0000");
}
if (isBlank(data.getFinalCustomerId())) {
data.setFinalCustomerId(data.getCustomerNo());
}
}
private void normalizeSyncPartDefaults(ProjectPartTrackingData data) {
if (data == null) {
return;
}
if (isBlank(data.getCustomerNo())) {
data.setCustomerNo("C0000");
}
}
private List<String> collectSyncProjectMissingFields(ProjectInfoTrackingData data) {
List<String> missingFields = new ArrayList<>();
if (data == null) {
missingFields.add("项目数据");
return missingFields;
}
if (isBlank(data.getSite())) {
missingFields.add("工厂");
}
if (isBlank(data.getBuNo())) {
missingFields.add("BU");
}
if (isBlank(data.getProjectNo())) {
missingFields.add("项目编码");
}
if (isBlank(data.getProjectName()) && isBlank(data.getProjectDesc())) {
missingFields.add("项目名称");
}
if (isBlank(data.getcProjectRegion())) {
missingFields.add("区域");
}
if (data.getProjectCreationDate() == null) {
missingFields.add("立项日期");
}
if (data.getNeedDate() == null) {
missingFields.add("预计完成日期");
}
if (isBlank(data.getProjectCategory())) {
missingFields.add("项目分类");
}
if (isBlank(data.getPriority())) {
missingFields.add("优先级");
}
if (isBlank(data.getProjectManager())) {
missingFields.add("PM/Sales");
}
if (isBlank(data.getProjectOwner())) {
missingFields.add("PjM");
}
if (isBlank(data.getEngineer())) {
missingFields.add("Engineer");
}
if (isBlank(data.getcQualityEngineer6())) {
missingFields.add("IQC");
}
if (isBlank(data.getcQualityEngineer1())) {
missingFields.add("IPQC-Lam/Pri/Etch/Slit");
}
if (isBlank(data.getcQualityEngineer2())) {
missingFields.add("IPQC-Converting");
}
if (isBlank(data.getcManufactureEngineer())) {
missingFields.add("MFG");
}
if (isBlank(data.getcQualityEngineer4())) {
missingFields.add("SQE");
}
if (isBlank(data.getDocEngineer())) {
missingFields.add("文档工程师");
}
if (isBlank(data.getcQualityEngineer3())) {
missingFields.add("FQC1");
}
if (isBlank(data.getcQualityEngineer5())) {
missingFields.add("FQC2");
}
return missingFields;
}
private List<String> collectSyncPartMissingFields(ProjectPartTrackingData data) {
List<String> missingFields = new ArrayList<>();
if (data == null) {
missingFields.add("项目物料数据");
return missingFields;
}
if (data.getProjectId() == null) {
missingFields.add("项目ID");
}
if (isBlank(data.getSite())) {
missingFields.add("工厂");
}
if (isBlank(data.getTestPartNo())) {
missingFields.add("项目料号");
}
if (isBlank(data.getPartDesc())) {
missingFields.add("料号描述");
}
if (isBlank(data.getPartType())) {
missingFields.add("料号状态");
}
if (data.getBuildDate() == null) {
missingFields.add("立项日期");
}
if (data.getNeedDate() == null) {
missingFields.add("预计完成日期");
}
if (isBlank(data.getProjectCategory())) {
missingFields.add("项目分类");
}
if (isBlank(data.getPriority())) {
missingFields.add("优先级");
}
if (isBlank(data.getProjectManager())) {
missingFields.add("PM/Sales");
}
if (isBlank(data.getProjectOwner())) {
missingFields.add("PjM");
}
if (isBlank(data.getEngineer())) {
missingFields.add("Engineer");
}
if (isBlank(data.getcQualityEngineer6())) {
missingFields.add("IQC");
}
if (isBlank(data.getcQualityEngineer1())) {
missingFields.add("IPQC-Lam/Pri/Etch/Slit");
}
if (isBlank(data.getcQualityEngineer2())) {
missingFields.add("IPQC-Converting");
}
if (isBlank(data.getcManufactureEngineer())) {
missingFields.add("MFG");
}
if (isBlank(data.getcQualityEngineer4())) {
missingFields.add("SQE");
}
if (isBlank(data.getDocEngineer())) {
missingFields.add("文档工程师");
}
if (isBlank(data.getcQualityEngineer3())) {
missingFields.add("FQC1");
}
if (isBlank(data.getcQualityEngineer5())) {
missingFields.add("FQC2");
}
return missingFields;
}
private Project buildProjectForInsert(ProjectInfoTrackingData trackingProject, String operator) { private Project buildProjectForInsert(ProjectInfoTrackingData trackingProject, String operator) {
Project project = new Project(); Project project = new Project();
BeanUtils.copyProperties(trackingProject, project); BeanUtils.copyProperties(trackingProject, project);

Loading…
Cancel
Save