Skip to content

检测管理模块开发文档

1. 模块概述

1.1 模块定位

检测管理模块是LIMS系统的核心业务模块,负责管理实验室检测工作的全流程,包括检测任务分配、原始记录管理、数据采集、结果计算、质量控制等核心功能。该模块与样品管理、报告管理、设备管理等模块紧密协作,共同构成实验室检测业务的完整闭环。

1.2 核心功能架构

检测管理模块
├── 任务管理
│   ├── 任务分配
│   ├── 任务领取
│   ├── 任务执行
│   └── 任务审核
├── 检测项目管理
│   ├── 项目定义
│   ├── 项目关联方法
│   └── 项目计价规则
├── 原始记录管理
│   ├── 记录模板
│   ├── 记录填写
│   ├── 记录计算
│   └── 记录审核
├── 数据采集管理
│   ├── 仪器数据采集
│   ├── 自动计算
│   └── 数据修约
├── 质控管理
│   ├── 质控样品
│   ├── 质控规则
│   └── 质控判定
└── 结果管理
    ├── 结果录入
    ├── 结果判定
    └── 结果发布

2. 功能需求详解

2.1 任务管理

2.1.1 功能描述

任务管理负责将检测任务分配给具体的检测人员,支持任务领取、任务执行、任务审核等完整的业务流程。

2.1.2 业务流程

任务生成 → 任务分配 → 任务领取 → 任务执行 → 任务审核 → 结果录入 → 任务完成

2.1.3 核心实体

  • DetectionTask:检测任务主表
  • TaskAssignment:任务分配记录
  • TaskExecution:任务执行记录
  • TaskAudit:任务审核记录

2.1.4 关键字段

字段名类型说明
TaskIdlong任务ID
SampleIdlong样品ID
ProjectIdlong检测项目ID
AssigneeIdlong执行人ID
AuditorIdlong审核人ID
Statusint任务状态
StartTimeDateTime开始时间
EndTimeDateTime完成时间
Resultstring检测结果
Remarkstring备注

2.1.5 状态机设计

待分配(0) → 已分配(1) → 已领取(2) → 执行中(3) → 待审核(4) → 已完成(5) → 已归档(6)

               已退回(7)

2.2 检测项目管理

2.2.1 功能描述

检测项目管理用于定义和管理实验室开展的检测项目,包括项目名称、检测标准、方法依据、设备要求等信息。

2.2.2 核心实体

  • DetectionProject:检测项目主表
  • ProjectMethod:项目关联的检测方法
  • ProjectParameter:项目参数定义
  • ProjectStandard:项目计价标准

2.2.3 关键字段

字段名类型说明
ProjectIdlong项目ID
ProjectCodestring项目编号
ProjectNamestring项目名称
CategoryIdlong项目分类ID
MethodStandardstring方法依据
DetectionRangestring检测范围
Precisionstring精度要求
Unitstring结果单位
Pricedecimal项目单价
TurnaroundTimeintturnaround时间(天)
Statusint状态

2.3 原始记录管理

2.3.1 功能描述

原始记录管理是检测工作的核心,涵盖记录模板、记录填写、自动计算、记录审核等全流程。

2.3.2 记录模板设计

json
{
  "templateId": "R001",
  "templateName": "重金属含量检测原始记录",
  "projectCode": "PB-001",
  "sections": [
    {
      "sectionName": "基本信息",
      "fields": [
        {"fieldName": "样品编号", "fieldType": "text", "required": true},
        {"fieldName": "检测日期", "fieldType": "date", "required": true},
        {"fieldName": "检测人员", "fieldType": "user", "required": true}
      ]
    },
    {
      "sectionName": "仪器信息",
      "fields": [
        {"fieldName": "仪器编号", "fieldType": "instrument", "required": true},
        {"fieldName": "仪器型号", "fieldType": "text", "readonly": true}
      ]
    },
    {
      "sectionName": "检测数据",
      "fields": [
        {"fieldName": "平行样1", "fieldType": "number", "required": true},
        {"fieldName": "平行样2", "fieldType": "number", "required": true},
        {"fieldName": "平行样3", "fieldType": "number", "required": true},
        {"fieldName": "平均值", "fieldType": "formula", "formula": "AVG(A1:A3)", "readonly": true},
        {"fieldName": "标准偏差", "fieldType": "formula", "formula": "STDEV(A1:A3)", "readonly": true},
        {"fieldName": "相对偏差", "fieldType": "formula", "formula": "RSD(A1:A3)", "readonly": true}
      ]
    },
    {
      "sectionName": "质控信息",
      "fields": [
        {"fieldName": "质控样品", "fieldType": "qc_sample", "required": false},
        {"fieldName": "质控结果", "fieldType": "text", "readonly": true},
        {"fieldName": "质控判定", "fieldType": "text", "readonly": true}
      ]
    }
  ]
}

