2022-09-05

# 实验数据查询接口文档

## 接口概述

本文档定义了实验数据相关的查询接口,包括经验数据查询、称量数据查询以及两者的组合查询接口。接口用于获取样品的实验数据,支持多样品编号批量查询,返回结构化的实验结果数据。

## 基础信息

- **接口命名空间**:`Me.Services.EmpiricalEdata`

- **接口名称**:`IEmpiricalEdataServices`

- **数据传输对象(DTO)命名空间**:`Me.Services.SDMS.DTO`

## 数据模型定义

### 1. 经验数据返回实体(`EmpiricalEdataRes`)

| 属性名 | 类型 | 说明 |

|--------|------|------|

| `Id` | `Guid` | 数据唯一标识ID |

| `SampleNo` | `string` | 样品编号 |

| `SampleTime` | `DateTime` | 最后修改时间 |

| `SampleType` | `string` | 实验类别(非"称量"类型) |

| `ItemName` | `string` | 项目名称 |

| `SampleIndex` | `int` | 实验次数 |

| `ParamName` | `string` | 实验参数名称 |

| `ParamValue` | `string` | 实验参数值 |

| `EquipmentName` | `string` | 设备名称 |

| `EquipmentID` | `Guid` | 设备唯一标识ID |

| `FileName` | `string` | 关联文件名称 |

| `SourceFilePath` | `string` | 文件在设备中的原始路径 |

| `JumpURL` | `string` | 文件访问跳转路径(已拼接基础URL) |

### 2. 称量数据返回模型(`WeightRes`)

| 属性名 | 类型 | 说明 |

|--------|------|------|

| `Id` | `Guid` | 数据唯一标识ID |

| `SampleNo` | `string` | 样品编号 |

| `SampleTime` | `DateTime` | 最后修改时间 |

| `SampleType` | `string` | 实验类别(固定为"称量") |

| `EquipmentName` | `string` | 设备名称 |

| `EquipmentID` | `Guid` | 设备唯一标识ID |

| `ItemName` | `string` | 项目名称 |

| `SampleIndex` | `int` | 实验次数(从参数名提取的数字) |

| `ParamName` | `string` | 称量参数名称 |

| `ParamValue` | `string` | 称量参数值 |

| `OperatorName` | `string` | 操作人姓名 |

### 3. 组合结果类(`SampleDataCombinedResult`)

| 属性名 | 类型 | 说明 |

|--------|------|------|

| `EmpiricalData` | `List<EmpiricalEdataRes>` | 经验数据列表(非称量类型) |

| `WeightData` | `List<WeightRes>` | 称量数据列表 |

## 接口详情

### 1. 经验数据查询接口

#### 方法定义

```csharp

Task<List<EmpiricalEdataRes>> GetEmpiricalListAsync(string sampleNo);

```

#### 功能描述

查询非称量类型的实验数据,支持通过多个样品编号批量查询。

#### 参数说明

| 参数名 | 类型 | 必传 | 说明 |

|--------|------|------|------|

| `sampleNo` | `string` | 是 | 样品编号,多个编号以英文逗号(`,`)分隔,例如:`"S2024001,S2024002"` |

#### 返回值

`Task<List<EmpiricalEdataRes>>` - 经验数据列表,包含符合条件的所有非称量类型实验数据。

#### 筛选逻辑

- 仅返回`IsEnable=true`且`IsDelete=false`的数据

- 排除`SampleType="图谱"`和`SampleType="称量"`的数据

- 按样品编号前缀匹配(`StartsWith`)查询

- 自动关联`CollectionFileHistory`表获取文件路径信息

- 结果会进行路径拼接(基础URL+文件名)和去重处理

### 2. 称量数据查询接口

#### 方法定义

```csharp

Task<List<WeightRes>> GetWeightListAsync(string sampleNo);

```

#### 功能描述

专门查询"称量"类型的实验数据,支持通过多个样品编号批量查询。

#### 参数说明

