吴羡
2026-10-27 1058c119c4287d0ea42cd5804822a4a64201637c
Merge remote-tracking branch 'origin/master'
已添加1个文件
已删除1个文件
已修改6个文件
261 ■■■■■ 文件已修改
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderPlanController.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsUnqualifiedHandlerController.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleOrderDto.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/util/ReportResultTableRenderPolicy.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderMapper.xml 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sql/lims_delta.sql 136 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsOrderPlanController.java
@@ -169,9 +169,13 @@
    @GetMapping("/downFile")
    public Result<?> downFile(Integer id) {
        InsOrderFile insOrderFile = insOrderFileService.getById(id);
        if (insOrderFile == null) {
            return Result.fail("附件不存在或已被删除");
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("type", insOrderFile.getType());
        map.put("fileUrl", insOrderFile.getFileUrl());
        map.put("fileName", insOrderFile.getFileName());
        return Result.success(map);
    }
inspect-server/src/main/java/com/ruoyi/inspect/controller/InsUnqualifiedHandlerController.java
@@ -73,9 +73,13 @@
    @GetMapping("/downFile")
    public Result<?> oaDownFile(Integer id) {
        InsUnqualifiedHandlerFile insUnqualifiedHandlerFile = unqualifiedHandlerFileService.getById(id);
        if (insUnqualifiedHandlerFile == null) {
            return Result.fail("附件不存在或已被删除");
        }
        HashMap<String, Object> map = new HashMap<>();
        map.put("type", insUnqualifiedHandlerFile.getType());
        map.put("fileUrl", insUnqualifiedHandlerFile.getFileUrl());
        map.put("fileName", insUnqualifiedHandlerFile.getFileName());
        return Result.success(map);
    }
inspect-server/src/main/java/com/ruoyi/inspect/dto/SampleOrderDto.java
@@ -84,11 +84,11 @@
    private String unqualifiedItem;
    /**
     * (报告导出)下单时间
     * (报告导出)送样时间
     */
    @ExcelProperty(index = 11, value = "下单时间")
    @Schema(description = "下单时间")
    private String createTimeString;
    @ExcelProperty(index = 11, value = "送样时间")
    @Schema(description = "送样时间")
    private String sampleDateString;
    @Schema(description = "子实验室")
    private String sonLaboratory;
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderPlanServiceImpl.java
@@ -45,6 +45,7 @@
import com.ruoyi.inspect.pojo.*;
import com.ruoyi.inspect.service.*;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import com.ruoyi.inspect.util.ReportResultTableRenderPolicy;
import com.ruoyi.inspect.util.PreserveReportPicturePlaceholderHandler;
import com.ruoyi.inspect.util.ReportSignaturePictureUtils;
import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo;
@@ -3747,7 +3748,7 @@
        }
        Configure configure = Configure.builder()
                .bind("deviceList", new HackLoopTableRenderPolicy())
                .bind("r", new HackLoopTableRenderPolicy(true))
                .bind("r", new ReportResultTableRenderPolicy())
                .setValidErrorHandler(new PreserveReportPicturePlaceholderHandler())
                .useSpringEL(true)
                .build();
inspect-server/src/main/java/com/ruoyi/inspect/service/impl/InsOrderServiceImpl.java
@@ -1803,7 +1803,7 @@
                List<String> unqualifiedList = insProductMapper.selectUnqualifiedList(orderDto.getId());
                orderDto.setUnqualifiedItem(CollUtil.join(unqualifiedList, ","));
            }
            orderDto.setCreateTimeString(orderDto.getCreateTime() == null ? "" : orderDto.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
            orderDto.setSampleDateString(orderDto.getSampleDate() == null ? "" : orderDto.getSampleDate().toString());
        }