2.3.3 核心实体

  • RecordTemplate:记录模板表
  • RecordTemplateSection:模板段落表
  • TemplateField:模板字段表
  • OriginalRecord:原始记录表
  • RecordValue:记录值表

2.4 数据采集管理

2.4.1 功能描述

支持从检测仪器自动采集数据,减少人工录入,提高数据准确性和工作效率。

2.4.2 数据采集方式

  1. 仪器直连采集:通过仪器通信协议(RS232、TCP/IP等)直接获取数据
  2. 文件解析采集:解析仪器输出的数据文件(CSV、EXCEL、TXT等)
  3. 手工录入:人工录入检测数据

2.4.3 仪器通信协议

csharp
// 仪器通信接口
public interface IInstrumentCommunicator
{
    // 连接仪器
    bool Connect(string port, int baudRate);
    
    // 断开连接
    void Disconnect();
    
    // 发送命令
    string SendCommand(string command);
    
    // 读取数据
    byte[] ReadData();
    
    // 解析数据
    object ParseData(byte[] rawData);
}

2.4.4 数据采集配置

配置项说明
InstrumentType仪器类型
CommunicationType通信方式(串口/网络/文件)
Port端口号
BaudRate波特率
DataFormat数据格式
ParseRule解析规则
CollectionInterval采集间隔
IsAutoCollect是否自动采集

2.5 质控管理

2.5.1 功能描述

质控管理用于监控检测过程的准确性和精密度,确保检测结果的可靠性。

2.5.2 质控类型

  1. 空白样品:检验整个检测流程是否有污染
  2. 标准样品:使用已知浓度的标准物质验证准确性
  3. 加标回收:在样品中加入已知量标准物质验证回收率
  4. 平行样品:同一样品多次检测验证精密度
  5. 人员比对:不同检测人员检测同一样品验证一致性
  6. 仪器比对:不同仪器检测同一样品验证一致性

2.5.3 质控规则配置

json
{
  "qcRules": [
    {
      "ruleName": "标准样品规则",
      "qcType": "StandardSample",
      "condition": "浓度值在参考值±10%范围内",
      "action": "警告",
      "allowNext": true
    },
    {
      "ruleName": "加标回收率规则",
      "qcType": "SpikeRecovery",
      "condition": "回收率在80%-120%范围内",
      "action": "警告",
      "allowNext": true
    },
    {
      "ruleName": "平行样品规则",
      "qcType": "ParallelSample",
      "condition": "相对偏差≤10%",
      "action": "警告",
      "allowNext": false
    }
  ]
}

2.5.4 质控判定流程

检测数据 → 质控样品检测 → 质控规则匹配 → 质控判定 → 判定通过 → 结果发布

                      判定不通过 → 重新检测 → 重新检测

                      超限处理 → 报告异常

2.6 结果管理

2.6.1 功能描述

结果管理包括检测结果的录入、计算、判定和发布,支持单人录入+双人审核模式。

2.6.2 结果计算规则

csharp
// 结果计算配置
public class ResultCalculationRule
{
    public string Formula { get; set; }  // 计算公式
    public int DecimalPlaces { get; set; }  // 小数位数
    public string RoundingRule { get; set; }  // 修约规则
    public string Unit { get; set; }  // 结果单位
}

// 示例配置
{
  "formula": "(A+B)*C/D",
  "decimalPlaces": 2,
  "roundingRule": "四舍六入五成双",
  "unit": "mg/kg"
}

2.6.3 结果判定规则

json
{
  "judgmentRules": [
    {
      "ruleName": "单项判定",
      "ruleType": "Single",
      "conditions": [
        {"operator": ">=", "limitValue": 0, "result": "合格"},
        {"operator": "<", "limitValue": 0, "result": "不合格"}
      ]
    },
    {
      "ruleName": "综合判定",
      "ruleType": "Comprehensive",
      "allPass": true,  // 全部项目合格才合格
      "conditions": []
    }
  ]
}

3. 数据库设计

3.1 核心表结构

3.1.1 检测任务表

