From 7787f57521297df847bfd5f2b9af410b3fdac67e Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 20 十月 2026 16:28:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsSampleReceiptServiceImpl.java |   89 ++++++++++++++++++++++++++++++++++++--------
 1 files changed, 72 insertions(+), 17 deletions(-)

diff --git a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsSampleReceiptServiceImpl.java b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsSampleReceiptServiceImpl.java
index 5337574..37b2953 100644
--- a/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsSampleReceiptServiceImpl.java
+++ b/inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsSampleReceiptServiceImpl.java
@@ -4,46 +4,44 @@
 import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.write.metadata.WriteSheet;
 import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.dto.TemplateInspectionItemDto;
+import com.ruoyi.basic.utils.StandardTemplateInspectionItemParser;
+import com.ruoyi.common.utils.GZipUtil;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.framework.exception.ErrorException;
 import com.ruoyi.inspect.dto.SampleReceiptActionDto;
 import com.ruoyi.inspect.dto.SampleReceiptPageDto;
 import com.ruoyi.inspect.dto.SampleReceiptQueryDto;
-import com.ruoyi.inspect.mapper.InsOrderMapper;
-import com.ruoyi.inspect.mapper.InsOrderStandardTemplateMapper;
-import com.ruoyi.inspect.mapper.InsProductMapper;
-import com.ruoyi.inspect.mapper.InsSampleMapper;
-import com.ruoyi.inspect.mapper.InsSampleReceiptMapper;
-import com.ruoyi.inspect.mapper.InsSampleUserMapper;
-import com.ruoyi.inspect.pojo.InsOrder;
-import com.ruoyi.inspect.pojo.InsOrderStandardTemplate;
-import com.ruoyi.inspect.pojo.InsProduct;
-import com.ruoyi.inspect.pojo.InsSample;
-import com.ruoyi.inspect.pojo.InsSampleReceipt;
-import com.ruoyi.inspect.pojo.InsSampleUser;
+import com.ruoyi.inspect.mapper.*;
+import com.ruoyi.inspect.pojo.*;
 import com.ruoyi.inspect.service.InsOrderService;
 import com.ruoyi.inspect.service.InsOrderStateService;
 import com.ruoyi.inspect.service.InsSampleReceiptService;
 import com.ruoyi.system.mapper.UserMapper;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import jakarta.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
 public class InsSampleReceiptServiceImpl extends ServiceImpl<InsSampleReceiptMapper, InsSampleReceipt>
         implements InsSampleReceiptService {
+    private static final String DIRECT_TEMPLATE_LABORATORY = "鏂拌仛";
+
     private final InsSampleReceiptMapper receiptMapper;
     private final InsOrderMapper insOrderMapper;
     private final InsOrderStandardTemplateMapper insOrderStandardTemplateMapper;
@@ -55,13 +53,17 @@
     private final UserMapper userMapper;
 
     @Override
-    public com.baomidou.mybatisplus.core.metadata.IPage<SampleReceiptPageDto> page(Page<?> page, SampleReceiptQueryDto query) {
-        return receiptMapper.selectPage(page, query);
+    public IPage<SampleReceiptPageDto> page(Page<?> page, SampleReceiptQueryDto query) {
+        IPage<SampleReceiptPageDto> result = receiptMapper.selectPage(page, query);
+        result.getRecords().forEach(this::fillInspectionItemsFromSnapshots);
+        return result;
     }
 
     @Override
     public SampleReceiptPageDto detail(Integer id) {
-        return receiptMapper.selectDetail(id);
+        SampleReceiptPageDto detail = receiptMapper.selectDetail(id);
+        fillInspectionItemsFromSnapshots(detail);
+        return detail;
     }
 
     @Override
@@ -91,7 +93,26 @@
         Long productCount = insProductMapper.selectCount(Wrappers.<InsProduct>lambdaQuery()
                 .eq(InsProduct::getInsSampleId, sample.getId()).eq(InsProduct::getState, 1));
         if (productCount == 0) {
-            throw new ErrorException("璇ュ鎵樻湭缁戝畾妫�楠岄」鐩紝涓嶈兘鎻愪氦妫�楠�");
+            List<TemplateInspectionItemDto> items = getSnapshotInspectionItems(order.getId());
+            if (items.isEmpty()) {
+                throw new ErrorException("璁㈠崟鍘熷璁板綍妯℃澘鏈厤缃楠岄」鎴栧鍑哄�硷紝涓嶈兘鎻愪氦妫�楠�");
+            }
+            int sort = 0;
+            for (TemplateInspectionItemDto item : items) {
+                InsProduct product = new InsProduct();
+                product.setInsSampleId(sample.getId());
+                product.setInspectionItem(item.getInspectionItem());
+                product.setInspectionItemClass("");
+                product.setInspectionItemSubclass("");
+                product.setLaboratory(order.getLaboratory());
+                product.setSample(order.getSample());
+                product.setTemplateId(item.getTemplateId());
+                product.setTemplateRowIndex(item.getTemplateRowIndex());
+                product.setSonLaboratory(DIRECT_TEMPLATE_LABORATORY);
+                product.setState(1);
+                product.setSort(sort++);
+                insProductMapper.insert(product);
+            }
         }
         if (userMapper.selectById(dto.getMainInspectorId()) == null) {
             throw new ErrorException("涓绘楠屼汉涓嶅瓨鍦ㄦ垨宸插仠鐢�");
@@ -160,9 +181,43 @@
         }
     }
 
+    private List<TemplateInspectionItemDto> getSnapshotInspectionItems(Integer orderId) {
+        List<InsOrderStandardTemplate> snapshots = insOrderStandardTemplateMapper.selectList(
+                Wrappers.<InsOrderStandardTemplate>lambdaQuery()
+                        .eq(InsOrderStandardTemplate::getInsOrderId, orderId)
+                        .orderByAsc(InsOrderStandardTemplate::getSort, InsOrderStandardTemplate::getId));
+        List<TemplateInspectionItemDto> items = new ArrayList<>();
+        for (InsOrderStandardTemplate snapshot : snapshots) {
+            String thing = snapshot.getThing();
+            try {
+                thing = GZipUtil.uncompress(thing);
+            } catch (RuntimeException ignored) {
+                // 鍏煎鏈帇缂╃殑鍘嗗彶妯℃澘蹇収銆�
+            }
+            items.addAll(StandardTemplateInspectionItemParser.parse(
+                    snapshot.getTemplateId(), snapshot.getSort(), thing));
+        }
+        return items;
+    }
+
+    private void fillInspectionItemsFromSnapshots(SampleReceiptPageDto row) {
+        if (row == null || row.getOrderId() == null || StringUtils.isNotBlank(row.getInspectionItem())) {
+            return;
+        }
+        try {
+            String names = getSnapshotInspectionItems(row.getOrderId()).stream()
+                    .map(TemplateInspectionItemDto::getInspectionItem)
+                    .distinct().collect(Collectors.joining("\n"));
+            row.setInspectionItem(names);
+        } catch (RuntimeException ignored) {
+            // 鍒楄〃浠嶅彲鏌ョ湅锛涙彁浜ゆ楠屾椂浼氳繑鍥炲叿浣撶殑妯℃澘瑙f瀽閿欒銆�
+        }
+    }
+
     @Override
     public void export(SampleReceiptQueryDto query, HttpServletResponse response) {
         List<SampleReceiptPageDto> list = receiptMapper.selectExportList(query);
+        list.forEach(this::fillInspectionItemsFromSnapshots);
         response.setContentType("application/vnd.ms-excel");
         response.setCharacterEncoding("UTF-8");
         try {

--
Gitblit v1.9.3