| 参数名 | 类型 | 必传 | 说明 |

|--------|------|------|------|

| `sampleNo` | `string` | 是 | 样品编号,多个编号以英文逗号(`,`)分隔 |

#### 返回值

`Task<List<WeightRes>>` - 称量数据列表,包含符合条件的所有称量类型实验数据。

#### 筛选逻辑

- 仅返回`IsEnable=true`且`IsDelete=false`的数据

- 仅包含`SampleType="称量"`的数据

- 按样品编号前缀匹配(`StartsWith`)查询

- 自动从`ParamName`中提取数字作为`SampleIndex`(默认值为1)

- 结果会进行去重处理

### 3. 组合数据查询接口

#### 方法定义

```csharp

Task<SampleDataCombinedResult> GetCombinedSampleDataAsync(string sampleNo);

```

#### 功能描述

同时查询经验数据和称量数据,返回组合结果,减少重复调用开销。

#### 参数说明

| 参数名 | 类型 | 必传 | 说明 |

|--------|------|------|------|

| `sampleNo` | `string` | 是 | 样品编号,多个编号以英文逗号(`,`)分隔 |

#### 返回值

`Task<SampleDataCombinedResult>` - 组合结果对象,包含经验数据列表和称量数据列表。

#### 实现逻辑

- 内部并行调用`GetEmpiricalListAsync`和`GetWeightListAsync`

- 等待两个查询都完成后合并结果

- 保持各自的筛选、去重和路径处理逻辑

## 调用示例

### 请求示例(伪代码)

```csharp

// 实例化服务

IEmpiricalEdataServices service = new EmpiricalEdataServices();

// 单个样品查询

var empiricalData = await service.GetEmpiricalListAsync("(2024)SPXW0776001");

var weightData = await service.GetWeightListAsync("(2024)SPXW0776001");

// 多个样品查询

var combinedData = await service.GetCombinedSampleDataAsync("(2024)SPXW0776001,(2024)SPXW0776002");

```

### 返回示例(JSON结构)

```json

{

  "EmpiricalData": [

    {

      "Id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",

      "SampleNo": "(2024)SPXW0776001",

      "SampleTime": "2024-08-13T10:00:00",

      "SampleType": "光谱分析",

      "ItemName": "成分检测",

      "SampleIndex": 1,

      "ParamName": "浓度",

      "ParamValue": "0.5mg/L",

      "EquipmentName": "光谱仪A",

      "EquipmentID": "3fa85f64-5717-4562-b3fc-2c963f66afa7",

      "FileName": "result.csv",

      "SourceFilePath": "C:\\data\\result.csv",

      "JumpURL": "http://file-server/result.csv"

    }

  ],

  "WeightData": [

    {

      "Id": "3fa85f64-5717-4562-b3fc-2c963f66afa8",

      "SampleNo": "(2024)SPXW0776001",

      "SampleTime": "2024-08-13T09:30:00",

      "SampleType": "称量",

      "EquipmentName": "电子天平B",

      "EquipmentID": "3fa85f64-5717-4562-b3fc-2c963f66afa9",

      "ItemName": "样品称量",

      "SampleIndex": 2,

      "ParamName": "重量_2",

      "ParamValue": "2.5g",

      "OperatorName": "张三"

    }

  ]

}

```

## 注意事项

1. **参数格式**:`sampleNo`参数需严格使用英文逗号分隔,不可包含空格

2. **性能优化**:批量查询时建议样品编号数量不超过50个,避免查询超时

3. **去重逻辑**:返回结果已自动去重,依赖`EmpiricalEdataRes`和`WeightRes`的`Equals`和`GetHashCode`实现

4. **路径处理**:`JumpURL`已自动拼接基础URL并转换为斜杠(`/`)分隔的格式,可直接用于访问

5. **大小写敏感**:样品编号匹配为不区分大小写(`StartsWith`方法使用`StringComparison.OrdinalIgnoreCase`)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容