sql
CREATE TABLE [dbo].[DetectionTask](
    [Id] BIGINT IDENTITY(1,1) NOT NULL,
    [TaskNo] VARCHAR(50) NOT NULL,           -- 任务编号
    [SampleId] BIGINT NOT NULL,              -- 样品ID
    [ProjectId] BIGINT NOT NULL,             -- 检测项目ID
    [AssigneeId] BIGINT NULL,                -- 执行人ID
    [AuditorId] BIGINT NULL,                 -- 审核人ID
    [Status] INT NOT NULL DEFAULT 0,         -- 任务状态
    [Priority] INT NOT NULL DEFAULT 1,       -- 优先级
    [StartTime] DATETIME NULL,               -- 开始时间
    [EndTime] DATETIME NULL,                 -- 完成时间
    [Result] NVARCHAR(MAX) NULL,             -- 检测结果
    [Remark] NVARCHAR(500) NULL,             -- 备注
    [CreateTime] DATETIME NOT NULL,          -- 创建时间
    [CreateUserId] BIGINT NULL,              -- 创建人ID
    [UpdateTime] DATETIME NULL,              -- 更新时间
    [UpdateUserId] BIGINT NULL,              -- 更新人ID
    [IsDeleted] BIT NOT NULL DEFAULT 0,      -- 是否删除
    CONSTRAINT [PK_DetectionTask] PRIMARY KEY ([Id]),
    CONSTRAINT [UK_DetectionTask_TaskNo] UNIQUE ([TaskNo])
)

3.1.2 检测项目表

sql
CREATE TABLE [dbo].[DetectionProject](
    [Id] BIGINT IDENTITY(1,1) NOT NULL,
    [ProjectCode] VARCHAR(50) NOT NULL,      -- 项目编号
    [ProjectName] NVARCHAR(200) NOT NULL,    -- 项目名称
    [CategoryId] BIGINT NULL,               -- 项目分类ID
    [MethodStandard] NVARCHAR(500) NULL,     -- 方法依据
    [DetectionRange] NVARCHAR(200) NULL,     -- 检测范围
    [Precision] NVARCHAR(100) NULL,          -- 精度要求
    [Unit] VARCHAR(50) NULL,                -- 结果单位
    [Price] DECIMAL(18,2) NULL,             -- 项目单价
    [TurnaroundDays] INT NULL,               -- turnaround时间
    [RecordTemplateId] BIGINT NULL,          -- 原始记录模板ID
    [Status] INT NOT NULL DEFAULT 1,         -- 状态
    [Remark] NVARCHAR(500) NULL,             -- 备注
    [CreateTime] DATETIME NOT NULL,          -- 创建时间
    [CreateUserId] BIGINT NULL,              -- 创建人ID
    [UpdateTime] DATETIME NULL,              -- 更新时间
    [UpdateUserId] BIGINT NULL,              -- 更新人ID
    [IsDeleted] BIT NOT NULL DEFAULT 0,      -- 是否删除
    CONSTRAINT [PK_DetectionProject] PRIMARY KEY ([Id]),
    CONSTRAINT [UK_DetectionProject_ProjectCode] UNIQUE ([ProjectCode])
)

3.1.3 原始记录表

sql
CREATE TABLE [dbo].[OriginalRecord](
    [Id] BIGINT IDENTITY(1,1) NOT NULL,
    [RecordNo] VARCHAR(50) NOT NULL,        -- 记录编号
    [TaskId] BIGINT NOT NULL,               -- 任务ID
    [TemplateId] BIGINT NOT NULL,           -- 模板ID
    [RecordData] NVARCHAR(MAX) NULL,         -- 记录数据(JSON)
    [CalculationResult] NVARCHAR(MAX) NULL,  -- 计算结果(JSON)
    [QcResult] NVARCHAR(500) NULL,           -- 质控结果
    [Status] INT NOT NULL DEFAULT 0,         -- 记录状态
    [IsAutoCalculate] BIT NOT NULL DEFAULT 1,-- 是否自动计算
    [CompleteTime] DATETIME NULL,            -- 完成时间
    [AuditTime] DATETIME NULL,               -- 审核时间
    [AuditorId] BIGINT NULL,                 -- 审核人ID
    [AuditRemark] NVARCHAR(500) NULL,        -- 审核备注
    [CreateTime] DATETIME NOT NULL,          -- 创建时间
    [CreateUserId] BIGINT NULL,              -- 创建人ID
    [UpdateTime] DATETIME NULL,              -- 更新时间
    [UpdateUserId] BIGINT NULL,              -- 更新人ID
    [IsDeleted] BIT NOT NULL DEFAULT 0,      -- 是否删除
    CONSTRAINT [PK_OriginalRecord] PRIMARY KEY ([Id]),
    CONSTRAINT [UK_OriginalRecord_RecordNo] UNIQUE ([RecordNo])
)

