From 56fe897d3e06bfa1e1105980d0044e6e67b2a484 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期五, 23 十月 2026 17:44:20 +0800
Subject: [PATCH] feat(report): 实现浏览器内报告DOCX编辑功能
---
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java | 148 ++++++++++++++++++++++++++++++++----------------
1 files changed, 98 insertions(+), 50 deletions(-)
diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
index f4b1b84..c8e2581 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -55,6 +55,7 @@
import com.ruoyi.inspect.vo.TemplateConditionVo;
import com.ruoyi.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.context.ApplicationEventPublisher;
@@ -80,6 +81,7 @@
* @description 閽堝琛ㄣ�恑ns_order(妫�楠屼笅鍗�)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
* @createDate 2024-03-12 16:17:55
*/
+@Slf4j
@Service
@AllArgsConstructor
public class InsOrderServiceImpl extends ServiceImpl<InsOrderMapper, InsOrder>
@@ -844,6 +846,7 @@
snapshot.setTemplateId(template.getId());
snapshot.setName(template.getName());
snapshot.setNumber(template.getNumber());
+ snapshot.setStandardRequirement(template.getStandardRequirement());
snapshot.setRemark(template.getRemark());
snapshot.setThing(template.getThing());
snapshot.setSort(selection.getSort());
@@ -1067,7 +1070,11 @@
@Transactional(rollbackFor = Exception.class)
public Map<String, Object> getInsOrderAndSample(Integer id, String laboratory) {
Map<String, Object> map = new HashMap<>();
- initializeTemplateDevicesOnFirstOpen(id);
+ try {
+ initializeTemplateDevicesOnFirstOpen(id, laboratory);
+ } catch (RuntimeException e) {
+ log.warn("妫�楠屼换鍔¢粯璁よ澶囧悓姝ュけ璐ワ紝orderId={}", id, e);
+ }
// InsOrder insOrder = insOrderMapper.selectById(id);
IfsOrderVO ifsOrderVO = insOrderMapper.selectOrderInfoById(id);
Map<Integer, List<Integer>> templateDeviceIds = insOrderTemplateDeviceMapper.selectList(
@@ -1085,6 +1092,7 @@
.select(InsOrderStandardTemplate::getTemplateId,
InsOrderStandardTemplate::getTemperature,
InsOrderStandardTemplate::getDetectionTime,
+ InsOrderStandardTemplate::getDetectionEndTime,
InsOrderStandardTemplate::getDetectionPlace,
InsOrderStandardTemplate::getInsResult)
.orderByAsc(InsOrderStandardTemplate::getSort,
@@ -1094,6 +1102,8 @@
condition.setTemplateId(snapshot.getTemplateId());
condition.setTemperature(snapshot.getTemperature());
condition.setDetectionTime(snapshot.getDetectionTime());
+ condition.setDetectionEndTime(snapshot.getDetectionEndTime() == null
+ ? snapshot.getDetectionTime() : snapshot.getDetectionEndTime());
condition.setDetectionPlace(snapshot.getDetectionPlace());
condition.setInsResult(snapshot.getInsResult());
condition.setDeviceIds(templateDeviceIds.getOrDefault(
@@ -1110,18 +1120,34 @@
return map;
}
- /** 棣栨鎵撳紑妫�楠屼换鍔℃椂锛屽皢浠嶄负绌虹殑妯℃澘璁惧浠庡搴旀爣鍑嗚ˉ鍏ヨ鍗曘�� */
- private void initializeTemplateDevicesOnFirstOpen(Integer orderId) {
+ /**
+ * 鎵撳紑妫�楠屼换鍔℃椂锛屾妸灏氭湭琚汉宸ユ敼鍔ㄨ繃鐨勬ā鏉胯澶囧悓姝ヤ负鏍囧噯搴撳綋鍓嶇粦瀹氱殑璁惧锛�
+ * 妫�楠屽憳鎵嬪姩澧炲垹杩囩殑妯℃澘浠ヤ汉宸ヤ负鍑嗭紝涓嶅啀鑷姩濉厖銆�
+ */
+ private void initializeTemplateDevicesOnFirstOpen(Integer orderId, String laboratory) {
InsOrder order = insOrderMapper.selectById(orderId);
- if (order == null || !DIRECT_TEMPLATE_LABORATORY.equals(order.getLaboratory())
- || !Objects.equals(order.getTypeSource(), -1)
+ if (order == null || !Objects.equals(order.getTypeSource(), -1)
|| !Objects.equals(order.getState(), 1)
|| "QUALITY_MONITOR".equals(order.getTaskSource())) {
return;
}
+ if (StringUtils.isNotBlank(laboratory)) {
+ InsOrderState orderState = insOrderStateService.getOne(Wrappers.<InsOrderState>lambdaQuery()
+ .eq(InsOrderState::getInsOrderId, orderId)
+ .eq(InsOrderState::getLaboratory, laboratory)
+ .last("limit 1"));
+ // 浠呭緟妫�銆佸湪妫�闃舵鍚屾锛涜繘鍏ュ鏍哥瓑鍚庣画鐘舵�佸悗浠ヤ繚瀛樹笅鏉ョ殑璁惧涓哄噯銆�
+ if (orderState != null && orderState.getInsState() != null
+ && orderState.getInsState() != 0 && orderState.getInsState() != 1) {
+ return;
+ }
+ }
List<InsOrderStandardTemplate> snapshots = insOrderStandardTemplateMapper.selectList(
Wrappers.<InsOrderStandardTemplate>lambdaQuery()
.eq(InsOrderStandardTemplate::getInsOrderId, orderId)
+ .select(InsOrderStandardTemplate::getId,
+ InsOrderStandardTemplate::getTemplateId,
+ InsOrderStandardTemplate::getDeviceDefaultsInitialized)
.orderByAsc(InsOrderStandardTemplate::getSort, InsOrderStandardTemplate::getId)
.last("FOR UPDATE"));
if (snapshots.isEmpty() || snapshots.stream().allMatch(
@@ -1129,41 +1155,57 @@
return;
}
- Set<Integer> existingTemplateIds = insOrderTemplateDeviceMapper.selectList(
- Wrappers.<InsOrderTemplateDevice>lambdaQuery()
- .eq(InsOrderTemplateDevice::getInsOrderId, orderId))
- .stream().map(InsOrderTemplateDevice::getTemplateId)
- .filter(Objects::nonNull).collect(Collectors.toSet());
- boolean inspectionStarted = order.getFirstInspectDate() != null
- || (order.getInsState() != null && order.getInsState() > 0)
- || snapshots.stream().anyMatch(snapshot -> StringUtils.isNotBlank(snapshot.getRecordValues())
- || snapshot.getDetectionTime() != null || snapshot.getTemperature() != null
- || snapshot.getDetectionPlace() != null);
- Map<Integer, List<Integer>> defaults = inspectionStarted ? Collections.emptyMap()
- : findStandardDeviceDefaults(order, snapshots);
+ Map<Integer, List<InsOrderTemplateDevice>> existingDevices = insOrderTemplateDeviceMapper.selectList(
+ Wrappers.<InsOrderTemplateDevice>lambdaQuery()
+ .eq(InsOrderTemplateDevice::getInsOrderId, orderId)
+ .orderByAsc(InsOrderTemplateDevice::getSort, InsOrderTemplateDevice::getId))
+ .stream().filter(relation -> relation.getTemplateId() != null)
+ .collect(Collectors.groupingBy(InsOrderTemplateDevice::getTemplateId));
+ Map<Integer, List<Integer>> defaults = findStandardDeviceDefaults(order, snapshots);
for (InsOrderStandardTemplate snapshot : snapshots) {
+ // 妫�楠屽憳鎵嬪姩閫夋嫨鎴栨竻绌鸿繃鐨勬ā鏉夸互浜哄伐涓哄噯锛屼笉鍐嶅鐢ㄦ爣鍑嗗簱榛樿鍊笺��
if (Objects.equals(snapshot.getDeviceDefaultsInitialized(), 1)) {
continue;
}
Integer templateId = snapshot.getTemplateId();
- if (!inspectionStarted && !existingTemplateIds.contains(templateId)
- && defaults.containsKey(templateId)) {
- List<Integer> deviceIds = defaults.get(templateId);
- for (int index = 0; index < deviceIds.size(); index++) {
- InsOrderTemplateDevice relation = new InsOrderTemplateDevice();
- relation.setInsOrderId(orderId);
- relation.setTemplateId(templateId);
- relation.setDeviceId(deviceIds.get(index));
- relation.setSort(index);
- insOrderTemplateDeviceMapper.insert(relation);
- }
+ if (templateId == null) {
+ continue;
}
- // 鏃犳硶鍞竴纭畾鏉ユ簮鏃朵篃鍙皾璇曡繖涓�娆★紝閬垮厤浠ュ悗鏍囧噯搴撹皟鏁存椂鎰忓鏀瑰姩璁㈠崟銆�
- insOrderStandardTemplateMapper.update(null,
- Wrappers.<InsOrderStandardTemplate>lambdaUpdate()
- .eq(InsOrderStandardTemplate::getId, snapshot.getId())
- .set(InsOrderStandardTemplate::getDeviceDefaultsInitialized, 1));
+ List<InsOrderTemplateDevice> currentDevices = existingDevices.getOrDefault(
+ templateId, Collections.emptyList());
+ // 鏃ф暟鎹病鏈夊垵濮嬪寲鏍囪锛屽凡鏈夎澶囪涓轰汉宸ラ�夋嫨锛屾爣璁板悗涓嶅啀鑷姩瑕嗙洊銆�
+ if (snapshot.getDeviceDefaultsInitialized() == null && !currentDevices.isEmpty()) {
+ insOrderStandardTemplateMapper.update(null,
+ Wrappers.<InsOrderStandardTemplate>lambdaUpdate()
+ .eq(InsOrderStandardTemplate::getId, snapshot.getId())
+ .set(InsOrderStandardTemplate::getDeviceDefaultsInitialized, 1));
+ continue;
+ }
+ if (!defaults.containsKey(templateId)) {
+ continue;
+ }
+ List<Integer> standardDeviceIds = defaults.get(templateId).stream()
+ .filter(Objects::nonNull).distinct().collect(Collectors.toList());
+ List<Integer> currentDeviceIds = currentDevices.stream()
+ .map(InsOrderTemplateDevice::getDeviceId)
+ .filter(Objects::nonNull).distinct().collect(Collectors.toList());
+ if (currentDeviceIds.equals(standardDeviceIds)) {
+ continue;
+ }
+ // 鏈垵濮嬪寲杩囩殑妯℃澘瀹屽叏瀵归綈鏍囧噯搴撶粦瀹氾細缁戝畾鍑犱釜灏辨樉绀哄嚑涓��
+ insOrderTemplateDeviceMapper.delete(
+ Wrappers.<InsOrderTemplateDevice>lambdaQuery()
+ .eq(InsOrderTemplateDevice::getInsOrderId, orderId)
+ .eq(InsOrderTemplateDevice::getTemplateId, templateId));
+ for (int index = 0; index < standardDeviceIds.size(); index++) {
+ InsOrderTemplateDevice relation = new InsOrderTemplateDevice();
+ relation.setInsOrderId(orderId);
+ relation.setTemplateId(templateId);
+ relation.setDeviceId(standardDeviceIds.get(index));
+ relation.setSort(index);
+ insOrderTemplateDeviceMapper.insert(relation);
+ }
}
}
@@ -1184,23 +1226,29 @@
.isNotNull(StandardTree::getSample)
.isNull(StandardTree::getSampleType)
.isNull(StandardTree::getModel));
- List<StandardTree> matches = candidates.stream()
- .filter(tree -> StringUtils.isNotBlank(tree.getSample()))
- .filter(tree -> {
- Set<Integer> boundIds = standardTreeService.selectTemplateBindings(tree.getId()).stream()
- .map(StandardTreeTemplateBindingVo::getTemplateId).collect(Collectors.toSet());
- return boundIds.containsAll(templateIds);
- }).collect(Collectors.toList());
- if (matches.size() == 1) {
- standardTreeId = matches.get(0).getId();
- } else {
- List<StandardTree> exact = matches.stream().filter(tree ->
- standardTreeService.selectTemplateBindings(tree.getId()).stream()
- .map(StandardTreeTemplateBindingVo::getTemplateId)
- .collect(Collectors.toSet()).equals(templateIds))
- .collect(Collectors.toList());
- if (exact.size() == 1) {
- standardTreeId = exact.get(0).getId();
+ if (candidates.size() == 1) {
+ // 鍚屼竴鏍囧噯缂栧彿銆佸悓涓�瀹為獙瀹ゅ彧鏈変竴涓簩绾ц妭鐐规椂鐩存帴璁ゅ畾锛�
+ // 閬垮厤鏍囧噯搴撹皟鏁磋繃妯℃澘鍚庢棫璁㈠崟鍖归厤涓嶄笂銆�
+ standardTreeId = candidates.get(0).getId();
+ } else if (!candidates.isEmpty()) {
+ List<StandardTree> matches = candidates.stream()
+ .filter(tree -> StringUtils.isNotBlank(tree.getSample()))
+ .filter(tree -> {
+ Set<Integer> boundIds = standardTreeService.selectTemplateBindings(tree.getId()).stream()
+ .map(StandardTreeTemplateBindingVo::getTemplateId).collect(Collectors.toSet());
+ return boundIds.containsAll(templateIds);
+ }).collect(Collectors.toList());
+ if (matches.size() == 1) {
+ standardTreeId = matches.get(0).getId();
+ } else if (!matches.isEmpty()) {
+ List<StandardTree> exact = matches.stream().filter(tree ->
+ standardTreeService.selectTemplateBindings(tree.getId()).stream()
+ .map(StandardTreeTemplateBindingVo::getTemplateId)
+ .collect(Collectors.toSet()).equals(templateIds))
+ .collect(Collectors.toList());
+ if (exact.size() == 1) {
+ standardTreeId = exact.get(0).getId();
+ }
}
}
}
--
Gitblit v1.9.3