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. 返工率统计