inspect-server/src/main/java/com/ruoyi/inspect/util/ReportResultTableRenderPolicy.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.ruoyi.inspect.util;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
/** æŠ¥å‘Šç»“果表序号使用普通文字,避免渲染时产生默认下划线。 */
public class ReportResultTableRenderPolicy extends HackLoopTableRenderPolicy {
    public ReportResultTableRenderPolicy() {
        super(true);
    }
    @Override
    protected void afterloop(XWPFTable table, Object data) {
        for (XWPFTableRow row : table.getRows()) {
            XWPFTableCell cell = row.getCell(0);
            if (cell == null || !cell.getText().trim().matches("\\d+")) {
                continue;
            }
            for (XWPFParagraph paragraph : cell.getParagraphs()) {
                for (XWPFRun run : paragraph.getRuns()) {
                    if (run.getCTR().isSetRPr()) {
                        while (run.getCTR().getRPr().sizeOfUArray() > 0) {
                            run.getCTR().getRPr().removeU(0);
                        }
                    }
                }
            }
        }
    }
}
inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -66,6 +66,46 @@
        ip.cable_tag
    </sql>
    <!-- ç›´ç»‘订单按模板结论统计;传统订单按有效且非绑定的检验项目统计。 -->
    <sql id="inspectionProgressColumn">
        CONCAT(COALESCE(ROUND(
            CASE WHEN template_progress.total_count > 0
                THEN template_progress.completed_count * 100.0 / template_progress.total_count
                ELSE product_progress.completed_count * 100.0 / NULLIF(product_progress.total_count, 0)
            END, 2), 0), '%') AS insProgress
    </sql>
    <sql id="inspectionProgressJoins">
        LEFT JOIN (
            SELECT s.ins_order_id, COUNT(*) AS total_count,
                   SUM(CASE WHEN p.ins_result IN (0, 1, 3) THEN 1 ELSE 0 END) AS completed_count
            FROM ins_product p
            JOIN ins_sample s ON p.ins_sample_id = s.id
            WHERE p.state = 1 AND (p.is_binding IS NULL OR p.is_binding != 1)
            GROUP BY s.ins_order_id
        ) product_progress ON io.id = product_progress.ins_order_id
        LEFT JOIN (
            SELECT t.ins_order_id, COUNT(*) AS total_count,
                   SUM(CASE WHEN t.ins_result IN (0, 1) THEN 1 ELSE 0 END) AS completed_count
            FROM ins_order_standard_template t
            JOIN ins_order template_order ON template_order.id = t.ins_order_id
            WHERE EXISTS (
                SELECT 1
                FROM ins_sample s
                LEFT JOIN ins_product p ON p.ins_sample_id = s.id
                WHERE s.ins_order_id = t.ins_order_id
                  AND (p.template_row_index IS NOT NULL
                       OR (s.standard_method_list_id IS NULL
                           AND COALESCE(TRIM(s.factory), '') = ''
                           AND COALESCE(TRIM(s.sample_type), '') = ''
                           AND COALESCE(TRIM(s.model), '') = ''
                           AND COALESCE(TRIM(template_order.factory), '') = ''
                           AND COALESCE(TRIM(template_order.sample_type), '') = ''))
            )
            GROUP BY t.ins_order_id
        ) template_progress ON io.id = template_progress.ins_order_id
    </sql>
    <sql id="selectInsOrderExport">
        SELECT
            io.*,
@@ -74,7 +114,7 @@
            ir.url,
            ir.url_s,
            sample_counts.sample_num,
            CONCAT(ROUND(approved_product_counts.approved_count / total_product_counts.total_count * 100, 2), '%') AS insProgress,
            <include refid="inspectionProgressColumn"/>,
            io.sample_view AS sample_name,
            GROUP_CONCAT(DISTINCT isa.model SEPARATOR ' ') AS sample_model,
            u.name,
@@ -101,18 +141,7 @@
             FROM ins_sample
             WHERE id in(select id1 from (select is2.id id1 ,ip.id from ins_sample is2 left join ins_product ip on is2.id = ip.ins_sample_id where ip.id is not null)s )
             GROUP BY ins_order_id) sample_counts ON io.id = sample_counts.ins_order_id
                LEFT JOIN
            (SELECT ins_sample.ins_order_id, COUNT(*) AS total_count
             FROM ins_product
                      JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
             WHERE ins_product.state = 1
             GROUP BY ins_sample.ins_order_id) total_product_counts ON io.id = total_product_counts.ins_order_id
                LEFT JOIN
            (SELECT ins_sample.ins_order_id, COUNT(*) AS approved_count
             FROM ins_product
                      JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
             WHERE ins_product.state = 1 AND ins_product.ins_result IS NOT NULL
             GROUP BY ins_sample.ins_order_id) approved_product_counts ON io.id = approved_product_counts.ins_order_id
            <include refid="inspectionProgressJoins"/>
                LEFT JOIN (SELECT ins_sample_id, GROUP_CONCAT(DISTINCT uu.name SEPARATOR ',') AS testing_name
                           FROM ins_sample_user u
                                    LEFT JOIN user uu ON u.user_id = uu.id
@@ -131,7 +160,7 @@
        ir.url,
        ir.url_s,
        sample_counts.sample_num,
        CONCAT(ROUND(approved_product_counts.approved_count / total_product_counts.total_count * 100, 2), '%') AS insProgress,
        <include refid="inspectionProgressColumn"/>,
        io.sample_view AS sample_name,
        GROUP_CONCAT(DISTINCT isa.model SEPARATOR ' ') AS sample_model,
        u.name,
@@ -155,18 +184,7 @@
        FROM ins_sample
        WHERE id in(select id1 from (select is2.id id1 ,ip.id from ins_sample is2 left join ins_product ip on is2.id = ip.ins_sample_id where ip.id is not null)s )
        GROUP BY ins_order_id) sample_counts ON io.id = sample_counts.ins_order_id
        LEFT JOIN
        (SELECT ins_sample.ins_order_id, COUNT(*) AS total_count
        FROM ins_product
        JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
        WHERE ins_product.state = 1 and is_binding !=1
        GROUP BY ins_sample.ins_order_id) total_product_counts ON io.id = total_product_counts.ins_order_id
        LEFT JOIN
        (SELECT ins_sample.ins_order_id, COUNT(*) AS approved_count
        FROM ins_product
        JOIN ins_sample ON ins_product.ins_sample_id = ins_sample.id
        WHERE ins_product.state = 1 and is_binding !=1 AND ins_product.ins_result IS NOT NULL
        GROUP BY ins_sample.ins_order_id) approved_product_counts ON io.id = approved_product_counts.ins_order_id
        <include refid="inspectionProgressJoins"/>
        LEFT JOIN (SELECT ins_sample_id, GROUP_CONCAT(DISTINCT uu.name SEPARATOR ',') AS testing_name
        FROM ins_sample_user u
        LEFT JOIN user uu ON u.user_id = uu.id
sql/lims_delta.sql
ÎļþÒÑɾ³ý