3.1.4 质控记录表

sql
CREATE TABLE [dbo].[QualityControlRecord](
    [Id] BIGINT IDENTITY(1,1) NOT NULL,
    [QcNo] VARCHAR(50) NOT NULL,            -- 质控编号
    [QcType] INT NOT NULL,                  -- 质控类型
    [SampleId] BIGINT NULL,                 -- 关联样品ID
    [TaskId] BIGINT NULL,                   -- 关联任务ID
    [StandardValue] DECIMAL(18,6) NULL,     -- 标准值
    [MeasuredValue] DECIMAL(18,6) NULL,     -- 实测值
    [Tolerance] DECIMAL(18,4) NULL,         -- 允许误差
    [QcResult] INT NOT NULL,                 -- 质控结果(0未判定,1合格,2不合格)
    [Remark] NVARCHAR(500) NULL,             -- 备注
    [CreateTime] DATETIME NOT NULL,          -- 创建时间
    [CreateUserId] BIGINT NULL,              -- 创建人ID
    [IsDeleted] BIT NOT NULL DEFAULT 0,      -- 是否删除
    CONSTRAINT [PK_QualityControlRecord] PRIMARY KEY ([Id]),
    CONSTRAINT [UK_QualityControlRecord_QcNo] UNIQUE ([QcNo])
)

4. 接口设计

4.1 任务管理接口

4.1.1 获取任务列表

GET /api/detection/task/list
Query: pageIndex, pageSize, status, assigneeId, sampleId, startDate, endDate
Response: { code: 200, data: { list: [], total: 0 } }

4.1.2 创建检测任务

POST /api/detection/task/create
Body: { sampleId, projectId, assigneeId, priority, remark }
Response: { code: 200, data: { taskId } }

4.1.3 分配任务

POST /api/detection/task/assign
Body: { taskId, assigneeId }
Response: { code: 200, message: "分配成功" }

4.1.4 领取任务

POST /api/detection/task/claim/{taskId}
Response: { code: 200, message: "领取成功" }

4.1.5 提交任务

POST /api/detection/task/submit/{taskId}
Body: { result, remark }
Response: { code: 200, message: "提交成功" }

4.1.6 审核任务

POST /api/detection/task/audit/{taskId}
Body: { auditResult, auditRemark }
Response: { code: 200, message: "审核完成" }

4.2 检测项目管理接口

4.2.1 获取项目列表

GET /api/detection/project/list
Query: categoryId, keyword, status
Response: { code: 200, data: { list: [] } }

4.2.2 获取项目详情

GET /api/detection/project/{projectId}
Response: { code: 200, data: { projectDetail } }

4.2.3 创建检测项目

POST /api/detection/project/create
Body: { projectCode, projectName, categoryId, methodStandard, detectionRange, unit, price }
Response: { code: 200, data: { projectId } }

4.3 原始记录接口

4.3.1 获取记录模板

GET /api/detection/record/template/{templateId}
Response: { code: 200, data: { template } }

4.3.2 保存原始记录

POST /api/detection/record/save
Body: { taskId, recordData }
Response: { code: 200, message: "保存成功" }

4.3.3 计算检测结果

POST /api/detection/record/calculate
Body: { templateId, recordData }
Response: { code: 200, data: { calculationResult } }

4.3.4 提交记录审核

POST /api/detection/record/submit/{recordId}
Response: { code: 200, message: "提交成功" }

4.4 数据采集接口

4.4.1 获取仪器列表

GET /api/detection/instrument/list
Response: { code: 200, data: { list: [] } }

4.4.2 连接仪器

POST /api/detection/instrument/connect/{instrumentId}
Response: { code: 200, message: "连接成功" }

4.4.3 采集数据

POST /api/detection/instrument/collect/{instrumentId}
Response: { code: 200, data: { rawData, parsedData } }

4.5 质控接口

4.5.1 添加质控记录

POST /api/detection/qc/add
Body: { qcType, sampleId, taskId, standardValue, measuredValue }
Response: { code: 200, data: { qcResult } }

4.5.2 质控判定

POST /api/detection/qc/judge/{qcId}
Response: { code: 200, data: { qcResult, qcMessage } }

5. 关键技术实现

5.1 公式计算引擎

csharp
public class FormulaCalculator
{
    private readonly Dictionary<string, Func<double[], double>> _functions;

