From 444409ba734d4457f9109f0b71422b83fed60cd6 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 24 九月 2026 11:14:20 +0800
Subject: [PATCH] refactor(inspect): 重构设备列表查询和报告生成逻辑
---
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java | 158 +++++++++++++++++++++-------------------------------
1 files changed, 64 insertions(+), 94 deletions(-)
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
index dff3ad5..3394113 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -75,6 +75,7 @@
import java.nio.file.Paths;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
+import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@@ -274,11 +275,11 @@
// 鏌ヨ璁㈠崟Id
InsOrder order = insOrderMapper.selectFirstSubmit(dto.getId());
if (order == null) {
- return BeanUtil.isEmpty(insProducts) ? null : insProducts;
+ return BeanUtil.isEmpty(insProducts) ? Collections.emptyList() : insProducts;
}
insProducts = mergeDirectTemplateSnapshots(order, dto.getId(), dto.getLaboratory(), insProducts);
if (BeanUtil.isEmpty(insProducts)) {
- return null;
+ return Collections.emptyList();
}
getTemplateThing(order, insProducts, dto.getLaboratory());
return insProducts;
@@ -300,14 +301,6 @@
if (snapshots.isEmpty()) {
return source;
}
- InsSample sample = insSampleMapper.selectById(sampleId);
- boolean directTemplateOrder = source.stream()
- .anyMatch(product -> product.getTemplateRowIndex() != null)
- || isDirectTemplateSample(order, sample);
- if (!directTemplateOrder) {
- return source;
- }
-
Map<Integer, List<InsProduct>> productsByTemplate = source.stream()
.filter(product -> product.getTemplateId() != null)
.collect(Collectors.groupingBy(InsProduct::getTemplateId, LinkedHashMap::new, Collectors.toList()));
@@ -3220,7 +3213,6 @@
boolean showResult = Objects.equals(reportType, INSPECTION_REPORT);
List<Map<String, Object>> tables = new ArrayList<>();
Set<String> standardMethod = new LinkedHashSet<>();
- Set<String> deviceSet = new HashSet<>();
Set<String> models = new HashSet<>();
// 鏌ヨ妫�楠岄」鏁伴噺
AtomicInteger productSize = new AtomicInteger();
@@ -3238,17 +3230,6 @@
standardMethodCode = standardMethodCode + "+" + a.getSpecialStandardMethod();
}
standardMethod.add(standardMethodCode);
- }
- for (InsProduct b : a.getInsProduct()) {
- if (b.getInsProductResult() != null) {
- List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class);
- for (JSONObject jsonObject : jsonObjects) {
- if (!"".equals(jsonObject.get("v") + "")) {
- List<String> v = StrUtil.split(jsonObject.get("v") + "", "锛�");
- deviceSet.addAll(v);
- }
- }
- }
}
// 鐩寸粦妯℃澘鐨勬娴嬫姤鍛娿�佹楠屾姤鍛婇兘浣跨敤鏂扮増鍥哄畾缁撴灉琛岋紝涓嶅啀杩涘叆鏃х増妫�楠岄」琛ㄦ牸閫昏緫銆�
// 鐩寸粦妯℃澘涓殑鎵胯浇璁板綍娌℃湁鏃ф楠岄」瀛楁锛岃繘鍏ユ棫閫昏緫浼氬湪鏍煎紡鍖栨椂浜х敓绌烘寚閽堛��
@@ -3279,28 +3260,6 @@
}
max = a.getQuantity();
- // 瀛e害妫�楠岄渶瑕佽繘鍘傛楠岀殑璁惧
- // 鏌ヨ鏄惁鏈夎繘鍘傛楠�
- InsOrder order = insOrderMapper.selectOne(Wrappers.<InsOrder>lambdaQuery()
- .eq(InsOrder::getIfsInventoryId, insOrder.getIfsInventoryId())
- .ne(InsOrder::getState, -1)
- .eq(InsOrder::getOrderType, InsOrderTypeConstants.ENTER_THE_FACTORY)
- .ne(InsOrder::getId, insOrder.getId())
- .last("limit 1"));
- if (order != null) {
- List<SampleProductDto> sampleProductDtos = insSampleMapper.selectSampleProductListByOrderId(order.getId());
- for (InsProduct b : sampleProductDtos.get(0).getInsProduct()) {
- if (b.getInsProductResult() != null) {
- List<JSONObject> jsonObjects = JSON.parseArray(b.getInsProductResult().getEquipValue(), JSONObject.class);
- for (JSONObject jsonObject : jsonObjects) {
- if (!"".equals(jsonObject.get("v") + "")) {
- List<String> v = StrUtil.split(jsonObject.get("v") + "", "锛�");
- deviceSet.addAll(v);
- }
- }
- }
- }
- }
if (StringUtils.isBlank(insOrder.getSampleView())) {
insOrder.setSampleView(insOrder.getSample());
}
@@ -3456,20 +3415,13 @@
tables.forEach(table -> {
table.put("tableSize", tables.size() + 1);
});
- // 鏂拌鍗曟寜妯℃澘閫夋嫨璁惧锛涙棫璁㈠崟娌℃湁妯℃澘璁惧鍏崇郴鏃跺洖閫�鍒拌鍗曠骇璁惧璁板綍銆�
- Set<String> reportDeviceNumbers = insOrderTemplateDeviceMapper
- .selectManagementNumbersByOrderId(orderId).stream()
- .filter(StringUtils::isNotBlank)
+ // 鎶ュ憡鍙睍绀烘楠屽崟鍚勬ā鏉块�夋嫨鐨勮澶囷紝骞舵寜璁惧ID鍘婚噸銆�
+ Set<Integer> reportDeviceIds = insOrderTemplateDeviceMapper
+ .selectDeviceIdsByOrderId(orderId).stream()
+ .filter(Objects::nonNull)
.collect(Collectors.toCollection(LinkedHashSet::new));
- if (reportDeviceNumbers.isEmpty()) {
- reportDeviceNumbers.addAll(insOrderDeviceRecordMapper.selectDeviceNumber(orderId).stream()
- .map(InsOrderDeviceRecordDto::getManagementNumber)
- .filter(StringUtils::isNotBlank)
- .collect(Collectors.toList()));
- }
- reportDeviceNumbers.addAll(deviceSet);
- List<Map<String, String>> deviceList = reportDeviceNumbers.isEmpty()
- ? new ArrayList<>() : insOrderMapper.selectDeviceList(reportDeviceNumbers);
+ List<Map<String, String>> deviceList = reportDeviceIds.isEmpty()
+ ? new ArrayList<>() : insOrderMapper.selectDeviceListByIds(reportDeviceIds);
if (CollectionUtils.isNotEmpty(deviceList)) {
int count = 1;
for (Map<String, String> stringMap : deviceList) {
@@ -3570,31 +3522,18 @@
sendTime = reportInventory.getDeclareDate();
}
- // 妫�娴嬫棩鏈燂細棣栨淇濆瓨妯℃澘鍊兼椂闂�-棣栨鎻愪氦鏃堕棿
+ // 妫�娴嬫棩鏈燂細姹囨�绘楠屽崟鍚勬ā鏉垮~鍐欑殑妫�娴嬫椂闂达紝鏃ユ湡鐩稿悓鏄剧ず涓�涓紝鍚﹀垯鏄剧ず鏈�鏃╄嚦鏈�鏅氥��
LocalDateTime now = LocalDateTime.now();
- // 鎻愪氦鏃堕棿
- LocalDateTime submitTime = LocalDateTime.now();
- // 鍒ゆ柇鏄惁鏈夋彁浜ゆ椂闂�
- if (insOrder.getFirstSubmitDate() != null) {
- submitTime = insOrder.getFirstSubmitDate();
- }
-
- LocalDateTime firstInspectDate = insOrder.getFirstInspectDate();
- // 瀛楁涓婄嚎鍓嶇殑鍘嗗彶璁㈠崟娌跨敤鍘熸潵鐨勪笅鍙戞椂闂达紝閬垮厤鏀瑰彉鏃㈡湁鎶ュ憡鍙e緞銆�
- if (firstInspectDate == null) {
- firstInspectDate = insOrder.getSendTime();
- }
- if (firstInspectDate == null) {
- firstInspectDate = submitTime;
- }
-
- String insTime = firstInspectDate.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�")) + "-"
- + submitTime.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"));
- String testStartDate = firstInspectDate.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"));
- String testEndDate = submitTime.format(DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�"));
-
- String insTimeEn = monthNames[firstInspectDate.getMonthValue() - 1] + " " + firstInspectDate.format(DateTimeFormatter.ofPattern("dd, yyyy")) + "-"
- + monthNames[submitTime.getMonthValue() - 1] + " " + submitTime.format(DateTimeFormatter.ofPattern("dd, yyyy"));
+ List<InsOrderStandardTemplate> templateSnapshots = insOrderStandardTemplateService.list(
+ Wrappers.<InsOrderStandardTemplate>lambdaQuery()
+ .eq(InsOrderStandardTemplate::getInsOrderId, orderId)
+ .orderByAsc(InsOrderStandardTemplate::getSort, InsOrderStandardTemplate::getId));
+ List<LocalDate> detectionDates = templateSnapshots.stream()
+ .map(InsOrderStandardTemplate::getDetectionTime)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList());
+ String insTime = formatReportTestDate(detectionDates);
+ String insTimeEn = formatReportTestDateEn(detectionDates, monthNames);
// 妫�楠岀幆澧冿細浼樺厛姹囨�诲悇妯℃澘濉啓鐨勬俯婀垮害锛屾姤鍛婂睍绀哄叏閮ㄦā鏉跨殑鏈�灏忓�煎埌鏈�澶у�笺��
String environment = buildReportEnvironment(orderId, insOrder);
@@ -3632,10 +3571,6 @@
batchNo = defaultReportText(reportInventory.getUpdateBatchNo(), reportInventory.getLotBatchNo());
}
// 鏂拌仛鐩寸粦妯℃澘璁㈠崟锛氭姤鍛婁俊鎭彇濮旀墭淇℃伅鍜岃鍗曟ā鏉垮揩鐓э紝涓嶅啀鍙栬兘鍔涜寖鍥存爣鍑嗘柟娉曘��
- List<InsOrderStandardTemplate> templateSnapshots = insOrderStandardTemplateService.list(
- Wrappers.<InsOrderStandardTemplate>lambdaQuery()
- .eq(InsOrderStandardTemplate::getInsOrderId, orderId)
- .orderByAsc(InsOrderStandardTemplate::getSort, InsOrderStandardTemplate::getId));
boolean newJuTemplateOrder = !templateSnapshots.isEmpty() && directTemplateOrder;
if (newJuTemplateOrder) {
productName = defaultReportText(insOrder.getSampleView(), insOrder.getSample());
@@ -3738,8 +3673,6 @@
put("batch", finalBatchNo);
put("phone", defaultReportText(insOrder.getPhone(), "/"));
put("testDate", insTime);
- put("testStartDate", testStartDate);
- put("testEndDate", testEndDate);
put("entrustNo", defaultReportText(insOrder.getEntrustCode(), "/"));
put("sampling", "/");
put("standard", finalStandardMethodText);
@@ -3954,16 +3887,26 @@
if (CollectionUtils.isEmpty(deviceList)) {
return "/";
}
- Set<String> lines = new LinkedHashSet<>();
- int sequence = 1;
+ Set<String> equipmentItems = new LinkedHashSet<>();
for (Map<String, String> device : deviceList) {
String name = getMapText(device, "deviceName", "device_name");
String managementNumber = getMapText(device, "managementNumber", "management_number");
- String line = sequence++ + ". " + defaultReportText(name, "/");
- if (StringUtils.isNotBlank(managementNumber)) {
- line += "锛�" + managementNumber;
+ if (StringUtils.isBlank(name) || "/".equals(name.trim())) {
+ continue;
}
- lines.add(line);
+ String number = StringUtils.isBlank(managementNumber) || "/".equals(managementNumber.trim())
+ ? "鍑哄巶缂栧彿" : managementNumber.trim();
+ String item = name.trim() + "锛�" + number;
+ equipmentItems.add(item);
+ }
+ if (equipmentItems.isEmpty()) {
+ return "/";
+ }
+ List<String> items = new ArrayList<>(equipmentItems);
+ List<String> lines = new ArrayList<>();
+ for (int i = 0; i < items.size(); i++) {
+ String punctuation = i == items.size() - 1 ? "銆�" : "锛�";
+ lines.add((i + 1) + ". " + items.get(i) + punctuation);
}
return String.join("\n", lines);
}
@@ -3984,7 +3927,7 @@
.collect(Collectors.toList());
String temperature = formatConditionRange(temperatures, order.getTemperature(), "鈩�");
- String humidity = formatConditionRange(humidities, order.getHumidity(), "%");
+ String humidity = formatConditionRange(humidities, order.getHumidity(), "%RH");
return Stream.of(temperature, humidity)
.filter(StringUtils::isNotBlank)
.collect(Collectors.joining(" "));
@@ -4057,6 +4000,33 @@
return StringUtils.isNotBlank(fallback) ? fallback : "/";
}
+ private static String formatReportTestDate(List<LocalDate> detectionDates) {
+ if (CollectionUtils.isEmpty(detectionDates)) {
+ return "/";
+ }
+ LocalDate startDate = Collections.min(detectionDates);
+ LocalDate endDate = Collections.max(detectionDates);
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+ if (startDate.equals(endDate)) {
+ return startDate.format(formatter);
+ }
+ return startDate.format(formatter) + "鑷�" + endDate.format(formatter);
+ }
+
+ private static String formatReportTestDateEn(List<LocalDate> detectionDates, String[] monthNames) {
+ if (CollectionUtils.isEmpty(detectionDates)) {
+ return "/";
+ }
+ LocalDate startDate = Collections.min(detectionDates);
+ LocalDate endDate = Collections.max(detectionDates);
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd, yyyy");
+ String startText = monthNames[startDate.getMonthValue() - 1] + " " + startDate.format(formatter);
+ if (startDate.equals(endDate)) {
+ return startText;
+ }
+ return startText + "-" + monthNames[endDate.getMonthValue() - 1] + " " + endDate.format(formatter);
+ }
+
/**
* 璁$畻琛ㄦ牸鍒楀搴�
*
--
Gitblit v1.9.3