|
|
|
@ -27,6 +27,7 @@ import java.io.InputStream; |
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.text.DecimalFormat; |
|
|
|
import java.util.*; |
|
|
|
import java.util.regex.Pattern; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
/** |
|
|
|
@ -1853,7 +1854,7 @@ public class QcServiceImpl implements QcService { |
|
|
|
List<SubDetailValues> subDetailValues = data.getSubDetailValues(); |
|
|
|
// 删除子明细的老数据 |
|
|
|
qcMapper.delFAISubDetailedRecord(data); |
|
|
|
if (subDetailValues.size() <= 0){ |
|
|
|
if (subDetailValues.isEmpty()){ |
|
|
|
return null; |
|
|
|
} |
|
|
|
// 统计是否有不符合上下限得值 |
|
|
|
@ -1864,25 +1865,30 @@ public class QcServiceImpl implements QcService { |
|
|
|
subDetailValues.get(i).setItemNo(data.getItemNo()); |
|
|
|
// 如果该项目维护了上下限且实测值类型为数值 |
|
|
|
if ("N".equals(data.getValueTypeDb())) { |
|
|
|
// 实测值 |
|
|
|
BigDecimal value = new BigDecimal(subDetailValues.get(i).getSubDetailValue()); |
|
|
|
// 只维护上限 |
|
|
|
if (data.getMaxValue() != null && data.getMinValue() == null) { |
|
|
|
if (value.compareTo(data.getMaxValue()) > 0) { |
|
|
|
count ++; |
|
|
|
// 如果实际填入值为数值 |
|
|
|
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 ++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -1891,6 +1897,17 @@ public class QcServiceImpl implements QcService { |
|
|
|
return count; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 正则表达式判断是否是数字字符串(可判断正数,负数和小数) |
|
|
|
* @param str |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
public boolean isNumberString(String str) { |
|
|
|
Pattern pattern = Pattern.compile("-?[0-9]+(\\.[0-9]+)?"); |
|
|
|
return pattern.matcher(str).matches(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* @description: 查询FAI的子明细 |
|
|
|
* @author: fengyuan_yang |
|
|
|
@ -2254,21 +2271,6 @@ public class QcServiceImpl implements QcService { |
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer saveFQCSubDetailed(QcSubDetailInformationData data) { |
|
|
|
// List<SubDetailValues> subDetailValues = data.getSubDetailValues(); |
|
|
|
// // 删除子明细的老数据 |
|
|
|
// qcMapper.delFQCSubDetailedRecord(data); |
|
|
|
// if (subDetailValues.size() <= 0){ |
|
|
|
// return; |
|
|
|
// } |
|
|
|
// for (int i = 0; i < subDetailValues.size(); i++) { |
|
|
|
// subDetailValues.get(i).setSite(data.getSite()); |
|
|
|
// subDetailValues.get(i).setInspectionNo(data.getInspectionNo()); |
|
|
|
// subDetailValues.get(i).setItemNo(data.getItemNo()); |
|
|
|
// } |
|
|
|
// // 新增子明细新数据 |
|
|
|
// qcMapper.saveFQCSubDetailed(subDetailValues); |
|
|
|
|
|
|
|
|
|
|
|
List<SubDetailValues> subDetailValues = data.getSubDetailValues(); |
|
|
|
// 删除子明细的老数据 |
|
|
|
qcMapper.delFQCSubDetailedRecord(data); |
|
|
|
@ -2283,25 +2285,29 @@ public class QcServiceImpl implements QcService { |
|
|
|
subDetailValues.get(i).setItemNo(data.getItemNo()); |
|
|
|
// 如果该项目维护了上下限且实测值类型为数值 |
|
|
|
if ("N".equals(data.getValueTypeDb())) { |
|
|
|
// 实测值 |
|
|
|
BigDecimal value = new BigDecimal(subDetailValues.get(i).getSubDetailValue()); |
|
|
|
// 只维护上限 |
|
|
|
if (data.getMaxValue() != null && data.getMinValue() == null) { |
|
|
|
if (value.compareTo(data.getMaxValue()) > 0) { |
|
|
|
count ++; |
|
|
|
// 如果实际填入值为数值 |
|
|
|
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 ++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -2723,21 +2729,6 @@ public class QcServiceImpl implements QcService { |
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer saveIPQCSubDetailed(QcSubDetailInformationData data) { |
|
|
|
// List<SubDetailValues> subDetailValues = data.getSubDetailValues(); |
|
|
|
// for (int i = 0; i < subDetailValues.size(); i++) { |
|
|
|
// subDetailValues.get(i).setSite(data.getSite()); |
|
|
|
// subDetailValues.get(i).setInspectionNo(data.getInspectionNo()); |
|
|
|
// subDetailValues.get(i).setItemNo(data.getItemNo()); |
|
|
|
// } |
|
|
|
// // 删除子明细的老数据 |
|
|
|
// qcMapper.delIPQCSubDetailedRecord(data); |
|
|
|
// if (subDetailValues.size() <= 0){ |
|
|
|
// return; |
|
|
|
// } |
|
|
|
// // 新增子明细新数据 |
|
|
|
// qcMapper.saveIPQCSubDetailed(subDetailValues); |
|
|
|
|
|
|
|
|
|
|
|
List<SubDetailValues> subDetailValues = data.getSubDetailValues(); |
|
|
|
// 删除子明细的老数据 |
|
|
|
qcMapper.delIPQCSubDetailedRecord(data); |
|
|
|
@ -2752,26 +2743,31 @@ public class QcServiceImpl implements QcService { |
|
|
|
subDetailValues.get(i).setItemNo(data.getItemNo()); |
|
|
|
// 如果该项目维护了上下限且实测值类型为数值 |
|
|
|
if ("N".equals(data.getValueTypeDb())) { |
|
|
|
// 实测值 |
|
|
|
BigDecimal value = new BigDecimal(subDetailValues.get(i).getSubDetailValue()); |
|
|
|
// 只维护上限 |
|
|
|
if (data.getMaxValue() != null && data.getMinValue() == null) { |
|
|
|
if (value.compareTo(data.getMaxValue()) > 0) { |
|
|
|
count ++; |
|
|
|
// 如果实际填入值为数值 |
|
|
|
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 ++; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
// 新增子明细新数据 |
|
|
|
@ -3142,21 +3138,6 @@ public class QcServiceImpl implements QcService { |
|
|
|
@Override |
|
|
|
@Transactional |
|
|
|
public Integer saveIQCSubDetailed(QcSubDetailInformationData data) { |
|
|
|
// List<SubDetailValues> subDetailValues = data.getSubDetailValues(); |
|
|
|
// // 删除子明细的老数据 |
|
|
|
// qcMapper.delIQCSubDetailedRecord(data); |
|
|
|
// if (subDetailValues.size() <= 0){ |
|
|
|
// return; |
|
|
|
// } |
|
|
|
// for (int i = 0; i < subDetailValues.size(); i++) { |
|
|
|
// subDetailValues.get(i).setSite(data.getSite()); |
|
|
|
// subDetailValues.get(i).setInspectionNo(data.getInspectionNo()); |
|
|
|
// subDetailValues.get(i).setItemNo(data.getItemNo()); |
|
|
|
// } |
|
|
|
// // 新增子明细新数据 |
|
|
|
// qcMapper.saveIQCSubDetailed(subDetailValues); |
|
|
|
|
|
|
|
|
|
|
|
List<SubDetailValues> subDetailValues = data.getSubDetailValues(); |
|
|
|
// 删除子明细的老数据 |
|
|
|
qcMapper.delIQCSubDetailedRecord(data); |
|
|
|
@ -3171,25 +3152,29 @@ public class QcServiceImpl implements QcService { |
|
|
|
subDetailValues.get(i).setItemNo(data.getItemNo()); |
|
|
|
// 如果该项目维护了上下限且实测值类型为数值 |
|
|
|
if ("N".equals(data.getValueTypeDb())) { |
|
|
|
// 实测值 |
|
|
|
BigDecimal value = new BigDecimal(subDetailValues.get(i).getSubDetailValue()); |
|
|
|
// 只维护上限 |
|
|
|
if (data.getMaxValue() != null && data.getMinValue() == null) { |
|
|
|
if (value.compareTo(data.getMaxValue()) > 0) { |
|
|
|
count ++; |
|
|
|
// 如果实际填入值为数值 |
|
|
|
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 ++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -3490,18 +3475,21 @@ public class QcServiceImpl implements QcService { |
|
|
|
if (itemDataList.isEmpty()) { // 明细中不存在该项目 |
|
|
|
errInfo2.add(j + 1); |
|
|
|
} else { |
|
|
|
// 第二列 |
|
|
|
if (row.getCell(1) == null) { |
|
|
|
task.setSamplingLocation(null); |
|
|
|
} else { |
|
|
|
row.getCell(1).setCellType(CellType.STRING); |
|
|
|
task.setSamplingLocation(row.getCell(1).getStringCellValue()); |
|
|
|
} |
|
|
|
// 第三列 |
|
|
|
if (row.getCell(2) == null) { |
|
|
|
task.setSamplingLocationB(null); |
|
|
|
} else { |
|
|
|
row.getCell(2).setCellType(CellType.STRING); |
|
|
|
task.setSamplingLocationB(row.getCell(2).getStringCellValue()); |
|
|
|
} |
|
|
|
// 第四列 |
|
|
|
if (row.getCell(3) == null) { |
|
|
|
task.setSubDetailValue(null); |
|
|
|
} else { |
|
|
|
@ -3513,37 +3501,33 @@ public class QcServiceImpl implements QcService { |
|
|
|
} |
|
|
|
// 如果该项目的实测值类型为数值 |
|
|
|
if ("N".equals(itemDataList.get(0).getValueTypeDb())) { |
|
|
|
// 实测值 |
|
|
|
BigDecimal value = new BigDecimal(task.getSubDetailValue()); |
|
|
|
// 只维护上限 |
|
|
|
if (itemDataList.get(0).getMaxValue() != null && itemDataList.get(0).getMinValue() == null) { |
|
|
|
if (value.compareTo(itemDataList.get(0).getMaxValue()) > 0) { |
|
|
|
// map中是否已存在该key |
|
|
|
if (countMap.containsKey(task.getItemNo())) { // 有 |
|
|
|
// 如果实际填入值为数值 |
|
|
|
if (isNumberString(task.getSubDetailValue())) { |
|
|
|
BigDecimal value = new BigDecimal(task.getSubDetailValue()); |
|
|
|
// 只维护上限 |
|
|
|
if (itemDataList.get(0).getMaxValue() != null && itemDataList.get(0).getMinValue() == null) { |
|
|
|
if (value.compareTo(itemDataList.get(0).getMaxValue()) > 0) { |
|
|
|
Integer i = countMap.get(task.getItemNo()); |
|
|
|
countMap.put(task.getItemNo(), ++i); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 只维护下限 |
|
|
|
if (itemDataList.get(0).getMaxValue() == null && itemDataList.get(0).getMinValue() != null) { |
|
|
|
if (value.compareTo(itemDataList.get(0).getMinValue()) < 0) { |
|
|
|
// map中是否已存在该key |
|
|
|
if (countMap.containsKey(task.getItemNo())) { // 有 |
|
|
|
// 只维护下限 |
|
|
|
if (itemDataList.get(0).getMaxValue() == null && itemDataList.get(0).getMinValue() != null) { |
|
|
|
if (value.compareTo(itemDataList.get(0).getMinValue()) < 0) { |
|
|
|
Integer i = countMap.get(task.getItemNo()); |
|
|
|
countMap.put(task.getItemNo(), ++i); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 同时维护上下限 |
|
|
|
if (itemDataList.get(0).getMaxValue() != null && itemDataList.get(0).getMinValue() != null) { |
|
|
|
if (value.compareTo(itemDataList.get(0).getMaxValue()) > 0 || value.compareTo(itemDataList.get(0).getMinValue()) < 0) { |
|
|
|
// map中是否已存在该key |
|
|
|
if (countMap.containsKey(task.getItemNo())) { // 有 |
|
|
|
// 同时维护上下限 |
|
|
|
if (itemDataList.get(0).getMaxValue() != null && itemDataList.get(0).getMinValue() != null) { |
|
|
|
if (value.compareTo(itemDataList.get(0).getMaxValue()) > 0 || value.compareTo(itemDataList.get(0).getMinValue()) < 0) { |
|
|
|
Integer i = countMap.get(task.getItemNo()); |
|
|
|
countMap.put(task.getItemNo(), ++i); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { // 实际填入值不是数值,判断为不合格 |
|
|
|
Integer i = countMap.get(task.getItemNo()); |
|
|
|
countMap.put(task.getItemNo(), ++i); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@ -3552,7 +3536,7 @@ public class QcServiceImpl implements QcService { |
|
|
|
} |
|
|
|
} |
|
|
|
// 查看错误信息 |
|
|
|
if (errInfo1.size() > 0 || errInfo2.size() > 0) { |
|
|
|
if (!errInfo1.isEmpty() || !errInfo2.isEmpty()) { |
|
|
|
throw new RuntimeException("请检查:导入模板中的第 " + errInfo1.toString() + " 行项目编码为空;请检查:导入模板中的第 " + errInfo2.toString() + " 行项目编码不在本次检验单中"); |
|
|
|
} |
|
|
|
// 新增子明细 |
|
|
|
|