    public FormulaCalculator()
    {
        _functions = new Dictionary<string, Func<double[], double>>
        {
            ["SUM"] = arr => arr.Sum(),
            ["AVG"] = arr => arr.Average(),
            ["MAX"] = arr => arr.Max(),
            ["MIN"] = arr => arr.Min(),
            ["STDEV"] = arr => CalculateStdev(arr),
            ["RSD"] = arr => CalculateRsd(arr)
        };
    }

    public double Calculate(string formula, Dictionary<string, double> variables)
    {
        // 解析公式并计算
        // 支持四则运算、函数调用、条件判断等
        return result;
    }
}

5.2 数据修约规则

csharp
public enum RoundingRule
{
    Four舍六入五成双,    // GB/T 8170
    四舍五入,            // 常规
    向上取整,            // ceil
    向下取整             // floor
}

public double RoundValue(double value, int decimalPlaces, RoundingRule rule)
{
    switch (rule)
    {
        case RoundingRule.Four舍六入五成双:
            return RoundToEven(value, decimalPlaces);
        case RoundingRule.四舍五入:
            return Math.Round(value, decimalPlaces);
        default:
            return value;
    }
}

5.3 仪器数据采集

csharp
public class InstrumentCollector
{
    private readonly IInstrumentCommunicator _communicator;
    private readonly IDataParser _parser;

    public async Task<CollectedData> CollectDataAsync(string instrumentId)
    {
        var instrument = await GetInstrumentConfig(instrumentId);

        // 建立连接
        _communicator.Connect(instrument.Port, instrument.BaudRate);

        try
        {
            // 发送采集命令
            var command = instrument.CollectionCommand;
            var response = await _communicator.SendCommandAsync(command);

            // 解析数据
            var rawData = _communicator.ReadData();
            var parsedData = _parser.Parse(rawData, instrument.ParseRule);

            return new CollectedData
            {
                InstrumentId = instrumentId,
                RawData = rawData,
                ParsedData = parsedData,
                CollectionTime = DateTime.Now
            };
        }
        finally
        {
            _communicator.Disconnect();
        }
    }
}

6. 业务规则

6.1 任务分配规则

  1. 系统支持自动分配和手动分配两种模式
  2. 自动分配根据检测人员的当前任务量和专业领域进行智能分配
  3. 支持按区域、按项目、按紧急程度等维度分配
  4. 任务分配时可设置提醒规则,自动通知执行人

6.2 结果判定规则

  1. 单项结果判定:根据检测项目的限量标准进行判定
  2. 综合结果判定:所有单项合格才判定综合合格
  3. 支持自定义判定规则,可配置复杂的判定逻辑
  4. 判定结果自动标注,无需人工判断

6.3 质控规则

  1. 每批次检测必须包含足够数量的质控样品
  2. 质控样品结果必须在控制限内才算合格
  3. 质控不合格时自动报警,阻止结果发布
  4. 支持配置质控规则,适应不同检测项目的要求

7. 性能优化

7.1 数据库优化

  1. 对高频查询字段建立索引(TaskNo, SampleId, ProjectId, Status)
  2. 使用分区表处理历史数据归档
  3. 定期清理过期数据,保持数据库性能

7.2 缓存策略

  1. 检测项目信息缓存在Redis中,减少数据库查询
  2. 用户信息、权限信息使用本地缓存
  3. 记录模板配置使用应用级缓存

7.3 异步处理

  1. 仪器数据采集使用异步方式,不阻塞主线程
  2. 批量任务处理使用消息队列
  3. 邮件、短信通知使用异步发送

8. 安全控制

8.1 权限控制

  1. 任务分配权限:仅管理员和组长可操作
  2. 任务执行权限:分配给当前用户的任务才能执行
  3. 结果审核权限:仅审核员和管理员可操作
  4. 数据修改权限:记录提交前可修改,提交后需撤销审核才能修改

8.2 数据安全

  1. 检测结果数据不允许物理删除,只做逻辑删除
  2. 所有数据操作记录审计日志
  3. 敏感数据加密存储
  4. 定期备份数据库

9. 扩展功能

9.1 移动端支持

  1. 支持移动端查看任务、填写记录
  2. 支持扫码枪快速录入样品信息
  3. 支持离线数据采集,网络恢复后自动同步

9.2 智能提醒

  1. 任务超时提醒
  2. 质控超标提醒
  3. 设备校准提醒
  4. 报告到期提醒

9.3 统计分析

  1. 检测工作量统计(按人员、按项目、按时间)
  2. 质控合格率统计
  3. turnaround时间统计
  4. 返工率统计