|
|
|
@ -706,11 +706,9 @@ public class QcServiceImpl implements QcService { |
|
|
|
List<SubDetailValues> subDetailValues = data.getSubDetailValues(); |
|
|
|
// 删除子明细的老数据 |
|
|
|
qcMapper.delFQCSubDetailedRecord(data); |
|
|
|
if (subDetailValues.isEmpty()) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
// 统计是否有不符合上下限得值 |
|
|
|
Integer count = 0; |
|
|
|
if (subDetailValues != null && !subDetailValues.isEmpty()) { |
|
|
|
// 统计是否有不符合上下限得值 |
|
|
|
for (int i = 0; i < subDetailValues.size(); i++) { |
|
|
|
subDetailValues.get(i).setSite(data.getSite()); |
|
|
|
subDetailValues.get(i).setBuNo(data.getBuNo()); |
|
|
|
@ -752,6 +750,8 @@ public class QcServiceImpl implements QcService { |
|
|
|
qcMapper.saveFQCSubDetailed(subList); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
syncDetailItemResultFromSubDetail("fqc", data, count); |
|
|
|
return count; |
|
|
|
} |
|
|
|
|
|
|
|
@ -1031,11 +1031,9 @@ public class QcServiceImpl implements QcService { |
|
|
|
List<SubDetailValues> subDetailValues = data.getSubDetailValues(); |
|
|
|
// 删除子明细的老数据 |
|
|
|
qcMapper.delIPQCSubDetailedRecord(data); |
|
|
|
if (subDetailValues.isEmpty()) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
// 统计是否有不符合上下限得值 |
|
|
|
Integer count = 0; |
|
|
|
if (subDetailValues != null && !subDetailValues.isEmpty()) { |
|
|
|
// 统计是否有不符合上下限得值 |
|
|
|
for (int i = 0; i < subDetailValues.size(); i++) { |
|
|
|
subDetailValues.get(i).setSite(data.getSite()); |
|
|
|
subDetailValues.get(i).setBuNo(data.getBuNo()); |
|
|
|
@ -1078,6 +1076,8 @@ public class QcServiceImpl implements QcService { |
|
|
|
qcMapper.saveIPQCSubDetailed(subList); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
syncDetailItemResultFromSubDetail("ipqc", data, count); |
|
|
|
return count; |
|
|
|
} |
|
|
|
|
|
|
|
@ -1243,10 +1243,8 @@ public class QcServiceImpl implements QcService { |
|
|
|
public Integer saveSQCSubDetailed(QcSubDetailInformationData data) { |
|
|
|
List<SubDetailValues> subDetailValues = data.getSubDetailValues(); |
|
|
|
qcMapper.delSQCSubDetailedRecord(data); |
|
|
|
if (subDetailValues.isEmpty()) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
Integer count = 0; |
|
|
|
if (subDetailValues != null && !subDetailValues.isEmpty()) { |
|
|
|
for (int i = 0; i < subDetailValues.size(); i++) { |
|
|
|
subDetailValues.get(i).setSite(data.getSite()); |
|
|
|
subDetailValues.get(i).setBuNo(data.getBuNo()); |
|
|
|
@ -1281,6 +1279,8 @@ public class QcServiceImpl implements QcService { |
|
|
|
List<SubDetailValues> subList = subDetailValues.subList(i, end); |
|
|
|
qcMapper.saveSQCSubDetailed(subList); |
|
|
|
} |
|
|
|
} |
|
|
|
syncDetailItemResultFromSubDetail("sqc", data, count); |
|
|
|
return count; |
|
|
|
} |
|
|
|
|
|
|
|
@ -1856,6 +1856,80 @@ public class QcServiceImpl implements QcService { |
|
|
|
// } |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 实测值变更后即时应用单条明细(结论/实测值落库) |
|
|
|
**/ |
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public void applyQcDetailedItem(QcFAIRecordData data) { |
|
|
|
String qcModule = data.getQcModule(); |
|
|
|
if (qcModule == null || qcModule.trim().isEmpty()) { |
|
|
|
throw new RuntimeException("qcModule is required"); |
|
|
|
} |
|
|
|
if (data.getItemNo() != null) { |
|
|
|
data.setItemNo(data.getItemNo().trim()); |
|
|
|
} |
|
|
|
QcFAIRecordData currentRecord = getRecordStatusByModule(data, qcModule); |
|
|
|
if (currentRecord != null && ("Y".equals(currentRecord.getSubmitFlag()) || "已完成".equals(currentRecord.getState()))) { |
|
|
|
throw new RuntimeException(pmsI18nHelper.text("pms.error.inspection.approved.noModify", null, "该检验单已审核完成,无法修改!")); |
|
|
|
} |
|
|
|
switch (qcModule.trim().toLowerCase()) { |
|
|
|
case "iqc": |
|
|
|
qcMapper.patchIQCDetailedItemResult(data); |
|
|
|
break; |
|
|
|
case "ipqc": |
|
|
|
qcMapper.patchIPQCDetailedItemResult(data); |
|
|
|
break; |
|
|
|
case "fqc": |
|
|
|
qcMapper.patchFQCDetailedItemResult(data); |
|
|
|
break; |
|
|
|
case "sqc": |
|
|
|
qcMapper.patchSQCDetailedItemResult(data); |
|
|
|
break; |
|
|
|
case "fqas": |
|
|
|
case "oqc": |
|
|
|
qcMapper.patchFQASDetailedItemResult(data); |
|
|
|
break; |
|
|
|
default: |
|
|
|
throw new RuntimeException("unsupported qcModule: " + qcModule); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** 子明细保存后同步项目检验结论/不合格数到明细主表 */ |
|
|
|
private void syncDetailItemResultFromSubDetail(String qcModule, QcSubDetailInformationData data, Integer count) { |
|
|
|
if (data == null || data.getItemNo() == null || data.getItemNo().trim().isEmpty()) { |
|
|
|
return; |
|
|
|
} |
|
|
|
int unqualified = count == null ? 0 : count; |
|
|
|
QcFAIRecordData record = new QcFAIRecordData(); |
|
|
|
record.setSite(data.getSite()); |
|
|
|
record.setBuNo(data.getBuNo()); |
|
|
|
record.setInspectionNo(data.getInspectionNo()); |
|
|
|
record.setItemNo(data.getItemNo().trim()); |
|
|
|
record.setUnqualifiedQuantity(BigDecimal.valueOf(unqualified)); |
|
|
|
record.setItemResult(unqualified > 0 ? "N" : "Y"); |
|
|
|
record.setQcModule(qcModule); |
|
|
|
applyQcDetailedItem(record); |
|
|
|
} |
|
|
|
|
|
|
|
private QcFAIRecordData getRecordStatusByModule(QcFAIRecordData data, String qcModule) { |
|
|
|
switch (qcModule.trim().toLowerCase()) { |
|
|
|
case "iqc": |
|
|
|
return qcMapper.getIQCRecordStatus(data); |
|
|
|
case "ipqc": |
|
|
|
return qcMapper.getIPQCRecordStatus(data); |
|
|
|
case "fqc": |
|
|
|
return qcMapper.getFQCRecordStatus(data); |
|
|
|
case "sqc": |
|
|
|
return qcMapper.getSQCRecordStatus(data); |
|
|
|
case "fqas": |
|
|
|
case "oqc": |
|
|
|
return qcMapper.getFQASRecordStatus(data); |
|
|
|
default: |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 检查是否已提交 |
|
|
|
**/ |
|
|
|
@ -1878,53 +1952,53 @@ public class QcServiceImpl implements QcService { |
|
|
|
List<SubDetailValues> subDetailValues = data.getSubDetailValues(); |
|
|
|
// 删除子明细的老数据 |
|
|
|
qcMapper.delIQCSubDetailedRecord(data); |
|
|
|
if (subDetailValues.isEmpty()) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
// 统计是否有不符合上下限得值 |
|
|
|
Integer count = 0; |
|
|
|
for (int i = 0; i < subDetailValues.size(); i++) { |
|
|
|
subDetailValues.get(i).setSite(data.getSite()); |
|
|
|
subDetailValues.get(i).setBuNo(data.getBuNo()); |
|
|
|
subDetailValues.get(i).setInspectionNo(data.getInspectionNo()); |
|
|
|
subDetailValues.get(i).setItemNo(data.getItemNo()); |
|
|
|
// 如果该项目维护了上下限且实测值类型为数值 |
|
|
|
if ("N".equals(data.getValueTypeDb()) && (data.getMaxValue() != null || data.getMinValue() != null)) { |
|
|
|
// 如果实际填入值为数值 |
|
|
|
if (isNumberString(subDetailValues.get(i).getSubDetailValue())) { |
|
|
|
BigDecimal value = new BigDecimal(subDetailValues.get(i).getSubDetailValue()); |
|
|
|
// 只维护上限 |
|
|
|
if (data.getMaxValue() != null && data.getMinValue() == null) { |
|
|
|
if (value.compareTo(data.getMaxValue()) > 0) { |
|
|
|
count ++; |
|
|
|
if (subDetailValues != null && !subDetailValues.isEmpty()) { |
|
|
|
// 统计是否有不符合上下限得值 |
|
|
|
for (int i = 0; i < subDetailValues.size(); i++) { |
|
|
|
subDetailValues.get(i).setSite(data.getSite()); |
|
|
|
subDetailValues.get(i).setBuNo(data.getBuNo()); |
|
|
|
subDetailValues.get(i).setInspectionNo(data.getInspectionNo()); |
|
|
|
subDetailValues.get(i).setItemNo(data.getItemNo()); |
|
|
|
// 如果该项目维护了上下限且实测值类型为数值 |
|
|
|
if ("N".equals(data.getValueTypeDb()) && (data.getMaxValue() != null || data.getMinValue() != null)) { |
|
|
|
// 如果实际填入值为数值 |
|
|
|
if (isNumberString(subDetailValues.get(i).getSubDetailValue())) { |
|
|
|
BigDecimal value = new BigDecimal(subDetailValues.get(i).getSubDetailValue()); |
|
|
|
// 只维护上限 |
|
|
|
if (data.getMaxValue() != null && data.getMinValue() == null) { |
|
|
|
if (value.compareTo(data.getMaxValue()) > 0) { |
|
|
|
count ++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 只维护下限 |
|
|
|
if (data.getMaxValue() == null && data.getMinValue() != null) { |
|
|
|
if (value.compareTo(data.getMinValue()) < 0) { |
|
|
|
count ++; |
|
|
|
// 只维护下限 |
|
|
|
if (data.getMaxValue() == null && data.getMinValue() != null) { |
|
|
|
if (value.compareTo(data.getMinValue()) < 0) { |
|
|
|
count ++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 同时维护上下限 |
|
|
|
if (data.getMaxValue() != null && data.getMinValue() != null) { |
|
|
|
if (value.compareTo(data.getMaxValue()) > 0 || value.compareTo(data.getMinValue()) < 0) { |
|
|
|
count ++; |
|
|
|
// 同时维护上下限 |
|
|
|
if (data.getMaxValue() != null && data.getMinValue() != null) { |
|
|
|
if (value.compareTo(data.getMaxValue()) > 0 || value.compareTo(data.getMinValue()) < 0) { |
|
|
|
count ++; |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
count ++; |
|
|
|
} |
|
|
|
} else { |
|
|
|
count ++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 分批插入 |
|
|
|
int batchSize = 150; // 假设每批200条记录 |
|
|
|
for (int i = 0; i < subDetailValues.size(); i += batchSize) { |
|
|
|
int end = Math.min(i + batchSize, subDetailValues.size()); |
|
|
|
List<SubDetailValues> subList = subDetailValues.subList(i, end); |
|
|
|
qcMapper.saveIQCSubDetailed(subList); |
|
|
|
// 分批插入 |
|
|
|
int batchSize = 150; // 假设每批200条记录 |
|
|
|
for (int i = 0; i < subDetailValues.size(); i += batchSize) { |
|
|
|
int end = Math.min(i + batchSize, subDetailValues.size()); |
|
|
|
List<SubDetailValues> subList = subDetailValues.subList(i, end); |
|
|
|
qcMapper.saveIQCSubDetailed(subList); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
syncDetailItemResultFromSubDetail("iqc", data, count); |
|
|
|
return count; |
|
|
|
} |
|
|
|
|
|
|
|
@ -5017,11 +5091,9 @@ public class QcServiceImpl implements QcService { |
|
|
|
List<SubDetailValues> subDetailValues = data.getSubDetailValues(); |
|
|
|
// 删除子明细的老数据 |
|
|
|
qcMapper.delFQASSubDetailedRecord(data); |
|
|
|
if (subDetailValues.isEmpty()) { |
|
|
|
return null; |
|
|
|
} |
|
|
|
// 统计是否有不符合上下限得值 |
|
|
|
Integer count = 0; |
|
|
|
if (subDetailValues != null && !subDetailValues.isEmpty()) { |
|
|
|
// 统计是否有不符合上下限得值 |
|
|
|
for (int i = 0; i < subDetailValues.size(); i++) { |
|
|
|
subDetailValues.get(i).setSite(data.getSite()); |
|
|
|
subDetailValues.get(i).setBuNo(data.getBuNo()); |
|
|
|
@ -5057,6 +5129,8 @@ public class QcServiceImpl implements QcService { |
|
|
|
} |
|
|
|
// 新增子明细新数据 |
|
|
|
qcMapper.saveFQASSubDetailed(subDetailValues); |
|
|
|
} |
|
|
|
syncDetailItemResultFromSubDetail("oqc", data, count); |
|
|
|
return count; |
|
|
|
} |
|
|
|
|
|
|
|
|